반응형
라벨 스무딩
- 분류(Classification) 문제에서 신경망의 출력층에 소프트맥스(Softmax)를 쓰고, 정답 라벨은 one-hot 벡터로 표현
- 예를 들어, 3클래스 문제에서 클래스 2가 정답인 경우 → y = [0,1,0]
- 그리고 크로스 엔트로피(Cross-Entropy) 손실로 학습
하지만 이렇게 완전히 0과 1로만 구성된 라벨을 쓰면 모델이 너무 자신 있게 예측하도록 학습돼 오버피팅될 수 있음.
라벨 스무딩은 정답 라벨을 약간 "부드럽게" 만들어서 모델이 확신을 너무 가지지 않도록 함.

장점
- 모델 과신 방지 → 출력 확률이 너무 0이나 1로 치우치지 않음
- 오버피팅 완화 → 정답 라벨에 약간의 불확실성을 주어 일반화 성능 향상
- 학습 안정화 → 크로스엔트로피 손실의 그래디언트가 폭주하지 않음
한계 / 주의점
- 라벨이 원래 확실한 경우 (정답이 절대 확실) 스무딩이 오히려 성능 저하를 만들 수 있음
- 너무 큰 ϵ → 모델이 제대로 학습하지 못함
import numpy as np
from sklearn.preprocessing import LabelBinarizer
# 클래스 0,1,2
y = np.array([0, 1, 2, 2, 1])
lb = LabelBinarizer()
y_onehot = lb.fit_transform(y)
# 라벨 스무딩 적용
epsilon = 0.1
K = y_onehot.shape[1]
y_smooth = (1 - epsilon) * y_onehot + epsilon / K
print("원래 one-hot:\n", y_onehot)
print("스무딩 적용:\n", y_smooth)
'''
원래 one-hot:
[[1 0 0]
[0 1 0]
[0 0 1]
[0 0 1]
[0 1 0]]
스무딩 적용:
[[0.93333333 0.03333333 0.03333333]
[0.03333333 0.93333333 0.03333333]
[0.03333333 0.03333333 0.93333333]
[0.03333333 0.03333333 0.93333333]
[0.03333333 0.93333333 0.03333333]]
'''반응형
'개발 > Python' 카테고리의 다른 글
| melt, stack, unstack (0) | 2025.10.26 |
|---|---|
| map, apply, transform (0) | 2025.10.25 |
| 가설검정 (0) | 2025.10.25 |
| 마할라노비스 거리 (0) | 2025.10.25 |
| 로버스트 피팅 (0) | 2025.10.25 |
댓글