[인공지능 프로그래밍 수업] Deep Neural Network(Optimizer)

이은비·2023년 12월 15일

09) Deep Neural Network(Optimizer)
——————————preview——————————————
심층 신경망은 입력층과 출력층 사이에 다수의 은닉층을 포함하는 인공 신경망입니다.
다수의 은닉층을 두었기 때문에 별도의 트릭없이 비선형 분류가 가능합니다.
하지만 이때문에 학습을 위한 연산량이 많고 기울기 소멸 문제가 발생할 수 있다는 단점이 있으며
이를 해결하기 위해 오버피팅->드롭아웃, 기울기 소멸 문제->시그모이드나 하이퍼볼릭 탄젠트 함수 대신에 렐루 활성화 함수를 사용
,gradient decent에서 성능이 나빠지는 문제가 발생하면 배치 정규화 등을 통해서 극복하는 방법을 사용합니다.
——————————————————————————————
Weight Optimization
최적화 알고리즘은 입력을 출력에 매핑할 때 오차를 최소화하는 파라미터(또는 가중치)의 값을 찾습니다.
Optimizers는 손실을 줄이기 위해 weight 및 learning rate와 같은 신경망의 속성을 변경하는 데 사용되는 알고리즘 또는 방법입니다.
이러한 최적화 알고리즘이나 옵티마이저는 딥러닝 모델의 정확도에 광범위하게 영향을 미칩니다.
다양한 Optimizer가 존재하는데 그 종류로는 Gradient Descent, Stochastic Gradient Descent, Momentum, AdaGrad, Adam

Gradient Descent
기울기 하강은 손실 함수 𝐽의 1차 도함수에 의존하는 1차 최적화 알고리즘입니다.
gradient descent는 linear regression 및 classification 알고리즘에 많이 사용됩니다. 신경망에서의 backpropagation 또한 gradient descent algorithm을 사용합니다.
장점으로는 구현하기 쉽다는 점이 있고 단점으로는 local minima에 갇힐 수 있으며 가중치는 전체 dataset에서 gradient를 계산한 후 변경되기떄문에 만약에 dataset이 너무 커서 최소값으로 수렴하는데 몇년이 걸릴 수 있습니다.그리고 전체 dataset에서 gradient를 계산하려면 큰 메모리가 필요합니다.

Gradient Descent Variants
Stochastic Gradient Descent은 gradient descent의 변형으로 모델의 매개변수를 더 자주 업데이트하려고 합니다. 그렇게 하기 위해 데이터 배치를 무작위로 선택합니다. 즉, 데이터 세트에서 몇 개의 샘플만 추출합니다.

Gradient Descent with Momentum은 stochastic gradient가 noisy path를 취함으로써 이전 업데이트의 일부를 현재 업데이트에 추가하면 프로세스가 조금 더 빨라집니다. 따라서 high momentum term으로 learning rate를 줄여야 합니다.

Newton's Method
기울기 하강은 1차 최적화 방법입니다. 손실이 감소하는지 여부와 속도를 알 수 있지만 곡선이 평면인지 위쪽으로 휘어지는지 아래쪽으로 휘어지는지 구별할 수 없기 때문에 Newton's method방법을 취하는데 뉴턴 방법은 2차 도함수를 이용하여 우리의 문제를 해결할 수 있는 매우 일반적인 방법입니다. 뉴턴 방법은 우리에게 기울기 방향으로 이동할 수 있는 이상적인 step size를 제공할 수 있습니다.

f(t)를 model의 cost function으로 정의하면 다음 식을 알 수 있는데

Mini-Batch & GDs with Second Momentum
손실 함수는 데이터셋의 일부만 사용합니다. 전체 데이터셋을 사용하는 대신 일괄 데이터를 사용하기 때문에 반복 작업이 덜 필요하고 구현에 적합합니다.
미니 배치 gradient descent는 일반적인 배치 gradient descent보다 더 noisy하지만 stochastic gradient descent보다 더 매끄럽습니다.
-AdaGrad(adaptie gradient descent)
매 timestep마다 모든 파라미터 𝜃1에 대해 다른 학습 속도를 사용합니다.학습률의 변화는 훈련 중 파라미터의 차이에 따라 달라집니다.


-RMSProp(Root Mean Square Propagation)
AdaGrad의 fast decaying을 방지합니다.

