경사하강: 학습률은 어디까지 키울 수 있나

혼동하기 쉬운 점과 요약

토론 1. 학습률을 두 배로 하면 두 배 빨리 내려가나

곡률이 4인 그릇 f(w) = 2w²를 w₀ = 1에서 내려간다. 학습률 0.1이면 |w| < 0.01에 들기까지 10스텝이 걸린다. 학습률을 키우면 스텝 수는 어떻게 바뀌는가?

선생님 T01
선생님

학습률 0.1로 10스텝이 걸렸어요. 0.2로 두 배 하면 몇 스텝쯤 걸릴 것 같아요?

김민준 M01
김민준

한 스텝에 두 배씩 가니까 절반, 5스텝쯤이요. 돌려 볼게요. … 3스텝이에요. 생각보다 더 빨라요.

선생님 T01
선생님

그럼 0.4는요?

김민준 M02
김민준

또 두 배니까 더 빨라야 하는데… 10스텝이에요. 0.1일 때랑 같아요. 0.5는 200스텝을 돌려도 1과 −1을 오가고, 0.6은 42스텝 만에 백만을 넘어요.

이서연 S01
이서연

0.4는 −0.6, 0.36, −0.216이야. 0.1일 때 0.6, 0.36, 0.216이랑 크기가 똑같고 부호만 번갈아 바뀌어.

선생님 T02
선생님

한 스텝에 w에 곱해지는 수를 적어 보면요?

이서연 S01
이서연

그래디언트가 4w니까 w − η · 4w = (1 − 4η)w예요. 0.1이면 0.6, 0.2면 0.2, 0.4면 −0.6, 0.5면 −1이요.

김민준 M04
김민준

학습률에 비례해서 빨라지는 게 아니라, 1 − 4η의 크기가 작을수록 빠른 거였네요. 0.25에서 0이 되니까 한 스텝에 바닥이고, 거기서 멀어지면 양쪽 다 느려져요. 크기가 1이 되면 갇히고, 넘으면 터지고요.

이서연 S01
이서연

그럼 그래디언트 크기에 따라 스텝이 출렁이는 게 문제인 거니까, 크기는 버리고 방향만 봐서 늘 0.3씩 내려가면 어때요? 그러면 터질 일이 없잖아요.

선생님 T01
선생님

해 볼까요? 1에서 출발해서요.

이서연 S01
이서연

0.7, 0.4, 0.1, 그다음 −0.2… 다시 0.1, −0.2.

김민준 M03
김민준

0.1이랑 −0.2를 계속 오가는 거야?

이서연 S04
이서연

터지지는 않는데 0.1과 −0.2 사이에 갇혔어요. 0.01 안에는 영영 못 들어가요.

선생님 T01
선생님

경사하강에서는 왜 이런 일이 안 생겼죠?

이서연 S01
이서연

경사하강은 스텝이 η × 4w라서 바닥에 가까울수록 저절로 작아져요. 늘 0.3이면 바닥 바로 옆에서도 0.3이라 넘어가기를 되풀이하고요.

선생님 T14
선생님

그래요. 학습률을 키우면 처음에는 빨라지지만, 배율 1 − ηa가 0을 지나는 η = 1/a 너머부터는 다시 느려지고, ηa가 2에 닿으면 바닥에 닿지 못해요. 상한은 ηa < 2예요. 스텝 크기를 고정하는 것도 답이 아니에요. 경사하강이 바닥에 닿는 것은 스텝이 그래디언트에 비례해 저절로 줄기 때문이에요.

토론 2. 그래디언트의 칸을 따로따로 다뤄도 방향은 그대로인가

두 층짜리 신경망에서 한 스텝의 그래디언트가 첫째 층 쪽으로 1, 둘째 층 쪽으로 3이다(층마다 파라미터 하나로 줄여 놓았다). 길이 1만큼만 움직일 수 있다면 어느 쪽으로 가야 손실이 1차 근사로 가장 많이 줄어드는가?

선생님 T01
선생님

그래디언트가 (1, 3)이에요. 길이 1만큼만 움직일 수 있어요. 어느 쪽으로 가면 손실이 1차 근사로 가장 많이 줄까요?

