← 문제 목록/Nesterov 가속 경사하강 한 스텝
문제 해설

Nesterov 가속 경사하강 한 스텝

최적화 · easy

preview

Nesterov Accelerated Gradient (NAG)

72번 Momentum 은 "과거의 속도에 현재 그래디언트를 더해" 업데이트. Nesterov 는 여기 미리보기(look-ahead) 를 추가:

"속도 방향으로 먼저 간다고 가정하고, 거기서 본 그래디언트를 쓴다."

업데이트 (PyTorch 관례)

vt=βvt1+gtv_t = \beta \, v_{t-1} + g_t wt=wt1η(gt+βvt)w_t = w_{t-1} - \eta \, (g_t + \beta \, v_t)

마지막 항 gt+βvtg_t + \beta v_t 가 순수 momentum 의 vtv_t 와 다른 지점 — gradient 를 한 번 더 반영해 스텝을 조금 더 멀리 보내되, 관성으로 "오버슛" 하지 않도록 보정.

직관

  • Momentum: 절벽을 향해 속도 그대로 돌진 → 오버슛 가능.
  • Nesterov: "속도대로 가면 어디 떨어질까?" 를 계산해 거기서 기울기를 봄 → 오버슛 시 제동.

수렴성

  • 볼록 smooth 문제에서 이론적으로 O(1/T2)O(1/T^2) (vanilla GD 는 O(1/T)O(1/T)) — 최적 1차 방법.

과제

함수 nesterov_step(w, g, v, lr, beta) 를 완성하세요.

  • 반환: (w_new, v_new).
  • vv 업데이트 먼저, 그 다음 ww 업데이트에 (g+βvnew)(g + \beta v_\text{new}).

테스트 케이스

#이름검증
1v_new = β v + g72번과 동일
2w_new = w − lr(g + β v_new)NAG 특유
3β=0 → plain SGD모멘텀 없이 동일
4Nesterov step > Momentum step (같은 β)더 먼 이동
5shape 유지
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.