-Adam (Adaptive Moment Estimation)
Adam optimizer는 네트워크 가중치별 학습률을 개별적으로 업데이트합니다.Adam 옵티마이저는 AdaGrad 및 RMSProp의 기능을 모두 상속합니다.
Adam은 RMSProp에서와 같이 기울기의 두 번째 순간(분산, E[X^2])에 따라 학습 속도를 조정하는 대신 기울기의 첫 번째 순간을 E[X]로 사용합니다.

Adam은 일부 영역에서 최적의 솔루션으로 수렴하지 않습니다.

Making Mini-Batch
먼저 원래 데이터 집합을 셔플한 다음 데이터 집합의 크기가 배치 크기인 미니 데이터 집합 배열로 구성된 개체를 만듭니다.

Optimizer Implementations
-Stochastic Gradient Descent의 변형
일부 SGD 변형의 경우 코드가 본질적으로 동일합니다.

Preventing Overfitting
과적합은 어떤 함수가 제한된 데이터 집합에 너무 가깝게 정렬되어 있을 때 발생하는 통계학의 모델링 오류입니다.
따라서 이같은 문제를 해결하기 위해서 정규화(Regularization)같은 과정을 추가합니다. 방정식에 정규화 항을 추가하는 것으로 L1 정규화가 있는 회귀 모형은 Lasso 회귀 모형이고 L2정규화가 있는 모형은 Ridge회귀 모형입니다.
Weight Decay (L2 Regularization)

로지스틱 회귀 분석의 L1-norm 손실 함수를 사용하면 덜 중요한 가중치가 모두 0(희소성)이 됩니다.
Dropout(also called Dilution)은 인공 신경망에서 과적합을 줄이기 위한 정규화 기법입니다.
트레이닝 동안, 일부 수의 레이어 노드들이 랜덤하게 무시되거나 드롭아웃됩니다. 드롭아웃은 네트워크 내의 임의의 또는 모든 히든 레이어, 가시적 레이어, 및/또는 입력 레이어 상에서 구현될 수 있습니다. 이는 출력 레이어 상에서 사용되지 않습니다.
L1/L2 Regularization
L1 및/또는 L2 정규화는 비용 함수에 정규화 항을 추가하여 달성할 수 있습니다. 아래 식에서 𝜆은 정규화 파라미터입니다.L2 정규화는 가중치가 0을 향해 붕괴하도록 만들기 때문에 가중치 붕괴라고도 합니다(정확히 0은 아님)

Regularization Implementation
드롭아웃은 일반적으로 SGD 옵티마이저와 함께 작동합니다.
-Numpy 함수 np.random.binomial은 베르누이 분포의 마스크를 생성할 수 있으며, 여기서 𝑝은 1의 확률입니다.
-mask weight를 조정하면 증폭을 방지할 수 있습니다.
-역전파 과정을 위해서는 이 마스크를 보존해야 합니다.
L2 정규화는 가중치의 제곱을 줄이려고 하기 때문에 가중치의 기울기 값에만 영향을 미칩니다.

-L2 정규화 모수 람다는 로그 척도(예: 0.001 또는 0.0001)에서 0~0.1의 값을 갖는 경우가 많습니다.
-L2 정규화 파라미터가 크면 네트워크가 쉽게 포화될 수 있습니다.
미니 배치와 함께 드롭아웃을 사용하는 경우 성능을 향상시키기 위해 미니 배치의 수가 많아야 합니다

Batch Normalization
배치 정규화(Batch Norm) 또는 줄여서 배치 놈(Batch Norm)은 각 미니 배치의 레이어에 대한 각 입력을 평균을 뺀 후 표준 편차로 나누는 방식으로 표준화합니다.
이를 통해 학습 과정을 안정화하고 딥 네트워크를 훈련하는 데 필요한 훈련 에포크 수를 획기적으로 줄일 수 있는 효과가 있습니다.
배치 정규화와 다른 레이어의 차이점은 배치 정규화가 한 번에 전체 미니 배치에서 작동하는 반면 다른 레이어의 배치 차원은 무시할 수 있다는 것입니다.
Batch Norm의 장점
매우 깊은 네트워크를 통한 그라데이션 흐름 개선
학습 속도 향상
신중한 초기화에 대한 의존성 감소
정규화를 제공하고 중도 탈락 의존도를 낮춥니다.

