Skip to main content

옵티마이저

학습 목표

  • 경사 하강법(Gradient Descent)의 기본 원리를 이해한다
  • SGD, Momentum, Adam, AdamW의 동작 방식을 비교할 수 있다
  • 학습률(Learning Rate)의 역할과 적절한 설정 방법을 안다
  • 실무에서 옵티마이저를 선택하는 기준을 이해한다

왜 중요한가

옵티마이저는 역전파로 계산된 기울기를 사용하여 가중치를 업데이트하는 알고리즘입니다. 같은 모델이라도 옵티마이저의 선택에 따라 학습 속도, 수렴 안정성, 최종 성능이 크게 달라집니다.

SGD (Stochastic Gradient Descent)

가장 기본적인 옵티마이저입니다. 기울기의 반대 방향으로 학습률만큼 가중치를 업데이트합니다. wt+1=wtηwLw_{t+1} = w_t - \eta \cdot \nabla_w \mathcal{L}
  • wtw_t: 현재 가중치
  • η\eta: 학습률 (Learning Rate)
  • wL\nabla_w \mathcal{L}: 손실 함수의 가중치에 대한 기울기
import torch
import torch.nn as nn

model = nn.Linear(10, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 학습 스텝
x = torch.randn(32, 10)
target = torch.randn(32, 1)

output = model(x)
loss = nn.MSELoss()(output, target)

optimizer.zero_grad()   # 기울기 초기화
loss.backward()         # 기울기 계산
optimizer.step()        # 가중치 업데이트: w = w - lr * grad
한계: 모든 파라미터에 동일한 학습률을 적용하며, 기울기의 노이즈에 민감하여 진동하기 쉽습니다.

SGD + Momentum

물리학의 관성 개념을 도입합니다. 이전 기울기의 방향을 기억하여 일관된 방향으로의 업데이트를 가속합니다. vt=βvt1+wLv_t = \beta v_{t-1} + \nabla_w \mathcal{L} wt+1=wtηvtw_{t+1} = w_t - \eta \cdot v_t
  • vtv_t: 속도 (이전 기울기의 지수 이동 평균)
  • β\beta: 모멘텀 계수 (보통 0.9)
optimizer = torch.optim.SGD(
    model.parameters(),
    lr=0.01,
    momentum=0.9      # 모멘텀 계수
)
Momentum은 좁고 긴 계곡(ravine) 형태의 손실 표면에서 SGD보다 훨씬 빠르게 수렴합니다.

Adam (Adaptive Moment Estimation)

모멘텀과 적응적 학습률을 결합한 옵티마이저입니다. 파라미터별로 학습률을 자동 조정합니다. mt=β1mt1+(1β1)gt(1차 모멘트, 평균)m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \quad \text{(1차 모멘트, 평균)} vt=β2vt1+(1β2)gt2(2차 모멘트, 분산)v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \quad \text{(2차 모멘트, 분산)} m^t=mt1β1t,v^t=vt1β2t(편향 보정)\hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \quad \text{(편향 보정)} wt+1=wtηm^tv^t+ϵw_{t+1} = w_t - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
optimizer = torch.optim.Adam(
    model.parameters(),
    lr=0.001,          # 기본 학습률
    betas=(0.9, 0.999),  # (β₁, β₂)
    eps=1e-8           # 수치 안정성
)
장점: 학습률 설정에 덜 민감하고, 대부분의 문제에서 안정적으로 수렴합니다.

AdamW (Adam with Weight Decay)

Adam에서 가중치 감쇠(Weight Decay)를 올바르게 적용한 버전입니다. 일반 Adam의 L2 정규화와 Weight Decay는 적응적 학습률 하에서 동일하지 않다는 점을 수정합니다. wt+1=(1λ)wtηm^tv^t+ϵw_{t+1} = (1 - \lambda) w_t - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}
  • λ\lambda: 가중치 감쇠 계수
optimizer = torch.optim.AdamW(
    model.parameters(),
    lr=0.001,
    weight_decay=0.01   # 가중치 감쇠
)
Transformer 계열 모델(BERT, GPT 등)의 표준 옵티마이저입니다. Fine-Tuning에서도 AdamW가 기본으로 사용됩니다.

옵티마이저 비교

옵티마이저적응적 학습률모멘텀Weight Decay주 사용처
SGD별도 적용기본 이해용
SGD+Momentum별도 적용CNN 학습 (ResNet 등)
AdamL2와 혼동일반적 사용
AdamW✓ (분리)Transformer, Fine-Tuning

학습률 (Learning Rate)

학습률은 딥러닝에서 가장 중요한 하이퍼파라미터입니다.
  • 너무 크면: 손실이 발산하거나 진동하여 수렴하지 않음
  • 너무 작으면: 학습이 매우 느리고 지역 최솟값에 갇힐 수 있음
  • 적절하면: 안정적으로 수렴
# 학습률에 따른 학습 양상 비교
learning_rates = [0.1, 0.01, 0.001, 0.0001]

for lr in learning_rates:
    model = nn.Linear(10, 1)
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)

    # 간단한 학습 루프
    losses = []
    for step in range(100):
        x = torch.randn(32, 10)
        target = torch.randn(32, 1)
        loss = nn.MSELoss()(model(x), target)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        losses.append(loss.item())

    print(f"lr={lr}: 최종 손실 = {losses[-1]:.4f}")
Adam 계열의 기본 학습률은 0.001(1e-3)이 일반적입니다. Fine-Tuning에서는 2e-5 ~ 5e-5와 같이 더 작은 값을 사용합니다. 학습률 스케줄러를 함께 사용하면 학습 초반과 후반의 학습률을 자동으로 조정할 수 있습니다.

파라미터 그룹별 학습률

모델의 다른 부분에 다른 학습률을 적용할 수 있습니다. 전이학습에서 특히 유용합니다.
# 사전학습된 백본과 새로운 분류 헤드에 다른 학습률 적용
optimizer = torch.optim.AdamW([
    {'params': model.backbone.parameters(), 'lr': 1e-5},   # 백본: 낮은 학습률
    {'params': model.classifier.parameters(), 'lr': 1e-3}, # 분류 헤드: 높은 학습률
], weight_decay=0.01)
Adam은 빠르게 수렴하지만, SGD+Momentum이 최종 성능에서 더 좋은 경우가 있습니다. 특히 이미지 분류(ResNet 학습 등)에서 SGD+Momentum이 일반화 성능이 더 뛰어난 것으로 알려져 있습니다. 실무에서는 Adam으로 빠르게 실험하고, 최종 성능이 중요할 때 SGD로 전환하는 전략도 사용됩니다.
Adam에서 weight_decay 파라미터를 사용하면 L2 정규화가 적용되는데, 적응적 학습률과 결합되면 의도한 정규화 효과가 왜곡됩니다. AdamW는 가중치 감쇠를 기울기 업데이트와 분리하여 이 문제를 해결합니다. Transformer 학습에서는 항상 AdamW를 사용하세요.

체크리스트

  • SGD의 업데이트 공식 w=wηLw = w - \eta \nabla L을 이해한다
  • Momentum이 수렴을 어떻게 가속하는지 설명할 수 있다
  • Adam이 파라미터별로 학습률을 조정하는 원리를 이해한다
  • AdamW가 Transformer 학습의 표준인 이유를 설명할 수 있다

다음 문서