본문 바로가기
C.W.K.
Stream
Lesson 04 of 10 · published

가중치 감쇠와 조기 종료

~18 min · weight-decay, early-stopping, l2

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

가중치 감쇠를 한 문장으로

가중치 감쇠는 매 단계마다 매개변수를 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도 추가해.

함께 쓸 때

가중치 감쇠와 조기 종료는 실전에서 거의 같은 역할을 하는 정규화 기법이야. 둘 다 모델이 잡음을 외우지 못하게 막아. 두 방법을 모두 쓰되, 효과가 선형적으로 합쳐질 거라고 기대하지는 마. 강한 데이터 증강을 사용한다면 둘 다 덜 필요할 수 있어.

원칙: 검증 성능이 가장 좋았던 체크포인트는 항상 저장해. 실제로 쓰지 않을 것 같아도 조기 종료는 언제나 설정해 둬. 비용은 코드 두 줄이지만, 잊었을 때 치르는 대가는 이미 학습한 모델보다 더 나쁜 모델을 배포하는 일이야.

Code

인내 횟수를 적용한 조기 종료·python
class EarlyStopper:
    def __init__(self, patience=10, min_delta=1e-4):
        self.patience = patience
        self.min_delta = min_delta
        self.best = float("inf")
        self.bad = 0
    def step(self, val_loss):
        if val_loss < self.best - self.min_delta:
            self.best = val_loss
            self.bad = 0
            return False         # don't stop
        else:
            self.bad += 1
            return self.bad >= self.patience

stopper = EarlyStopper(patience=10)
for epoch in range(1000):
    train_one_epoch(model, train_loader)
    val_loss = evaluate(model, val_loader)
    if val_loss < stopper.best:
        torch.save(model.state_dict(), "best.pt")
    if stopper.step(val_loss):
        print(f"Stopping at epoch {epoch}, best val_loss={stopper.best:.4f}")
        break

External links

Exercise

Patience=10으로 학습 루프에 조기 종료를 추가해. 학습 도중 어느 시점부터 과적합하는 모델을 학습시켜. Stopper가 실제로 작동하는지, 마지막 체크포인트가 아니라 가장 좋은 체크포인트를 저장하는지 확인해.

Progress

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

댓글 0

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

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