블로그 강의 · 딥러닝 기초
경사하강법과 학습률
한 걸음의 크기가 학습 전체를 좌우한다 — 학습률을 직접 바꿔 보며 수렴을 눈으로 확인하기
문제
학습 = 손실 함수의 가장 낮은 곳 찾기
- 모델의 파라미터 \( \theta \)를 바꾸면 손실 \( L(\theta) \)가 바뀐다
- 파라미터가 수백만 개라 전부 대입해 보는 건 불가능
- 대신 지금 서 있는 곳의 기울기만 보고 내려간다
- 안개 낀 산에서 발밑 경사만 보고 하산하는 것과 같다
경사하강법
규칙은 한 줄이다
$$ \theta_{t+1} = \theta_t - \eta \, \nabla L(\theta_t) $$
\( \nabla L \)
기울기 — 가장 가파르게 올라가는 방향
\( - \)
그 반대로 가야 손실이 줄어든다
\( \eta \) (학습률)
한 번에 얼마나 멀리 갈지 정하는 보폭
Demo 1 · \( L(\theta) = \theta^2 \)
학습률을 바꾸면 수렴이 어떻게 달라질까?
정리
보폭에 따라 세 가지 운명
\( L = \theta^2 \)이면 한 스텝은 \( \theta_{t+1} = (1 - 2\eta)\,\theta_t \) — 곱해지는 값 \( |1-2\eta| \)가 1보다 작아야 수렴
너무 작다
\( \eta \ll 0.5 \)
방향은 맞지만 한없이 느리다. 학습 시간만 잡아먹는다.
적당하다 · 크다
\( 0 \lt \eta \lt 1 \)
수렴한다. 0.5를 넘으면 최솟값을 넘나들며 진동하면서 다가간다.
너무 크다
\( \eta \gt 1 \)
매 스텝 더 멀리 튕겨 나가 손실이 폭발한다 (loss가 NaN).
Demo 2 · \( L = \tfrac12 (x^2 + \kappa\, y^2) \)
골짜기가 길쭉하면 한 학습률로는 부족하다
실전에서는
학습률을 고르는 현실적인 방법
- 작게 시작해 키워 보기 — 손실이 튀기 직전 값보다 조금 작게 (LR range test)
- 스케줄 — 처음엔 크게, 갈수록 작게 (step decay, cosine)
- Warmup — 초반 몇 스텝은 아주 작게 시작해 불안정한 출발을 막기
- Adam 같은 적응형 옵티마이저 — 방향별 보폭을 따로 조절해 길쭉한 골짜기를 완화. 그래도 기본 학습률은 여전히 정해야 한다