앞선 글에서 Gradient Descent에서 Momentum(운동량), Velocity(속도)를 조정하는 방법들에 대해서 알아보았습니다
이번 글에서는 Momentum, Velocity를 모두 조정하는 방법인 Adam에 대해 알아보도록 하겠습니다
Adam(Adaptive Momoment Estimation)
Adam은 Momentum과 RMSProp의 장점을 결합한 Gradient Descent
Momentum의 특징인 $v_i$와 RMSProp의 특징인 기울기의 제곱을 지수 이동 평균한 값을 수식에 활용합니다
$$
\begin{aligned}
&w_{t+1} = w_t -\eta \cdot \frac{\hat{M(t)}}{\sqrt{\hat{V(t)} + \epsilon}}\\
&v(t) = {\beta}_1 \cdot v(t-1) + (1- {\beta}_1) \cdot \eta\nabla{L(w_t)}\\
&G(t) = {\beta}_2 \cdot G(t-1) + (1-{\beta}_2) \cdot (\nabla{L(w_t)})^2
\end{aligned}
$$
$$\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가 수정된 값이다
$v(t)$는 Momentum에서와 같이 Gradient에 EMA를 적용한 값을 사용한 것입니다
여기서 $\beta_1$은 보통 0.9의 값을 사용합니다
&$v(t) = {\beta}_1 \cdot v(t-1) + (1- {\beta}_1) \cdot \eta\nabla{L(w_t)}\\$$
$G(t)$는 RMSprop에서와 같이 Gradient의 제곱에 EMA를 적용한 값을 사용한 것입니다
여기서 $\beta_2$은 보통 0.99의 값을 사용합니다
$$G(t) = {\beta}_2 \cdot G(t-1) + (1-{\beta}_2) \cdot (\nabla{L(w_t)})^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(w_t)}$$
Adam은 L2 Norm을 사용하였지만 LP Norm으로 확장시킨 식은 아래와 같습니다
$$V(t) = {\beta}_2 \cdot V(t-1) + (1-{\beta}_2) \cdot (\nabla{L(w_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)}$$