Kullback-Leibler Divergence

이 포스트는 Will Kurt의 글 “Kullback-Leibler Divergence Explained”를 한국어로 번역한 글입니다.
원본 링크: https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained


이 포스트에서는 Kullback-Leibler Divergence (KL Divergence)라고 불리우는 두개의 확률 분포를 비교하는 방법에 대해 살펴보겠습니다. 확률과 통계 분야에서 우리는 자주 관찰된 데이터 또는 복잡한 확률 분포를 간단하고 근사화된 확률 분포로 대체하곤 합니다. KL Divergence는 이러한 근사방법을 사용했을 때 “얼마나 많은 정보가 손실되었는가”를 측정하도록 도와줍니다.

하나의 문제를 살펴보면서 탐험을 시작해봅시다. 우리가 멀리 떨어진 새로운 행성을 방문하는 우주 과학자라고 가정해보죠. 그러던 와중에 연구하고자 하는 종의 사나운 벌레를 발견했습니다. 우리는 이 벌레들이 일반적으로 10개의 이빨을 가지고 있음을 확인했습니다.  그런데 이 벌레의 이빨 중에 일부가 사라져 없는 것도 있다고 해봅시다. 많은 샘플을 수집한 다음 각 벌레에게 있는 이빨의 수에 대한 경험적 확률 분포를 알아내게 되었습니다.

 

이 데이터는 완벽하지만 조금 문제가 있습니다. 현재 우리는 지구로부터 멀리 떨어져있고 이 데이터를 지구로 보내는 비용이 많이 든다고 합니다. 우리가 원하는 것은 이 데이터를 1개나 2개의 간단한 파라미터로서 표현이 되도록 간단한 모델로 줄이는 것입니다.  하나의 선택지는 이빨의 분포를 균등분포로서 표현하는 것입니다.  이것으로부터 우리는 11개의 가능한 값이 있음을 알게 되었고 따라서 각 이빨 갯수에 1/11의 균등 확률값을 할당할수 있게 되었습니다.

그런데 불행하게도 우리의 데이터는 균등하게 분포되어 있지가 않습니다.  또 다른 선택지는 데이터를 이항 분포를 이용하여 모델링해보는 것입니다.  이 경우에 우리가 해야하는 것은 이항 분포의 확률 파라미터를 예측하는 것입니다. 만약 우리가 n번의 시행을 하고 확률이 p라면 기대값은 E[x] = n*p입니다. 이 경우에는 n=10이고, 기대값은 데이터의 평균값인 5.7입니다. 따라서 p는  5.7 = 10*p 를 만족하는 p는 0.57이 되겠습니다. (따라서 해당 이항 분포의 파라미터 값은 n=10, p=0.57이 되겠습니다)

  • (역자주) 5.7이라는 값은 위의 Distribution of Teeth (Observed)에서 (이빨의 갯수)*(해당 갯수가 나올 관찰된 확률)의 합입니다.  원본 포스트만 보고서는 정확한 확률 값을 알수가 없어서 원글 저자에게 데이터를 요청했고 다음과 같은 데이터를 얻을수 있었습니다.
  • teeth.counts Freq observed_probability
    1 0 9 0.001384615
    2 1 78 0.012
    3 2 305 0.046923077
    4 3 752 0.115692308
    5 4 1150 0.176923077
    6 5 1166 0.179384615
    7 6 899 0.138307692
    8 7 460 0.070769231
    9 8 644 0.099076923
    10 9 533 0.082
    11 10 504 0.077538462
  • 여기서 (0*0.001384615)+(1*0.012)+(2*0.046923077)+(3*0.115692308)+(4*0.176923077)+(5*0.179384615)+(6*0.138307692)+(7*0.070769231)+(8*0.099076923)+(9*0.082)+(10*0.077538462)=0.5688769234 \approx  5.7 이 됩니다.

이는 아래와 같은 이항 분포를 보여줍니다.

원본 데이터와 비교해봤을때 어느 것이 더 유사할까요?

잘 감이 안오시죠? ㅎ 이를 비교하기 위한 다양한 측정 방법이 있는데, 우리의 주요 관심사는 보내야할 정보의 양을 줄여야 한다는 점입니다. 더 나은 최적의 테스트 방법은 우리의 원본 데이터로부터 어떤 분포가 대부분의 정보를 보존하는지를 알아보는 것입니다. 바로 이것이 Kullback-Leibler Divergence가 나오게 된 이유입니다.

The entropy of our distribution

KL Divergence는 정보 이론에서 그 유래를 찾아볼 수 있습니다. 정보 이론의 주요 목적은 얼마나 많은 정보가 데이터에 들어있는지 정량화하는 것입니다. 정보이론에서 가장 중요한 측정 기준은 엔트로피입니다.  이는 보통 H로 표기됩니다. 어떤 확률 분포에 대한 엔트로피의 정의는 다음과 같습니다.

$$H=-\sum_{i=1}^{N} {p(x_i)}\cdot log{p(x_i)}$$

만약 우리가 (밑이 2인 로그)를 사용한다면 엔트로피를 “정보를 인코딩하는데 필요한 최소한의 비트 수”로 해석할 수 있습니다. 이 경우에 정보는 우리의 경험적 분포를 고려한 이빨 갯수의 각 관찰일 것입니다. 우리가 관찰한 데이터가 주어졌을 때, 확률분포는 3.12 bits의 엔트로피를 가집니다. 이러한 비트 수는 우리가 정보를 인코딩하는데 얼마나 많은 비트가 필요한지 그 하한을 알려줍니다.

