블로그 강의 · 딥러닝 기초

경사하강법과 학습률

한 걸음의 크기가 학습 전체를 좌우한다 — 학습률을 직접 바꿔 보며 수렴을 눈으로 확인하기

문제

학습 = 손실 함수의 가장 낮은 곳 찾기

  • 모델의 파라미터 \( \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 같은 적응형 옵티마이저 — 방향별 보폭을 따로 조절해 길쭉한 골짜기를 완화. 그래도 기본 학습률은 여전히 정해야 한다

방향은 기울기가, 보폭은 학습률이 정한다. 너무 작으면 느리고, 너무 크면 터진다.