산속에서 눈을 가리고 내려가기
손실을 산의 높이라고 상상해 봐. 목표는 손실이 가장 낮은 골짜기에 닿는 거야. 전체 지형은 보이지 않아도 발밑이 어느 쪽으로 기울었는지는 느낄 수 있지. 경사하강법은 그 기울기를 보고 가장 가파르게 내려가는 쪽으로 한 걸음씩 움직여. 바닥에 가까워질 때까지 이 일을 반복하는 거야.
식으로 쓰면 야. 기울기 는 가장 가파르게 올라가는 방향을 가리켜. 그래서 앞에 마이너스를 붙여 반대쪽으로 내려가고, 학습률 가 한 걸음의 크기를 정해.
실패하는 세 가지 방식
- 학습률이 너무 작음 → 한 걸음이 너무 짧아서 끝없이 기어가. 제한된 시간 안에는 수렴하지 못할 수도 있어.
- 학습률이 너무 큼 → 골짜기를 계속 뛰어넘으며 진동하다가 무한대로 발산할 수도 있어.
- 초기화가 나쁨 → 기울기가 거의 0인 평평한 곳이나 안장점에서 시작해 좀처럼 움직이지 못해.
그래서 학습률을 고르는 일이 실전 딥러닝에서 그렇게 중요해. 어느 곳에나 통하는 기본값은 거의 없어. 같은 옵티마이저라도 손실 지형에 따라 알맞은 걸음 크기가 달라지거든.
곧 만나게 될 변형들
- SGD — 미니배치로 계산한 기울기를 쓰는 가장 단순한 방식이야. 단순하지만 의외로 강력해.
- 모멘텀 — 지난 기울기를 누적해 작은 굴곡을 밀고 지나가.
- Adam — 모멘텀에 파라미터별 걸음 크기를 더해. 현대 학습에서 자주 쓰는 기본 선택지야.
- 학습률 스케줄 — 처음에는 빨리 움직이고 골짜기에 가까워질수록 천천히 움직여. 코사인 감쇠와 워밍업이 흔해.
경사하강법은 엔진, 손실은 지형, 학습률은 걸음 크기야. 머신러닝 엔지니어링의 큰 몫은 이 엔진이 주어진 지형을 안정적으로 찾아가게 만드는 일이야.