손실 함수 (Loss Functions)
난이도: 초급~중급
선수 지식: 기초 확률/통계, 미적분
관련 문서: 경사 하강법 | 볼록성 | 선형 모델 | SVM
핵심 요약: 모델이 얼마나 틀렸는지 측정하는 함수. 회귀(Regression)에는 MSE, 분류(Classification)에는 Cross-Entropy가 표준이다. 손실 함수(Loss Function)의 선택은 “모델이 무엇을 최적화하는가”를 정의하며, 잘못된 선택은 모델 구조보다 더 큰 성능 차이를 만든다.
손실 함수(Loss Function)는 모델의 예측이 실제 값과 얼마나 다른지를 수치화하는 함수이다. 학습의 목적은 이 손실을 최소화하는 것이며, 어떤 손실 함수를 선택하느냐에 따라 모델이 학습하는 것이 달라진다.
손실 함수 = 모델이 무엇을 최적화하는가를 정의하는 것. 적절한 손실 함수의 선택은 모델 성능에 직접적 영향을 미친다.
탄생 배경
섹션 제목: “탄생 배경”손실 함수의 역사는 수학과 통계학의 근본적 문제에서 출발한다. MSE(Mean Squared Error)의 기원은 18세기 말~19세기 초 최소제곱법(Method of Least Squares)에 있다. Legendre(1805)와 Gauss(1809)가 천체 궤도를 관측 데이터에 맞추기 위해 독립적으로 개발한 이 방법은, “오차의 제곱합을 최소화하라”는 단순하면서도 강력한 원리를 제시했다. Gauss는 이를 정규분포(Gaussian distribution) 가정 하에서의 최대 우도 추정(MLE)과 연결하여 확률론적 정당성까지 부여했다.
Cross-Entropy는 전혀 다른 맥락에서 탄생했다. 1948년 Claude Shannon이 정보이론(Information Theory)을 창시하며 정의한 엔트로피(entropy) 개념이 그 뿌리이다. 두 확률분포 간의 “정보적 거리”를 측정하는 교차 엔트로피는, 이후 분류 문제에서 예측 확률분포와 실제 분포 사이의 불일치를 정량화하는 자연스러운 손실 함수로 자리 잡았다.
가장 최근의 혁신적 손실 함수인 Focal Loss는 2017년 Lin et al.이 RetinaNet 논문에서 제안했다. 객체 검출(Object Detection)에서 배경 클래스가 전체 샘플의 99% 이상을 차지하는 극심한 클래스 불균형 문제를 해결하기 위해, “쉬운 예제의 손실을 줄이고 어려운 예제에 집중하라”는 아이디어를 수식화한 것이다.
비유: Focal Loss는 쉬운 시험 문제의 배점을 줄이고, 어려운 문제에 배점을 집중시키는 채점 방식이다. 모든 문제의 배점이 동일한 시험(표준 Cross-Entropy)에서는 학생이 쉬운 문제만 풀어도 높은 점수를 받을 수 있지만, Focal Loss 채점에서는 어려운 문제를 맞춰야만 의미 있는 점수를 얻을 수 있다.
핵심 개념
섹션 제목: “핵심 개념”1. 회귀 손실 함수 (Regression Losses)
섹션 제목: “1. 회귀 손실 함수 (Regression Losses)”1.1 MSE (Mean Squared Error, L2 Loss)
섹션 제목: “1.1 MSE (Mean Squared Error, L2 Loss)”
| 속성 | 설명 |
|---|---|
| 미분 가능성 | 어디서나 미분 가능 |
| 이상치 민감도 | 매우 민감 (제곱으로 큰 오류 강하게 패널티) |
| 확률적 해석 | 가우시안 노이즈 가정의 MLE |
| 사용처 | 기본 회귀 손실 |
숫자로 이해하기
섹션 제목: “숫자로 이해하기”실제 값 , 모델 예측 일 때 각 손실 함수(Loss Function)가 어떤 값을 내는지 비교해 보자.
| 손실 함수 | 계산 | 결과 | 해석 |
|---|---|---|---|
| MSE | 0.04 | 오차의 제곱. 큰 오차에 강한 페널티(Penalty) | |
| MAE | 0.20 | 오차의 절대값. 이상치(Outlier)에 강건 | |
| BCE (이진 교차 엔트로피, Binary Cross-Entropy) | 0.22 | 확률 예측의 “확신도”를 반영 |
만약 예측이 (거의 맞춤)라면?
- MSE:
- BCE:
만약 예측이 (완전히 틀림)라면?
- MSE:
- BCE: — 훨씬 더 큰 패널티!
핵심: BCE(Cross-Entropy)는 “확신 있게 틀린” 예측에 극도로 큰 페널티를 주어, 분류 모델이 잘못된 확신을 갖지 않도록 유도한다.
1.2 MAE (Mean Absolute Error, L1 Loss)
섹션 제목: “1.2 MAE (Mean Absolute Error, L1 Loss)”
| 속성 | 설명 |
|---|---|
| 미분 가능성 | 에서 미분 불가 |
| 이상치 민감도 | MSE보다 강건 |
| 기울기 | 상수 (오류 크기에 무관) —> 수렴이 느릴 수 있음 |
| 확률적 해석 | 라플라시안 노이즈 가정의 MLE |
1.3 Huber 손실 (Smooth L1)
섹션 제목: “1.3 Huber 손실 (Smooth L1)”
- 작은 오류: MSE처럼 이차적 (매끄러운 기울기)
- 큰 오류: MAE처럼 선형 (이상치에 강건)
- : 이차/선형 전환 임계값
1.4 Log-Cosh 손실
섹션 제목: “1.4 Log-Cosh 손실”
- Huber 손실의 매끄러운 근사
- 두 번 미분 가능: XGBoost 등에서 유용
1.5 분위수 손실 (Quantile Loss)
섹션 제목: “1.5 분위수 손실 (Quantile Loss)”
- : MAE와 동일 (중앙값 예측)
- 특정 분위수 예측 가능 (예측 구간 생성에 사용)
2. 분류 손실 함수 (Classification Losses)
섹션 제목: “2. 분류 손실 함수 (Classification Losses)”2.1 이진 교차 엔트로피 (Binary Cross-Entropy, Log Loss)
섹션 제목: “2.1 이진 교차 엔트로피 (Binary Cross-Entropy, Log Loss)”
| 속성 | 설명 |
|---|---|
| 확신 있는 오답에 강한 패널티 | when 이면 |
| 볼록성 | 로지스틱 회귀에서 볼록 |
| 확률적 해석 | 베르누이 분포의 음의 로그 우도 |
| 수치 안정성 | log-sum-exp 트릭 또는 from_logits=True 사용 |
2.2 범주형 교차 엔트로피 (Categorical Cross-Entropy)
섹션 제목: “2.2 범주형 교차 엔트로피 (Categorical Cross-Entropy)”
- 다중 클래스의 일반화
- Softmax 출력과 함께 사용
- Sparse 변형: 레이블이 정수(원-핫이 아닌)일 때
2.3 힌지 손실 (Hinge Loss)
섹션 제목: “2.3 힌지 손실 (Hinge Loss)”
- SVM에서 사용
- 마진 > 1이면 손실 0 (올바른 분류 + 충분한 마진)
- 오분류에 선형 패널티
- 제곱 힌지: (미분 가능, 더 강한 패널티)
2.4 초점 손실 (Focal Loss)
섹션 제목: “2.4 초점 손실 (Focal Loss)”
- 목적: 쉬운 예제의 가중치를 줄이고, 어려운 예제에 집중
- : 표준 교차 엔트로피
- : 일반적 설정
- : 클래스 균형 가중치
- 개발 배경: 극심한 클래스 불균형의 객체 검출 (RetinaNet)
2.5 KL 발산 (KL Divergence)
섹션 제목: “2.5 KL 발산 (KL Divergence)”
| 속성 | 설명 |
|---|---|
| 비대칭 | |
| 항상 | 일 때만 0 |
| 사용처 | 지식 증류, VAE, t-SNE |
- Forward KL : 가 의 모든 영역을 커버하도록 (mean-seeking)
- Reverse KL : 가 의 주요 모드에 집중 (mode-seeking)
3. 기타 주요 손실 함수
섹션 제목: “3. 기타 주요 손실 함수”| 손실 | 수식/핵심 | 사용처 |
|---|---|---|
| 대비 손실 (Contrastive) | 유사 쌍 가까이, 비유사 쌍 멀리 | 시아미즈 네트워크 |
| 삼중항 손실 (Triplet) | 메트릭 학습 | |
| CTC 손실 | 정렬 없는 시퀀스 매핑 | 음성 인식 |
| Dice / IoU | 집합 유사도 기반 | 분할(Segmentation) |
| Wasserstein | 지구 이동 거리(EMD) | GAN |
상세 내용
섹션 제목: “상세 내용”손실 함수 선택 가이드
섹션 제목: “손실 함수 선택 가이드”| 태스크 | 일반적 손실 | 비고 |
|---|---|---|
| 회귀 | MSE, MAE, Huber | 이상치가 있으면 Huber |
| 이진 분류 | BCE | 확률 출력 필요 시 표준 |
| 다중 클래스 분류 | Cross-Entropy | 표준 선택 |
| 클래스 불균형 분류 | Focal Loss, 가중 CE | 극심한 불균형에 Focal |
| 메트릭 학습 | Triplet, Contrastive | 임베딩 학습 |
| 분할 | Dice + CE | 조합이 일반적 |
왜 분류에 MSE 대신 Cross-Entropy를 사용하는가?
섹션 제목: “왜 분류에 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 |
실전 사례
섹션 제목: “실전 사례”분류 문제에 MSE를 사용하여 학습이 수렴하지 않은 프로덕션 사례
섹션 제목: “분류 문제에 MSE를 사용하여 학습이 수렴하지 않은 프로덕션 사례”한 스타트업의 추천 시스템 팀이 사용자 클릭 예측(CTR prediction) 모델을 구축하던 중, 학습이 특정 손실값에서 정체되어 더 이상 개선되지 않는 문제를 겪었다. 모델은 로지스틱 회귀(Logistic Regression) 기반이었고, 출력층에 시그모이드(Sigmoid) 활성화를 사용하여 클릭 확률을 예측했다.
문제의 핵심은 손실 함수로 MSE를 사용한 것이었다. 이진 분류 문제임에도 불구하고 팀은 회귀 문제에서 익숙한 MSE를 그대로 적용했다.
왜 MSE가 분류에서 문제를 일으키는가:
- 기울기 포화(Gradient Saturation): 시그모이드 출력이 0 또는 1에 가까울 때 가 거의 0이 됨. MSE의 기울기는 이므로, 확신이 높은 오답에서조차 기울기가 소멸하여 학습이 정체됨
- 비볼록 최적화 곡면: 로지스틱 회귀에서 MSE는 비볼록 손실 곡면을 만들어 지역 최소에 빠질 위험이 높아짐
- 확률적 비일관성: MSE는 가우시안 노이즈를 가정하지만, 이진 레이블은 베르누이 분포를 따름
손실 함수를 Binary Cross-Entropy(BCE)로 교체하자 즉시 학습이 재개되었고, AUC가 0.62에서 0.78로 크게 개선되었다.
실무 교훈:
- 분류 문제에는 반드시 Cross-Entropy 계열 손실 함수를 사용할 것
- 손실 함수 선택은 모델 구조만큼이나 성능에 결정적 영향을 미친다
- 학습이 정체될 때는 모델 구조뿐 아니라 손실 함수의 적합성부터 점검해야 한다
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”1. “MSE는 어디서나 사용할 수 있다”
섹션 제목: “1. “MSE는 어디서나 사용할 수 있다””- 분류에서 MSE는 부적절하다. 기울기 포화, 비볼록성, 확률적 비일관성 등의 문제가 있다.
2. “Cross-Entropy의 수치 안정성은 무시해도 된다”
섹션 제목: “2. “Cross-Entropy의 수치 안정성은 무시해도 된다””- 로 NaN이 발생할 수 있다. 반드시
from_logits=True를 사용하거나, 작은 을 더해야 한다.
3. “Focal Loss는 항상 Cross-Entropy보다 낫다”
섹션 제목: “3. “Focal Loss는 항상 Cross-Entropy보다 낫다””- 불균형이 심하지 않으면 CE가 더 안정적일 수 있다. 의 부적절한 설정은 오히려 성능을 해칠 수 있다.
4. “KL Divergence는 거리(distance)이다”
섹션 제목: “4. “KL Divergence는 거리(distance)이다””- 아니다. KL 발산은 비대칭이므로 진정한 거리 메트릭이 아니다. 대칭 버전은 Jensen-Shannon Divergence.
5. “Huber 손실의 는 항상 1이 좋다”
섹션 제목: “5. “Huber 손실의 δ\deltaδ는 항상 1이 좋다””- 는 하이퍼파라미터이며 데이터의 노이즈 수준에 따라 튜닝해야 한다.
다른 주제와의 연결
섹션 제목: “다른 주제와의 연결”- 경사 하강법: 손실 함수의 기울기가 업데이트 방향을 결정
- 볼록성: 손실 함수의 볼록성이 최적화 난이도를 결정
- 선형 모델: MSE(선형 회귀), CE(로지스틱 회귀)
- SVM: 힌지 손실
- 트리 기반 모델: 그래디언트 부스팅에서 다양한 손실 함수 활용
- 정규화 이론: 손실 + 정규화 항 = 목적 함수
자주 묻는 면접 질문
섹션 제목: “자주 묻는 면접 질문”-
분류에 MSE 대신 Cross-Entropy를 사용하는 이유는?
- CE는 확률 모델과 일관되고, 기울기가 포화되지 않으며, 로지스틱 회귀에서 볼록함.
-
Huber 손실은 언제 MSE보다 나은가?
- 이상치가 존재할 때. MSE는 큰 오류를 제곱으로 과도하게 패널티하지만, Huber는 선형적으로 처리.
-
Focal Loss가 클래스 불균형에 도움이 되는 이유는?
- 쉬운 예제(다수 클래스)의 손실을 로 줄여, 어려운 예제(소수 클래스)에 학습을 집중.
-
KL Divergence가 비대칭인 이유와 함의는?
- 와 의 역할이 다름. Forward KL은 가 를 커버하도록, Reverse KL은 가 의 모드에 집중하도록 유도.
코드 예시
섹션 제목: “코드 예시”import torchimport 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 Divergencekl_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)