김민준 M01
김민준

둘째 층이 세 배 크니까 둘째 층만 1만큼 줄이면 3만큼 줄어요. 첫째 층은 1밖에 안 되니까 거기에 길이를 나눠 주면 손해일 것 같은데요.

선생님 T01
선생님

길이 1을 두 층에 나눠 쓰는 방향도 몇 개 넣어 볼까요?

김민준 M01
김민준

각도를 돌려 가며 코드로 볼게요. 첫째 층에 0.3, 둘째 층에 0.954를 쓰면 0.3 + 2.862 = 3.162예요.

선생님 T01
선생님

둘째 층만 쓴 경우와 비교하면요?

김민준 M04
김민준

둘째 층만 쓴 3보다 커요. 제일 좋은 건 (0.316, 0.949) 근처인데, 이거 그래디언트 (1, 3)을 길이로 나눈 거네요.

이서연 S01
이서연

길이 1을 나눠 쓰면 제곱해서 더한 게 1이어야 하니까, 작은 칸에 0.3을 줘도 큰 칸은 0.954가 남아. 큰 칸에서 거의 안 깎이고 작은 칸에서 0.3을 얻으니까 섞는 게 이득이지. 그때 줄어드는 양이 그래디언트 길이 √10 = 3.162고.

선생님 T02
선생님

이제 이 그래디언트를 문턱 1.0으로 잘라서 쓴다고 해요. 어떻게 자르겠어요?

이서연 S01
이서연

층마다 따로 1로 자르는 게 꼼꼼할 것 같아요. 첫째 층은 1이라 그대로, 둘째 층은 3에서 1로. (1, 1)이요.

선생님 T01
선생님

그 (1, 1) 방향으로 길이 1만큼 가면 손실은 얼마나 줄죠?

이서연 S01
이서연

(1, 1)/√2 방향이니까 (1 + 3)/√2 = 2.83이요.

김민준 M01
김민준

둘째 층만 쓴 3이랑 비교하면?

이서연 S04
이서연

둘째 층만 쓴 3보다도 작네요. 자르는 동안 방향이 바뀌었어요. 원래 (1, 3)과 26.6°나 틀어졌고요.

김민준 M01
김민준

전체 노름 √10으로 두 칸을 같이 나누면 (0.316, 0.949)라 방향이 그대로야.

선생님 T14
선생님

그래요. 1차 근사에서 가장 가파른 방향은 그래디언트 벡터 전체의 반대쪽이라, 칸들을 그래디언트의 비율대로 섞어야 해요. 자를 때도 칸마다 따로 자르면 그 비율이 깨져요. 전체 노름으로 길이만 줄이면 방향이 남아요.

혼동하기 쉬운 점

혼동하기 쉬운 생각 나온 문제 바로잡는 법
스텝 크기를 일정하게 하면 더 빨리 닿는다고 봄 1, 토론 1 고정된 스텝은 손실의 바닥 근처에서 넘어가기를 되풀이한다. 경사하강은 스텝이 그래디언트에 비례해 저절로 줄어든다
그래디언트에서 큰 칸 하나만 줄이는 방향이 가장 가파르다고 봄 2, 토론 2 1차 근사에서 가장 가파른 방향은 그래디언트 벡터 전체의 반대쪽이다. 칸들을 그래디언트의 비율대로 섞는다
손실을 합으로 바꿔도 학습은 같다고 봄 3 손실의 바닥은 같지만 그래디언트와 스텝이 샘플 수배가 된다. 학습률은 손실의 정의와 짝으로 정한다
더 세게 고칠수록 빨리 맞춰진다고 봄 4, 토론 1 배율 1 − ηa 의 크기가 1을 넘으면 터진다. ηa < 2
손실이 가장 낮은 학습률을 그대로 고르면 된다고 봄 개념 다지기 가장 좋은 학습률은 학습률의 벼랑 바로 옆에 있다. 물러서면 조금 잃고 넘어가면 다 잃으며, 신경망은 L 을 모르고 학습 도중 L 이 바뀌므로 몇 배 물러선 값을 고른다
학습률을 정확히 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, 토론 2 따로 자르면 그래디언트의 방향이 바뀐다. 전체 노름으로 길이만 줄인다

