주제: 2-3 정규화 (Weight Decay & Dropout)
문제 설정
모델이 학습 데이터에만 과도하게 맞는 과적합(overfitting)을 줄이기 위해 정규화(regularization)를 사용합니다.
대표 방법은 weight decay와 dropout입니다.
직관 비유
- 모델: 문제 풀이 전략
- 과적합: 문제를 외워버린 상태
- 정규화: 더 단순하고 일반적인 패턴을 학습하도록 유도
1. Weight Decay
손실에 가중치 크기 패널티를 추가합니다.
- L: 원래 손실
- w: 가중치
- lambda: 정규화 강도
가중치가 과도하게 커지는 것을 억제해 모델 복잡도를 줄입니다.
주의: lambda가 너무 크면 underfitting이 발생할 수 있습니다.
2. Weight Decay 업데이트 관점
w <- w - eta * (grad(L) + lambda * w)
가중치에 지속적인 축소 압력을 주어 일반화 성능을 개선합니다.
주의: Adam에서는 weight decay가 gradient와 섞이는 이슈가 있어 AdamW를 사용합니다.
3. Dropout
훈련 중 일부 뉴런을 랜덤하게 비활성화합니다.
a' = m * a, m ~ Bernoulli(p)
- a: 활성값
- m: dropout mask
- p: 유지 확률
co-adaptation을 줄이고 서브네트워크 앙상블 효과로 일반화를 돕습니다.
주의: 추론 단계에서는 dropout을 끕니다.
4. Dropout 기대값 보정
훈련 시 보통 다음 형태를 사용합니다.
훈련/추론 간 출력 스케일 차이를 줄이기 위한 보정입니다.
5. Weight Decay vs Dropout
| 방법 | 목적 | 적용 위치 |
|---|---|---|
| Weight Decay | 가중치 크기 제한 | 파라미터 |
| Dropout | 뉴런 랜덤 제거 | 활성값 |
6. 일반화에 미치는 영향
- Weight Decay: 모델 단순화
- Dropout: 모델 다양성 증가
두 방법 모두 과적합 완화와 일반화 성능 향상에 기여합니다.
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
| L + lambda||w||^2 | torch.optim.AdamW(..., weight_decay=lambda) | weight decay |
| a' = m * a | torch.nn.Dropout(p) | dropout |
| m ~ Bernoulli(p) | torch.bernoulli() | dropout mask |
자주 하는 오해 5개
- 정규화는 항상 성능을 높인다고 생각한다
- weight decay와 L2 regularization이 모든 optimizer에서 완전히 같다고 생각한다
- dropout은 모든 모델에서 필수라고 생각한다
- dropout을 추론 단계에서도 써야 한다고 생각한다
- 작은 모델에는 정규화가 필요 없다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- weight decay는 어떻게 과적합을 줄이는가?
L' = L + lambda||w||^2의 의미는 무엇인가?- dropout은 어떻게 일반화를 개선하는가?
- dropout mask는 어떤 분포에서 생성되는가?
- AdamW가 weight decay 이슈를 어떻게 해결하는가?