[통계] KL Divergence
KL Divergence(발산)을 설명하기 위해 먼저 Entropy와 CrossEntropy에 대해 설명할 필요가 있다.
Entropy
Entropy는 확률 분포의 불확실성(정보량)을 측정하는 값으로,
어떤 사건에 대한 확률이 높으면 해당 사건 확실성이 높아지기 때문에 확률의 역으로 표현된 불확실성의 기대값을 구한다.
확률 분포 P에 대한 Entropy는 $H(P) = \sum \log_{2}{\frac{1}{P(x)}} \cdot P(x) = -\sum \log_{2}{P(x)} \cdot P(x)$ 로 표현된다.
CrossEntropy
아래와 같은 확률 분포가 있다고 하자.
- P: 실제 분포 (실제 데이터 분포)
- Q: 추정 분포 (머신에서 추정한 분포)
CrossEntropy는 실제 분포 P에서 나온 데이터를 추정 분포 Q로 표현할 때의 Entropy를 나타낸다.
만약 추정 분포 Q가 실제 분포 P와 동일하다면 CrossEntropy 값은 P에 대한 Entropy 값과 동일하다.
CrossEntropy는 다음과 같은 수식으로 표현된다.
$$H(P, Q) = \sum \log_{2}{\frac{1}{Q(x)}} \cdot P(x) = - \sum \log_{2}{Q(x)} \cdot P(x) $$
KL Divergence
KL Divergence는 실제 분포 P와 추정 분포 Q 간의 상대적인 차이를 측정하는 값이다.
KL Divergence는 CrossEntropy: H(P, Q)와 Entropy: H(P)의 차이로 표현된다.
$$D_{KL}(P||Q) = H(P,Q) - H(P)$$
즉, 실제 데이터에 대해 추정 분포 Q일 때의 Entropy와 실제 분포 P일 때의 Entropy의 차이를 봄으로써 추정 분포 Q에서 추가로 갖고 있는 상대적인 Entropy를 확인하는 것이다.
또한 위 수식을 풀어서 쓰면 더 간단한 형태로 표현될 수 있다.
$$
D_{KL}(P||Q) = H(P,Q) - H(P) \\
= -\sum \log{Q(x)} \cdot P(x) - (-\sum \log{P(x)} \cdot P(x)) \\
= \sum \log{\frac{P(x)}{Q(x)}} P(x)
$$
KL Divergence를 그래프로 나타내면 아래와 같다. (보라색 점선이 $D_{KL}(P||Q)$이다)
위 그래프에서 Q(x)가 P(x)와 동일해지는 시점에서 두 분포의 차이가 없으므로 $D_{KL}(P||Q)$값이 0이 되는 것을 확인할 수 있다.
KL Divergence는 크게 두 개의 특징이 있다.
KL Divergence는 0 이상
직관적으로 CrossEntropy: H(P, Q)값은 Entropy: H(P)가 최소값이기 때문에, H(P, Q) - H(P)값은 0 이상일 수 밖에 없다.
수식적인 증명은 여기를 참고하길 바란다.
비대칭적이다
수식을 보면 알겠지만 $D_{KL}(P||Q) \neq D_{KL}(Q||P)$이다.
- $D_{KL}(P||Q) = \sum \log{\frac{P(x)}{Q(x)}} P(x)$
- $D_{KL}(Q||P) = \sum \log{\frac{Q(x)}{P(x)}} Q(x)$
그러므로 비대칭적인 특징을 갖고있으며, 이는 KL Divergence가 거리의 개념이 아니라는 것을 의미한다.
(거리는 scalar이고, a에서 b로 가는 거리나 b에서 a로 가는 거리나 서로 같은 scalar 값을 갖기 때문에)
참고
- https://hyunw.kim/blog/2017/10/27/KL_divergence.html