하지만 엔트로피는 이러한 압축을 달성하기 위해서 어떤 최적의 인코딩 방법을 사용해야 하는지 알려주지는 않습니다.  최적의 인코딩 방법을 찾는것은 흥미로운 주제이지만 KL divergence를 이해하는데 필수는 아닙니다. 엔트로피가 가지는 중요한 점은 정보를 인코딩하는데 우리가 필요한 비트수의 이론적인 하한을 계산할수 있다는 점입니다.  이제 이를 정량화할수 있고 우리는 관찰된 확률분포를 파라미터화된 근사추정 분포로 대체할 때 데이터 관점에서 얼마나 많은 정보가 손실되는지 측정하려고 합니다.

Measuring information lost using Kullback-Leibler Divergence

Kullback-Leibler Divergence는 엔트로피에 대한 식에서 조금 변경된 것입니다. 확률 분포 p를 가지기 보다는 근사 분포 q를 사용하려는 것이죠.  그리고 그 차이를 다음과 같이 로그값으로 계산하는 것입니다.
D_{KL}(p||q) = E[\log{p(x)}-\log{q(x)}]

좀 더 일반적인 방법은 KL divergence를 아래와 같이 쓰는 것입니다.$$D_{KL}(p||q)=\sum_{i=1}^{N} {p(x_i)}\cdot \log{\frac{p(x_i)}{q(x_i)}}$$

(왜냐하면 \log{a} - \log{b} = \log{\frac{a}{b}} 이므로)

KL divergence를 이용하여 우리는 어떤 확률 분포를 다른 확률 분포로 근사할 때 정확히 얼마나 많은 정보가 손실되는지를 계산할 수 있습니다. 다시 우리의 데이터로 돌아가 봅시다.

Comparing our approximating distributions

이제 우리는 2개의 근사화된 확률 분포에 대해 KLD를 계산할 수 있습니다.

첫번째로 균등 분포에 대해서는

D_{KL}(Observed||Uniform) = 0.338

두번째로 이항 분포에 대해서는

D_{KL}(Observed||Binomial) = 0.477

이항 분포 근사를 이용해서 잃어버린 정보의 양을 볼 수 있듯이, 이는 균등 분포 근사의 경우보다 더 손실이 많습니다. 따라서 만약 우리가 관찰한 데이터를 표현하기 위해서 하나를 선택해야 한다면 균등 분포를 선택하는 것이 더 좋을 것입니다.

Divergence not distance

앞에서 살펴본 이러한 예제는 사실 KL divergence를 거리 측정 도구로서 사용하는 것입니다.  그러나 KL divergence는 두 분포 사이의 거리를 측정하기 위해 만들어진것은 아닙니다. 왜냐하면 KL divergence는 대칭적이지 않기 때문이죠. 예를 들어, 반대로 생각해서 우리가 관측된 자료에 대한 확률 분포를 이용해 이항 분포를 근사화한다면 매우 다른 결과를 얻습니다. (교환 법칙이 성립 하지 않는 다는 의미)

D_{KL}(Binomial||Observed) = 0.330

직관적으로도 이것은 이상합니다.

(예를 들어 거리를 측정하는 도구로서 사용한다고 생각했을 때 a에서 출발하여 b에 도착하는 거리를 재는 것과 b에서 출발하여 a에 도착하는 거리를 재는 것이 같은 거리를 가져야하는데 그렇지 않다는 의미)

Optimizing using KL Divergence

(생략 ㅠㅠ)

Variational Autoencoders and variational Bayesian methods

만약 여러분이 신경망에 대해서 잘 알고 계신다면, 이전 섹션 이후에 우리가 어디로 향하고 있는지 잘 인지할수 있으실 겁니다.  신경망은 좀더 일반적인 개념으로서 함수 근사기라고 할수 있습니다. 이는 다양한 아주 복잡한 함수를 학습하는 용도로 신경망을 사용할수 있다는 것을 의미합니다. 신경망을 학습하기 위해 주요한 것은 신경망에 얼마나 학습되고 있는지를 알릴 수 있는 적합한 목적 함수를 사용하는 것에 있습니다. 그리고 여러분은 이런 목적 함수의 손실을 최소화 함에 의해서 신경망을 학습시킬수 있습니다.

우리가 지금까지 보아온 대로,  확률 분포를 근사할 때 KL divergence를 얼마나 많은 정보가 손실되는지를 측정하기 위해서 사용할 수 있습니다. KL divergence와 신경망을 조합하는 것은 매우 복잡한 근사 분포를 학습할 수 있게 합니다.  데이터 집합에서 정보를 근사하는 최적의 방법을 학습하는 일반적인 접근법은 “Variational Autoencoder”라고 불립니다.  Variational Autoencoder에 대한 세부사항을 알고 싶으시면 이 문서도 한번 참고해 보시기 바랍니다.

여기서 좀 더 일반적인 개념은 Variational Bayesian Methods입니다. 다른 글에서 우리는 확률 문제의 범위를 푸는 데 있어서 Monte Carlo simulations가 얼마나 강력한가를 살펴보았습니다. Monte Carlo simulations가 Bayesian inference에 대해 필요한 어려운 적분 문제들을 푸는데 도움을 줄수 있지만 이런 방법들은 계산적으로 부담이 많이 됩니다. Variational Autoencoder를 포함한 Variational bayesian method는 최적의 근사 분포를 만들어 내기 위해서 KL divergence를 내부적으로 사용합니다. Variational inferences에 대해서 더 공부하시려면 Edward library for python을 살펴보세요.

 


(역자주) 한글로 매끄럽게 번역하려니까 어렵네요 ㅠ 그래도 훈련이라고 생각하고 한번 해봤습니다! ㅎ 중간에 Optimizing using KL Divergence 부분도 얼른 해서 업데이트 하도록 하겠습니다! ㅎ 다음 아티클 번역은 Variational Autoencoders Explained 이걸로! ㅎ

 

4 comments

최근 댓글