콘텐츠로 이동

학습률 (Learning Rate)

난이도: 중급
선수 지식: 경사 하강법
관련 문서: 경사 하강법 변형 | 볼록성 | 하이퍼파라미터 최적화

핵심 요약: 학습률(Learning Rate)은 한 걸음의 크기. 너무 크면 발산(Divergence), 너무 작으면 영원히 못 도착한다. 고정값이 아니라 학습 과정에서 동적으로 조절하는 스케줄링(Scheduling)이 핵심이며, 코사인 어닐링(Cosine Annealing) + 워밍업(Warmup)이 현대 딥러닝의 표준이다.


학습률(Learning Rate, η\eta)은 딥러닝에서 가장 중요한 하이퍼파라미터이다. 각 업데이트 단계에서 파라미터가 기울기 방향으로 얼마나 이동하는지를 결정한다.

θt+1=θtηL(θt)\theta_{t+1} = \theta_t - \eta \cdot \nabla L(\theta_t)

  • 너무 높음: 발산, 진동, 손실 폭발
  • 너무 낮음: 느린 수렴, 지역 최소에 갇힘
  • 적절함: 빠르게 좋은 해에 수렴

학습률 연구의 전환점은 Leslie Smith가 2015년에 발견한 LR Range Test에서 시작된다. Smith는 미 해군연구소(Naval Research Laboratory) 소속 연구원으로, 딥러닝 모델을 훈련할 때마다 학습률을 수동으로 시행착오(trial and error)하며 찾는 비효율에 문제의식을 느꼈다.

그의 아이디어는 단순하면서도 혁신적이었다: 1 에폭 동안 학습률을 매우 작은 값에서 매우 큰 값까지 지수적으로 증가시키면서 손실을 관찰하라. 손실이 가장 가파르게 감소하는 구간의 학습률이 최적 범위라는 것이다. 이 방법은 수십 번의 전체 학습을 단 1회의 짧은 실험으로 대체했다.

Smith는 여기서 멈추지 않고 순환 학습률(Cyclical Learning Rates, CLR)1cycle 정책을 제안했다. 특히 1cycle 정책은 “초수렴(Super-Convergence)” 현상을 발견하는 데 이르렀는데, 적절한 학습률 스케줄을 사용하면 일반적인 학습의 1/10 에폭만으로도 동등한 성능을 달성할 수 있다는 놀라운 결과였다.

비유: 학습률은 온도 조절기(thermostat)와 같다. 너무 높으면 시스템이 과열(발산)되어 제어 불능 상태가 되고, 너무 낮으면 시스템이 동결(극도로 느린 수렴)되어 원하는 온도에 영원히 도달하지 못한다. 적절한 학습률은 빠르면서도 안정적으로 목표 온도에 수렴하는 설정이다. 그리고 학습률 스케줄링은 계절에 따라 온도 설정을 자동으로 바꿔주는 프로그래밍 가능한 온도 조절기에 해당한다.


학습률현상결과
매우 높음발산, NaN학습 실패
높음진동, 불안정최소 근처에서 맴돎
적정빠르고 안정적 수렴좋은 해
낮음느린 수렴긴 학습 시간
매우 낮음거의 움직이지 않음사실상 학습 안됨

같은 모델에 세 가지 학습률을 적용했을 때 손실(Loss)이 어떻게 변하는지 비교해 보자.

에폭(Epoch)LR=10 (너무 큼)LR=0.01 (적정)LR=0.001 (너무 작음)
0100100100
15009599.9
2NaN (발산!)9099.8
5-7599.5
10-5099.0
50-5 (수렴)95.0
100-590.0 (아직 한참 남음)
  • LR=10: 손실이 100 -> 500 -> NaN. 파라미터(Parameter)가 최적점을 지나쳐 튕겨나감
  • LR=0.01: 안정적으로 감소하여 50 에폭(Epoch) 만에 수렴(Converge)
  • LR=0.001: 100 에폭이 지나도 손실이 90. 10배 더 느린 수렴

