본문 바로가기
Optimization

[Optimization]Momentum, Nesterov Accelerated Gradient(NAG)

by 어떻게든 되겠지~ 2024. 6. 10.

앞서 Gradient Descent 에서 Mini - Batch GD, SGD를 공부해보았습니다

 

[Optimization][Gradient Descent] Batch와 Gradient Descent(Full batch, Mini-batch, SGD)

[Optimization] Gradient Descent(경사하강법)! Optimization에 대해서 이제 처음 접해보시는 분은 Optimization 정의 먼저 보고 오시면 좋습니다 !  [Optimization] Optimization 정의Optimization(최적화) 란?Optimization이란

self-objectification.tistory.com

 

언급한 바와 같이 SGD의 단점(Parameter 변경폭이 불안정)을 개선하기 위해 Velocity와 Momentum을 조정한다고 설명드렸었는데요
이번 글에서는 Momentum(운동량)을 조정하는 Optimizer에 대해 소개해보고자 합니다

 

Momentum

Gradient Descent와 마찬가지로 매번 Gradient를 구하지만, 가중치를 update하기 전 이전 update 방향을 참고하여 같은 방향으로 일정한 비율만 update하는 방법입니다

이전 이동 값을 고려하여 일정 비율 만큼 다음 값을 결정하므로 관성 효과를 얻을 수 있다는 장점이 있습니다

 

Momentum은 SGD와 같이 사용하여 SGD에서 Gradient를 속도로 대체하여 사용하는 방법으로 이전 속도를 일정 부분 반영합니다

즉, 이전에 학습했던 속도현재의 Gradient를 반영하여 가중치를 업데이트합니다

 

$$
\begin{aligned}
&v_{t+1} = \beta \cdot v_{t-1} + (1-\beta) \cdot \nabla L(\theta_t) \\
&\theta_{t+1} = \theta_t - \eta \cdot v_{t+1}
\end{aligned}
$$

 

모멘텀 벡터 $v_t$는 Gradient의 Exponential Moving Average(EMA)를 기반으로 구한다

( 계산의 편의를 위해 $v_0$는 0으로 가정하였습니다 )

 

$$
\begin{aligned}
v_1 &= 0 +(1-\beta) \cdot \nabla L(\theta_1) \\
v_2 &= \beta v_1 +(1-\beta) \cdot  \nabla L(\theta_2) \\
    &= (1-\beta)\cdot(\beta \cdot \nabla L(\theta_1) + \nabla L(\theta_2) )\\
& \qquad\qquad \vdots \notag \\
v_t &= (1-\beta) \cdot(\beta^{t-1}\cdot \nabla L(\theta_1) + \beta^{t-2} \cdot \nabla L(\theta_2) + \cdots + \nabla L(\theta_t))
\end{aligned}
$$

 

$\beta$(Momentum Term, 관성계수)의 의미

Momentum의 Hyper Parameter인 $\beta$는 $\frac{1}{1-\beta}$개의 sample을 보겠다는 의미이고 보통 0.9의 값으로 설정합니다

 

$v_t = (1-\beta) \cdot(\beta^{t-1}\cdot \nabla L(\theta_1) + \beta^{t-2} \cdot \nabla L(\theta_2) + \cdots + \nabla L(\theta_t))$ 에서 보면 $\nabla L(\theta_1) $에 $\beta^{t-1}$이 곱해짐에 따라 초기 가중치에 대해서는 영향을 덜 받고, 현재 parameter인 $\nabla L(\theta_t) $에 영향을 많이 받는 모습을 볼 수 있습니다(Exponential Moving Average(EMA)를 적용했기 때문)


Nesterov Accelerated Gradient(네스테로프 모멘텀, NAG)

모멘텀 값과 기울기 값이 더해져 실제 값을 만드는 모멘텀과 달리 모멘텀 값이 적용된 지점에서 기울기 값을 계산하는 방법이다

Momentum은 멈춰야 할 시점에서도 관성에 의해 훨씬 멀리 갈 수 있는 단점이 있으나, NAG은 모멘텀으로 절반 정도를 이동한 후 어떤 방식으로 이동해야 하는지 다시 계산하여 결정한다 

 

모멘텀과 달리 이전에 학습했던 속도현재 기울기에서 이전 속도를 뺀 변화량을 반영하여 가중치 Update

 

$$
\begin{aligned}
&w_{i+1} = w_i - v_i\\
&v_i = \gamma v_{i-1} + \eta{\nabla{L(w_i - \gamma v_{i-1})}}\\
\end{aligned}
$$

 

Momentum Step : $\gamma v_{i-1}$ : 과거 Gradient 정보

Gradient Step : $\eta{\nabla{L(w_i - \gamma v_{i-1})}}$ : Momentum으로 절반 정도 이동한 후의 Gradient 계산

반응형