
Nesterov Accelerated Gradient (NAG)
72번 Momentum 은 "과거의 속도에 현재 그래디언트를 더해" 업데이트. Nesterov 는 여기 미리보기(look-ahead) 를 추가:
"속도 방향으로 먼저 간다고 가정하고, 거기서 본 그래디언트를 쓴다."
업데이트 (PyTorch 관례)
vt=βvt−1+gt
wt=wt−1−η(gt+βvt)
마지막 항 gt+βvt 가 순수 momentum 의 vt 와 다른 지점 — gradient 를 한 번 더 반영해 스텝을 조금 더 멀리 보내되, 관성으로 "오버슛" 하지 않도록 보정.
직관
- Momentum: 절벽을 향해 속도 그대로 돌진 → 오버슛 가능.
- Nesterov: "속도대로 가면 어디 떨어질까?" 를 계산해 거기서 기울기를 봄 → 오버슛 시 제동.
수렴성
- 볼록 smooth 문제에서 이론적으로 O(1/T2) (vanilla GD 는 O(1/T)) — 최적 1차 방법.
과제
함수 nesterov_step(w, g, v, lr, beta) 를 완성하세요.
- 반환:
(w_new, v_new).
- v 업데이트 먼저, 그 다음 w 업데이트에 (g+βvnew).
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | v_new = β v + g | 72번과 동일 |
| 2 | w_new = w − lr(g + β v_new) | NAG 특유 |
| 3 | β=0 → plain SGD | 모멘텀 없이 동일 |
| 4 | Nesterov step > Momentum step (같은 β) | 더 먼 이동 |
| 5 | shape 유지 | |