Optimizer 는 gradient 사용 recipe
SGD 는 w := w - lr * grad. Modern optimizer 가 momentum (과거 gradient 의 running average), parameter 당 scaling (과거 squared gradient 의 running average), weight decay 추가. 차이가 어떤 optimizer 가 더 빨리 train 하고, 더 잘 generalize 하고, transformer vs CNN 에 올바른 default 인지 만들어.
- SGD with momentum — classic baseline. ImageNet-style data 에 from scratch CNN 에 자주 best. lr, momentum (0.9), weight decay 신중히 tune.
- Adam — gradient 의 running mean/variance 통한 adaptive parameter 당 learning rate. 빠르게 train, vision 에서 가끔 SGD 보다 generalize 못함.
- AdamW — decoupled weight decay (adaptive optimizer 에서 weight decay 의 올바른 방법) 의 Adam. Transformer 와 modern training 의 default.
- Lion — sign-based optimizer, Adam 보다 memory 적게, 일부 workload 에서 비슷한 accuracy.
- Adafactor — memory-efficient (parameter 당 variance state 없음), 매우 큰 scale (T5 등) 에 사용.
팁: 2026 년에 지루한 선택은 transformer 에 lr=3e-4 (또는 batch size 에 scaled), weight_decay=0.01, betas=(0.9, 0.95) 의 AdamW. 거기서 시작해서 이유 있을 때만 deviate.
왜 decoupled weight decay 가 중요한가
'Weight decay' 는 원래 loss 에 추가된 L2 regularizer: L + 0.5 * λ * ||w||². SGD 에서 이건 stepping 전 gradient 에서 λw 빼는 것과 mathematically identical. Adam 에서는 안 그래 — adaptive learning rate 가 L2 term 을 덜 효과적으로 만드는 방식으로 scale. AdamW 가 decouple 함: adaptive scaling 과 별도 step 동안 직접 λw 빼. 이 작은 fix 가 대부분 task 에서 측정 가능한 차이 만듦.
원칙: 2018 년 전 코드에서 Adam 이 weight decay 와 함께 쓰인 거 보면, original paper 가 L2 regularization (Adam 과 깨짐) 을 썼지 decoupled weight decay (올바른 AdamW form) 안 썼을 거라고 의심해.