[Optimization]Adam(Adaptive Momentum Estimation), Adamax
앞선 글에서 Gradient Descent에서 Momentum(운동량), Velocity(속도)를 조정하는 방법들에 대해서 알아보았습니다
[Optimization]Momentum, Nesterov Accelerated Gradient(NAG)
앞서 Gradient Descent 에서 Mini - Batch GD, SGD를 공부해보았습니다 [Optimization][Gradient Descent] Batch와 Gradient Descent(Full batch, Mini-batch, SGD)[Optimization] Gradient Descent(경사하강법)! Optimization에 대해서 이제 처
self-objectification.tistory.com
이번 글에서는 Momentum, Velocity를 모두 조정하는 방법인 Adam에 대해 알아보도록 하겠습니다
Adam(Adaptive Momoment Estimation)
Adam은 Momentum과 RMSProp의 장점을 결합한 Gradient Descent
Momentum의 특징인 $v_i$와 RMSProp의 특징인 기울기의 제곱을 지수 이동 평균한 값을 수식에 활용합니다
$$
\begin{aligned}
&v(t) = {\beta}_1 \cdot v(t-1) + (1- {\beta}_1) \cdot \nabla{L( \theta_t)}\\
&G(t) = {\beta}_2 \cdot G(t-1) + (1-{\beta}_2) \cdot \nabla{L( \theta_t)}^2\\
&\theta_{t+1} = \theta_t -\eta \cdot \frac{\hat{G}(t)}{\sqrt{\hat{v}(t) + \epsilon}}\\
\end{aligned}
$$
※ 편향 보정
초기에 $v(t)$와 $G(t)$는 0에 가까운 값을 가지므로 이를 보정하여 추정이 정확하게 이루어지도록 한다.
$$\hat{v}(t) = \frac{v(t)}{1 - \beta_1^t}, \quad \hat{G}(t) = \frac{G(t)}{1 - \beta_2^t}$$
$\hat{v}(t),\; \hat{G}(t)$ 는 초기 학습 단계에서 gradient가 작을 때 적절한 learning rate를 선택하기 위해 bias가 수정된 값이다
1차 모멘텀 추정
$v(t)$는 Momentum에서와 같이 Gradient에 EMA를 적용한 값을 사용한 것입니다
여기서 $\beta_1$은 보통 0.9의 값을 사용합니다
아래 글은 Momentum에 대한 글입니다.
[Optimization]Momentum, Nesterov Accelerated Gradient(NAG)
앞서 Gradient Descent 에서 Mini - Batch GD, SGD를 공부해보았습니다 [Optimization][Gradient Descent] Batch와 Gradient Descent(Full batch, Mini-batch, SGD)[Optimization] Gradient Descent(경사하강법)! Optimization에 대해서 이제 처
self-objectification.tistory.com
2차 모멘텀 추정
$G(t)$는 RMSProp에서와 같이 Gradient의 제곱에 EMA를 적용한 값을 사용한 것입니다
여기서 $\beta_2$은 보통 0.99의 값을 사용합니다
아래 글은 RMSProp에 대한 글입니다.
[Optimization]Adagrad(Adaptive Gradient), RMSProp(Root Mean Squared Propagation), Adadelta(Adaptive delta)
앞선 글에서는 Gradient Descent의 운동량(Momentum)을 조정하여 수렴속도를 빠르게 하는 방법인 Momentum, Nesterov Accelerated Gradient(NAG) Optimizer를 살펴보았습니다 [Optimization]Momentum, Nesterov Accelerated Gradient(
self-objectification.tistory.com
Adam의 장점
- 적응적인 학습률 : 각 Paramter 마다 개별적으로 학습률을 조정
- 빠르고 안정적인 수렴 : 1차 모멘텀과 2차 모멘텀을 결합하여 빠르게 수렴하고 큰 기울기로 인한 과도한 업데이트 방지, 기울기와 기울기 제곱을 동시에 추정함으로써 더욱 안정적이고 빠른 학습 가능
- 편향 보정 : 초기 단계에 편향 보정을 적용하여 $v(t)$와 $G(t)$가 너무 작아지는 문제를 방지
Adam의 단점
- 메모리 사용량 : 각 Parameter에 대해 1차와 2차 모멘텀 추정을 유지해야 하므로 다른 최적화 알고리즘에 비해 메모리 사용량이 많다
- 빠르고 안정적인 수렴 : 1차 모멘텀과 2차 모멘텀을 결합하여 빠르게 수렴하고 큰 기울기로 인한 과도한 업데이트 방지, 기울기와 기울기 제
Adamax
Adamax는 Adam 논문에서 Extension으로 제안된 알고리즘입니다
Adam은 L2 Norm을 기반으로 Learning rate를 조정하는데 Adamax는 NP Norm으로 확장하여 Learning rate를 조정하도록 확장시킨 알고리즘입니다
하지만 p가 매우 클 경우, NP Norm이 극단적인 값을 갖는 등 매우 불안정할 수 있다고 합니다
$v(t)$는 Adagrad에서 사용한 것과 동일하게 사용합니다
$$v(t) = {\beta}_1 \cdot v(t-1) + (1- {\beta}_1) \cdot \eta\nabla{L( \theta_t)}$$
Adam은 L2 Norm을 사용하였지만 LP Norm으로 확장시킨 식은 아래와 같습니다
$$V(t) = {\beta}_2 \cdot V(t-1) + (1-{\beta}_2) \cdot (\nabla{L( \theta_t)})^p = (1 - \beta_2^p) \sum \limits_{i=1}^{t} {\beta_2}^{p(t-i)} \Big| \frac{\partial L}{\partial w(t)} \Big|$$
여기서 $p \rightarrow \infty $일 때 $V(t)^{\frac{1}{p}}$를 $G(t)$라고 하면
$$\underset{p \rightarrow \infty}\lim {V(t)}^{\frac{1}{p}} = G(t) = \max\big(\beta_2 G(t-1), \Big| \frac{\partial L}{\partial w(t)}\Big|\big)$$
따라서 Adamax의 알고리즘은 아래와 같습니다
$$w(t+1) = w(t) - \frac{\eta}{G(t)} \hat{v(t)}$$