
AMSGrad [medium]
Adam 의 이론적 수렴 문제: 특정 sparse gradient 시나리오에서 v^ 가 감소 해서 step size 가 커지고 발산 가능. Reddi et al. (2018) 은 "Adam 은 수렴 못하는 케이스" 반례 를 제시 + AMSGrad 수정안 제시.
AMSGrad 수식
m_t &= \beta_1 m_{t-1} + (1 - \beta_1) g_t \\
v_t &= \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \\
\hat v_t &= \max(\hat v_{t-1}, v_t) \quad \text{← max 를 유지!} \\
w_t &= w_{t-1} - \eta \, \frac{m_t}{\sqrt{\hat v_t} + \epsilon}
\end{aligned}$$
## 핵심 차이
- **Adam**: $\hat{v}_t = v_t$ (현재 값, 감소 가능).
- **AMSGrad**: $\hat{v}_t$ 는 **역사상 최대값** — **monotonically non-decreasing**.
이 제약이 step size 를 단조 감소시켜 수렴 보장.
## 실전
- 이론적 개선이지만 실제 큰 차이 ≒ 없음 (대부분 작업에서 Adam 이 충분).
- 특정 비정상적 케이스에서만 AMSGrad > Adam.
- PyTorch `torch.optim.Adam(amsgrad=True)` 로 간단 전환.
## 과제
함수 `amsgrad_step(w, g, m, v, v_hat, t, lr, beta1, beta2, eps)` 를 완성하세요.
- 상태: `m`, `v`, `v_hat` (세 번째 추가!).
- 반환: `(w_new, m_new, v_new, v_hat_new)`.
- `v_hat_new = max(v_hat, v_new)` (원소별 max).
- **Bias correction 없음** (원 AMSGrad 논문 형식).
- $w_{new} = w - \eta \cdot m_{new} / (\sqrt{\hat v_{new}} + \epsilon)$.
## 테스트 케이스
| # | 이름 | 검증 |
|---|---|---|
| 1 | 반환 4-tuple (w, m, v, v_hat) | |
| 2 | m, v 업데이트 공식 | |
| 3 | v_hat 단조 증가: `v_hat_new ≥ v_hat_old` | 각 원소 |
| 4 | v 감소해도 v_hat 유지 | |
| 5 | Adam 과 다름 (v 감소 시) | |
| 6 | shape 유지 | |
| 7 | torch.optim.Adam(amsgrad=True) 일치 | |