본문 바로가기
C.W.K.
Stream
Lesson 07 of 09 · published

옵티마이저: SGD에서 AdamW까지

~22 min · optimizer, adamw, momentum

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

옵티마이저는 기울기를 쓰는 방법이야

SGD의 기본 업데이트는 w := w - lr * grad야. 현대 옵티마이저는 여기에 과거 기울기의 이동 평균인 momentum, 과거 기울기 제곱의 이동 평균을 이용한 매개변수별 크기 조절, 가중치 감쇠를 더해. 이런 차이는 학습 속도와 일반화 성능을 바꾸고, Transformer와 CNN에 어떤 옵티마이저를 기본값으로 써야 하는지도 결정해.

  • 모멘텀 SGD — 고전적인 기준선이야. ImageNet 계열 데이터로 CNN을 처음부터 학습할 때 가장 좋은 경우가 많아. lr, momentum (0.9), 가중치 감쇠를 신중하게 조정해야 해.
  • Adam — 기울기의 이동 평균과 분산을 이용해 매개변수마다 학습률을 조절해. 학습은 빠르지만, 비전 과제에서는 SGD보다 일반화 성능이 떨어질 때도 있어.
  • AdamW — Adam에 분리형 가중치 감쇠를 적용한 옵티마이저야. 적응형 옵티마이저에서 가중치 감쇠를 올바르게 처리하는 방식이며, Transformer와 현대적인 학습의 기본값이야.
  • Lion — 부호 기반 옵티마이저야. Adam보다 메모리를 적게 쓰면서 일부 작업에서 비슷한 정확도를 보여.
  • Adafactor — 매개변수별 분산 상태를 저장하지 않아 메모리 효율이 높아. T5처럼 규모가 매우 큰 모델에 사용해.
팁: 2026년에 가장 무난한 선택은 Transformer에 lr=3e-4 (또는 배치 크기에 맞게 조정), weight_decay=0.01, betas=(0.9, 0.95)를 적용한 AdamW야. 여기서 시작하고, 분명한 이유가 있을 때만 다른 설정을 선택해.

분리형 가중치 감쇠가 중요한 이유

'가중치 감쇠'는 원래 손실에 L2 regularizer를 더하는 방식이야: L + 0.5 * λ * ||w||². SGD에서는 업데이트 전에 기울기에 λw를 반영하는 것과 수학적으로 같아. 하지만 Adam에서는 그렇지 않아. 적응형 학습률이 L2 항의 크기까지 조절하기 때문에 가중치 감쇠 효과가 약해져. AdamW는 둘을 분리해. 적응형 크기 조절과 별개인 단계에서 가중치로부터 직접 λw를 빼. 이 작은 수정은 대부분의 과제에서 측정할 수 있는 차이를 만들어.

원칙: 2018년 이전 코드에서 Adam과 가중치 감쇠를 함께 쓴 흔적을 보면 의심해 봐. 원 논문의 L2 규제를 사용했을 가능성이 높고, 이 방식은 Adam에서 제대로 작동하지 않아. 올바른 AdamW 방식인 분리형 가중치 감쇠가 아닐 수 있어.

Code

Transformer용 AdamW 권장 기본값·python
import torch
from torch import optim

optimizer = optim.AdamW(
    model.parameters(),
    lr=3e-4,
    betas=(0.9, 0.95),
    weight_decay=0.01,
)

def split_params(model):
    decay, no_decay = [], []
    for name, p in model.named_parameters():
        if not p.requires_grad: continue
        if p.ndim == 1 or name.endswith(".bias"):
            no_decay.append(p)
        else:
            decay.append(p)
    return [
        {"params": decay,    "weight_decay": 0.01},
        {"params": no_decay, "weight_decay": 0.0},
    ]

optimizer = optim.AdamW(split_params(model), lr=3e-4, betas=(0.9, 0.95))

External links

Exercise

같은 모델을 SGD+momentum, Adam, AdamW로 각각 학습해. 학습률 예산은 동일하게 맞추고, 학습 손실과 검증 손실을 그래프로 그려. 학습 지표에서는 어느 옵티마이저가 앞서고 검증 지표에서는 어느 옵티마이저가 앞서는지 확인해. 두 결과는 다를 수 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.