학습률(learning rate) — 한 걸음의 크기 ★★
학습률(lr, η)은 기울기를 얼마나 크게 반영해서 파라미터를 고칠지 정하는 값이에요. 식 w ← w − lr × 기울기에서 lr이 클수록 한 번에 크게 움직여요.
골짜기로 내려가는데 보폭이 너무 작으면 해가 질 때까지 못 내려가고, 너무 크면 골짜기를 뛰어넘어서 반대쪽 더 높은 곳에 떨어져요. 적당한 보폭이 필요해요.
7-4의 같은 문제(weight 1, 입력 2, 정답 4)를 학습률만 바꿔서 한 번 업데이트하면 이렇게 돼요. 기울기는 모두 −8이에요. 직접 실행해서 확인한 값이에요.
| lr | 새 weight (1 − lr × (−8)) | 새 loss | 결과 |
|---|---|---|---|
| 0.01 | 1.08 | 약 3.39 | 너무 작아요. 거의 안 줄어요 |
| 0.1 | 1.8 | 0.16 | 적당해요 |
| 0.25 | 3.0 | 4.0 | 정답(2)을 지나쳐 제자리예요 |
| 0.5 | 5.0 | 36.0 | 오히려 훨씬 커졌어요 |
정답 weight는 2예요(2 × 2 = 4). lr = 0.1이면 반복할수록 1.8 → 1.96 → 1.992 → 1.998 → 2.0으로 정답에 다가가요. 반면 lr = 0.5이면 5 → −7 → 29 → −79 → 245로 점점 더 크게 튀어서 학습이 망가져요. 이것을 발산이라고 해요. 이렇게 커지다 보면 loss가 NaN이나 Inf(무한대)로 나오기도 해요.
반대로 lr = 0이면 아무리 step을 해도 weight가 바뀌지 않아요. 교수님 자료의 오류 점검표에도 parameter가 안 변하는 원인으로 step() 누락, optimizer에 파라미터 미등록, lr=0, 기울기 0이 나와요.
| 증상 | 원인 |
|---|---|
| weight가 안 변해요 | step()을 안 불렀어요 / 옵티마이저에 파라미터를 안 넣었어요 / lr = 0 / 기울기가 0이에요 |
| loss가 NaN 또는 Inf | lr이 너무 커요 / 입력값이 이상해요 / 0으로 나눴어요 |
| loss가 안 줄어요 | lr, 데이터, 학습 순서를 점검해요 |
학습률 문제는 "너무 크면 발산, 너무 작으면 느림" 한 문장으로 풀려요. 또 "학습 후 weight가 안 변했다"는 상황은 step 누락, lr=0, 파라미터 미등록 중에서 골라요.
잠깐 확인 — 학습률을 너무 크게 하면 loss는 어떻게 될까요?
줄어들지 않고 오히려 커지거나 NaN이 될 수 있어요. 한 걸음이 너무 커서 정답을 지나쳐 반대쪽으로 더 멀리 가기 때문이에요.
자료: 6·7주차 · Week04_Autograd_Loss_Optimizer · 7주차 녹취(빅데이터07)