콘텐츠로 이동

학습률 (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. 1 에폭 동안 학습률을 매우 작은 값에서 매우 큰 값으로 지수적으로 증가
  2. 손실 vs 학습률 그래프 플롯
  3. 손실이 가장 가파르게 감소하는 지점의 학습률 선택 (발산 시작 전)

순환 학습률 (Cyclical Learning Rates, CLR)

최소/최대 학습률 사이를 주기적으로 진동:

정책 설명
triangular 삼각파
triangular2 주기마다 최대값 절반
exp_range 지수적으로 최대값 감소
  • 이점: 정밀한 LR 튜닝 불필요, 안장점(saddle point) 탈출에 도움

1cycle 정책 (Super-Convergence)

  1. 워밍업: 최소 --> 최대 학습률
  2. 어닐링: 최대 --> 거의 0
  3. 단 하나의 사이클

  4. 적은 에폭으로 더 나은 결과를 달성하는 경우가 많음 ("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 등)는 파라미터별로 학습률을 조절하므로, 명목 학습률이 높아도 실효 학습률은 적절할 수 있다.

다른 주제와의 연결


자주 묻는 면접 질문

  1. 학습률 워밍업이 필요한 이유는?
  2. 초기 가중치가 랜덤이므로 큰 학습률은 불안정을 유발. 워밍업으로 안정화 후 본격 학습.

  3. 배치 크기와 학습률의 관계는?

  4. 배치 크기 \(k\)배 시 학습률도 \(k\)배 (선형 스케일링). 기울기 분산 감소에 맞추기 위함.

  5. 학습률이 너무 높거나 낮으면 무슨 일이 일어나는가?

  6. 너무 높음: 발산, 진동. 너무 낮음: 느린 수렴, 지역 최소에 갇힘.

  7. 코사인 어닐링 vs 단계 감쇠: 각각 언제 선호하는가?

  8. 코사인: 더 매끄러운 감소, 현대 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"