Adam

가장 먼저 사용해 보는 그런 옵티이저 이다.
두 가지 옵티마이저, 모멘텀(Momentum)과 RMSProp의 핵심 장점을 성공적으로 결합한 것이 제일 큰 특징이다.
한 줄로 한번 정리하지면, 모멘텀 : 관성처럼 과거에 이동했던 방향을 기억, 학습을 가속하고 진동 줄인다
RMSProp : 각 파라미터마다 학습 경험에 맞춰 학습률을 개별적으로 조절

둘의 결합이므로,
각 파라미터마다 학습률을 조절하면서 동시에 관성을 이용해 빠르고 안정적으로 최적점을 찾아가게 된다.

1. 1차 모멘텀 추정값 $m_t$

\(m_t \leftarrow \beta_1 m_{t-1} + (1 - \beta_1) \nabla_W L(W)\)
여기가 바로 모멘텀 부분으로, 기울기 자체의 지수 이동 평균을 계산한다.

  • $m_t$: 기울기의 평균(1차 모멘텀)에 대한 추정값으로, 최근 기울기들이 일관되게 향했던 이동 방향과 속도를 알려준다
  • $\beta_1$: 1차 모멘텀을 위한 감쇠율(decay rate)이다. 보통 0.9를 사용하며, 과거의 추정값을 90% 유지하고 새로운 기울기 정보를 10% 반영하겠다는 의미 이다. 옵티나이저의 감마와 같은 역할을 한다.

2. 2차 모멘텀 추정 $v_t$

\(v_t \leftarrow \beta_2 v_{t-1} + (1 - \beta_2) (\nabla_W L(W))^2\)
여기가 RMSProp 이다. 기울기으 ㅣ제곱값에 대한 지수 이동 평균을 구한다.

  • $v_t$: 기울기의 제곱 평균(2차 모멘텀)에 대한 추정값으로, 방향과 상관없이 최근 기울기들의 변동성(크기)이 어땠는지를 알려준다.
  • $\beta_2$: 2차 모멘텀을 위한 감쇠율입니다. 보통 0.999라는 높은 값을 사용하여, 학습률이 안정적으로 조절되도록 과거의 정보를 더 많이 유지한다.
  • $(\nabla_W L(W))^2$: 기울기를 제곱하여 항상 양수로 만들고, 변화의 크기에만 집중하게 한다.

Adagrad처럼 과거의 모든 기울기 제곱을 그냥 더하는 것이 아니라 ‘지수 이동 평균’을 사용하기 때문에, Adam은 학습이 길어져도 학습률이 0으로 수렴해버리는 문제를 해결한거다.

## 3. 편향보정

초반 학습을 위해 편향보정이 들어간다.
학습 초반에는 $m_t$와 $v_t$가 0으로 초기화되어 있고, $\beta_1$과 $\beta_2$ 값이 1에 가깝기 때문에, 이 추정값들이 0에 가깝게 편향되는 문제가 발생한다.
이는 학습 초기에 업데이트가 너무 작아져 학습이 더뎌지는 원인이 된다.

1차 모멘텀에 대해

\(\hat{m}_t = \frac{m_t}{1 - \beta_1^t}\)

2차 모멘텀에 대해

\(\hat{v}_t = \frac{v_t}{1 - \beta_2^t}\)

학습 초기 단계(시간 $t$가 작을 때), 분모인 $(1 - \beta^t)$는 1보다 작은 값이 된다.
이 작은 값으로 나누어 줌으로써, 0 쪽으로 치우쳐 있던 $m_t$와 $v_t$ 값을 효과적으로 키워준다.
덕분에 학습 시작부터 의미 있는 크기로 파라미터를 업데이트할 수 있으며, 학습이 진행되어 $t$가 커지면 $\beta^t$는 0에 가까워지고, 이 보정 항의 영향력은 거의 사라지게 된다.

4. 최종 가중치 업데이트

마지막으로, 보정된 두 추정값을 이용해 모델의 가중치($W$)를 최종적으로 업데이트한다.

\[W \leftarrow W - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}\]
  • $\eta$: 사용자가 설정하는 초기 학습률(learning rate)이다. 보통 0.001로 시작한다.
  • $\hat{m}_t$: 편향이 보정된 1차 모멘텀 추정값이다. 모멘텀 옵티마이저처럼 업데이트의 방향과 속도를 결정한다.
  • $\sqrt{\hat{v}_t} + \epsilon$: 편향이 보정된 2차 모멘텀 추정값으로, RMSProp처럼 각 파라미터의 학습률을 개별적으로 조절하는 역할을 한다.
    • 최근 기울기가 컸던 파라미터($\hat{v}_t$가 큼)는 분모가 커져서 실제 업데이트 폭이 작아진다. (섬세한 조정)
    • 최근 기울기가 작았던 파라미터($\hat{v}_t$가 작음)는 분모가 작아져서 실제 업데이트 폭이 커진다. (과감한 조정)
  • $\epsilon$: 분모가 0이 되는 것을 방지하기 위한 아주 작은 값(예: 1e-8)이다.

결론

Adam은 이동 방향(모멘텀)학습률(RMSProp)을 모든 파라미터에 대해 개별적이고 적응적으로 조절한다.
여기에 초기 학습 불안정성을 해결하는 편향 보정까지 더해져, 매우 안정적이면서도 빠른 학습 성능을 보여준다.
요즘도 자주사용하는, 참 좋은 옵티마이저 이다.