Weight Decay(가중치 감쇠)는 모델의 가중치()가 너무 커지지 않도록 인위적으로 제약을 가하는 규제(Regularization) 기법입니다.
모델이 학습 데이터의 미세한 노이즈까지 다 학습해버리면 가중치 값이 비정상적으로 커지는 경향이 있습니다. 가중치가 크다는 것은 특정 입력값에 모델이 매우 민감하게 반응한다는 뜻이고, 이는 결과적으로 새로운 데이터에 유연하게 대응하지 못하는 결과를 초래합니다.

Weight Decay는 기존의 손실 함수(Loss function)에 모든 가중치의 제곱합을 더하는 방식으로 구현됩니다. 이를 수학적으로 규제라고도 부릅니다.
weight_decay)이 손실 함수를 미분하여 가중치를 업데이트하면 다음과 같은 식이 도출됩니다.
위 식에서 부분을 주목해 주세요. 가중치를 업데이트하기 직전에, 원래 가지고 있던 가중치 값에서 일정 비율()만큼을 미리 깎아버립니다. 이것이 바로 감쇠(Decay)라고 불리는 이유입니다.
PyTorch를 사용할 때 많은 분이 놓치는 지점이 있습니다. 바로 옵티마이저에 따라 Weight Decay가 작동하는 방식이 다르다는 점입니다.
torch.optim.SGD에서 weight_decay를 설정하면, 우리가 배운 수학적 규제와 동일하게 작동합니다.
일반적인 Adam 옵티마이저에서는 가중치 감쇠가 그래디언트 계산 과정에 섞여 들어가면서, 규제 본연의 효과가 희석되는 문제가 발생했습니다. 이를 해결하기 위해 가중치 감쇠 로직을 업데이트 단계에서 완전히 분리해 낸 것이 바로 AdamW입니다.
Tip: 최신 생성 모델이나 트랜스포머(Transformer) 계열의 모델을 학습시킨다면, 일반 Adam보다는 AdamW를 사용하는 것이 업계의 표준(Best Practice)입니다.
# PyTorch에서의 AdamW 설정 예시
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)
Weight Decay 값()은 모델의 성격에 따라 다르지만, 일반적으로 다음 기준을 참고합니다.
| 현상 | 원인 | 해결책 |
|---|---|---|
| 과적합(Overfitting) | 규제가 너무 약함 (가 작음) | weight_decay 값을 높임 (예: 0.001 → 0.01) |
| 과소적합(Underfitting) | 규제가 너무 강함 (가 큼) | weight_decay 값을 낮춤 (예: 0.01 → 0.001) |
1e-2(0.01)에서 1e-4(0.0001) 사이를 먼저 시도해 보세요.