인지야공

인지야공/딥러닝 기초 정리/12번째 글

최적화 — Adam·워밍업·스케줄이 하는 일

실행: python NN_12_optimization.py (검증 환경: torch 2.8.0+cu129, RTX 5080) 이 글의 수치는 전부 그 스크립트를 돌려 얻은 것이다. 정규화와 잔차 편이 깊어도 그라디언트가 살아남게 했다면, 이 글은 그 그라디언트로 어떻게 내려갈지를 잰다.


정규화와 잔차 편에서 잔차와 정규화로 그라디언트를 살렸다. 이제 그 그라디언트를 받아 파라미터를 실제로 업데이트하는 것이 최적화다. “손실의 기울기 반대로 한 걸음”이 전부일 것 같지만, 그 한 걸음의 크기와 방향을 정하는 데 세 가지 장치가 필요하다 — Adam, 워밍업, 학습률 스케줄. 각각이 무엇을 고치는지 잰다.


1. SGD의 문제 — 방향마다 곡률이 다르다

가장 단순한 최적화는 경사 하강(SGD) 이다.

θt+1=θt−η gt,gt=∇θL\theta_{t+1} = \theta_t - \eta\, g_t, \qquad g_t = \nabla_\theta \mathcal{L}
기호뜻
θ\theta파라미터
gtg_t그라디언트 (손실이 가장 가파르게 오르는 방향)
η\eta학습률 (한 걸음 크기)

문제는 모든 방향에 같은 η\eta 를 쓴다는 것이다. 손실 표면이 방향마다 곡률이 다르면(어떤 방향은 가파른 협곡, 어떤 방향은 완만한 평지) 곤란해진다. 가파른 방향에서 튕기지 않으려면 η\eta 를 작게 써야 하는데, 그러면 완만한 방향은 한없이 느리게 내려간다.

이 정도를 재는 값이 조건수 κ=λmax⁡/λmin⁡\kappa = \lambda_{\max}/\lambda_{\min} 다(곡률의 최대/최소 비). SGD 가 안정하려면 η<2/λmax⁡\eta < 2/\lambda_{\max} 여야 하고, 그러면 가장 완만한 방향은 걸음마다 대략 (1−2/κ)(1 - 2/\kappa) 배씩만 줄어 — κ\kappa 가 크면 그만큼 느리다.

직접 재 보기 A

조건수 κ=1000\kappa = 1000 인 이차 그릇(곡률 1~1000)에서 세 방법을 400스텝 돌렸다.

SGD vs Adam

방법400스텝 후 손실
SGD2.13 (완만한 방향에 발이 묶임)
Momentum3.9e-9
Adam3.7e-15

SGD 는 2.13 에서 거의 멈췄다. Adam 은 SGD 보다 5.7×10145.7\times10^{14} 배 낮은 손실에 도달했다. 무엇이 다른가.


2. Adam — 좌표마다 걸음을 다시 잰다

모멘텀(momentum) 은 과거 그라디언트를 관성처럼 쌓아 지그재그를 펴 준다(위 그림의 주황). Adam 은 여기에 한 가지를 더한다 — 좌표마다 그라디언트 크기로 나눠 걸음을 고르게 만든다.

mt=β1mt−1+(1−β1) gt(1차 모멘트: 방향)vt=β2vt−1+(1−β2) gt2(2차 모멘트: 크기2)θt=θt−1−η m^tv^t+ϵ(크기로 나눈 한 걸음)\begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1)\, g_t & &\text{(1차 모멘트: 방향)}\\ v_t &= \beta_2 v_{t-1} + (1-\beta_2)\, g_t^2 & &\text{(2차 모멘트: 크기}^2\text{)}\\ \theta_t &= \theta_{t-1} - \eta\, \frac{\hat m_t}{\sqrt{\hat v_t} + \epsilon} & &\text{(크기로 나눈 한 걸음)} \end{aligned}
기호뜻
mtm_t그라디언트의 지수이동평균 — 관성 낀 방향
vtv_t그라디언트 제곱의 이동평균 — 그 좌표가 얼마나 큰가
m^, v^\hat m,\ \hat v초기 편향 보정 (m,vm,v 가 0에서 시작하는 것 교정)
v^t\sqrt{\hat v_t}좌표별 크기. 이걸로 나누니 큰 좌표든 작은 좌표든 걸음이 비슷

핵심은 v^t\sqrt{\hat v_t} 로 나누는 부분이다. 가파른 좌표는 gg 가 커서 v\sqrt{v} 도 크니 나눠서 작은 걸음, 완만한 좌표는 v\sqrt{v} 가 작으니 큰 걸음. 결과적으로 모든 좌표가 비슷한 속도로 내려간다 — 1절의 조건수 κ\kappa 에 발목 잡히지 않는다. 그래서 Adam 이 협곡·평지가 섞인 표면에서 SGD 를 압도한다.

실무에서는 AdamW 를 쓴다. 가중치 감쇠(작게 유지하는 힘)를 그라디언트에 섞지 않고 따로 빼 준다.