요약

이 장에서 한 일을 정리해 보자. 손실의 그래디언트만 아는 채로 손실의 바닥을 찾는 규칙이 경사하강이다. 지금 자리의 그래디언트에 학습률을 곱한 만큼 반대쪽으로 옮기고, 이것을 되풀이한다. 1847년 코시가 천체의 궤도 방정식을 풀려고 처음 적은 −θX, −θY, −θZ가 이것이고, 파이토치의 optimizer.step() 한 줄도 같은 식이다. 스텝이 그래디언트에 비례하므로 바닥에 가까워질수록 스텝은 저절로 줄어든다.

학습률은 아무리 키워도 되는 것이 아니다. 포물선 ½a·w²에서는 스텝마다 거리가 1 − ηa배가 되므로 η < 2/a여야 하고, 일반적으로는 그래디언트의 립시츠 상수(곡률의 상한) L로 η < 2/L이어야 손실이 스텝마다 준다고 장담할 수 있다. 보장되는 줄어듦은 η = 1/L에서 가장 크고, 손실이 가장 낮은 학습률은 무너지는 학습률 바로 옆에 있다. 학습률 찾기는 이 벼랑을 실험으로 찾는 방법이다.

학습률의 상한은 가장 가파른 방향이 정하고, 가장 완만한 방향은 그 학습률로 걸어야 한다. 두 곡률의 비가 조건수 κ = L/μ이고, 고정된 학습률의 경사하강이 걸리는 스텝 수는 κ에 비례한다. 1/L과 2/L 사이의 학습률은 가파른 방향에서 지그재그를 만들고, 가장 좋은 학습률을 골라도 앞의 숫자가 반이 될 뿐이다. 입력의 평균을 빼고 크기를 맞추는 전처리는 그릇을 둥글게 만들어 조건수를 줄이는 일이다.

손실 지형에 좁은 벽이 있으면 벽에 닿은 한 스텝이 학습을 망친다. 그래디언트 클리핑은 그래디언트 벡터의 길이가 문턱을 넘을 때 방향은 두고 길이만 줄여, 문턱을 넘은 스텝에서만 학습률을 잠깐 낮춘다. 큰 언어 모델은 전체 노름을 1.0에서 자르는 것이 흔한 설정이다. 그러나 클리핑은 폭발을 가둘 뿐 수렴을 만들어 주지는 않고, 문턱이 너무 낮으면 모든 스텝이 느려진다.

정리 연습문제

물음. 곡률이 10인 포물선 손실 ½·10·w²에서 경사하강을 한다. 손실의 바닥으로 수렴하는 학습률은?

  • [ ] 0.3. 세게 고칠수록 빨리 맞춰진다 〔틀림: 학습률과 곡률의 곱이 3이라, 스텝마다 바닥까지의 거리가 두 배로 커지며 터진다.〕
  • [ ] 0.2 〔틀림: 학습률과 곡률의 곱이 꼭 2라, 양쪽 벽을 영원히 오간다. 상한은 「그보다 작게」다.〕
  • [x] 0.15 〔맞음: 학습률과 곡률의 곱이 2보다 작다. 스텝마다 손실의 바닥을 넘어가지만, 바닥까지의 거리가 반으로 준다.〕

물음. 지금 자리의 그래디언트가 (3, 1)이다. 1차 근사로 볼 때 손실이 가장 빨리 줄어드는 방향은?

  • [ ] (−1, 0). 큰 칸 하나만 줄인다 〔틀림: 큰 칸만 고치면 둘째 칸으로 줄일 수 있던 손실을 버린다.〕
  • [x] (−3, −1)의 방향 〔맞음: 가장 가파른 방향은 그래디언트 벡터 전체의 반대 방향이다. 칸들을 그래디언트의 비율대로 섞는다.〕
  • [ ] (−1, −1). 칸마다 부호만 보고 같은 폭으로 줄인다 〔틀림: 칸을 따로따로 다루면 방향이 바뀐다. 3과 1의 비율이 사라진다.〕

