딥러닝, 논문 리뷰

[딥러닝] 손실함수의 종류 및 정의(Loss Function)

cheorish 2024. 12. 16. 23:55

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}
$$

 

예시 그래프

출처 : https://en.wikipedia.org/wiki/Huber_loss 초록 곡선은 Huber Loss, 파란 곡선은 MSE

  • \(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$는 클래스 불균형 문제를 해결하기 위해 사용

정리하면서....

  • 우리는 왜 손실함수를 써야할까?
    왜긴 왜야ㅁㅊㅋㅋㅋ

쉽게 말해서 우리가 만든 인공지능 모델이 예측하는 값이 실제 값과 큰 차이가 없어야 그 예측에 신뢰성을 가질 수 있기 때문이다, 그렇기에 우리는 통계공학적으로 접근하며 예측 = 확률이라는 기본 틀 안에서 공부하고 디벨롭 해야한다는 총론이다.