학습률 (Learning Rate)¶
난이도: 중급
선수 지식: 경사 하강법
관련 문서: 경사 하강법 변형 | 볼록성 | 하이퍼파라미터 최적화
개요¶
학습률(Learning Rate, \(\eta\))은 딥러닝에서 가장 중요한 하이퍼파라미터이다. 각 업데이트 단계에서 파라미터가 기울기 방향으로 얼마나 이동하는지를 결정한다.
\[\theta_{t+1} = \theta_t - \eta \cdot \nabla L(\theta_t)\]
- 너무 높음: 발산, 진동, 손실 폭발
- 너무 낮음: 느린 수렴, 지역 최소에 갇힘
- 적절함: 빠르게 좋은 해에 수렴
핵심 개념¶
1. 학습률의 중요성¶
| 학습률 | 현상 | 결과 |
|---|---|---|
| 매우 높음 | 발산, NaN | 학습 실패 |
| 높음 | 진동, 불안정 | 최소 근처에서 맴돎 |
| 적정 | 빠르고 안정적 수렴 | 좋은 해 |
| 낮음 | 느린 수렴 | 긴 학습 시간 |
| 매우 낮음 | 거의 움직이지 않음 | 사실상 학습 안됨 |
2. 학습률 스케줄 (Learning Rate Schedules)¶
학습 과정에서 학습률을 동적으로 조절하는 전략이다.
2.1 단계 감쇠 (Step Decay)¶
\[\eta_t = \eta_0 \cdot \gamma^{\lfloor t/k \rfloor}\]
- 매 \(k\) 에폭마다 \(\gamma\)배로 감소 (예: 30 에폭마다 절반)
- 단순하지만 단계 크기/시점의 수동 조정 필요
2.2 지수 감쇠 (Exponential Decay)¶
\[\eta_t = \eta_0 \cdot e^{-\lambda t}\]
- 매끄러운 연속 감소
2.3 코사인 어닐링 (Cosine Annealing)¶
\[\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})\left(1 + \cos\frac{t\pi}{T}\right)\]
- 코사인 곡선을 따라 매끄럽게 감소
- 현대 딥러닝의 표준 (특히 워밍업과 함께)
2.4 코사인 어닐링 + 웜 리스타트 (SGDR)¶
- 주기적으로 학습률을 높은 값으로 재설정한 후 코사인 감소
- 각 리스타트에서 지역 최소를 탈출할 수 있음
- 스냅샷 앙상블: 각 주기 끝의 모델을 앙상블
2.5 워밍업 (Warmup)¶
\[\eta_t = \eta_{\text{target}} \cdot \frac{t}{t_{\text{warmup}}} \quad (t \le t_{\text{warmup}})\]
- 매우 작은 학습률에서 시작하여 선형으로 증가
- 왜 필요한가: 초기에 가중치가 랜덤이므로 큰 학습률은 불안정 유발
- 필수적인 경우: Transformer, 대규모 배치 학습
2.6 선형 감쇠 (Linear Decay)¶
최대값에서 0 (또는 최소값)까지 선형 감소. NLP 파인튜닝에서 흔히 사용.
2.7 다항 감쇠 (Polynomial Decay)¶
\[\eta_t = (\eta_0 - \eta_{\min}) \cdot \left(1 - \frac{t}{T}\right)^p + \eta_{\min}\]
2.8 성과 기반 감소 (Reduce on Plateau)¶
- 검증 지표를 모니터링
- 지표가 정체(plateau)하면 학습률을 일정 비율로 감소
- 적응적: 별도의 스케줄 설계 불필요
patience파라미터: 기다리는 에폭 수
graph LR
subgraph "스케줄 비교"
A["Step Decay<br/>계단식 감소"]
B["Cosine<br/>매끄러운 곡선"]
C["Warmup + Cosine<br/>현대 표준"]
D["Reduce on Plateau<br/>적응적"]
end 3. 학습률 탐색기 (Learning Rate Finders)¶
LR Range Test (Smith, 2018)¶
- 1 에폭 동안 학습률을 매우 작은 값에서 매우 큰 값으로 지수적으로 증가
- 손실 vs 학습률 그래프 플롯
- 손실이 가장 가파르게 감소하는 지점의 학습률 선택 (발산 시작 전)
순환 학습률 (Cyclical Learning Rates, CLR)¶
최소/최대 학습률 사이를 주기적으로 진동:
| 정책 | 설명 |
|---|---|
| triangular | 삼각파 |
| triangular2 | 주기마다 최대값 절반 |
| exp_range | 지수적으로 최대값 감소 |
- 이점: 정밀한 LR 튜닝 불필요, 안장점(saddle point) 탈출에 도움
1cycle 정책 (Super-Convergence)¶
- 워밍업: 최소 --> 최대 학습률
- 어닐링: 최대 --> 거의 0
-
단 하나의 사이클
-
적은 에폭으로 더 나은 결과를 달성하는 경우가 많음 ("super-convergence")
4. 배치 크기와 학습률의 관계¶
| 배치 크기 변화 | 학습률 조정 | 이유 |
|---|---|---|
| \(k\)배 증가 | \(k\)배 또는 \(\sqrt{k}\)배 증가 | 기울기 분산 감소에 맞춤 |
| 감소 | 비례적 감소 | 기울기 노이즈 증가에 맞춤 |
선형 스케일링 규칙: \(\eta_{\text{new}} = k \cdot \eta_{\text{base}}\) (Goyal et al., 2017)
대규모 배치에서는 반드시 워밍업과 함께 적용해야 한다.
언제 사용하는가¶
| 상황 | 추천 전략 |
|---|---|
| Transformer 학습 | 워밍업 + 코사인 어닐링 |
| 이미지 분류 | SGD + 단계 감쇠 또는 코사인 어닐링 |
| NLP 파인튜닝 | 선형 감쇠 + 워밍업 |
| 빠른 실험 | Adam (기본 LR) + 성과 기반 감소 |
| 최적 LR 모를 때 | LR Range Test로 탐색 |
| 적은 에폭으로 빠른 수렴 | 1cycle 정책 |
흔한 오해와 함정¶
1. "학습률은 한 번 설정하면 된다"¶
- 대부분의 경우 학습률 스케줄링은 필수이다. 고정 학습률은 최적 성능을 달성하기 어렵다.
2. "워밍업은 선택사항이다"¶
- Transformer와 대규모 배치에서는 필수적이다. 워밍업 없이는 초기 불안정으로 학습이 실패할 수 있다.
3. "코사인 어닐링이 항상 최선이다"¶
- 대부분의 경우 좋은 선택이지만, 학습 에폭 수를 미리 알아야 한다. 미리 모르는 경우 성과 기반 감소가 더 유연하다.
4. "학습률이 높으면 항상 발산한다"¶
- 적응적 옵티마이저(Adam 등)는 파라미터별로 학습률을 조절하므로, 명목 학습률이 높아도 실효 학습률은 적절할 수 있다.
다른 주제와의 연결¶
- 경사 하강법 변형: 옵티마이저마다 적합한 학습률 범위가 다름
- 볼록성: 볼록 함수에서의 수렴 보장과 학습률 조건
- 하이퍼파라미터 최적화: 학습률을 포함한 HPO 전략
- 과적합과 과소적합: 학습률과 일반화의 관계
자주 묻는 면접 질문¶
- 학습률 워밍업이 필요한 이유는?
-
초기 가중치가 랜덤이므로 큰 학습률은 불안정을 유발. 워밍업으로 안정화 후 본격 학습.
-
배치 크기와 학습률의 관계는?
-
배치 크기 \(k\)배 시 학습률도 \(k\)배 (선형 스케일링). 기울기 분산 감소에 맞추기 위함.
-
학습률이 너무 높거나 낮으면 무슨 일이 일어나는가?
-
너무 높음: 발산, 진동. 너무 낮음: 느린 수렴, 지역 최소에 갇힘.
-
코사인 어닐링 vs 단계 감쇠: 각각 언제 선호하는가?
- 코사인: 더 매끄러운 감소, 현대 DL 표준. 단계: 단순하고 검증 가능한 시점에서 감소.
코드 예시¶
import torch.optim as optim
from 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-finder
from torch_lr_finder import LRFinder
lr_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"