Optimizers (최적화 알고리즘)

Created: 2025-12-29

손실 함수를 최소화하기 위해 모델 파라미터를 어떻게 업데이트할지 결정한다.


Gradient Descent

기본 원리: 손실 함수의 gradient 반대 방향으로 이동.

W_new = W_old - lr × ∂L/∂W

Mini-Batch (가장 일반적)

for X_batch, y_batch in dataloader:
    loss = loss_fn(model(X_batch), y_batch)
    loss.backward()
    optimizer.step()
  • 일반적 배치 크기: 32, 64, 128, 256

SGD with Momentum

이전 gradient의 방향을 기억. 진동 감소, 빠른 수렴.

optimizer = torch.optim.SGD(
    model.parameters(),
    lr=0.01,
    momentum=0.9
)

Adam (Adaptive Moment Estimation)

1차 모멘트(평균) + **2차 모멘트(분산)**으로 적응적 학습률.

optimizer = torch.optim.Adam(
    model.parameters(),
    lr=0.001,  # 기본값도 잘 작동
    betas=(0.9, 0.999)
)

장점:

  • 적응적 학습률 (파라미터마다 다름)
  • 하이퍼파라미터 튜닝 거의 불필요
  • 빠른 수렴

AdamW (권장)

Adam + 개선된 Weight Decay. 2025년 가장 권장.

optimizer = torch.optim.AdamW(
    model.parameters(),
    lr=1e-3,
    weight_decay=0.01
)

비교

Optimizer속도안정성일반화튜닝추천 용도
SGD느림낮음높음많이최종 성능 극대화
SGD+Momentum중간중간높음필요컴퓨터 비전
Adam빠름높음중간거의 불필요프로토타입, NLP
AdamW빠름높음높음거의 불필요대부분

실전 가이드

# 1. 시작 (빠른 실험)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
 
# 2. 성능 최적화
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=epochs)
 
# 3. 최종 미세 조정 (일반화)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

Connections

deeplearning ai