교차 엔트로피(Cross-Entropy) 손실함수의 도출 방법을 정리한다.
우선 엔트로피의 정의부터 살펴보자.
엔트로피
가장 기본이 되는 개념인 정보 엔트로피에 대한 기본 설명은 이전 글에서 충분히 설명하였기에 넘어가기로 한다.
정보 엔트로피, 또는 엔트로피는 정보의 기댓값을 의미하며 수학적으로는 로그확률에 대한 평균으로 정의된다.
Shannon 박사는 엔트로피를 정보량(bits) 관점으로 정의하였기에 밑(base)을 2로 하는 로그를 사용하였다.
하지만 로그의 밑은 로그의 성질을 이용해 임의로 바꿀 수 있기에 이후로는 미분에 편리한 자연로그(log)를 사용할 것이다.
$$ H(p) = E[-\log{P(X)}] = – \sum_{x_i \in X} P(x_i) * \log{P(x_i)} $$
위 식을 통해 엔트로피가 확률 와 확률변수 를 바탕으로 계산한 확률분포의 평균임을 알 수 있다.
교차 엔트로피 H(p, q)는 확률분포 P를 따르는 데이터에 대해 잘못된 확률분포 Q를 이용하여 추정한 평균 비트수를 의미하며 수학적으로는 로그확률 Q에 대한 확률분포 P의 평균으로 정의한다.
$$ H(p, q) = E_p[-\log{q}] = – \sum_{x_i \in X} P(x_i) * \log{Q(x_i)} $$
교차 엔트로피는 정의에서부터 비대칭(non-symmetric) 연산임을 알 수 있다. 만약 확률분포 P와 Q가 동일하다면 교차 엔트로피는 확률분포 P의 정보 엔트로피가 된다. 즉, 확률분포 Q로 데이터를 표현하는데 확률분포 P를 이용할 때와 동일한 정보량이 필요함을 의미한다.
상대 엔트로피 H(p||q)는 확률분포 P를 확률분포 Q로 바꾸기 위해 필요한 평균 비트수를 의미하며 수학적으로는 로그확률P, Q의 차이에 대한 확률분포 P의 평균으로 정의한다.
$$
\begin{align*}
H(p||q) &= D_{KL}(p||q) \\
&= E_p[-\log{\frac{q}{p}}] \\
&= – \sum_{x_i \in X} P(x_i) * \log{\frac{Q(x_i)}{P(x_i)}} \\
&= – \sum_{x_i \in X} P(x_i) * \log{Q(x_i)} – \sum_{x_i \in X} P(x_i) * \log{P(x_i)} \\
&= H(p, q) – H(p)
\end{align*}
$$
즉, 상대 엔트로피는 교차 엔트로피에서 정보 엔트로피를 뺀 것이며 이는 곧 확률분포 P로부터 샘플링된 데이터를 확률분포 Q로 잘못 추정하여 계산한 정보량에 확률분포 P의 정보량을 뺀 것으로 볼 수 있다. 그러므로 상대 엔트로피는 실제 확률분포가 P인데 잘못된 확률분포 Q를 사용했을 때의 정보량 차이를 의미한다. 이로 인해 교차 엔트로피를 확률분포 P와 Q 간의 거리(distance)로 사용할 수 있다.
상대 엔트로피 또한 교차 엔트로피와 마찬가지로 비대칭 연산임을 알 수 있다. 상대 엔트로피는 논문의 저자 Kullback과 Leibler, 그리고 정보기하의 divergence (generallized squared distance) 개념을 종합하여 KL-divergence라고 말하기도 한다.
만약 확률분포 P와 Q가 동일하다면 상대 엔트로피는 0이 된다. 즉, 실제 확률분포가 P인데 잘못된 확률분포 Q를 사용했을 때의 정보량 차이가 없음을 의미한다.
교차 엔트로피
교차 엔트로피가 확률분포 P를 따르는 데이터에 대해 잘못된 확률분포 Q를 이용하여 추정한 평균 비트수를 의미하는 만큼 이에 대한 활용을 생각해볼 수 있다. 예를 들어 분류 모델에서 추정하고자 하는 truth 확률분포 P와 분류 모델이 추정한 확률분포 Q가 있다고 하자. 이 때 확률분포 Q를 이용한 추정 정보량이 확률분포 P를 이용한 추정 정보량과 비슷하도록 분류 모델을 학습시킬 수 있다. 다시 말해 분류모델을 H(p, q)를 최소화하는 방향으로 학습시킴을 말한다.
이 때, 교차 엔트로피가 아니라 상대 엔트로피를 사용할 수도 있겠지만 상대 엔트로피는 교차 엔트로피로부터 파생되어 정의되는 것이기에 굳이 동일한 지표를 H(p)를 추가하여 사용할 이유가 없다.
이제 실제 문제에 적용해보자. 실제 데이터 y ()와 추정확률 p ()에 대해 교차 엔트로피를 적용하면 다음과 같은 이진 분류기 손실 함수를 적용할 수 있다.
$$
\begin{align*}
BCE_{loss} &= – \frac{1}{N} \sum_{i=1}^{N} P(x_i) * \log{Q(x_i)} \\
&= – \frac{1}{N} \sum_{i=1}^{N}{y_i \log{p_i} + (1-y_i) \log{(1-p_i)}}
\end{align*}
$$
헷갈려보이나 참(y)과 거짓(1-y), 그리고 참일 추정확률(t)과 거짓일 추정확률(1-t)을 사용했을 뿐이다.
물론 클래스가 두 개이기 때문에 굳이 (1-p)와 같이 사용하지 않고 클래스 과 에 대한 확률 과 를 사용해도 되나 굳이 그렇게 쓸 필요가 없다. 참고로 이렇게 하나의 확률를 바탕으로 교차 엔트로피를 정의하는 것을 이진 교차 엔트로피(Binary Cross-Entropy, BCE)라 하고 다중 클래스에 대해 교차 엔트로피를 정의하는 것을 범주 교차 엔트로피(Categorical Cross-Entropy, CCE)라 한다. 당연히 이진 분류문제에 범주 교차 엔트로피를 사용해도 무방하다.
지금까지는 이진 교차 엔트로피를 정보이론을 통해 살펴봤으나 이를 확률론적으로 해석할 수도 있다. 예를 들어 참일 확률이 p인 베르누이 분포를 생각하자.
$$ Bernoulli(k; p) = p^k (1-p)^{1-k} (k \in \{0, 1\}) $$
이 때, 베르누이 분포의 가능도(likelihood)는 부호가 반대인 이진 교차 엔트로피가 됨이 자명하다.
$$
\begin{align*}
\log{Bernoulli(k; p)} &= \log{(p^k (1-p)^{1-k})} \\
&= p \log{k} + (1-p) \log{(1-k)}
\end{align*}
$$
범주 교차 엔트로피는 볼 것도 없다. 이진 교차 엔트로피가 하나의 확률을 사용하므로 실제 데이터 차원과 추정확률 차원도 하나였지만 범주 교차 엔트로피에서는 둘의 차원 모두 클래스 개수가 된다. 그러므로 실제 데이터 y ()와 추정확률 p ()에 대해 다음과 같은 다중 클래스 분류기 손실 함수를 적용할 수 있다.
$$
\begin{align*}
CCE_{loss} &= – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^{N} P(x_i) * \log{Q(x_i)} \\
&= – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^{N} y_i * \log{p_i}
\end{align*}
$$
이 때, 는 클래스별 loss를 합산하기 위한 1벡터이다.
y와 t가 크기 k인 벡터이기 때문에 아주 자명한 결과가 나온다. 참고로 이 때 분류모델의 추정값은 소프트맥스로 계산하는 것이 편리하다. 소프트맥스는 로짓을 다중 클래스 분류문제에 적용한 것이기 때문이다. [이전 글]
참고로 범주 교차 엔트로피 또한 각 클래스 별로 정의되는 베르누이 분포를 통해 확률론적으로 해석할 수 있다. 결국 이진 교차 엔트로피나 범주 교차 엔트로피나 동일한 이야기라는 것이다.
교차 엔트로피의 미분
모델을 학습하기 위해서는 손실 함수의 미분이 잘 정의되어야 한다.
이진 교차 엔트로피나 범주 교차 엔트로피를 미분해보자.
물론 둘은 결국 같은 것임을 알고 있기에 결과가 동일할 것을 알고 있다.
먼저 이진 분류기의 출력층이 다음과 같을 때
$$ p = \sigma(wx) $$
이진 교차 엔트로피를 미분하면 다음과 같다.
$$
\begin{align*}
\frac{\partial}{\partial{w}} BCE_{loss} &= \frac{\partial}{\partial{w}} – \frac{1}{N} \sum_{i=1}^{N}{y_i \log{p_i} – (1-y_i) \log{(1-p_i)}} \\
&= – \frac{1}{N} \sum_{i=1}^{N}{(\frac{y_i}{p_i} + \frac{1-y_i}{1-p_i})} * \frac{\partial{p_i}}{\partial{w}}
\end{align*}
$$
이 때,
$$
\begin{align*}
\frac{\partial}{\partial{w}} p_i &= \frac{\partial}{\partial{w}} \sigma(w_i x_i) \\
&= \sigma(w_i x_i) (1 – \sigma(w_i x_i)) * x \\
&= p_i (1 – p_i) * x
\end{align*}
$$
이므로 다음의 결과를 얻을 수 있다.
$$
\begin{align*}
\frac{\partial}{\partial{w}} BCE_{loss} &= \frac{1}{N} \sum_{i=1}^{N}{x_i * (p_i – y_i)} \\
&= \frac{1}{N} * x^T (p – y)
\end{align*}
$$
범주 교차 엔트로피라고 크게 다르지 않다.
다만 한 가지 가장 큰 차이점은 편미분이다.
이진 교차 엔트로피는 시그모이드 함수의 출력부를 중심으로 편미분하기에 를 사용하나 범주 교차 엔트로피는 소프트맥스 함수의 입력부를 중심으로 편미분하기에 가 아니라 를 사용한다.
개인적으로 왜 굳이 통일성을 해쳐야하는지 아직 의문이 풀리지 않았으나 거의 모두가 이 notation을 사용하므로 필자도 따르기로 하였다.
먼저 다중 클래스 분류기의 출력층이 다음과 같을 때
$$ p = softmax(z) = \frac{e^{z}}{\sum_{i=1}^{k}{e^{z_i}}} $$
범주 교차 엔트로피를 미분하면 다음과 같다.
$$
\begin{align*}
\frac{\partial}{\partial{z}} CCE_{loss} &= \frac{\partial}{\partial{z}} – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^N{P(x_i) * \log{Q(x_i)}} \\
&= – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^N{\frac{y_i}{p_i} * \frac{\partial{p_i}}{\partial{z_i}}}
\end{align*}
$$
이 때,
$$
\begin{align*}
\frac{\partial}{\partial{z_i}} p_i &= \frac{\partial}{\partial{z_i}} softmax(z_i) \\
&= \frac{\partial}{\partial{z_i}} \frac{e^{z_i}}{\sum_{j=1}^{k}{e^{z_j}}} \\
&= softmax(z_i) (1 – softmax(z_i)) \\
&= p_i (1 – p_i)
\end{align*}
$$
이므로 다음의 결과를 얻을 수 있다.
$$
\begin{align*}
\frac{\partial}{\partial{z}} CCE_{loss} &= – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^{N}{y_i (1 – p_i)} \\
&= – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^{N}{(y_i – y_i * p_i)} \\
&= – \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^{N}{(y_i – p_i)} \\
&= \frac{1}{N} \mathbb{1}_k^T \sum_{i=1}^{N}{(p_i – y_i)}
\end{align*}
$$
CCE의 미분은 BCE의 미분과 달리 가 아니라 를 사용하기에 가 붙지 않는다는 점을 확인할 수 있다. 하지만 이걸 제외하면 결국 BCE와 CCE는 동일한 형태임을 다시 한 번 확인할 수 있다.