← 문제 목록/AdamW (decoupled weight decay) [medium]
문제 해설

AdamW (decoupled weight decay) [medium]

최적화 · medium

preview

AdamW [medium]

v1 Adam + L2 regularization (w² · λ) 의 표준 접근은 gradient 에 λw\lambda w 를 더함:

gg+λw,그 후 Adam updateg \leftarrow g + \lambda w, \quad \text{그 후 Adam update}

문제: L2 페널티가 Adam 의 adaptive 스케일링 (1/v^1/\sqrt{\hat{v}}) 과 뒤엉킴 → 효과가 파라미터마다 들쭉날쭉. 특히 큰 g|g| 차원에서 L2 효과가 약함.

AdamW (Loshchilov & Hutter 2019): weight decay 를 gradient 에서 분리, 직접 ww 에 곱:

m_t &= \beta_1 m_{t-1} + (1-\beta_1) g_t \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2) g_t^2 \\ \hat m_t &= m_t / (1 - \beta_1^t), \quad \hat v_t = v_t / (1 - \beta_2^t) \\ w_t &= \underbrace{(1 - \eta \lambda) w_{t-1}}_{\text{decoupled decay}} - \eta \, \frac{\hat m_t}{\sqrt{\hat v_t} + \epsilon} \end{aligned}$$ 즉, **두 독립 항**: 1. Weight decay ($w$ 에 $(1 - \eta \lambda)$ 곱). 2. Adam 업데이트 (gradient 기반). ## 왜 더 좋은가 - 모든 파라미터에 **일관된 L2 효과**. - BERT, GPT, Vision Transformer 등 대규모 pretraining 에서 standard. - PyTorch `torch.optim.AdamW` 는 이 공식. ## L2 vs AdamW | | Adam + L2 | AdamW | |---|---|---| | decay 위치 | gradient 에 더함 | w 에 직접 곱 | | adaptive lr 와 결합 | 예 (원치 않는 coupling) | 아니오 (독립) | | 일반화 | 약함 (특히 작은 λ 일 때) | 강함 | ## 과제 함수 `adamw_step(w, g, m, v, t, lr, beta1, beta2, eps, weight_decay)` 를 완성하세요. - 입력: Adam 의 입력 + `weight_decay`. - 반환: `(w_new, m_new, v_new)`. ## 테스트 케이스 | # | 이름 | 검증 | |---|---|---| | 1 | weight_decay=0 → Adam 과 일치 | | | 2 | weight_decay>0 & g=0 → `w_new = (1 - η λ) w` | decay 단독 효과 | | 3 | m, v 상태 업데이트 공식 (Adam 과 동일) | | | 4 | AdamW ≠ Adam+L2 (gradient 에 decay 더한 것) | decoupling 검증 | | 5 | shape 유지 | | | 6 | large t 에서 bias correction → 1 | | | 7 | torch.optim.AdamW 와 일치 (있으면) | |
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.