
Nesterov Accelerated Gradient [medium]
v1 Momentum 은 classical Polyak momentum. Nesterov momentum (Nesterov 1983) 은 한 단계 "look-ahead":
개념적 형태:
vt=βvt−1+∇f(wt−1−ηβvt−1)(look-ahead 지점의 gradient)
wt=wt−1−ηvt
미리 관성 방향으로 "점프" 한 지점에서 gradient 를 잰다 → 더 정확한 미래 예측.
PyTorch 형식 (gradient 재사용)
실전에선 현재 지점 gradient g 만 주어지므로, 수학적으로 동등한 형태:
vt=βvt−1+gt
wt=wt−1−η(βvt+gt)
이 공식은 고전 momentum 과 같은 g,v 만으로도 계산 가능. (torch.optim.SGD(nesterov=True) 가 이 방식).
v1 vs v3 차이
- v1: w←w−ηvnew
- v3 (NAG): w←w−η(g+βvnew)
= v1 update 에 "g 한 번 더" 가산 → 더 공격적.
이론적 이점
- Convex 문제에서 O(1/t2) 수렴 (고전 GD 는 O(1/t)).
- Curvature 큰 방향의 가속 + 평평한 방향의 smoothing.
과제
함수 nesterov_step(w, g, v, lr, beta) 를 완성하세요.
- 반환:
(w_new, v_new).
- 공식: vnew=βv+g, wnew=w−η(βvnew+g).
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | 반환 2-tuple | |
| 2 | v_new = β·v + g | classical momentum 과 동일 |
| 3 | w_new 공식: lr·(β·v_new + g) | 차이 핵심 |
| 4 | β=0 → plain SGD (Nesterov 무효) | |
| 5 | v1 momentum 과 w_new 비교 → 다름 (β>0) | |
| 6 | shape 유지 (고차원) | |
| 7 | 2차 quadratic 최적화: Nesterov 가 classical 보다 빨리 수렴 | |