손실 함수 (Loss Functions)¶
난이도: 초급~중급
선수 지식: 기초 확률/통계, 미적분
관련 문서: 경사 하강법 | 볼록성 | 선형 모델 | SVM
개요¶
손실 함수(Loss Function)는 모델의 예측이 실제 값과 얼마나 다른지를 수치화하는 함수이다. 학습의 목적은 이 손실을 최소화하는 것이며, 어떤 손실 함수를 선택하느냐에 따라 모델이 학습하는 것이 달라진다.
손실 함수 = 모델이 무엇을 최적화하는가를 정의하는 것. 적절한 손실 함수의 선택은 모델 성능에 직접적 영향을 미친다.
핵심 개념¶
1. 회귀 손실 함수 (Regression Losses)¶
1.1 MSE (Mean Squared Error, L2 Loss)¶
\[L = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2\]
| 속성 | 설명 |
|---|---|
| 미분 가능성 | 어디서나 미분 가능 |
| 이상치 민감도 | 매우 민감 (제곱으로 큰 오류 강하게 패널티) |
| 확률적 해석 | 가우시안 노이즈 가정의 MLE |
| 사용처 | 기본 회귀 손실 |
1.2 MAE (Mean Absolute Error, L1 Loss)¶
\[L = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i|\]
| 속성 | 설명 |
|---|---|
| 미분 가능성 | \(y = \hat{y}\)에서 미분 불가 |
| 이상치 민감도 | MSE보다 강건 |
| 기울기 | 상수 (오류 크기에 무관) --> 수렴이 느릴 수 있음 |
| 확률적 해석 | 라플라시안 노이즈 가정의 MLE |
1.3 Huber 손실 (Smooth L1)¶
\[L_\delta = \begin{cases} \frac{1}{2}(y-\hat{y})^2 & |y-\hat{y}| \le \delta \\ \delta|y-\hat{y}| - \frac{1}{2}\delta^2 & \text{otherwise} \end{cases}\]
- 작은 오류: MSE처럼 이차적 (매끄러운 기울기)
- 큰 오류: MAE처럼 선형 (이상치에 강건)
- \(\delta\): 이차/선형 전환 임계값
1.4 Log-Cosh 손실¶
\[L = \sum_{i}\log(\cosh(\hat{y}_i - y_i))\]
- Huber 손실의 매끄러운 근사
- 두 번 미분 가능: XGBoost 등에서 유용
1.5 분위수 손실 (Quantile Loss)¶
\[L_q = \sum_{i} \max\left(q(y_i - \hat{y}_i), \; (q-1)(y_i - \hat{y}_i)\right)\]
- \(q = 0.5\): MAE와 동일 (중앙값 예측)
- 특정 분위수 예측 가능 (예측 구간 생성에 사용)
2. 분류 손실 함수 (Classification Losses)¶
2.1 이진 교차 엔트로피 (Binary Cross-Entropy, Log Loss)¶
\[L = -\frac{1}{n}\sum_{i=1}^{n}\left[y_i\log(\hat{p}_i) + (1-y_i)\log(1-\hat{p}_i)\right]\]
| 속성 | 설명 |
|---|---|
| 확신 있는 오답에 강한 패널티 | \(\hat{p} \to 0\) when \(y=1\)이면 \(L \to \infty\) |
| 볼록성 | 로지스틱 회귀에서 볼록 |
| 확률적 해석 | 베르누이 분포의 음의 로그 우도 |
| 수치 안정성 | log-sum-exp 트릭 또는 from_logits=True 사용 |
2.2 범주형 교차 엔트로피 (Categorical Cross-Entropy)¶
\[L = -\frac{1}{n}\sum_{i=1}^{n}\sum_{c=1}^{C} y_{ic}\log(\hat{p}_{ic})\]
- 다중 클래스의 일반화
- Softmax 출력과 함께 사용
- Sparse 변형: 레이블이 정수(원-핫이 아닌)일 때
2.3 힌지 손실 (Hinge Loss)¶
\[L = \max(0, 1 - y_i \cdot f(x_i))\]
- SVM에서 사용
- 마진 > 1이면 손실 0 (올바른 분류 + 충분한 마진)
- 오분류에 선형 패널티
- 제곱 힌지: \(L = \max(0, 1-yf(x))^2\) (미분 가능, 더 강한 패널티)
2.4 초점 손실 (Focal Loss)¶
\[L = -\alpha_t(1-\hat{p}_t)^\gamma \log(\hat{p}_t)\]
- 목적: 쉬운 예제의 가중치를 줄이고, 어려운 예제에 집중
- \(\gamma = 0\): 표준 교차 엔트로피
- \(\gamma = 2\): 일반적 설정
- \(\alpha_t\): 클래스 균형 가중치
- 개발 배경: 극심한 클래스 불균형의 객체 검출 (RetinaNet)
2.5 KL 발산 (KL Divergence)¶
\[D_{KL}(P\|Q) = \sum_x P(x)\log\frac{P(x)}{Q(x)}\]
| 속성 | 설명 |
|---|---|
| 비대칭 | \(D_{KL}(P\|Q) \neq D_{KL}(Q\|P)\) |
| 항상 \(\ge 0\) | \(P = Q\)일 때만 0 |
| 사용처 | 지식 증류, VAE, t-SNE |
- Forward KL \(D_{KL}(P\|Q)\): \(Q\)가 \(P\)의 모든 영역을 커버하도록 (mean-seeking)
- Reverse KL \(D_{KL}(Q\|P)\): \(Q\)가 \(P\)의 주요 모드에 집중 (mode-seeking)
3. 기타 주요 손실 함수¶
| 손실 | 수식/핵심 | 사용처 |
|---|---|---|
| 대비 손실 (Contrastive) | 유사 쌍 가까이, 비유사 쌍 멀리 | 시아미즈 네트워크 |
| 삼중항 손실 (Triplet) | \(\max(0, d(a,p) - d(a,n) + \alpha)\) | 메트릭 학습 |
| CTC 손실 | 정렬 없는 시퀀스 매핑 | 음성 인식 |
| Dice / IoU | 집합 유사도 기반 | 분할(Segmentation) |
| Wasserstein | 지구 이동 거리(EMD) | GAN |
상세 내용¶
손실 함수 선택 가이드¶
| 태스크 | 일반적 손실 | 비고 |
|---|---|---|
| 회귀 | MSE, MAE, Huber | 이상치가 있으면 Huber |
| 이진 분류 | BCE | 확률 출력 필요 시 표준 |
| 다중 클래스 분류 | Cross-Entropy | 표준 선택 |
| 클래스 불균형 분류 | Focal Loss, 가중 CE | 극심한 불균형에 Focal |
| 메트릭 학습 | Triplet, Contrastive | 임베딩 학습 |
| 분할 | Dice + CE | 조합이 일반적 |
flowchart TD
A[손실 함수 선택] --> B{태스크?}
B -->|회귀| C{이상치 있음?}
C -->|예| D[Huber Loss]
C -->|아니오| E[MSE]
B -->|분류| F{클래스 수?}
F -->|2| G{불균형?}
G -->|아니오| H[Binary CE]
G -->|예| I[Focal Loss]
F -->|다수| J{불균형?}
J -->|아니오| K[Categorical CE]
J -->|예| L[Focal / 가중 CE]
B -->|임베딩| M[Triplet / Contrastive] 왜 분류에 MSE 대신 Cross-Entropy를 사용하는가?¶
-
기울기 크기: MSE는 출력이 0 또는 1 근처일 때 시그모이드의 기울기가 포화되어 학습이 느림. CE는 오차에 비례하는 기울기를 제공.
-
확률적 해석: CE는 베르누이/카테고리 분포의 음의 로그 우도로, 확률 모델과 일관됨.
-
볼록성: 로지스틱 회귀에서 CE는 볼록이지만 MSE는 비볼록.
언제 사용하는가¶
| 상황 | 추천 손실 |
|---|---|
| 기본 회귀 | MSE |
| 이상치가 있는 회귀 | Huber 또는 MAE |
| 기본 분류 | Cross-Entropy |
| 극심한 클래스 불균형 | Focal Loss |
| SVM 학습 | Hinge Loss |
| 지식 증류 | KL Divergence + CE |
| 예측 구간 | Quantile Loss |
| 유사도 학습 | Triplet / Contrastive |
흔한 오해와 함정¶
1. "MSE는 어디서나 사용할 수 있다"¶
- 분류에서 MSE는 부적절하다. 기울기 포화, 비볼록성, 확률적 비일관성 등의 문제가 있다.
2. "Cross-Entropy의 수치 안정성은 무시해도 된다"¶
- \(\log(0) = -\infty\)로 NaN이 발생할 수 있다. 반드시
from_logits=True를 사용하거나, 작은 \(\epsilon\)을 더해야 한다.
3. "Focal Loss는 항상 Cross-Entropy보다 낫다"¶
- 불균형이 심하지 않으면 CE가 더 안정적일 수 있다. \(\gamma\)의 부적절한 설정은 오히려 성능을 해칠 수 있다.
4. "KL Divergence는 거리(distance)이다"¶
- 아니다. KL 발산은 비대칭이므로 진정한 거리 메트릭이 아니다. 대칭 버전은 Jensen-Shannon Divergence.
5. "Huber 손실의 \(\delta\)는 항상 1이 좋다"¶
- \(\delta\)는 하이퍼파라미터이며 데이터의 노이즈 수준에 따라 튜닝해야 한다.
다른 주제와의 연결¶
- 경사 하강법: 손실 함수의 기울기가 업데이트 방향을 결정
- 볼록성: 손실 함수의 볼록성이 최적화 난이도를 결정
- 선형 모델: MSE(선형 회귀), CE(로지스틱 회귀)
- SVM: 힌지 손실
- 트리 기반 모델: 그래디언트 부스팅에서 다양한 손실 함수 활용
- 정규화 이론: 손실 + 정규화 항 = 목적 함수
자주 묻는 면접 질문¶
- 분류에 MSE 대신 Cross-Entropy를 사용하는 이유는?
-
CE는 확률 모델과 일관되고, 기울기가 포화되지 않으며, 로지스틱 회귀에서 볼록함.
-
Huber 손실은 언제 MSE보다 나은가?
-
이상치가 존재할 때. MSE는 큰 오류를 제곱으로 과도하게 패널티하지만, Huber는 선형적으로 처리.
-
Focal Loss가 클래스 불균형에 도움이 되는 이유는?
-
쉬운 예제(다수 클래스)의 손실을 \((1-\hat{p}_t)^\gamma\)로 줄여, 어려운 예제(소수 클래스)에 학습을 집중.
-
KL Divergence가 비대칭인 이유와 함의는?
- \(P\)와 \(Q\)의 역할이 다름. Forward KL은 \(Q\)가 \(P\)를 커버하도록, Reverse KL은 \(Q\)가 \(P\)의 모드에 집중하도록 유도.
코드 예시¶
import torch
import torch.nn as nn
# 회귀 손실
mse_loss = nn.MSELoss()
mae_loss = nn.L1Loss()
huber_loss = nn.HuberLoss(delta=1.0)
smooth_l1 = nn.SmoothL1Loss()
# 분류 손실
bce_loss = nn.BCEWithLogitsLoss() # logits 입력 (수치 안정)
ce_loss = nn.CrossEntropyLoss() # logits 입력, softmax 포함
ce_weighted = nn.CrossEntropyLoss(weight=torch.tensor([1.0, 5.0])) # 가중
# KL Divergence
kl_loss = nn.KLDivLoss(reduction='batchmean', log_target=False)
# Focal Loss (수동 구현)
class FocalLoss(nn.Module):
def __init__(self, alpha=0.25, gamma=2.0):
super().__init__()
self.alpha = alpha
self.gamma = gamma
def forward(self, logits, targets):
bce = nn.functional.binary_cross_entropy_with_logits(logits, targets, reduction='none')
p_t = torch.exp(-bce)
focal_weight = self.alpha * (1 - p_t) ** self.gamma
return (focal_weight * bce).mean()
# 레이블 스무딩
ce_smooth = nn.CrossEntropyLoss(label_smoothing=0.1)
용어 정리¶
| 영어 | 한국어 |
|---|---|
| Loss Function | 손실 함수 |
| Mean Squared Error (MSE) | 평균 제곱 오차 |
| Mean Absolute Error (MAE) | 평균 절대 오차 |
| Huber Loss | 후버 손실 |
| Cross-Entropy | 교차 엔트로피 |
| Hinge Loss | 힌지 손실 |
| Focal Loss | 초점 손실 |
| KL Divergence | KL 발산 |
| Triplet Loss | 삼중항 손실 |
| Quantile Loss | 분위수 손실 |
참고 자료¶
- Goodfellow, Bengio, Courville (2016) - Deep Learning (Ch. 6: Loss Functions)
- Lin et al. (2017) - "Focal Loss for Dense Object Detection" (RetinaNet)
- Huber (1964) - "Robust Estimation of a Location Parameter"
- Bishop (2006) - Pattern Recognition and Machine Learning (Ch. 4)