상대적 엔트로피, 쿨백-라이블러 발산
빌드업
두 확률분포 $P$ 와 $Q$ 가 있을 때, 이 둘이 얼마나 다른지 궁금할 상황은 얼마든지 쉽게 상상해볼 수 있다.
가령 카메라에 찍힌 숫자가 정확히 어떤 숫자인지에 대해 맞추는 상황을 생각해보자. 숫자 6과 9는 위아래를 정확히 표시하지 않으면 사람도 충분히 헷갈릴만한데, 9에서 아래로 획을 긋는 사람이 있고 아닌 사람이 있으니 수많은 사람들의 필체 데이터를 모으면 막연하게 둘 중 하나를 단언하기는 어려워질 것이다.
이 상황에서 6과 9를 구분하는 인공지능을 만든다고 생각해보자. 이 분류기classifier가 가장 잘 학습을 한다는 것, 그러니까 인간을 가장 잘 모방한다는 것은 인간이 준 데이터에서 모호함을 포함한 확률분포를 가장 유사하게 재현하는 게 될 것이다. 자연스럽게 이 동기는 ‘확률분포 간의 차이’로 이어지고, 이를 최소화하는 기법을 강구해보면 우리가 원하는 인공지능에 한 발 가까워질 것이다.
한편 위의 동기에서 두 확률 분포가 대등할 필요는 없었고, 오히려 대등하면 문제가 있을지도 모른다. 우리가 (레퍼런스) 확률분포 $P$ 에 관심을 가진다고 할때, $Q$ 가 얼마나 $P$ 와 다른지는 상관없지만 비교할 가치도 없을 정도로 다른 것은 곤란하다. 이를테면 $P$ 가 이항분포라고 할 때 $Q$ 가 지수분포 라면 이 둘의 차이는 좁힐 수 없는 어떤 한계가 있으며, 좁힐만큼 좁혀도 본질적으로 너무 다르기 때문이다. 그러니 적어도 이 맥락에서는 $P$ 가 어떤 고정된 기준이었으면 좋겠다.
이제 구체적으로 둘을 비교할 함수를 상상해보자. 거리함수와 같이 무언가의 차이를 생각할 때 가장 나이브한 방법은 함수해석학에서와 같이 단순히 두 확률분포의 확률밀도함수 $p,q$ 의 차를 생각해보는 것이다. $$ D(p,q) \overset{?}{=} \sup | p(x) - q(x) | $$ 문제는 이것이 바로 윗 문단에서 지적했듯 레퍼런스 확률분포 $P$ 에 너무 무관심하는 것이다. 위와 같은 정의만으로는 확률분포가 다를만해서 다른건지 그냥 파라미터가 이상한건지 어떤건지 너무 막연하다. 이쯤에서 샤넌 엔트로피 $H$ 를 생각해보자.
샤넌 엔트로피: $$ H(P) := - \sum p(x) \log_{2} p(x) $$
이는 기대값의 개념으로 보았을 때 확률분포 $p(x)$ 에 대한 연속함수 $- \log_{2} p(x)$ 의 평균인 $E \left( - \log_{2} p(X) \right)$ 이다. 이제까지의 논의에서 엔트로피를 잘 응용하면 레퍼런스 확률분포 $P$ 에 관심을 가지면서도 둘 사이의 차이를 적절하게 나타내는 함수를 정의할 수 있을 것 같다. 이에 크로스 엔트로피를 떠올려보자.
크로스 엔트로피: $$ H (P,Q) := - \sum p(x) \log_{2} q(x) $$
복잡하게 생각하지 말고 대충 위에서 언급한 요소만 다 때려넣어보면 다음과 같은 함수 $D_{\text{KL}} \left( P , Q \right)$ 를 생각해볼 수 있다.
$$ \begin{align*} & \left| E_{P} \left[ \log_{2} q(X) - \log_{2} p(X) \right] \right| \\ =& \left| - \sum p(x) \log_{2} q(x) + \sum p(x) \log_{2} p(x) \right| \\ =& \left| H \left( P, Q \right) - H \left( P \right) \right| \\ \overset{?}{=}& D_{\text{KL}} \left( P , Q \right) \end{align*} $$
정의
두 확률분포 $P, Q$ 의 확률질량함수 $p,q$ 혹은 확률밀도함수 $f,g$ 가 주어져 있다고 하자. 다음과 같이 정의된 $D_{\text{KL}} \left( P \| Q \right)$ 를 $Q$ 에서 $P$ 로의 쿨백-라이블러 발산kullback-Leibler Divergence 또는 상대적 엔트로피relative Entropy라고 한다.
$$ \begin{align*} D_{\text{KL}} \left( P \| Q \right) :=& H(P,Q) - H(P) \\ \overset{\text{or}}{=}& - \sum p(x) \log_{2} {{ q(x) } \over { p(x) }} \\ \overset{\text{or}}{=}& - \int_{\mathbb{R}} f(x) \log_{2} {{ g(x) } \over { f(x) }} dx \end{align*} $$
설명
$$ D_{\text{KL}} \left( P \| Q \right) = - \sum p_{k} \log_{2} {{ q_{k} } \over { p_{k} }} $$
정의에서 대뜸 위의 수식만 보고 쿨백-라이블러 발산의 의미를 이해하는 것은 수학 전공자에게도 쉽지만은 않은 일이다. 수식을 받아들이는 핵심 키는 바로 로그 $\log_{2}$ 다. $$ \begin{align*} D_{\text{KL}} \left( P \| Q \right) =& - \sum p_{k} \log_{2} {{ q_{k} } \over { p_{k} }} \\ =& - \sum p_{k} \log_{2} q_{k} - \left( - \sum p_{k} \log_{2} p_{k} \right) \\ =& H ( P, Q ) - H ( P ) \end{align*} $$ 빌드업에서 언급했던것처럼 단순한 ‘차’가 분수꼴로 바뀌는 이유가 로그다. 로그 안의 ${{ q } \over { p }}$ 를 밖으로 찢어내면 뺄셈이 나오고 그제야 이것이 무슨 의미인지 알 것도 같을 것이다. 물론 정확히 알기 위해서는 이것만으로는 부족하고, 샤넌 엔트로피와 크로스 엔트로피에 대해서도 똑바로 공부를 해두어야한다.
괴리를 나타내는 간단한 측정법
깁스 부등식에 따르면 크로스 엔트로피는 항상 단독 엔트로피보다 크거나 같기 때문에 항상 $D_{\text{KL}} \ge 0$ 이다. 한편 두 분포가 정확히 같을 때, 그러니까 $p=q$ 일 때는 $p/q = 1$ 이므로 $$ D_{\text{KL}} \left( P | Q \right) = - \sum p(x) \log_{2} {{ q(x) } \over { p(x) }} = - \sum p(x) \cdot 0 = 0 $$ 이고, 상식대로 $D_{\text{KL}} = 0$ 을 얻는다. 직관적인 의미로 생각해보자면 쿨백-라이블러 발산 자체가 $Q$ 가 $P$ 와 얼마나 다른지 그 정도를 나타내기 위한 것이므로 당연한 일이다.
거리함수가 아니다
$$ D_{\text{KL}} \left( P \| Q \right) \ne D_{\text{KL}} \left( Q \| P \right) $$
일반적으로 위와 같이 대칭성이 성립하지 않는다. 이는 기대값을 계산할 때 레퍼런스 확률분포를 $P$ 로 두기 때문이다. 이것이 $Q$ 로 바뀐다면 쿨백-라이블러 발산 역시 얼마든지 바뀔 수 있는데, $P$ 입장에서는 $Q$ 가 이질적으로 느껴져도 $Q$ 입장에선 $P$ 랑 닮았다고 생각할 수 있다고 받아들이면 된다. 이러한 상대성 때문에 쿨백-라이블러 발산은 거리함수가 되지 못하며, 상대적relative 엔트로피라 불리기도 하는 것이다.
머신러닝
머신러닝에서는 쿨백-라이블러 발산보다는 크로스 엔트로피가 더욱 널리 알려져있다. 사실 정보이론이 아닌 기계학습에서 둘은 개념적으로 큰 차이가 없으며, 굳이 굳이 따지자면 오히려 쿨백-라이블러 발산이 더 적절한 함수긴 하지만 실제 계산에서 크로스 엔트로피가 유리하기 때문이다.
쿨백-라이블러 발산 대신 크로스 엔트로피를 쓰는 이유: … 단독 엔트로피 $H(p)$ 에 대해 나타내보면 $$ H(p,q) = H(p) + D_{\text{KL}} \left( p \| q \right) $$ 으로, $p=q$ 일 때 $D_{\text{KL}} \left( p \| q \right) = 0$ 인 목적 함수(손실 함수)로 쓰인다. … $H(p)$ 가 단독, (레퍼런스) 엔트로피라면 계산상으로 바뀔 일이 없으니 … 그러나 컴퓨터 입장에서 보자면 $$ \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*} $$ 둘 중 계산하기 쉬운 쪽은 명명백백하게 크로스 엔트로피다. …
따라서 개념 공부는 쿨백-라이블러 발산으로, 실제 사용은 크로스 엔트로피로 하는 것이 바람직하다. 물론 이들이 얼마나 같은지, 어떻게 다른지를 정확하게 이해하고 못하고는 이론가로써 큰 차이가 있을 것이다.