자주 하는 실수와 요약
자주 하는 실수
| 실수 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 스텝 크기를 일정하게 하면 더 빨리 닿는다고 봄 | 1 | 고정된 스텝은 손실의 바닥 근처에서 넘어가기를 되풀이한다. 경사하강은 스텝이 그래디언트에 비례해 저절로 줄어든다 |
| 그래디언트에서 큰 칸 하나만 줄이는 방향이 가장 가파르다고 봄 | 2 | 1차 어림에서 가장 가파른 방향은 그래디언트 벡터 전체의 반대쪽이다. 칸들을 그래디언트의 비율대로 섞는다 |
| 손실을 합으로 바꿔도 학습은 같다고 봄 | 3 | 손실의 바닥은 같지만 그래디언트와 스텝이 샘플 수배가 된다. 학습률은 손실의 정의와 짝으로 정한다 |
| 더 세게 고칠수록 빨리 맞춰진다고 봄 | 4 | 배율 1 − ηa 의 크기가 1을 넘으면 터진다. ηa < 2 |
| 학습률을 정확히 2/L 로 잡아도 된다고 봄 | 5 | 2/L 에서는 배율이 −1이라 양쪽 벽을 영원히 오간다. 상한은 「보다 작게」 |
| 출발점의 곡률만 보고 학습률이 안전한지 판단함 | 5 | 스텝을 정하는 것은 손실의 바닥까지 이어 본 평균 곡률이다. 어디서나 곡률이 L 이하라는 보장이 있어야 2/L 이 모든 출발점에 통한다 |
| 입력을 255배 하면 학습률을 255배 줄이면 된다고 봄 | 6 | 곡률에는 입력이 두 번 곱해진다. 상한은 255² 배 줄어든다 |
| 완만한 방향이 느리면 학습률을 키우면 된다고 봄 | 7 | 학습률은 가파른 방향의 2/L 에 묶인다. 완만한 방향의 배율은 1 − 2/κ 보다 작아지지 않는다 |
| 가장 좋은 학습률을 고르면 조건수 문제가 사라진다고 봄 | 8 | 가장 좋은 고정 학습률도 배율이 (κ − 1)/(κ + 1)이라 스텝 수는 여전히 κ에 비례한다 |
| 입력의 표준편차가 같으면 그릇이 둥글다고 봄 | 9 | 평균이 0이 아니면 모든 가중치를 함께 키우는 방향이 가파르게 솟는다. 평균을 뺀다 |
| 클리핑 문턱은 낮을수록 안전하다고 봄 | 10 | 문턱이 평소 그래디언트보다 낮으면 모든 스텝이 느려진다. 평소 크기보다 조금 위에 둔다 |
| 클리핑을 걸면 2/L 보다 큰 학습률도 수렴한다고 봄 | 11 | 손실의 바닥 근처에서는 클리핑이 꺼진다. 클리핑은 폭발을 가둘 뿐이고 수렴은 여전히 η < 2/L 이 정한다 |
| 층마다 따로 자르면 더 꼼꼼하다고 봄 | 12 | 따로 자르면 그래디언트의 방향이 바뀐다. 전체 노름으로 길이만 줄인다 |
요약
이 장에서 한 일을 정리해 보자. 손실의 그래디언트만 아는 채로 손실의 바닥을 찾는 규칙이 경사하강이다. 지금 자리의 그래디언트에 학습률을 곱한 만큼 반대쪽으로 옮기고, 이것을 되풀이한다. 1847년 코시가 천체의 궤도 방정식을 풀려고 처음 적은 −θX, −θY, −θZ가 이것이고, 파이토치의 optimizer.step() 한 줄도 같은 식이다. 스텝이 그래디언트에 비례하므로 바닥에 가까워질수록 스텝은 저절로 줄어든다.
학습률은 아무리 키워도 되는 것이 아니다. 포물선 ½a·w²에서는 스텝마다 거리가 1 − ηa배가 되므로 η < 2/a여야 하고, 일반적으로는 그래디언트의 립시츠 상수(곡률의 상한) L로 η < 2/L이어야 손실이 스텝마다 준다고 장담할 수 있다. 보장되는 줄어듦은 η = 1/L에서 가장 크고, 손실이 가장 낮은 학습률은 무너지는 학습률 바로 옆에 있다. 학습률 찾기는 이 벼랑을 실험으로 찾는 방법이다.
학습률의 상한은 가장 가파른 방향이 정하고, 가장 완만한 방향은 그 학습률로 걸어야 한다. 두 곡률의 비가 조건수 κ = L/μ이고, 고정된 학습률의 경사하강이 걸리는 스텝 수는 κ에 비례한다. 1/L과 2/L 사이의 학습률은 가파른 방향에서 지그재그를 만들고, 가장 좋은 학습률을 골라도 앞의 숫자가 반이 될 뿐이다. 입력의 평균을 빼고 크기를 맞추는 전처리는 그릇을 둥글게 만들어 조건수를 줄이는 일이다.
손실 지형에 좁은 벽이 있으면 벽에 닿은 한 스텝이 학습을 망친다. 그래디언트 클리핑은 그래디언트 벡터의 길이가 문턱을 넘을 때 방향은 두고 길이만 줄여, 문턱을 넘은 스텝에서만 학습률을 잠깐 낮춘다. 큰 언어 모델은 전체 노름을 1.0에서 자르는 것이 흔한 설정이다. 그러나 클리핑은 폭발을 가둘 뿐 수렴을 만들어 주지는 않고, 문턱이 너무 낮으면 모든 스텝이 느려진다.
막힌 곳
이 장의 계산은 모두 그래디언트를 정확히 안다고 놓았는데, 영수증 세 장이라면 그 가정이 맞다. 그러나 실제 학습은 데이터 수백만 개 가운데 미니배치 몇백 개로 그래디언트를 어림하고, 미니배치 그래디언트는 스텝마다 흔들린다. 흔들리는 그래디언트로 걸어도 바닥에 닿을까? 닿는다면 학습률은 이 장에서 찾은 2/L보다 더 작아야 할까, 아니면 바닥 근처에서는 오히려 줄여 가야 할까?
그리고 학습률 하나로는 κ를 이길 수 없었으니, 조건수가 스텝 수를 정한다는 결론도 마음에 걸린다. 지그재그로 오가는 길에서, 지난 스텝들이 어느 쪽으로 움직였는지를 기억해 두면 벽 사이를 오가는 움직임은 서로 지워지고 골짜기 바닥을 따라가는 움직임은 쌓이지 않을까? 그래디언트 말고 다른 무엇을 더 써야 길쭉한 골짜기를 조건수보다 빨리 내려갈 수 있을까?