Deep Learning study

학습률 스케줄러 심층 가이드: 수학적 원리부터 실전 적용까지 본문

AI/Deep learning 을 위한 지식

학습률 스케줄러 심층 가이드: 수학적 원리부터 실전 적용까지

illinaire 2025. 4. 18. 12:07
반응형
학습률 스케줄러 심층 가이드: 수학적 원리부터 실전 적용까지

학습률 스케줄러 심층 가이드: 수학적 원리부터 실전 적용까지

포스트 요약: 최적화 성능을 좌우하는 학습률 스케줄링의 수학적 기반을 상세히 살펴보고, 주요 스케줄러(스텝, 지수, 코사인, 원사이클, 지표 기반)의 작동 원리·수식·코드 예제·실험 팁을 종합 제공합니다.


1. 학습률의 역할과 수학적 배경

경사 하강법(Gradient Descent)의 매 스텝 업데이트는

\[ \theta_{t+1} = \theta_t - \eta_t \,\nabla_\theta \mathcal{L}(\theta_t) \]

여기서 \(\eta_t\)는 학습률(learning rate)으로, 너무 크면 발산, 너무 작으면 수렴 속도가 느려집니다. 스케줄러는 에폭(epoch)·스텝(step)·성능 지표에 따라 \(\eta_t\)를 동적으로 조정해 최적화 궤적을 최적화합니다.


2. 주요 스케줄러와 수학적 원리

2.1 StepLR

일정 간격 \(s\)마다 학습률을 \(\gamma\) 배로 줄입니다:

\[ \eta_t = \eta_0 \,\gamma^{\lfloor t / s \rfloor} \]

  • 장점: 구현 단순, 예측 가능한 감소
  • 단점: 계단식(step) 변화로 학습 불안정 가능
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)

2.2 ExponentialLR

매 스텝마다 지수적으로 감소합니다:

\[ \eta_t = \eta_0 \,\gamma^t \]

  • 장점: 부드러운 감소
  • 단점: 감소 속도 고정, 과도한 감소 우려
scheduler = ExponentialLR(optimizer, gamma=0.95)

2.3 CosineAnnealingLR

\(\eta\)를 코사인 곡선 형태로 스케줄링하여, 초기 탐색 후 점진적 안정화:

\[ \eta_t = \eta_{\min} + \tfrac{1}{2}(\eta_0 - \eta_{\min}) \Bigl(1 + \cos\!\tfrac{\pi\,t}{T_{\max}}\Bigr) \]

  • \(T_{\max}\): 하나의 사이클 길이
  • \(\eta_{\min}\): 최소 학습률
scheduler = CosineAnnealingLR(optimizer, T_max=50, eta_min=1e-6)

2.4 OneCycleLR

학습 초반 \(\eta\)를 증가 후 감소시키는 1-cycle 정책:

  • 증가 구간: \(\eta_0 \to \eta_{\max}\)
  • 감소 구간: \(\eta_{\max} \to \eta_{\min}\)
scheduler = OneCycleLR(
    optimizer,
    max_lr=0.01,
    epochs=10,
    steps_per_epoch=len(train_loader),
    pct_start=0.3,
    anneal_strategy='cos'
)

2.5 ReduceLROnPlateau

검증 지표(예: \(\text{val\_loss}\))가 개선되지 않으면 \(\eta\) 감소:

scheduler = ReduceLROnPlateau(
    optimizer,
    mode='min', factor=0.5,
    patience=5, min_lr=1e-6
)

3. 실험: 학습 곡선 비교

학습률 곡선과 손실 변화를 동시에 시각화하면 효과를 직관적으로 파악할 수 있습니다:

학습률 스케줄러 비교
학습률 스케줄러별 lr 변화 및 학습 손실 추이 예시 (출처: 자체 실험)
import matplotlib.pyplot as plt

# lr_histories: dict[str, list] - 각 스케줄러별 lr 리스트
# loss_histories: dict[str, list] - 학습 손실 리스트
for name in lr_histories:
    plt.plot(lr_histories[name], label=f'{name} lr')
    plt.plot(loss_histories[name], label=f'{name} loss')
plt.legend()
plt.show()

4. 설정 비교 표

스케줄러수식장점단점
StepLR \(\eta_0\gamma^{\lfloor t/s\rfloor}\) 단순·예측 가능 계단식 변화
ExponentialLR \(\eta_0\gamma^t\) 부드러운 감소 감속 고정
CosineAnnealingLR \(\tfrac{1}{2}(1+\cos(\pi t/T))\) 사이클 형태 사이클 길이 설정 필요
OneCycleLR 증가→감소 1-cycle 빠른 수렴, 일반화 파라미터 복잡
ReduceLROnPlateau 지표 기반 성능 개선 반영 노이즈 민감

5. 팁 & 추천 설정

  • StepLR: 초기 lr 클수록 큰 step_size 권장
  • Cosine: \(\eta_{\min}\)을 0에 가깝게 설정하면 수렴 후 fine-tuning 효과
  • OneCycle: pct_start=0.3~0.4, anneal_strategy='cos'
  • ReduceLROnPlateau: 지표 노이즈 완화를 위해 smoothing 적용

6. 결론 및 다음 단계

학습률 스케줄러는 딥러닝 성능 최적화의 핵심입니다. 모델·데이터 특성에 맞춰 적절한 스케줄러를 선택하고, 수식과 실험 결과를 기반으로 하이퍼파라미터를 튜닝하세요.

  1. 스케줄러 조합(예: Cosine + Warm Restarts) 실험
  2. 스케줄러와 옵티마이저(AdamW, Ranger) 상호작용 분석
  3. AutoLR 라이브러리(AutoML) 적용

참고 문헌

  1. PyTorch Documentation: Learning Rate Scheduler — https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
  2. Smith, L. N. (2017). Cyclical Learning Rates for Training Neural Networks. WACV.
  3. Loshchilov, I., & Hutter, F. (2016). SGDR: Stochastic Gradient Descent with Warm Restarts. ICLR.
반응형
Comments