What is Loss Function?
- 머신러닝 및 딥러닝 모델에서 예측 값과 실제 값 간의 차이를 측정하여 모델의 학습 방향을 제시하는 중요한 요소
어느순간에?
분류 및 회귀에 따라서 다르게 선택되며, 대표적인 종류를 정리하자면,
손실 함수 종류
| 손실 함수 | 문제 유형 | 특징 |
|---|---|---|
| Mean Squared Error (MSE) | 회귀 | 예측 값과 실제 값의 제곱 오차를 평균. 이상치에 민감. |
| Mean Absolute Error (MAE) | 회귀 | 예측 값과 실제 값의 절대 오차를 평균. 이상치에 덜 민감. |
| Huber Loss | 회귀 | MSE와 MAE의 혼합. 이상치에 덜 민감하면서도 작은 오차에 민감. |
| Binary Cross-Entropy (BCE) | 이진 분류 | 이진 분류 문제에서 확률 출력에 적합. 스팸 필터, 암 진단 등에 활용. |
| Categorical Cross-Entropy (CCE) | 다중 클래스 분류 | 다중 클래스 분류에서 사용. Softmax 활성화 함수와 함께 사용. |
| KL Divergence (KL Div) | 확률 분포 비교 | 두 확률 분포 간의 차이를 측정. 예: 분류 모델의 예측 분포 평가. |
| Focal Loss | 분류(클래스 불균형) | 잘못 분류된 샘플에 더 큰 가중치를 부여. 클래스 불균형 문제에 적합. |
| Triplet Loss | 임베딩 학습 | 유사한 샘플은 가까이, 다른 샘플은 멀리 배치하도록 학습. |
| GAN Loss (Adversarial Loss) | 생성 모델(GAN) | 생성자와 판별자의 대립적 학습에서 사용. 예: 이미지 생성. |
- 대표적으로
MAE,MSE,BCE,CCE들에 대해서 정리하겠다. (정리하고 보니 더 정리했는데...)
1. 평균제곱오차(MSE)
- 보통 회귀문제에서 많이 사용하는 손실함수
- 예측값과 실제값의 차이를 제곱한 후 취하는 방식으로 계산을함
왜 제곱을 하지?
- 음수의 값을 최대한 제거한 후, 오차 크기를 절대값으로 반영하여 상쇄를 최대한 방지하기 위함
- 평균제곱오차와 다른 방법인 평균 절대 오차가 있다
수식
$$
MSE\ = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2\
$$
- 여기서 \(n\)은 데이터의 개수, \(y_i\)는 실제값 \(\hat{y}_i\)는 예측값이다
2. 평균절대오차(MAE)
- 평균제곱오차와 마찬가지로 회귀문제에서 가장 많이 사용하는 손실함수.
- 제곱이 아닌 절대값을 통해 음수 값을 제거하려는 의도가 있다.
수식
$$
MAE\ = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|
$$
- 여기서 \(n\)은 데이터의 개수, \(y_i\)는 실제값 \(\hat{y}_i\)는 예측값이다
- MSE와 별반 다를바 없음
3.Binary Cross-Entropy (BCE)
- 이진 분류에서 사용되는 손실함수
- 예측 확률과 실제 클래스 사이의 차이를 측정함
수식
$$
BCE\ = \frac{1}{n} \sum_{i=1}^{n} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]\
$$
- 여기서 \(y_i\)는 실제 클래스(0,1), \(\hat{y}_i\)는 예측한 확률값을 나타냄
- 확률 기반 평가로 인해 예측 확률이 정답에 가까울수록 손실이 적어짐
- 그렇지만 출력 확률이 0 또는 1에 가까울수록 손실값의 급격한 변화로 인해, 기울기 소실 위험이 있음
4. Categorical Cross-Entropy (CCE)
- 다중 클래스 분류 문제에서 사용되는 손실함수
- 각 클래스에 대한 예측 확률과 실제 클래스 사이의 차이를 측정(BCE와 같음)
수식
$$
CCE = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{C} t_{ij} \log(y_{ij})
$$
- \(N\): 전체 샘플 수 (데이터 개수).
- \(C\): 클래스 수.
- \(t_{ij}\): 실제 라벨 값 (One-Hot Encoding 형태의 \(i\)-번째 샘플의 클래스 \(j\)).
- \(y_{ij}\): 모델이 예측한 클래스 \(j\)에 대한 확률 값. (\(0 \leq y_{ij} \leq 1\))
- \(\log(y_{ij})\): 클래스 \(j\)를 예측할 확률의 로그 값.
의미:
- 실제 라벨(\(t_{ij}\))이 1인 클래스의 예측 확률(\(y_{ij}\))을 로그로 변환한 값을 손실로 계산.
- \(t_{ij}\)가 One-Hot Encoding 형태이기 때문에 실제 클래스에 해당하는 항만 손실에 영향을 줌.
특징:
- 다중 클래스 분류에 사용.
- 모델 출력층에는 Softmax 활성화 함수를 사용하여 확률 분포로 변환.
- 예측 확률이 실제 클래스에 가까울수록 손실 값이 작아짐.
5. Buber Loss
MSE,MAE의 장점을 짬뽕 시킨 함수- 오차가 작은 상황에는 MSE처럼 동작
- 오차가 큰 상황에는 MAE처럼 동작하여 이상치에 영향력을 줄임
수식
$$
L_{\delta}(a) =
\begin{cases}
\frac{1}{2}(y - \hat{y})^2 & \text{if } |y - \hat{y}| \leq \delta \
\delta \cdot |y - \hat{y}| - \frac{\delta^2}{2} & \text{if } |y - \hat{y}| > \delta
\end{cases}
$$
예시 그래프

