크로스 엔트로피
개요
크로스 엔트로피cross Entropy는 두 확률분포를 구분하기 위해 필요한 평균 비트수로써, 보통 참으로 가정되는 (레퍼런스) 확률분포 $p$ 와 이를 추정하기 위한 (예상) 확률분포 $q$ 사이에서 정의된다.
정의 1
이산
두 이산확률분포의 확률질량함수 $p,q$ 가 주어져있다고 하자. 두 확률분포의 크로스 엔트로피 $H (p,q)$ 는 다음과 같이 정의된다. $$ H (p,q) := - \sum p(x) \log_{2} q(x) $$
연속
측도 공간 $( \Omega , \mathcal{F}, m)$ 의 $m$ 이 측도라고 하자. $f,g$ 가 각각 두 확률측도 $P,Q$ 의 측도 $m$ 에 대해 절대연속인 확률밀도함수라고 하면 두 확률분포의 크로스 엔트로피 $H (P,Q)$ 혹은 $H(f,g)$ 는 다음과 같이 정의된다. $$ H (P,Q) = H(f,g) = - \int f(x) \log_{2} g(x) dm(x) $$
설명
연속형 크로스 엔트로피의 정의가 난해한 것은 그닥 신경쓰지 않아도 된다.
머신러닝
2010년 이후로는 크로스 엔트로피가 머신러닝, 특히 분류기classifier의 학습과정에서 손실 함수로 활발하게 쓰이고 있다. 두 확률분포의 괴리를 나타내는 쿨백-라이블러 발산 $D_{\text{KL}} \left( p \| q \right)$ 와 단독 엔트로피 $H(p)$ 에 대해 나타내보면 $$ H(p,q) = H(p) + D_{\text{KL}} \left( p \| q \right) $$ 으로, $p=q$ 일 때 $D_{\text{KL}} \left( p \| q \right) = 0$ 인 목적 함수(손실 함수)로 쓰인다. 분류 문제의 맥락에서 $p$ 는 실제 데이터에서 나온 확률―예로써 사진 속 피사체가 개인지 고양이인지를 나타낸 라벨링이고, $q$ 는 분류기가 계산한 결과―개일 확률 70%, 고양이일 확률 20%, 비행이기일 확률 5%, … 정도로 생각하면 된다. 이것이 거의 일치한다는 것, 그러니까 $p \approx q$ 이라는 것은 분류기가 라벨링을 거의 정확하게 예측하며 크로스 엔트로피는 최소화된다는 의미가 될 것이다.
수학에 익숙하고 예리한 독자라면 언뜻 목적 함수에서 $D_{\text{KL}} \left( p \| q \right)$ 만이 중요하지 않은가 궁금할 것이다. $H(p)$ 가 단독, (레퍼런스) 엔트로피라면 계산상으로 바뀔 일이 없으니 그냥 $D_{\text{KL}} \left( p \| q \right)$ 자체를 손실 함수로 사용하는게 효율적으로 보인다. 그러나 컴퓨터 입장에서 보자면 $$ \begin{align*} H (p,q) =& - \sum p(x) \log_{2} q(x) \\ D_{\text{KL}} \left( p \| q \right) =& - \sum p(x) \log_{2} {{ q(x) } \over { p(x) }} \end{align*} $$ 둘 중 계산하기 쉬운 쪽은 명명백백하게 크로스 엔트로피다. 이러나 저러나 최적화(학습) 결과는 똑같은데 굳이굳이 $q(x) / p(x)$ 를 계산할 필요가 없다. $H(p)$ 가 바뀔 일이 없으니 $D_{\text{KL}} \left( p \| q \right)$ 를 쓰는 게 아니라, 거꾸로 크로스 엔트로피를 쓰는 이유가 된다. 결론은 ‘손실함수의 맥락에서 크로스 엔트로피와 쿨백-라이블러 발산은 개념적으로 정확히 같다’는 것이다.
물론 이는 컴퓨터의 계산이고, 실제로 행렬분해를 다루는 논문 등에서는 수식적인 전개의 편의를 위해 크로스 엔트로피가 아닌 쿨백-라이블러 발산을 쓰기도 한다.
표기
참고로 $H(X,Y)$ 와 같은 표현은 조인트 엔트로피와 겹치는데, 의외로 크로스 엔트로피 자체가 단독으로 쓰이는 경우는 보통 위에서 언급한 머신러닝의 맥락일 때 뿐이라서 공부할 때 빼고는 별로 헷갈릴 일은 없다. 다만 둘의 표현이 겹친다는것을 알아는 두자.