자주 하는 실수와 요약
자주 하는 실수
| 실수 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 샘플을 n배 늘리면 n배 정확해진다고 봄 | 1 | 평균의 표준편차는 1/√n 로 준다. 두 배 정확하려면 네 배 |
| 배치 크기를 데이터 전체로 하면 σ/√B 만큼 노이즈가 남는다고 봄 | 2 | σ²/B 는 되돌려 넣고 뽑을 때의 분산이다. 겹치지 않게 뽑으면 √((N − B)/(N − 1)) 가 곱해져 B = N 에서 0 |
| 배치 크기는 학습 내내 작게 두면 된다고 봄 | 3 | 그래디언트 노이즈 크기 σ²/(참 그래디언트)² 는 손실의 바닥에 다가갈수록 커진다. 쓸 만한 배치 크기도 커진다 |
| 어제의 결과를 그대로 따라 고치면(r = 1) 가장 정확하다고 봄 | 4 | 노이즈까지 따라간다. 고정된 고침 비율은 고치는 속도와 정확도를 함께 줄 수 없다 |
| ηa 가 클 때도 노이즈 플로어를 ησ²/(4B) 로 어림함 | 5 | 2 − ηa 를 남긴 식을 쓴다. ηa → 2 에서 노이즈 플로어는 끝없이 높아진다 |
| η/B 만 같으면 노이즈 플로어가 같다고 봄 | 6 | 학습률이 2/a 에 다가가면 깨진다. 선형 배율 규칙은 학습률의 상한보다 한참 작은 범위에서만 통한다 |
| 학습률을 빨리 줄일수록 빨리 수렴한다고 봄 | 7, 8 | 학습률의 합이 유한하면 손실의 바닥에 닿기 전에 스텝이 멈춘다(로빈스–먼로의 첫째 조건) |
| 학습률을 고정하면 노이즈 플로어보다 가까이 갈 길이 없다고 봄 | 9 | 스텝들의 평균을 답으로 내면 노이즈가 지워진다. 골짜기가 여럿이면 한 골짜기 안의 스텝만 평균 낸다 |
| 여러 번 나눠 부으면(작은 학습률로 오래) 가장 정확하다고 봄 | 10 | 끝의 오차는 마지막 구간의 크기가 정한다. 처음엔 크게, 끝에선 작게 |
| 학습률을 줄이면 손실이 곧바로 새 노이즈 플로어로 내려간다고 봄 | 11 | 새 노이즈 플로어까지 1/(ηa) 스텝쯤 걸린다. 학습률이 작을수록 더 오래 |
| 코사인 스케줄은 늘 0까지 내리는 것이 낫다고 봄 | 12 | 정해 둔 끝 뒤로 학습을 이어 가려면 최솟값이 0이 아니어야 한다 |
| 워밍업 동안 모든 스텝에서 η·λ < 2 여야 한다고 봄 | 13 | 2/λ 는 넉넉한 조건이다. 워밍업 길이는 초반 곡률이 몇 스텝 만에 내려오는지에 맞춘다 |
| 장난감에서 본 것을 큰 신경망의 결론으로 옮김 | 14 | 장난감은 가설을 준다. 큰 신경망에서는 곡률을 실제로 재서 확인한다 |
요약
이 장에서 한 일을 정리해 보자. 데이터 전체 대신 몇 건을 뽑은 미니배치로 그래디언트를 어림하고 그 어림으로 걷는 방법이 확률적 경사하강이다. 어림한 그래디언트는 참 그래디언트에 평균 0인 노이즈가 섞인 것이고, 노이즈의 분산은 데이터 한 건짜리 그래디언트의 분산 σ²를 배치 크기 B로 나눈 것이다. 배치 크기를 네 배 해야 노이즈의 표준편차가 반이 된다. 노이즈 섞인 결과로도 답에 다가갈 수 있다는 것은 1951년 로빈스와 먼로가 반응과 무반응만 보고 용량을 찾는 문제에서 처음 보였다. 손실의 바닥에서 참 그래디언트는 0이 되지만 노이즈는 남으므로, 바닥에 가까울수록 신호보다 노이즈가 커진다.
학습률을 고정하면 확률적 경사하강은 바닥에 닿지 못하고 노이즈 플로어에서 맴돈다. 노이즈 플로어의 높이는 ησ²/(2B(2 − ηa))이고, ηa가 작으면 학습률 ÷ 배치 크기 η/B에 비례한다. 그래서 배치 크기를 k배 하면 학습률도 k배 하는 선형 배율 규칙이 나오지만, 학습률이 학습률의 상한 2/L에 다가가면 이 규칙은 깨진다.
바닥에 닿으려면 학습률을 줄여 가야 한다. 로빈스–먼로 조건은 학습률의 합은 무한하고 학습률 제곱의 합은 유한해야 한다는 것이다. 앞의 조건은 끝까지 갈 거리를, 뒤의 조건은 잦아드는 노이즈를 보장하고, 1/k 꼴이 둘 사이에 맞는다. 스텝 수가 정해진 실제 학습에서는 계단이나 코사인 같은 학습률 스케줄을 쓴다. 처음에는 큰 학습률로 빨리 다가가고, 끝에서는 작은 학습률로 노이즈 플로어를 낮춘다. 학습률을 줄인 뒤 새 노이즈 플로어까지 내려가는 데는 1/(ηa) 스텝쯤 걸린다.
학습 초반에 곡률이 크면, 끝에 쓸 학습률을 처음부터 쓰는 순간 학습률 × 곡률이 2를 넘어 튕겨 나갈 수 있다. 워밍업은 처음 몇 스텝 동안 학습률을 작은 값에서 목표까지 올려, 곡률이 내려오는 동안 스텝을 묶어 둔다. 큰 모델의 학습률은 대개 워밍업으로 올린 뒤 코사인으로 내린다.
막힌 곳
이 장의 처방은 배치를 키우거나 학습률을 줄이거나 스텝을 평균 내어, 모두 노이즈를 줄이는 쪽이었다. 어느 것이든 값을 치른다. 배치를 키우면 한 스텝이 비싸지고, 학습률을 줄이면 바닥까지 가는 스텝이 늘어난다. 그리고 경사하강에서 본 길쭉한 골짜기의 문제는 그대로 남아 있다. 학습률은 가장 가파른 방향의 곡률이 정하는 상한 아래에 묶이고, 완만한 방향은 그 작은 학습률로 기어간다. 노이즈가 섞이면 가파른 방향의 상한 근처에서 노이즈 플로어가 먼저 높아지니, 학습률을 상한 가까이 올릴 수도 없다.
방향마다 곡률이 다르다면, 모든 방향에 학습률 하나를 쓰는 대신 방향마다 스텝을 다르게 할 수는 없을까? 그래디언트만이 아니라 손실이 어느 방향으로 얼마나 휘었는지를 안다면, 한 스텝에 바닥으로 곧장 갈 수도 있지 않을까? 그 대가는 무엇일까?