θt=θt−1−η(m^tv^t+ϵ+λ θt−1)\theta_t = \theta_{t-1} - \eta\Big( \frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon} + \lambda\, \theta_{t-1} \Big)

λθ\lambda\theta 항이 파라미터를 0 쪽으로 살짝 당겨 과적합을 줄인다. 요즘 큰 모델의 기본 최적화기가 AdamW 다.


3. 워밍업 — 첫걸음은 살살

Adam 을 골랐어도, 시작부터 큰 학습률을 쓰면 초반에 튄다. 이유는 두 가지다 — ① 초기 그라디언트·2차 모멘트 vv 추정이 아직 불안정하고, ② 정규화와 잔차 편에서 본 깊은 post-norm 은 잔차 지름길이 정규화에 눌려 큰 걸음에 특히 약하다. 그래서 학습률을 0에서 서서히 올린다 — 워밍업이다.

η(t)=ηmax⁡⋅min⁡ ⁣(1, tW)(W = 워밍업 스텝 수)\eta(t) = \eta_{\max}\cdot \min\!\Big(1,\ \frac{t}{W}\Big) \quad (W\text{ = 워밍업 스텝 수})

직접 재 보기 B

정규화와 잔차 편에서 워밍업이 필요하다고 한 쪽 — 깊이 32 post-norm 망을 큰 학습률(ηmax⁡=0.04\eta_{\max}=0.04)로 학습시켰다.

워밍업

초반 최대 손실최종 손실
워밍업 없음1.99 (초반 스파이크)0.0695
워밍업 있음0.430.0694

워밍업 없이 큰 학습률로 출발하자 초반 손실이 1.99 로 튀었다(그림 왼쪽 빨강 봉우리). 학습률을 80스텝에 걸쳐 서서히 올리자 스파이크가 4.6배 낮은 0.43 으로 눌렸다. 최종 손실은 거의 같지만, 실제 큰 모델에서는 이 초반 스파이크가 그대로 발산으로 이어져 학습이 깨지기도 한다. 워밍업은 그 위험 구간을 건너는 다리다.


4. 스케줄 — 끝에서는 걸음을 줄인다

워밍업으로 올린 학습률을 끝까지 크게 두면, 최소점 근처에서 계속 튕겨 바닥에 안착하지 못한다. 특히 데이터에 잡음이 있으면 큰 걸음이 그 잡음 바닥 위에서 진동한다. 그래서 후반에는 학습률을 서서히 낮춘다. 가장 흔한 것이 코사인 감쇠다.

η(t)=ηmax⁡⋅12(1+cos⁡π(t−W)T−W)\eta(t) = \eta_{\max}\cdot \tfrac{1}{2}\Big(1 + \cos\frac{\pi (t-W)}{T-W}\Big)
기호뜻
TT전체 스텝 수
WW워밍업 스텝 수
cos⁡\cos 항1에서 0으로 매끄럽게 내려가는 곡선

직접 재 보기 C

라벨에 잡음(표준편차 0.25 → 손실 바닥 약 0.0625)을 넣고, 상수 학습률과 코사인 감쇠를 600스텝씩 비교했다.

스케줄

스케줄마지막 50스텝 평균 손실
상수 학습률0.0691
코사인 감쇠0.0655

잡음 바닥이 0.0625 인데, 상수는 그 위 0.0691 에서 계속 진동했고 코사인 감쇠는 0.0655 로 바닥에 더 가까이 내려앉았다(초과분 0.0066 → 0.0030, 절반). 5.2% 차이지만, 바닥까지 남은 여유로 보면 절반을 더 좁힌 것이다. 끝에서 걸음을 줄이는 것만으로 더 좋은 최소점에 안착한다.


5. 정리

장치무엇을 고치나핵심
Adam방향마다 다른 곡률(조건수)좌표별 v\sqrt{v} 로 나눠 걸음을 고르게
AdamW과적합가중치 감쇠를 그라디언트와 분리
워밍업초반 스파이크·발산학습률을 0에서 서서히 올림
코사인 감쇠최소점 근처 진동끝에서 학습률을 낮춰 바닥에 안착

한 문단으로: SGD 는 모든 방향에 같은 학습률을 써서, 곡률이 방향마다 다르면(조건수 1000) 완만한 방향에 발이 묶인다(재 보니 손실 2.13 에서 멈춤). Adam 은 좌표마다 그라디언트 크기 v\sqrt{v} 로 나눠 걸음을 고르게 만들어 그 벽을 넘고(10−1510^{-15}, SGD 의 5.7×10145.7\times10^{14} 배 아래), AdamW 는 여기에 가중치 감쇠를 분리해 얹는다. 큰 학습률로 곧장 출발하면 초반에 튀므로(깊은 post-norm 에서 손실 1.99 스파이크) 워밍업으로 살살 올리고(4.6배 완화), 끝에서는 코사인 감쇠로 걸음을 줄여 잡음 바닥에 더 가까이 안착한다(5.2% 개선). 정규화와 잔차 편이 그라디언트를 살렸다면, 이 세 장치가 그것을 실제 학습으로 바꾼다.


참고

표시는 이 브라우저에만 남는다. 서버로 가는 것은 없다.