가중치 감쇠를 한 문장으로
가중치 감쇠는 매 단계마다 매개변수를 0 쪽으로 조금씩 밀어 어떤 가중치도 지나치게 커지지 않도록 막는 부드러운 암묵적 정규화 기법이야. AdamW에서는 분리된 별도 단계로 처리해서 매개변수에서 직접 λw를 빼. SGD에서는 손실에 L2 페널티를 추가하는 것과 수학적으로 같아.
기본값은 Transformer에서 weight_decay=0.01, 처음부터 학습하는 비전 CNN에서 weight_decay=1e-4로 시작해. 값은 10 배 단위로 조정해 봐. 편향과 LayerNorm 매개변수는 제외하고 가중치 행렬에만 적용해.
팁: Transformer 학습 설정의 weight_decay=0.01을 그대로 복사해 작은 MLP에 적용하면 학습은 잘되는 것처럼 보여도 일반화 성능은 더 나빠질 수 있어. 다른 분야의 기본값을 맹목적으로 따르지 말고, 본인 과제에 맞게 조정해.
조기 종료를 제대로 쓰는 법
에폭마다 검증 손실을 추적해. 검증 손실이 새로운 최저치를 기록할 때마다 모델을 저장하고, patience에폭 동안 개선되지 않으면 학습을 멈춰. 배포할 모델은 마지막 모델이 아니라 저장해 둔 최적 체크포인트야.
흔히 짧은 학습에는 patience=10, 긴 학습에는 patience=50을 사용해. 잡음 때문에 생긴 0.0001 정도의 개선이 patience 카운터를 초기화하지 않도록 min_delta도 추가해.
함께 쓸 때
가중치 감쇠와 조기 종료는 실전에서 거의 같은 역할을 하는 정규화 기법이야. 둘 다 모델이 잡음을 외우지 못하게 막아. 두 방법을 모두 쓰되, 효과가 선형적으로 합쳐질 거라고 기대하지는 마. 강한 데이터 증강을 사용한다면 둘 다 덜 필요할 수 있어.
원칙: 검증 성능이 가장 좋았던 체크포인트는 항상 저장해. 실제로 쓰지 않을 것 같아도 조기 종료는 언제나 설정해 둬. 비용은 코드 두 줄이지만, 잊었을 때 치르는 대가는 이미 학습한 모델보다 더 나쁜 모델을 배포하는 일이야.