Deep Learning study
학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드 본문
반응형
학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드
포스트 요약: 주요 PyTorch 학습률 스케줄러인 StepLR, ExponentialLR, CosineAnnealingLR, OneCycleLR, ReduceLROnPlateau의 동작 원리와 설정 방법을 상세히 설명하고, 장단점을 비교합니다.
1. 서론
학습률(Learning Rate, lr)은 딥러닝 모델 학습의 핵심 하이퍼파라미터로, 너무 크면 발산하고 너무 작으면 수렴이 늦어집니다. 학습률 스케줄러는 에폭(epoch)이나 성능 지표에 따라 lr을 자동으로 조정하여 안정적이고 빠른 수렴을 돕습니다.[1]
- 주요 목적: 최적화 과정의 초기 빠른 탐색과 후반 세밀한 조정
- PyTorch 내장 클래스:
torch.optim.lr_scheduler
2. 스케줄러 종류 및 원리
2.1 StepLR
일정 에폭마다 lr을 γ배 감소시킵니다.
scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
- step_size: 감소 주기 (에폭 단위)
- gamma: 감소 계수 (예: 0.1 → 10%로 줄임)
2.2 ExponentialLR
매 에폭마다 지수적으로 lr을 감소시킵니다.
scheduler = ExponentialLR(optimizer, gamma=0.95)
- gamma: 매 단계마다 곱해질 계수
- 연속적이고 부드러운 감소
2.3 CosineAnnealingLR
Cosine 함수 형태로 lr을 감소시켜, warm restart 없이 부드러운 스케줄을 만듭니다.
scheduler = CosineAnnealingLR(optimizer, T_max=50, eta_min=1e-6)
- T_max: 주기(period) (에폭 수)
- eta_min: 최저 lr
2.4 OneCycleLR
학습 초반 lr을 증가시켰다가, 후반부에 급격히 감소시키는 정책입니다.
scheduler = OneCycleLR(optimizer,
max_lr=0.01,
total_steps=None,
epochs=10,
steps_per_epoch=len(train_loader))
- max_lr: 최대 lr
- epochs & steps_per_epoch: 학습 총 스텝 수 계산
2.5 ReduceLROnPlateau
검증 지표(예: val_loss)가 개선되지 않을 때 lr을 감소시킵니다.
scheduler = ReduceLROnPlateau(optimizer,
mode='min',
factor=0.5,
patience=5,
min_lr=1e-6)
- mode: 'min' 혹은 'max'
- factor: 감소 비율
- patience: 개선 없을 때 대기 에폭 수
3. 사용 예제
import torch, torch.nn as nn, torch.optim as optim
from torch.optim.lr_scheduler import StepLR, OneCycleLR
model = nn.Linear(100, 10).cuda()
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
# StepLR
scheduler_step = StepLR(optimizer, step_size=30, gamma=0.1)
# OneCycleLR
scheduler_one = OneCycleLR(optimizer,
max_lr=0.2,
epochs=100,
steps_per_epoch=200)
for epoch in range(1, 101):
for batch in train_loader:
optimizer.zero_grad()
loss = ... # 모델 학습
loss.backward()
optimizer.step()
scheduler_one.step() # 배치 단위로 호출
scheduler_step.step() # 에폭 단위로 호출
val_loss = ... # 검증 손실 계산
print(f\"Epoch {epoch}, LR: {optimizer.param_groups[0]['lr']:.6f}\")
4. 스케줄러 비교 표
| 스케줄러 | 조정 방식 | 주요 파라미터 | 장점 | 단점 |
|---|---|---|---|---|
| StepLR | 에폭마다 계단식 감소 | step_size, gamma | 단순하고 예측 가능 | 부드럽지 않음 |
| ExponentialLR | 지수적 감소 | gamma | 부드러운 감소 | 감소 속도 고정 |
| CosineAnnealingLR | 코사인 함수 기반 | T_max, eta_min | 초기 탐색+후기 세밀 조정 | 주기 설정 필요 |
| OneCycleLR | 초반 증가 후 감소 | max_lr, epochs, steps_per_epoch | 빠른 수렴, 일반화 개선 | 설정 복잡 |
| ReduceLROnPlateau | 지표 정체 시 감소 | factor, patience, min_lr | 모델 성능 기준 조정 | 지표 노이즈 민감 |
5. 팁 & 권장 설정
- OneCycleLR는 데이터셋 크기와 배치 수에 맞춰 total_steps를 정확히 설정하세요.
- ReduceLROnPlateau 사용 시 검증 지표 변동성을 줄이기 위해 smoothing 기법을 적용할 수 있습니다.
- CosineAnnealingLR와 Warm Restarts(CosineAnnealingWarmRestarts) 조합으로 반복 학습 시 효과적입니다.[2]
결론 및 다음 단계
학습률 스케줄러는 모델 성능과 학습 안정성에 큰 영향을 미칩니다. 데이터 특성과 학습 규모에 맞춰 적절한 스케줄러를 선택하고, 하이퍼파라미터를 튜닝하여 최적화하세요.
- 여러 스케줄러 조합 실험 (Warm Restarts 등)
- 스케줄러와 옵티마이저(AdamW, Ranger 등) 상호작용 탐색
- AutoML 도구를 통한 자동 스케줄러 선택
참고 문헌
- PyTorch Documentation: Learning Rate Scheduler — https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
- Leslie N. Smith. “Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates.” arXiv:1708.07120.
반응형
'AI > Pytorch' 카테고리의 다른 글
| 배치 정규화(Batch Normalization)의 비밀: 원리, 구현, 활용 (0) | 2025.04.17 |
|---|---|
| 과적합 vs 과소적합: 원인, 진단, 해결법 완전 정복 (0) | 2025.04.17 |
| 전이 학습(Transfer Learning) 실전 가이드 (0) | 2025.04.17 |
| PyTorch Autograd 심층 탐구 (0) | 2025.04.17 |
| PyTorch Autograd 심층 탐구: 연산 그래프부터 커스텀 백워드까지 (0) | 2025.04.17 |
Comments