정규화 이론 (Regularization Theory)¶
난이도: 중급
선수 지식: 선형 모델 (Ridge, Lasso), 기초 최적화
관련 문서: 선형 모델 | 과적합과 과소적합 | 경사 하강법 | 손실 함수
개요¶
정규화(Regularization)는 모델의 과적합을 방지하기 위해 학습 과정에 제약 또는 페널티를 추가하는 기법의 총칭이다. 머신러닝에서 가장 중요한 개념 중 하나이며, 거의 모든 현대 모델에 어떤 형태로든 정규화가 적용된다.
정규화를 이해하는 다양한 관점: - 베이지안 관점: 파라미터에 대한 사전분포 (MAP 추정) - 빈도론적 관점: 가설 공간 제약, 유효 모델 복잡도 감소 - 편향-분산 관점: 편향을 약간 증가시켜 분산을 크게 감소 - 정보 이론적 관점: 모델 복잡도 페널티 (MDL 원리)
핵심 개념¶
1. L2 정규화 (Ridge / Weight Decay)¶
페널티¶
최적화에 대한 효과¶
기울기가 다음으로 변경:
각 업데이트에서 가중치가 \((1 - 2\lambda\eta)\) 배로 축소 --> 가중치 감쇠(weight decay)라는 이름의 유래
가중치에 대한 효과¶
- 모든 가중치를 비례적으로 축소
- 작은 가중치가 상대적으로 더 많이 축소됨
- 어떤 가중치도 정확히 0이 되지 않음
스펙트럼 관점¶
\(\mathbf{X}^T\mathbf{X}\)의 고유값을 매끄럽게 하여 역행렬 계산을 안정화:
\(\lambda > 0\)이면 항상 역행렬이 존재 (다중공선성 해결)
베이지안 해석¶
가중치에 대한 가우시안 사전분포: \(\mathbf{w} \sim \mathcal{N}(0, \frac{1}{2\lambda}\mathbf{I})\)
2. L1 정규화 (Lasso)¶
페널티¶
핵심 특성: 희소성¶
- \(w_i = 0\) 근처에서 미분이 불연속 (준미분(subdifferential))
- 0 주변에 "죽은 영역(dead zone)" 생성: 기울기가 가중치를 정확히 0으로 밀어냄
- 근위 연산자(proximal operator) 관점: 소프트 임계값 처리(soft-thresholding)
결과¶
- 자동 특성 선택: 불필요한 특성의 가중치가 0이 됨
- 해석 가능한 모델
베이지안 해석¶
가중치에 대한 라플라스 사전분포: \(P(w_i) \propto \exp(-\lambda|w_i|)\)
3. Elastic Net¶
L1과 L2를 결합:
- 희소성 (L1) + 안정성 (L2)
- 상관된 특성 그룹을 함께 처리
- 자세한 내용은 선형 모델 참조
4. 드롭아웃 (Dropout)¶
메커니즘¶
훈련 중 각 뉴런을 확률 \(p\)로 무작위 비활성화:
(역 드롭아웃(inverted dropout) 방식: 훈련 중 스케일링)
해석¶
| 관점 | 설명 |
|---|---|
| 앙상블 근사 | \(2^n\)개 서브네트워크의 근사 앙상블 |
| 정규화 | 뉴런 간 공적응(co-adaptation) 방지 |
| 노이즈 주입 | 훈련에 확률적 노이즈 추가 |
| 베이지안 | 근사 변분 추론 (Gal & Ghahramani, 2016) |
변형¶
- DropConnect: 가중치를 비활성화 (뉴런 대신)
- Spatial Dropout: 채널 단위 드롭아웃 (CNN)
- DropBlock: 영역 단위 드롭아웃 (CNN)
5. 조기 종료 (Early Stopping)¶
메커니즘¶
- 검증 손실(validation loss)을 모니터링
- 검증 손실이 더 이상 감소하지 않으면 학습 중단
- 최저 검증 손실 시점의 모델 가중치를 복원
graph LR
subgraph "학습 곡선"
A["훈련 시작"] --> B["훈련 손실 ↓<br/>검증 손실 ↓"]
B --> C["최적 지점<br/>(조기 종료)"]
C --> D["훈련 손실 ↓<br/>검증 손실 ↑<br/>(과적합 시작)"]
end L2 정규화와의 동치성¶
선형 모델에서 적절한 학습률로의 조기 종료는 L2 정규화와 수학적으로 동치이다. 학습 반복 횟수 \(\propto 1/\lambda\).
실무 설정¶
- 인내심(patience): 검증 손실이 개선되지 않아도 기다리는 에폭 수
- 최소 변화량(min_delta): 개선으로 인정할 최소 변화량
- 최적 가중치 복원:
restore_best_weights=True
6. 데이터 증강 (Data Augmentation)¶
메커니즘¶
훈련 데이터의 변형된 복사본을 생성하여 효과적인 데이터셋 크기를 증가시킨다.
영역별 예시¶
| 영역 | 기법 |
|---|---|
| 이미지 | 회전, 뒤집기, 자르기, 색상 조작, Mixup, CutMix, CutOut, AutoAugment |
| 텍스트 | 동의어 대체, 역번역(back-translation), 무작위 삽입/삭제 |
| 정형 데이터 | SMOTE (불균형용), 노이즈 주입 |
이론적 근거¶
- 모델이 학습해야 할 불변성(invariance)을 암시적으로 인코딩
- 효과적인 훈련 세트 크기 증가 --> 분산 감소
7. 기타 정규화 기법¶
배치 정규화 (Batch Normalization)¶
- 각 레이어의 입력을 미니배치 통계로 정규화
- 내부 공변량 변화(internal covariate shift) 감소
- 암묵적 정규화 효과: 미니배치에 의한 노이즈가 정규화 역할
레이블 스무딩 (Label Smoothing)¶
하드 레이블 \((1, 0, 0, ...)\)을 소프트 레이블 \((1-\alpha, \alpha/(K-1), ...)\)로 대체:
- 모델의 과도한 확신(overconfidence) 방지
- 보정된 확률 추정
Mixup¶
두 훈련 샘플의 선형 보간으로 새 샘플 생성:
- 결정 경계를 매끄럽게
- 분포 외 데이터에 대한 강건성 향상
기타¶
| 기법 | 설명 |
|---|---|
| 가중치 제약 (Weight Constraint) | \(\|\mathbf{w}\| \le c\) 로 클리핑 |
| 노이즈 주입 (Noise Injection) | 입력, 가중치, 기울기에 노이즈 추가 |
| Max-Norm Regularization | 가중치 노름의 상한 제약 |
상세 비교표¶
| 방법 | 유형 | 제약 대상 | 적용 시기 |
|---|---|---|---|
| L2 (Ridge) | 명시적 | 가중치 크기 | 대부분의 모델에 기본 |
| L1 (Lasso) | 명시적 | 가중치 희소성 | 특성 선택 필요 시 |
| Dropout | 확률적 | 뉴런 공적응 | 신경망 |
| 조기 종료 | 암묵적 | 학습 반복 수 | 모든 반복 학습 |
| 데이터 증강 | 암묵적 | 효과적 데이터 크기 | 데이터 부족 시 |
| 배치 정규화 | 암묵적 | 내부 분포 | 심층 신경망 |
| 레이블 스무딩 | 명시적 | 출력 확신도 | 분류 모델 |
언제 사용하는가¶
| 상황 | 추천 정규화 |
|---|---|
| 기본 설정 (대부분의 경우) | L2 정규화 |
| 특성 선택이 필요한 경우 | L1 또는 Elastic Net |
| 신경망 학습 | Dropout + 조기 종료 |
| 데이터가 부족한 경우 | 데이터 증강 + 강한 정규화 |
| 심층 네트워크 | 배치 정규화 + Dropout |
| 분류 보정이 필요한 경우 | 레이블 스무딩 |
| Transformer 모델 | AdamW (Weight Decay) + Dropout |
흔한 오해와 함정¶
1. "정규화는 항상 도움이 된다"¶
- 이미 과소적합(underfitting)인 모델에 정규화를 추가하면 성능이 더 나빠진다. 정규화의 강도를 적절히 조절해야 한다.
2. "L2 정규화와 Weight Decay는 같다"¶
- SGD에서는 동치이지만, Adam에서는 다르다. AdamW가 올바른 weight decay 구현이다 (Loshchilov & Hutter, 2019).
3. "Dropout rate는 항상 0.5가 좋다"¶
- 레이어와 모델에 따라 다르다. 은닉층에서는 0.2~0.5, 입력층에서는 0.1~0.2가 일반적이다.
4. "배치 정규화는 정규화를 위한 것이다"¶
- 배치 정규화의 원래 목적은 학습 안정화이며, 정규화 효과는 부수적이다. 드롭아웃과 함께 사용하면 충돌할 수 있다.
5. "조기 종료만 쓰면 된다"¶
- 조기 종료는 유용하지만, 다른 정규화 기법과 함께 사용할 때 가장 효과적이다.
다른 주제와의 연결¶
- 선형 모델: Ridge, Lasso, Elastic Net의 상세 구현
- 과적합과 과소적합: 정규화의 목적과 효과
- 경사 하강법: AdamW와 weight decay
- 손실 함수: 정규화 항이 포함된 목적 함수
- VC 차원: 정규화는 효과적 VC 차원을 줄임
- 오컴의 면도날: 정규화 = 단순한 모델 선호
자주 묻는 면접 질문¶
- L1 정규화가 희소성을 만드는 이유는?
-
L1 페널티의 기울기가 0 근처에서 불연속이며, 소프트 임계값 처리로 작은 가중치가 정확히 0이 됨. 기하학적으로 L1 ball의 꼭짓점에서 해가 만들어짐.
-
조기 종료가 L2 정규화와 동치인 이유는?
-
선형 모델에서 경사 하강 반복 횟수가 유효 정규화 강도의 역수 역할. 적게 학습 = 가중치가 작게 = L2 페널티와 유사 효과.
-
드롭아웃이 앙상블과 유사한 이유는?
-
각 미니배치에서 다른 서브네트워크가 학습되므로, \(2^n\)개 서브네트워크의 가중 평균에 근사
-
데이터 증강이 정규화인 이유는?
- 모델이 학습해야 할 불변성을 인코딩하여 가설 공간을 제약하고, 효과적 데이터 크기를 늘려 분산을 줄이기 때문
코드 예시¶
import torch
import torch.nn as nn
from torch.optim import AdamW
# L2 정규화 (PyTorch의 weight_decay)
optimizer = AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
# Dropout
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(100, 256),
nn.ReLU(),
nn.Dropout(0.3), # 30% 드롭아웃
nn.Linear(256, 128),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(128, 10)
)
def forward(self, x):
return self.layers(x)
# 조기 종료 (수동 구현)
best_val_loss = float('inf')
patience_counter = 0
patience = 10
for epoch in range(max_epochs):
train_loss = train_one_epoch(model, train_loader, optimizer)
val_loss = evaluate(model, val_loader)
if val_loss < best_val_loss:
best_val_loss = val_loss
patience_counter = 0
torch.save(model.state_dict(), 'best_model.pt')
else:
patience_counter += 1
if patience_counter >= patience:
print(f"Early stopping at epoch {epoch}")
model.load_state_dict(torch.load('best_model.pt'))
break
# 레이블 스무딩
criterion = nn.CrossEntropyLoss(label_smoothing=0.1)
용어 정리¶
| 영어 | 한국어 |
|---|---|
| Regularization | 정규화 |
| Weight Decay | 가중치 감쇠 |
| Dropout | 드롭아웃 |
| Early Stopping | 조기 종료 |
| Data Augmentation | 데이터 증강 |
| Batch Normalization | 배치 정규화 |
| Label Smoothing | 레이블 스무딩 |
| Sparsity | 희소성 |
| Soft-thresholding | 소프트 임계값 처리 |
| Co-adaptation | 공적응 |
| Proximal Operator | 근위 연산자 |
참고 자료¶
- Goodfellow, Bengio, Courville (2016) - Deep Learning (Ch. 7: Regularization)
- Srivastava et al. (2014) - "Dropout: A Simple Way to Prevent Neural Networks from Overfitting"
- Gal & Ghahramani (2016) - "Dropout as a Bayesian Approximation"
- Loshchilov & Hutter (2019) - "Decoupled Weight Decay Regularization" (AdamW)
- Zhang, Bengio, Hardt, Recht, Vinyals (2017) - "Understanding deep learning requires rethinking generalization"