이것이 학습률 스케줄링(Scheduling)이 필요한 이유이다: 처음에는 큰 보폭으로 빠르게 이동하고, 최적점 근처에서 보폭을 줄여 정밀하게 수렴한다.


2. 학습률 스케줄 (Learning Rate Schedules)

섹션 제목: “2. 학습률 스케줄 (Learning Rate Schedules)”

학습 과정에서 학습률을 동적으로 조절하는 전략이다.

ηt=η0γt/k\eta_t = \eta_0 \cdot \gamma^{\lfloor t/k \rfloor}

  • kk 에폭마다 γ\gamma배로 감소 (예: 30 에폭마다 절반)
  • 단순하지만 단계 크기/시점의 수동 조정 필요

ηt=η0eλt\eta_t = \eta_0 \cdot e^{-\lambda t}

  • 매끄러운 연속 감소

2.3 코사인 어닐링 (Cosine Annealing)

섹션 제목: “2.3 코사인 어닐링 (Cosine Annealing)”

ηt=ηmin+12(ηmaxηmin)(1+costπT)\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})\left(1 + \cos\frac{t\pi}{T}\right)

  • 코사인 곡선을 따라 매끄럽게 감소
  • 현대 딥러닝의 표준 (특히 워밍업과 함께)

2.4 코사인 어닐링 + 웜 리스타트 (SGDR)

섹션 제목: “2.4 코사인 어닐링 + 웜 리스타트 (SGDR)”
  • 주기적으로 학습률을 높은 값으로 재설정한 후 코사인 감소
  • 각 리스타트에서 지역 최소를 탈출할 수 있음
  • 스냅샷 앙상블: 각 주기 끝의 모델을 앙상블

ηt=ηtargetttwarmup(ttwarmup)\eta_t = \eta_{\text{target}} \cdot \frac{t}{t_{\text{warmup}}} \quad (t \le t_{\text{warmup}})

  • 매우 작은 학습률에서 시작하여 선형으로 증가
  • 왜 필요한가: 초기에 가중치가 랜덤이므로 큰 학습률은 불안정 유발
  • 필수적인 경우: Transformer, 대규모 배치 학습

최대값에서 0 (또는 최소값)까지 선형 감소. NLP 파인튜닝에서 흔히 사용.

ηt=(η0ηmin)(1tT)p+ηmin\eta_t = (\eta_0 - \eta_{\min}) \cdot \left(1 - \frac{t}{T}\right)^p + \eta_{\min}

2.8 성과 기반 감소 (Reduce on Plateau)

섹션 제목: “2.8 성과 기반 감소 (Reduce on Plateau)”
  • 검증 지표를 모니터링
  • 지표가 정체(plateau)하면 학습률을 일정 비율로 감소
  • 적응적: 별도의 스케줄 설계 불필요
  • patience 파라미터: 기다리는 에폭 수

2.8 성과 기반 감소 (Reduce on Plateau) 다이어그램

3. 학습률 탐색기 (Learning Rate Finders)

섹션 제목: “3. 학습률 탐색기 (Learning Rate Finders)”
  1. 1 에폭 동안 학습률을 매우 작은 값에서 매우 큰 값으로 지수적으로 증가
  2. 손실 vs 학습률 그래프 플롯
  3. 손실이 가장 가파르게 감소하는 지점의 학습률 선택 (발산 시작 전)

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

섹션 제목: “순환 학습률 (Cyclical Learning Rates, CLR)”

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

정책설명
triangular삼각파
triangular2주기마다 최대값 절반
exp_range지수적으로 최대값 감소
  • 이점: 정밀한 LR 튜닝 불필요, 안장점(saddle point) 탈출에 도움
  1. 워밍업: 최소 —> 최대 학습률
  2. 어닐링: 최대 —> 거의 0
  3. 단 하나의 사이클
  • 적은 에폭으로 더 나은 결과를 달성하는 경우가 많음 (“super-convergence”)

배치 크기 변화학습률 조정이유
kk배 증가kk배 또는 k\sqrt{k}배 증가기울기 분산 감소에 맞춤
감소비례적 감소기울기 노이즈 증가에 맞춤

