85. 적응형 학습률 (Adaptive Learning Rate - Adagrad, RMSProp)
⚠️ 이 문서는 딥러닝 최적화 과정에서 수백만 개의 파라미터(가중치)들에게 모두 똑같은 '학습률(보폭)'을 일괄 적용하던 멍청한 방식에서 벗어나, 각 파라미터가 지금까지 걸어온 길(경사도)의 변화량을 분석하여, 많이 변한 놈은 보폭을 작게 줄이고 적게 변한 놈은 보폭을 큼직하게 키워주는 '변수별 맞춤형 자동 보폭 조절' 옵티마이저 기술을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 경사하강법(SGD)의 속도를 결정하는 절대적인 상수인 학습률(Learning Rate, $\eta$)을 고정값으로 두지 않고, 과거의 기울기 누적 데이터를 수학적으로 계산해 훈련 스텝이 진행될수록 각 가중치마다 학습률이 역동적으로(Adaptive) 변하게 만드는 알고리즘이다.
- 가치: NLP(자연어 처리)의 드문 단어처럼 아주 가끔 등장하는 희소한(Sparse) 데이터는 한 번 등장할 때 크게 학습(큰 보폭)시키고, 너무 자주 등장해 경사가 요동치는 흔한 데이터는 세밀하게 찔끔찔끔 학습(작은 보폭)시켜 균형 있고 빠른 최적화(수렴)를 이뤄낸다.
- 기술 체계: 과거의 모든 기울기 제곱을 냅다 더해서 보폭을 줄여버리는 Adagrad에서 출발하여, 학습이 진행될수록 보폭이 '0'으로 수렴해 멈춰버리는 치명적 단점을 보완하기 위해 과거 기억을 서서히 잊게 만드는(지수 이동 평균) RMSProp으로 진화했다.
Ⅰ. 고정 학습률의 한계: 모두에게 같은 구두를 신길 수는 없다
파라미터 수백만 개가 놓인 지형(경사)은 제각각 다르게 생겼다.
- 동일 보폭의 모순:
- 기존의 SGD(확률적 경사 하강법)나 Momentum(모멘텀)은 학습률($\eta=0.01$)을 정해주면, 수백만 개의 가중치 변수($w_1, w_2, ... , w_n$)가 모두 다 똑같이 $0.01$이라는 보폭을 기본값으로 곱해서 걸어간다.
- 희소 데이터 (Sparse Data) 학습의 실패:
- 텍스트 분석 시 '사과', '바나나' 같은 흔한 단어(변수)는 훈련 데이터에 수시로 등장해 경사가 수천 번 업데이트된다.
- 반면 '용과', '두리안' 같은 희귀한 단어는 훈련 내내 딱 한두 번 등장한다.
- 이 희귀한 단어는 딱 한 번 등장했을 때 확실하게 존재감을 팍! 줘야(큰 보폭으로 업데이트) 모델이 이 단어를 제대로 배우는데, 고정된 작은 보폭(0.01)으로 살짝 찔끔 걷고 넘어가 버리면 모델은 희귀 단어를 영원히 학습하지 못한 채 훈련이 끝나버린다.
📢 섹션 요약 비유: 운동장에서 100만 명의 학생(가중치)에게 체육복을 나눠주는데, 키 190cm인 학생이나 150cm인 학생이나 묻지도 따지지도 않고 무조건 XL 사이즈(고정 학습률 0.01) 하나만 지급하는 멍청한 행정과 같습니다. 큰 애는 옷이 맞고 작은 애는 옷이 질질 끌려서 달리기를 제대로 할 수 없는 참사가 벌어집니다.
Ⅱ. Adagrad: 많이 걸은 자는 조금 걷고, 안 걸은 자는 크게 걸어라
2011년에 등장한 첫 번째 돌파구. 맞춤형 보폭의 시대를 열었다.
- Adagrad (Adaptive Gradient)의 원리:
- 각 가중치마다 "지금까지 네가 기울기($g$)를 얼마나 크게 맞았는지(업데이트되었는지)"를 모두 제곱해서 더한 누적값($h$)을 장부에 기록한다.
- 새로운 발걸음을 뗄 때, 기존의 고정 학습률 $\eta$를 이 누적값의 루트($\sqrt{h}$)로 나누어버린다.
- $ \text{새로운 학습률} = \frac{\eta}{\sqrt{h} + \epsilon} $
- 놀라운 역진동 효과:
- '사과'처럼 자주 나와서 기울기 펀치를 엄청 많이 맞아 $h$값이 무진장 커진 변수는, 분모가 커지므로 자동으로 학습률(보폭)이 엄청나게 쪼그라든다(세밀한 하산).
- '용과'처럼 거의 안 나와서 $h$값이 0에 가까운 희소 변수는, 분모가 작으므로 초기의 큰 학습률 $\eta$를 거의 그대로 유지하여 발견되는 즉시 큼직하게 껑충 걸어버린다(빠른 학습).
📢 섹션 요약 비유: 이미 100km를 걸어서 다리가 튼튼해진 베테랑(자주 등장한 흔한 변수)에게는 모래주머니(작아진 학습률)를 채워 천천히 걷게 하고, 이제 막 10m를 걸어본 초보자(희소한 변수)에게는 뒤에서 등을 밀어주어 큼직하게 뛰게 만들어, 결국 베테랑과 초보자가 결승선(최적점)에 동시에 안정적으로 골인하게 만드는 환상의 밸런스 패치입니다.
Ⅲ. RMSProp: 과거를 잊어야 미래로 나아간다
Adagrad는 치명적인 수식적 결함을 가지고 있어서 곧바로 폐기 수순을 밟았다.
- Adagrad의 조기 퇴근 (Learning Rate Vanishing):
- Adagrad 장부($h$)에는 과거의 기울기 제곱값이 더해지기만(+) 할 뿐 절대 빼기가 없다.
- 훈련이 에폭(Epoch)을 거듭하며 중후반부로 넘어가면, 누적된 $h$값이 수만, 수십만으로 무한정 커져버린다.
- 결국 분모가 무한대에 가까워지면서 학습률 자체가 '0'이 되어버려, 아직 산 중턱인데 파라미터가 발걸음을 완전히 멈춰버리는 끔찍한 조기 종료(조기 마비) 현상이 터진다.
- RMSProp (Root Mean Square Propagation)의 구원:
- 딥러닝계의 거두 제프리 힌튼(Geoffrey Hinton)이 코세라(Coursera) 인강을 찍다가 "이렇게 하면 되지 않을까?"라고 무심코 던진 아이디어가 전 세계 표준이 된 전설의 옵티마이저다.
- 냅다 옛날 것부터 다 더하는(Adagrad) 대신, **지수 이동 평균(EMA)**이라는 마법을 써서 '최근의 기울기는 크게 반영하고, 먼 옛날의 기울기 기억은 서서히 잊어버리게(비율로 깎아버리게)' 수식을 고쳤다.
- 과거 기억이 계속 소멸하므로 분모($h$)가 무한대로 커지지 않아, 학습 후반부까지도 보폭이 0으로 죽지 않고 끝까지 쫄깃하게 살아서 골짜기 밑바닥(Global Minima)까지 끈질기게 파고들게 되었다.
📢 섹션 요약 비유: Adagrad는 사람이 태어날 때부터 먹은 모든 밥알(기울기)의 개수를 뱃속에 평생 누적(무한 덧셈)하는 배부른 거인이라, 나이(에폭)가 들면 너무 무거워서 아예 한 발짝도 걷지 못하고 굳어버립니다. RMSProp은 며칠 전 먹은 밥(과거 기울기)은 배설하고 잊어버려(지수 이동 평균), 몸무게를 항상 가볍고 탄력 있게 유지하여 평생 지치지 않고 달리는 날렵한 마라토너로 체질을 개선한 것입니다.