- \(y\): 실제 값 (Target).
- \(\hat{y}\): 예측 값.
- \(a = y - \hat{y}\): 예측 오차.
- \(\delta\): Huber Loss의 임계값
6. KL Divergence (KL Div)
- 두 확률 분포 사이의 차이를 측정하는 데 사용함
- 주로
VAE,GAN에서 사용함
수식
$$
D_{KL}(P || Q) = \sum_{i} P(i) \log\left(\frac{P(i)}{Q(i)}\right)
$$
- \(P(i)\): 실제 분포 (Ground Truth 분포)
- \(Q(i)\): 모델이 예측한 확률 분포
- \(\log\): 자연 로그 또는 밑이 2인 로그
- 여기서 $P(x)$는 실제 데이터의 확률 분포, $Q(x)$는 모델이 생성한 데이터의 확률 분포이다.KL Divergence는 실제 분포 $P(x)$와 모델 분포 $Q(x)$ 사이의 차이를 측정함.$D_{KL}(P | Q)$가 0에 가까울수록 두 분포가 유사하다는 것을 의미함.
7. Focal Loss
- 객체 탐지 문제에서 클래스 불균형을 다루기 위해 제안
Cross-Entropy Loss값에 가중치를 부여하여, 잘못 분류된 예제에 더 집중하도록 하기 위해 고안
수식
$$
FL(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t)
$$
- 여기서 $p_t$는 모델이 예측한 올바른 클래스의 확률, $\alpha_t$는 클래스 불균형을 다루기 위한 가중치, $\gamma$는 잘못 분류된 예제에 대한 가중치를 조절하는 포커싱 파라미터이다. $(1 - p_t)^{\gamma}$ 항이 잘못 분류된 예제에 대해 손실에 큰 가중치를 부여함. $\alpha_t$는 클래스 불균형 문제를 해결하기 위해 사용
정리하면서....
- 우리는 왜 손실함수를 써야할까?
왜긴 왜야ㅁㅊㅋㅋㅋ
쉽게 말해서 우리가 만든 인공지능 모델이 예측하는 값이 실제 값과 큰 차이가 없어야 그 예측에 신뢰성을 가질 수 있기 때문이다, 그렇기에 우리는 통계공학적으로 접근하며 예측 = 확률이라는 기본 틀 안에서 공부하고 디벨롭 해야한다는 총론이다.
'딥러닝, 논문 리뷰' 카테고리의 다른 글
| [딥러닝] RNN, LSTM, GRU Sequence - 1 (2) | 2024.12.27 |
|---|---|
| [딥러닝] AutoEncoder란? - 신경망 아키텍처 (1) | 2024.12.20 |
| [딥러닝, 논문리뷰] BERT모델과 HuggingFace Trainer를 이용한 KoBERT 감정분석 (7) | 2024.12.20 |
| [딥러닝] 분류모델 성능 평가지표 (5) | 2024.12.12 |
| [딥러닝] 활성화 함수의 종류와 역할 (2) | 2024.12.11 |