학습률 (Learning Rate)
난이도: 중급
선수 지식: 경사 하강법
관련 문서: 경사 하강법 변형 | 볼록성 | 하이퍼파라미터 최적화
핵심 요약: 학습률(Learning Rate)은 한 걸음의 크기. 너무 크면 발산(Divergence), 너무 작으면 영원히 못 도착한다. 고정값이 아니라 학습 과정에서 동적으로 조절하는 스케줄링(Scheduling)이 핵심이며, 코사인 어닐링(Cosine Annealing) + 워밍업(Warmup)이 현대 딥러닝의 표준이다.
학습률(Learning Rate, )은 딥러닝에서 가장 중요한 하이퍼파라미터이다. 각 업데이트 단계에서 파라미터가 기울기 방향으로 얼마나 이동하는지를 결정한다.
- 너무 높음: 발산, 진동, 손실 폭발
- 너무 낮음: 느린 수렴, 지역 최소에 갇힘
- 적절함: 빠르게 좋은 해에 수렴
탄생 배경
섹션 제목: “탄생 배경”학습률 연구의 전환점은 Leslie Smith가 2015년에 발견한 LR Range Test에서 시작된다. Smith는 미 해군연구소(Naval Research Laboratory) 소속 연구원으로, 딥러닝 모델을 훈련할 때마다 학습률을 수동으로 시행착오(trial and error)하며 찾는 비효율에 문제의식을 느꼈다.
그의 아이디어는 단순하면서도 혁신적이었다: 1 에폭 동안 학습률을 매우 작은 값에서 매우 큰 값까지 지수적으로 증가시키면서 손실을 관찰하라. 손실이 가장 가파르게 감소하는 구간의 학습률이 최적 범위라는 것이다. 이 방법은 수십 번의 전체 학습을 단 1회의 짧은 실험으로 대체했다.
Smith는 여기서 멈추지 않고 순환 학습률(Cyclical Learning Rates, CLR)과 1cycle 정책을 제안했다. 특히 1cycle 정책은 “초수렴(Super-Convergence)” 현상을 발견하는 데 이르렀는데, 적절한 학습률 스케줄을 사용하면 일반적인 학습의 1/10 에폭만으로도 동등한 성능을 달성할 수 있다는 놀라운 결과였다.
비유: 학습률은 온도 조절기(thermostat)와 같다. 너무 높으면 시스템이 과열(발산)되어 제어 불능 상태가 되고, 너무 낮으면 시스템이 동결(극도로 느린 수렴)되어 원하는 온도에 영원히 도달하지 못한다. 적절한 학습률은 빠르면서도 안정적으로 목표 온도에 수렴하는 설정이다. 그리고 학습률 스케줄링은 계절에 따라 온도 설정을 자동으로 바꿔주는 프로그래밍 가능한 온도 조절기에 해당한다.
핵심 개념
섹션 제목: “핵심 개념”1. 학습률의 중요성
섹션 제목: “1. 학습률의 중요성”| 학습률 | 현상 | 결과 |
|---|---|---|
| 매우 높음 | 발산, NaN | 학습 실패 |
| 높음 | 진동, 불안정 | 최소 근처에서 맴돎 |
| 적정 | 빠르고 안정적 수렴 | 좋은 해 |
| 낮음 | 느린 수렴 | 긴 학습 시간 |
| 매우 낮음 | 거의 움직이지 않음 | 사실상 학습 안됨 |
숫자로 이해하기
섹션 제목: “숫자로 이해하기”같은 모델에 세 가지 학습률을 적용했을 때 손실(Loss)이 어떻게 변하는지 비교해 보자.
| 에폭(Epoch) | LR=10 (너무 큼) | LR=0.01 (적정) | LR=0.001 (너무 작음) |
|---|---|---|---|
| 0 | 100 | 100 | 100 |
| 1 | 500 | 95 | 99.9 |
| 2 | NaN (발산!) | 90 | 99.8 |
| 5 | - | 75 | 99.5 |
| 10 | - | 50 | 99.0 |
| 50 | - | 5 (수렴) | 95.0 |
| 100 | - | 5 | 90.0 (아직 한참 남음) |
- LR=10: 손실이 100 -> 500 -> NaN. 파라미터(Parameter)가 최적점을 지나쳐 튕겨나감
- LR=0.01: 안정적으로 감소하여 50 에폭(Epoch) 만에 수렴(Converge)
- LR=0.001: 100 에폭이 지나도 손실이 90. 10배 더 느린 수렴
이것이 학습률 스케줄링(Scheduling)이 필요한 이유이다: 처음에는 큰 보폭으로 빠르게 이동하고, 최적점 근처에서 보폭을 줄여 정밀하게 수렴한다.
2. 학습률 스케줄 (Learning Rate Schedules)
섹션 제목: “2. 학습률 스케줄 (Learning Rate Schedules)”학습 과정에서 학습률을 동적으로 조절하는 전략이다.
2.1 단계 감쇠 (Step Decay)
섹션 제목: “2.1 단계 감쇠 (Step Decay)”
- 매 에폭마다 배로 감소 (예: 30 에폭마다 절반)
- 단순하지만 단계 크기/시점의 수동 조정 필요
2.2 지수 감쇠 (Exponential Decay)
섹션 제목: “2.2 지수 감쇠 (Exponential Decay)”
- 매끄러운 연속 감소
2.3 코사인 어닐링 (Cosine Annealing)
섹션 제목: “2.3 코사인 어닐링 (Cosine Annealing)”
- 코사인 곡선을 따라 매끄럽게 감소
- 현대 딥러닝의 표준 (특히 워밍업과 함께)
2.4 코사인 어닐링 + 웜 리스타트 (SGDR)
섹션 제목: “2.4 코사인 어닐링 + 웜 리스타트 (SGDR)”- 주기적으로 학습률을 높은 값으로 재설정한 후 코사인 감소
- 각 리스타트에서 지역 최소를 탈출할 수 있음
- 스냅샷 앙상블: 각 주기 끝의 모델을 앙상블
2.5 워밍업 (Warmup)
섹션 제목: “2.5 워밍업 (Warmup)”
- 매우 작은 학습률에서 시작하여 선형으로 증가
- 왜 필요한가: 초기에 가중치가 랜덤이므로 큰 학습률은 불안정 유발
- 필수적인 경우: Transformer, 대규모 배치 학습
2.6 선형 감쇠 (Linear Decay)
섹션 제목: “2.6 선형 감쇠 (Linear Decay)”최대값에서 0 (또는 최소값)까지 선형 감소. NLP 파인튜닝에서 흔히 사용.
2.7 다항 감쇠 (Polynomial Decay)
섹션 제목: “2.7 다항 감쇠 (Polynomial Decay)”
2.8 성과 기반 감소 (Reduce on Plateau)
섹션 제목: “2.8 성과 기반 감소 (Reduce on Plateau)”- 검증 지표를 모니터링
- 지표가 정체(plateau)하면 학습률을 일정 비율로 감소
- 적응적: 별도의 스케줄 설계 불필요
patience파라미터: 기다리는 에폭 수
3. 학습률 탐색기 (Learning Rate Finders)
섹션 제목: “3. 학습률 탐색기 (Learning Rate Finders)”LR Range Test (Smith, 2018)
섹션 제목: “LR Range Test (Smith, 2018)”- 1 에폭 동안 학습률을 매우 작은 값에서 매우 큰 값으로 지수적으로 증가
- 손실 vs 학습률 그래프 플롯
- 손실이 가장 가파르게 감소하는 지점의 학습률 선택 (발산 시작 전)
순환 학습률 (Cyclical Learning Rates, CLR)
섹션 제목: “순환 학습률 (Cyclical Learning Rates, CLR)”최소/최대 학습률 사이를 주기적으로 진동:
| 정책 | 설명 |
|---|---|
| triangular | 삼각파 |
| triangular2 | 주기마다 최대값 절반 |
| exp_range | 지수적으로 최대값 감소 |
- 이점: 정밀한 LR 튜닝 불필요, 안장점(saddle point) 탈출에 도움
1cycle 정책 (Super-Convergence)
섹션 제목: “1cycle 정책 (Super-Convergence)”- 워밍업: 최소 —> 최대 학습률
- 어닐링: 최대 —> 거의 0
- 단 하나의 사이클
- 적은 에폭으로 더 나은 결과를 달성하는 경우가 많음 (“super-convergence”)
4. 배치 크기와 학습률의 관계
섹션 제목: “4. 배치 크기와 학습률의 관계”| 배치 크기 변화 | 학습률 조정 | 이유 |
|---|---|---|
| 배 증가 | 배 또는 배 증가 | 기울기 분산 감소에 맞춤 |
| 감소 | 비례적 감소 | 기울기 노이즈 증가에 맞춤 |
선형 스케일링 규칙: (Goyal et al., 2017)
대규모 배치에서는 반드시 워밍업과 함께 적용해야 한다.
언제 사용하는가
섹션 제목: “언제 사용하는가”| 상황 | 추천 전략 |
|---|---|
| Transformer 학습 | 워밍업 + 코사인 어닐링 |
| 이미지 분류 | SGD + 단계 감쇠 또는 코사인 어닐링 |
| NLP 파인튜닝 | 선형 감쇠 + 워밍업 |
| 빠른 실험 | Adam (기본 LR) + 성과 기반 감소 |
| 최적 LR 모를 때 | LR Range Test로 탐색 |
| 적은 에폭으로 빠른 수렴 | 1cycle 정책 |
실전 사례
섹션 제목: “실전 사례”학습률 100배 오설정으로 NaN이 발생한 디버깅 사례
섹션 제목: “학습률 100배 오설정으로 NaN이 발생한 디버깅 사례”한 머신러닝 팀이 새로운 이미지 분류 모델을 학습하던 중, 첫 번째 에폭에서 손실이 NaN으로 폭발하는 문제를 겪었다. 모델 구조, 데이터 전처리, 손실 함수 등을 모두 점검했지만 원인을 찾지 못했다.
디버깅 과정은 다음과 같았다:
- 증상: 학습 시작 후 수십 스텝 만에 손실이
inf→NaN으로 변화 - 1차 의심: 데이터에 이상치가 있는지 확인 → 이상 없음
- 2차 의심: 모델 가중치 초기화 문제 확인 → 정상 범위
- 원인 발견: 이전 프로젝트에서 사용하던 설정 파일을 복사하면서 학습률이 0.1에서 시작하도록 설정되어 있었음. 그러나 이전 프로젝트는 SGD를 사용했고, 현재 프로젝트는 Adam을 사용하고 있었음
핵심 문제: SGD에서 적절한 학습률 0.1은 Adam에서는 약 100배 높은 값이었다. Adam의 권장 학습률은 0.001(1e-3) 수준이며, 각 옵티마이저마다 적합한 학습률 범위가 근본적으로 다르다.
해결과 교훈:
- 학습률을 0.001로 변경하자 정상적으로 학습이 진행됨
- 옵티마이저를 변경할 때는 반드시 학습률도 재설정해야 한다
- 학습 시작 전 LR Range Test를 수행하면 이런 문제를 사전에 방지할 수 있다
- NaN 디버깅의 첫 번째 체크리스트: 학습률 → 데이터 → 수치 안정성(log/exp overflow) 순서
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”1. “학습률은 한 번 설정하면 된다”
섹션 제목: “1. “학습률은 한 번 설정하면 된다””- 대부분의 경우 학습률 스케줄링은 필수이다. 고정 학습률은 최적 성능을 달성하기 어렵다.
2. “워밍업은 선택사항이다”
섹션 제목: “2. “워밍업은 선택사항이다””- Transformer와 대규모 배치에서는 필수적이다. 워밍업 없이는 초기 불안정으로 학습이 실패할 수 있다.
3. “코사인 어닐링이 항상 최선이다”
섹션 제목: “3. “코사인 어닐링이 항상 최선이다””- 대부분의 경우 좋은 선택이지만, 학습 에폭 수를 미리 알아야 한다. 미리 모르는 경우 성과 기반 감소가 더 유연하다.
4. “학습률이 높으면 항상 발산한다”
섹션 제목: “4. “학습률이 높으면 항상 발산한다””- 적응적 옵티마이저(Adam 등)는 파라미터별로 학습률을 조절하므로, 명목 학습률이 높아도 실효 학습률은 적절할 수 있다.
다른 주제와의 연결
섹션 제목: “다른 주제와의 연결”- 경사 하강법 변형: 옵티마이저마다 적합한 학습률 범위가 다름
- 볼록성: 볼록 함수에서의 수렴 보장과 학습률 조건
- 하이퍼파라미터 최적화: 학습률을 포함한 HPO 전략
- 과적합과 과소적합: 학습률과 일반화의 관계
자주 묻는 면접 질문
섹션 제목: “자주 묻는 면접 질문”-
학습률 워밍업이 필요한 이유는?
- 초기 가중치가 랜덤이므로 큰 학습률은 불안정을 유발. 워밍업으로 안정화 후 본격 학습.
-
배치 크기와 학습률의 관계는?
- 배치 크기 배 시 학습률도 배 (선형 스케일링). 기울기 분산 감소에 맞추기 위함.
-
학습률이 너무 높거나 낮으면 무슨 일이 일어나는가?
- 너무 높음: 발산, 진동. 너무 낮음: 느린 수렴, 지역 최소에 갇힘.
-
코사인 어닐링 vs 단계 감쇠: 각각 언제 선호하는가?
- 코사인: 더 매끄러운 감소, 현대 DL 표준. 단계: 단순하고 검증 가능한 시점에서 감소.
코드 예시
섹션 제목: “코드 예시”import torch.optim as optimfrom torch.optim.lr_scheduler import ( StepLR, ExponentialLR, CosineAnnealingLR, CosineAnnealingWarmRestarts, ReduceLROnPlateau, OneCycleLR)
optimizer = optim.AdamW(model.parameters(), lr=1e-3)
# 단계 감쇠scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
# 지수 감쇠scheduler = ExponentialLR(optimizer, gamma=0.95)
# 코사인 어닐링scheduler = CosineAnnealingLR(optimizer, T_max=100, eta_min=1e-6)
# 코사인 + 웜 리스타트scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=10, T_mult=2)
# 성과 기반 감소scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10)
# 1cycle 정책scheduler = OneCycleLR(optimizer, max_lr=0.01, total_steps=num_epochs * len(train_loader))
# 워밍업 + 코사인 (수동 구현)def get_lr(step, warmup_steps, total_steps, max_lr, min_lr=0): if step < warmup_steps: return max_lr * step / warmup_steps progress = (step - warmup_steps) / (total_steps - warmup_steps) return min_lr + 0.5 * (max_lr - min_lr) * (1 + math.cos(math.pi * progress))
# LR Range Test (torch-lr-finder)# pip install torch-lr-finderfrom torch_lr_finder import LRFinderlr_finder = LRFinder(model, optimizer, criterion)lr_finder.range_test(train_loader, end_lr=10, num_iter=100)lr_finder.plot() # 최적 LR 시각적 확인용어 정리
섹션 제목: “용어 정리”| 영어 | 한국어 |
|---|---|
| Learning Rate | 학습률 |
| Learning Rate Schedule | 학습률 스케줄 |
| Warmup | 워밍업 (예열) |
| Cosine Annealing | 코사인 어닐링 |
| Step Decay | 단계 감쇠 |
| Reduce on Plateau | 성과 기반 감소 |
| Cyclical Learning Rate | 순환 학습률 |
| Super-Convergence | 초수렴 |
| Linear Scaling Rule | 선형 스케일링 규칙 |
참고 자료
섹션 제목: “참고 자료”- Smith (2017) - “Cyclical Learning Rates for Training Neural Networks”
- Smith & Topin (2018) - “Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates”
- Loshchilov & Hutter (2017) - “SGDR: Stochastic Gradient Descent with Warm Restarts”
- Goyal et al. (2017) - “Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour”