AI

Cross Entropy Loss

klee9 2024. 8. 20. 17:30

프로젝트를 진행하며 손실 함수를 정의하는 부분에서 크로스 엔트로피(cross entropy)가 많이 쓰이는 걸 보고 정확히 어떤 함수인지 궁금해졌다. 크로스 엔트로피에 대해서 더 자세히 알아보기에 앞서 엔트로피의 정의를 다시 한 번 짚고 넘어가야 할 것 같다는 생각이 들었다. 

 

물리학에서 엔트로피는 열역학적으로 시스템의 무질서도나 에너지 분산 정도를 나타낸다. 이 개념을 바탕으로, 정보 이론에서는 엔트로피를 사용하여 결과 집합의 불확실성이나 무질서의 양을 측정하며, 어떤 확률 분포에서 일어나는 사건을 표현하는 데 필요한 평균 정보량을 의미한다. 딥러닝에서는 이 개념이 직접적으로 사용되지 않지만 정보 이론에서의 엔트로피와 비슷한 방식으로 혼잡도나 불확실성을 측정하는데 사용된다. 엔트로피는 아래의 수식으로 정의할 수 있다:

 

$$H(x) = \sum_{i = 1}^{n} p(x_{i})(-log p(x_{i}))$$

 

이때 로그를 취하는 이유는 여러가지가 있지만 그 중 하나는 $y = log\,x\:(0\leq x\leq1)$이 감소함수이므로 사건 $x$가 일어날 확률 $p(x_{i}) \: (0 \leq p(x_{i}) \leq 1)$이 낮을수록 엔트로피가 높아져 일종의 가중치 역할을 하기 때문이다. 

 

크로스 엔트로피는 두 가지 확률 분포가 얼마나 비슷한지를 수학적으로 나타내는 개념으로서, 원래의 크로스 엔트로피는 예측 모형은 실제 분포인 $q$ 를 모르고, 모델링을 하여 $q$ 분포를 예측하고자 하는 것이다. 예측 모델링을 통해 구한 분포를 $p(x)$ 라고 해보자. 실제 분포인 q를 예측하는 $p$ 분포를 만들었을 때, 크로스 엔트로피 는 아래와 같이 정의된다.

 

$$H_{p}(q) = -\sum_{i = 1}^{n} q(x_{i})log\,p(x_{i})$$

 

크로스 엔트로피는두 확률 분포의 차이를 구하기 위해서 사용된다. 딥러닝에서는 실제 데이터 값과 모델의 예측 값의 차이를 구하는데 사용된다. $q$와 $p$가 모두 들어가서 크로스 엔트로피라고 하며, 수식에서 $q$는 실제 확률 분포를, $p$는 모델이 예측한 확률 분포를 의미한다.

 

통상적으로 딥러닝 프레임워크에서는 소프트맥스와 크로스 엔트로피를 함께 적용하여 효율적인 계산을 수행한다. $C$개의 클래스가 있는 분류 문제의 경우, 소프트맥스 함수는 로짓 $z$를 각 클래스에 대한 확률 $p$로 변환한다. 그런 다음, 크로스 엔트로피 손실 함수는 이러한 확률을 실제 레이블과 비교한다. 이렇게 통합된 함수는 종종 소프트맥스 크로스 엔트로피 손실(softmax cross-entropy loss)이라 불리며, 예측값은 일반적으로 확률값으로 나타내고, 실제값은 주로 one-hot 인코딩된 형태로 나타난다. 이는 다음과 같이 정의된다:

 

$$Cross\,Entropy\,Loss = -\frac{1}{N} \sum_{i = 1}^{N} log(softmax(y_{pred}^{(i)})) \cdot y_{true}^{(i)}$$

 

공식에서 $softmax(y_{pred}^{(i)})$는 예측 레이블에 대한 확률을 나타내기 때문에 이 부분을 확률로 치환하여 생각해 보면 N개의 다중 샘플에 대한 평균 크로스 엔트로피 손실임을 알 수 있다. 

 

이 경우 실제값과 예측값이 맞는 경우에는 0으로 수렴하고 값이 틀릴 경우에는 값이 커지기 때문에 두 확률분포가 서로 얼마나 다른지를 나타내주는 정량적인 지표가 된다. 교차 엔트로피가 낮을수록 더 높은 일치를 나타내며 결과적으로 더 나은 모델 성능을 나타낸다고 해석할 수 있다.