Learning Rate Schedule — 학습률을 어떻게 조절할까
optimizer를 결정했다면, 다음으로 중요한 것이 learning rate schedule이다. 실제로 optimizer 선택보다 성능에 더 큰 영향을 주는 경우가 많다.
문제 설정
learning rate η는 업데이트 크기를 직접 결정한다. 실제 학습에서는 고정값 대신 warmup과 cosine decay 같은 schedule을 사용해 초기 안정성과 후반 수렴 품질을 함께 확보한다.
한 줄 요약
학습 초반에는 크게, 후반에는 작게. 이 원칙을 어떻게 구현할지가 learning rate schedule이다.
발전 흐름
Constant → Step decay → Exponential → Linear → Cosine → Warmup → Cosine+Warmup (현재 표준)
이 문서를 읽고 설명할 수 있어야 하는 핵심 3가지
- warmup이 왜 필요한지, 특히 Transformer에서 왜 중요한지
- cosine decay가 linear decay보다 후반 미세 조정에 유리한 이유
- optimizer의 adaptive lr과 lr schedule의 역할이 어떻게 다른지
처음 보는 사람용 핵심 용어
- Learning rate (η): 파라미터를 한 번에 얼마나 움직일지 결정하는 보폭.
- Warmup: 학습 초반에 lr을 0에서 천천히 올리는 전략. gradient 폭발 방지.
- Decay: 학습이 진행되면서 lr을 줄이는 것.
- Overshoot: lr이 너무 커서 최적점을 지나쳐버리는 현상.
- Epoch: 전체 데이터를 한 번 다 훑는 것. Step은 mini-batch 하나 처리하는 것.
1단. 왜 learning rate를 바꿔야 하나
기본 gradient descent 수식에서 η가 고정이면 문제가 생긴다.
w = w - η * ∇L
| 시점 | 상태 | 고정 lr의 문제 | 필요한 lr |
|---|---|---|---|
| 초반 | loss 크고, 최적점에서 멀다 | 너무 작으면 수렴이 느림 | 크게 |
| 후반 | loss 작고, 최적점 근처 | 너무 크면 overshoot 발생 | 작게 |
두 조건을 동시에 만족하는 고정 lr은 없다. → schedule 필요.
2단. Constant — 가장 단순 (거의 안 씀)
lr = 0.001 # 항상 동일
초반에 느리거나 후반에 overshoot. 현재 단독으로는 거의 사용하지 않는다.
3단. Step Decay — 초기 CNN의 표준
η = η₀ * γ**k # k: 감소 횟수, γ: 감소 비율 (예: 0.1)
# 예시
epoch 0~30 → lr = 0.1
epoch 30~60 → lr = 0.01
epoch 60~90 → lr = 0.001
단순하고 효과적이라 VGG, ResNet 등 초기 CNN 학습에서 오래 사용됐다. 계단식으로 lr이 떨어지는 것이 특징.
4단. Exponential / Linear Decay
# Exponential decay
η_t = η₀ * exp(-k * t) # 빠르게 감소, 점점 완만
# Linear decay (Transformer 이후 많이 씀)
η_t = η₀ * (1 - t / T) # T: 총 step 수. 끝에서 0이 됨
Linear decay는 구현이 쉽고 안정적이라 Transformer 초기 학습에서 많이 사용됐다.
5단. Cosine Decay — Vision과 LLM 모두 많이 쓰임
η_t = η_min + 0.5 * (η_max - η_min) * (1 + cos(π * t / T))
# t: 현재 step, T: 총 step, η_min: 최소 lr (보통 0)
처음에는 빠르게 감소하고, 후반에는 매우 천천히 감소한다. 이 덕분에 수렴 직전 미세 조정이 정밀하다.
- Linear decay: 후반에도 일정 속도로 감소 → 너무 거칠 수 있음
- Cosine decay: 후반 감소 속도가 거의 0에 가까움 → 정밀 수렴에 유리
6단. Warmup — Transformer의 핵심
초기 파라미터가 랜덤 상태일 때 큰 lr을 쓰면 gradient가 폭발한다. 처음 몇 step 동안 lr을 0에서 천천히 올린다.
if step < warmup_steps:
lr = peak_lr * (step / warmup_steps) # 0 → peak_lr 선형 증가
else:
lr = decay_schedule(step) # 이후 decay 시작
Attention Is All You Need (2017) 논문에서 처음 도입. Transformer schedule 수식:
lr = d_model**(-0.5) * min(step**(-0.5), step * warmup_steps**(-1.5))
# warmup 구간: step 증가 → lr 증가
# 이후 구간: step 증가 → lr 감소 (step^-0.5 에 의해 자동 감소)
7단. Cosine + Warmup — 현재 LLM 표준
warmup으로 안정적으로 시작하고, cosine으로 정밀하게 수렴한다. 현재 가장 널리 쓰이는 조합.
if step < warmup_steps:
lr = peak_lr * (step / warmup_steps) # 선형 warmup
else:
progress = (step - warmup_steps) / (total_steps - warmup_steps)
lr = eta_min + 0.5 * (peak_lr - eta_min) * (1 + cos(π * progress))
# cosine decay
GPT, LLaMA 등 대부분의 LLM 사전학습에서 이 조합을 사용한다.
8단. 기타 스케줄
| 스케줄 | 아이디어 | 사용처 |
|---|---|---|
| Reduce on Plateau | val loss 정체 시 lr 감소 (자동 조절) | 소규모 실험 |
| One Cycle Policy | lr 증가 → 감소 (/\ 형태) | Vision, FastAI |
| Cosine with Restarts (SGDR) | cosine decay 후 lr reset 반복 | local minimum 탈출 실험 |
핵심 수식 정리
| 스케줄 | 수식 |
|---|---|
| Step decay | η = η₀ · γᵏ |
| Exponential | η_t = η₀ · e^(−kt) |
| Linear | η_t = η₀(1 − t/T) |
| Cosine | η_t = η_min + ½(η_max − η_min)(1 + cos(πt/T)) |
| Transformer | lr = d^(−0.5) · min(step^(−0.5), step · warmup^(−1.5)) |
현업 사용 정리
| 분야 | 추천 스케줄 |
|---|---|
| Vision (CNN) | Cosine decay, Step decay |
| Transformer (소/중형) | Warmup + Linear decay |
| LLM 사전학습 | Warmup + Cosine decay |
Optimizer와 LR Schedule의 관계
Adam은 파라미터별로 adaptive lr을 적용하지만, 전체 lr의 절대 크기는 schedule로 따로 조절해야 한다.
- Optimizer: 각 파라미터의 상대적 lr 조절 (방향과 크기 보정)
- LR Schedule: 전체 학습률의 절대 크기 조절 (언제 크게/작게)
둘은 독립적으로 작동한다. AdamW를 써도 schedule 없이 고정 lr을 쓰면 성능이 크게 떨어지는 경우가 많다.
예상 질문 5개와 답변
- Q1. warmup이 왜 필요한가?
초기 파라미터가 랜덤이라 gradient가 불안정하다. 큰 lr로 시작하면 gradient 폭발 위험이 있어서 천천히 올린다. - Q2. cosine이 linear보다 좋은 이유는?
후반에 lr이 매우 천천히 줄어들어 수렴 직전 미세 조정이 정밀하다. linear는 후반에도 같은 속도로 감소해서 너무 거칠 수 있다. - Q3. Adam을 써도 lr schedule이 필요한가?
필요하다. Adam은 파라미터별 상대적 lr을 조절하지만, 전체 lr의 절대 크기는 schedule로 따로 조절해야 한다. - Q4. warmup steps를 얼마로 설정해야 하나?
일반적으로 전체 step의 1~10%. LLM에서는 보통 1~2%. 너무 짧으면 초반 불안정, 너무 길면 유효 학습 시간 낭비. - Q5. Reduce on Plateau가 LLM에 안 맞는 이유는?
LLM은 수백만 step이고, validation loss 측정이 비싸다. loss 정체 구간이 자연스럽게 생기는데 불필요한 lr 감소가 자주 발생한다.
다음에 스스로 해볼 실습 2가지
- cosine / linear / constant schedule을 같은 모델에 적용하고 validation loss curve를 한 그래프에 비교. 특히 후반 수렴 정밀도 차이를 확인
- warmup steps를 100 / 500 / 2000으로 바꾸면서 초반 training loss 안정성 차이를 시각화. gradient norm도 같이 찍어보기