Batch Normalization: Forward Pass
순방향 전파
배치의 평균과 분산을 계산하고 단위 가우스 분포와 척도를 갖도록 입력을 정규화하고 학습 가능한 파라미터 𝛾와 𝛽로 각각 이동합니다.

Batch Normalization: Backward Pass
역방향 패스를 위해서는 그래디언트 dj/dx,dj/drk,dj/dbk를 찾습니다. 우리는 이 그래디언트들을 얻기 위해 계산 그래프에서 위에서 아래로 중간 그래디언트들을 계산합니다.

Batch Normalization: Prediction Pass
training 중에 표본 평균과 (보정되지 않은) 표본 분산은 최소 배치 통계량에서 계산되어 데이터를 정규화하는 데 사용되지만 이러한 평균과 분산은 test 데이터에 적용되지 않습니다.
training 중에는 각 배치의 평균과 분산을 계속 실행할 수 있으며, 이를 사용하여 테스트 시간에 데이터를 정규화할 수 있습니다.

역전파의 각 시간 단계에서 우리는 운동량 매개변수를 기반으로 한 지수적 붕괴를 사용하여 평균과 분산의 실행 평균을 업데이트합니다.

Tips for Using Batch Normalization
활성화 전에 주로 사용합니다.
-쌍곡 탄젠트와 로지스틱 함수와 같은 s자형 함수의 경우 활성화 함수 다음에 더 적합할 수 있습니다.
-정류된 선형 활성화와 같은 비-가우스 분포를 초래할 수 있는 활성화는 활성화 함수 이전에 적합할 수 있습니다
함수, 대부분의 네트워크 유형에 대한 현대 기본값입니다.
대용량 학습 속도 활용
-배치 정규화를 사용하면 교육 중 네트워크가 더 안정됩니다.
이를 위해서는 정상적인 학습 속도보다 훨씬 더 큰 학습 속도를 사용해야 하며, 이로 인해 학습 프로세스가 더욱 빨라질 수 있습니다.
동일한 레이어에서 BN을 드롭아웃과 함께 사용하지 않습니다.
-그 이유는 드롭아웃 절차 동안 노드에서 무작위로 드롭되는 경우 이전 계층의 활성화를 정규화하는 데 사용되는 통계가 노이즈가 될 수 있기 때문입니다.

Hyperparameter Optimization
하이퍼 파라미터 최적화 또는 튜닝은 학습 알고리즘에 대한 최적의 하이퍼 파라미터 세트를 선택하는 문제입니다.
-이퍼 파라미터는 그 값이 학습 과정을 제어하는 데 사용되는 파라미터입니다. 대조적으로 다른 파라미터(일반적으로 노드 가중치)의 값을 학습합니다.
그리드 검색 또는 파라미터 스위프는 단순히 학습 알고리즘의 하이퍼파라미터 공간의 수동으로 지정된 부분집합을 통한 철저한 검색입니다.
임의 검색은 임의로 모든 조합을 선택하여 모든 조합의 완전한 열거를 대체합니다.
베이지안 최적화는 하이퍼파라미터 값에서 검증 집합에서 평가된 목표로의 함수 매핑의 확률적 모델을 구축합니다. 유망한 하이퍼파라미터를 반복적으로 평가함으로써
현재 모델을 기반으로 구성한 다음 업데이트합니다.
Evolutionary optimization는 진화적 알고리즘을 사용하여 최악의 성능을 보이는 하이퍼파라미터 튜플을 교차 및 돌연변이를 통해 생성된 새로운 하이퍼파라미터 튜플로 대체하여 주어진 알고리즘에 대한 하이퍼파라미터의 공간을 검색합니다.
PBT(Population Based Training)는 하이퍼파라미터 값과 네트워크 가중치를 모두 학습합니다. 여러 학습 프로세스가 서로 다른 하이퍼파라미터를 사용하여 독립적으로 작동하며, 성능이 좋지 않은 모델은 더 나은 성능을 기반으로 수정된 하이퍼파라미터 값과 가중치를 채택한 모델로 반복적으로 대체됩니다.
또한 많은 다른 접근 방식이 개발되고 있습니다.

profile
cs/ce 전공 재학생입니다.

0개의 댓글