선형 스케일링 규칙: ηnew=kηbase\eta_{\text{new}} = k \cdot \eta_{\text{base}} (Goyal et al., 2017)

대규모 배치에서는 반드시 워밍업과 함께 적용해야 한다.


상황추천 전략
Transformer 학습워밍업 + 코사인 어닐링
이미지 분류SGD + 단계 감쇠 또는 코사인 어닐링
NLP 파인튜닝선형 감쇠 + 워밍업
빠른 실험Adam (기본 LR) + 성과 기반 감소
최적 LR 모를 때LR Range Test로 탐색
적은 에폭으로 빠른 수렴1cycle 정책

학습률 100배 오설정으로 NaN이 발생한 디버깅 사례

섹션 제목: “학습률 100배 오설정으로 NaN이 발생한 디버깅 사례”

한 머신러닝 팀이 새로운 이미지 분류 모델을 학습하던 중, 첫 번째 에폭에서 손실이 NaN으로 폭발하는 문제를 겪었다. 모델 구조, 데이터 전처리, 손실 함수 등을 모두 점검했지만 원인을 찾지 못했다.

디버깅 과정은 다음과 같았다:

  1. 증상: 학습 시작 후 수십 스텝 만에 손실이 infNaN으로 변화
  2. 1차 의심: 데이터에 이상치가 있는지 확인 → 이상 없음
  3. 2차 의심: 모델 가중치 초기화 문제 확인 → 정상 범위
  4. 원인 발견: 이전 프로젝트에서 사용하던 설정 파일을 복사하면서 학습률이 0.1에서 시작하도록 설정되어 있었음. 그러나 이전 프로젝트는 SGD를 사용했고, 현재 프로젝트는 Adam을 사용하고 있었음

핵심 문제: SGD에서 적절한 학습률 0.1은 Adam에서는 약 100배 높은 값이었다. Adam의 권장 학습률은 0.001(1e-3) 수준이며, 각 옵티마이저마다 적합한 학습률 범위가 근본적으로 다르다.

해결과 교훈:

  • 학습률을 0.001로 변경하자 정상적으로 학습이 진행됨
  • 옵티마이저를 변경할 때는 반드시 학습률도 재설정해야 한다
  • 학습 시작 전 LR Range Test를 수행하면 이런 문제를 사전에 방지할 수 있다
  • NaN 디버깅의 첫 번째 체크리스트: 학습률 → 데이터 → 수치 안정성(log/exp overflow) 순서

1. “학습률은 한 번 설정하면 된다”

섹션 제목: “1. “학습률은 한 번 설정하면 된다””
  • 대부분의 경우 학습률 스케줄링은 필수이다. 고정 학습률은 최적 성능을 달성하기 어렵다.
  • Transformer와 대규모 배치에서는 필수적이다. 워밍업 없이는 초기 불안정으로 학습이 실패할 수 있다.

3. “코사인 어닐링이 항상 최선이다”

섹션 제목: “3. “코사인 어닐링이 항상 최선이다””
  • 대부분의 경우 좋은 선택이지만, 학습 에폭 수를 미리 알아야 한다. 미리 모르는 경우 성과 기반 감소가 더 유연하다.

4. “학습률이 높으면 항상 발산한다”

섹션 제목: “4. “학습률이 높으면 항상 발산한다””
  • 적응적 옵티마이저(Adam 등)는 파라미터별로 학습률을 조절하므로, 명목 학습률이 높아도 실효 학습률은 적절할 수 있다.


  1. 학습률 워밍업이 필요한 이유는?

    • 초기 가중치가 랜덤이므로 큰 학습률은 불안정을 유발. 워밍업으로 안정화 후 본격 학습.
  2. 배치 크기와 학습률의 관계는?

    • 배치 크기 kk배 시 학습률도 kk배 (선형 스케일링). 기울기 분산 감소에 맞추기 위함.
  3. 학습률이 너무 높거나 낮으면 무슨 일이 일어나는가?

    • 너무 높음: 발산, 진동. 너무 낮음: 느린 수렴, 지역 최소에 갇힘.
  4. 코사인 어닐링 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”