물음. 픽셀을 0~1 대신 0~255 정수 그대로 넣은 선형 회귀다. 안전한 학습률의 상한은 어떻게 되나?

  • [ ] 그대로다. 학습률은 입력의 눈금과 상관없다 〔틀림: 곡률에 입력이 들어 있어, 입력의 눈금이 곡률을 바꾼다.〕
  • [ ] 255배 작아진다 〔틀림: 곡률에는 입력이 두 번 곱해진다. 255배만 줄인 학습률은 아직 상한보다 훨씬 커서 터진다.〕
  • [x] 255의 제곱배, 약 6만 5천 배 작아진다 〔맞음: 손실을 가중치로 두 번 미분하면 입력이 두 번 곱해져 곡률이 255의 제곱배가 되고, 상한은 곡률에 반비례한다.〕

물음. 곡률이 가장 큰 방향과 가장 작은 방향의 비(조건수)가 1000인 그릇이다. 경사하강을 빠르게 하는 방법으로 맞는 것은?

  • [ ] 완만한 방향이 느리니 학습률을 키운다 〔틀림: 학습률은 가장 가파른 방향의 상한에 묶인다. 그보다 키우면 가파른 방향에서 터진다.〕
  • [ ] 가장 좋은 고정 학습률을 골라 조건수 문제를 없앤다 〔틀림: 가장 좋은 학습률을 골라도 앞의 숫자가 반이 될 뿐, 스텝 수는 여전히 조건수에 비례한다.〕
  • [x] 입력의 평균을 빼고 크기를 맞추는 전처리로 그릇을 둥글게 만든다 〔맞음: 전처리는 조건수를 줄이는 일이다. 평균이 0이 아니면 모든 가중치를 함께 키우는 방향이 가파르게 솟는다.〕

물음. 그래디언트 클리핑을 바르게 말한 것은?

  • [ ] 문턱은 낮을수록 안전하다 〔틀림: 문턱이 평소 그래디언트보다 낮으면 모든 스텝이 느려진다. 평소 크기보다 조금 위에 둔다.〕
  • [ ] 클리핑을 걸면 학습률의 상한보다 큰 학습률도 수렴한다 〔틀림: 손실의 바닥 근처에서는 그래디언트가 작아 클리핑이 꺼진다. 수렴은 여전히 학습률의 상한이 정한다.〕
  • [x] 그래디언트 벡터의 길이가 문턱을 넘은 스텝에서만, 방향은 두고 길이를 줄인다 〔맞음: 문턱을 넘은 스텝에서만 학습률을 잠깐 낮추는 것과 같다. 폭발을 가둘 뿐 수렴을 만들어 주지는 않는다.〕
  • [ ] 층마다 따로 잘라야 더 꼼꼼하다 〔틀림: 층마다 따로 자르면 그래디언트의 방향이 바뀐다. 전체 노름으로 길이만 줄인다.〕

막힌 곳

이 장의 계산은 모두 그래디언트를 정확히 안다고 놓았는데, 영수증 세 장이라면 그 가정이 맞다. 그러나 실제 학습은 데이터 수백만 개 가운데 미니배치 몇백 개로 그래디언트를 추정하고, 미니배치 그래디언트는 스텝마다 흔들린다. 흔들리는 그래디언트로 걸어도 바닥에 닿을까? 닿는다면 학습률은 이 장에서 찾은 2/L보다 더 작아야 할까, 아니면 바닥 근처에서는 오히려 줄여 가야 할까?

그리고 학습률 하나로는 κ를 이길 수 없었으니, 조건수가 스텝 수를 정한다는 결론도 마음에 걸린다. 지그재그로 오가는 길에서, 지난 스텝들이 어느 쪽으로 움직였는지를 기억해 두면 벽 사이를 오가는 움직임은 서로 지워지고 골짜기 바닥을 따라가는 움직임은 쌓이지 않을까? 그래디언트 말고 다른 무엇을 더 써야 길쭉한 골짜기를 조건수보다 빨리 내려갈 수 있을까?