brunch

You can make anything
by writing

C.S.Lewis

by Chris송호연 Feb 01. 2018

정보 이론 2편: KL-Divergence

사라 코너를 지키기 위해 과거로 시간여행을 떠납니다.




여러분은 터미네이터로부터 사라 코너를 지키기 위해 과거로 시간여행을 떠납니다. Skynet의 비밀정보, 각 로봇에 설치된 GPU의 숫자를 과거로 가져가야만 합니다. 하지만, 시간 여행을 떠날 때 용량제한 때문에 여러분이 갖고 있는 데이터를 다 가져갈 수가 없습니다. 


로봇의 숫자만 수백만이 넘습니다. 데이터를 줄이기 위해 우리는 로봇에 설치된 GPU의 숫자를 분포로 표현해보기로 했습니다. 빨간색 실선이 실제 데이터입니다. 하지만, 우리는 용량 제한 때문에 딱 두개의 숫자만 전송할 수 있습니다. 그래서 정규분포로 데이터를 압축해서 전송하기로 했습니다. (정규분포는 평균과 분산만으로 데이터를 표현할 수 있기 때문이죠)


실제 데이터는 이렇습니다.


x = [0,1,2,3,4,5,6,7,8,9]

y = [.01,.01,.02,.03,.1,.1,.4,.3,.02,.01]

실제 스카이넷 로봇들에 장착된 GPU 갯수의 확률 분포는 빨간색 실선입니다. 그리고 이 정보를 압축하기 위해 정규 분포를 그려봤습니다. 초록색은 X ~ N(3, 2^2) 을 따르는 정규분포입니다. 


n2 = norm.pdf(x, loc=3, scale=2)


음 보시기에 어떤가요? 스카이넷 로봇들의 데이터를 잘 표현했나요? 뭔가 잘 안맞죠? 얼마나 안맞는 건가요? 무슨 근거로 안맞다는 거죠? 그냥 그래프가 안비슷해서요? 얼마나 이 두 분포가 다른지를 수치적으로 설명을 해주세요!


자, 여기서 두 확률 분포의 다름을 설명할 니즈가 생깁니다. 뭔가 잘 안맞는 건 알겠는데, "얼마나" 둘이 다른가? 이런 다름을 설명하는 함수가 바로 쿨백 라이블러 발산입니다. 


KL-Divergence 공식


초록색 점선과 빨간색 실선의 KL-Divergence는 1.22299728724입니다. 


좀 더 이번에는 잘 맞는 확률 분포를 한 번 그려보겠습니다.

실제 로봇에 달린 GPU의 숫자(빨간색)와 2가지 정규분포(초록색, 파란색) 


n1 = norm.pdf(x, loc=6, scale=1)


파란색 점선을 추가했습니다. 이 번에는 아주 잘 맞는 것 같네요- 파란색 점선과 빨간색 실선의 KL-Divergence는 0.415745290997입니다. 


결과적으로, 파란색 점선의 X ~ N(6,1) 정규분포가 실제 데이터를 X ~ N(3,2^2)에 비해서 더 잘 표현한다는 사실을 알 수 있습니다.


KL-Divergence는 "두 확률 분포의 다름의 정도"를 설명합니다.


머신러닝에서는 주로 아직 확인되지 않은 모델을 특정한 확률분포로 근사시키는 데 KL-Divergence를 씁니다. 실제 데이터를 최대한 잘 설명하는 정규분포를 구하려면, KL-Divergence을 가장 낮게 만드는 정규분포를 구하면 되겠죠?


쿨백 라이블러 발산

KL-Divergence


쿨백 라이블러 발산(KL-Divergence)은 상대 엔트로피(Relative Entropy)로도 불립니다.

KL-Divergence는 기본적으로 두 확률 분포를 비교하기 위해 사용합니다. 


KL-Divergence 공식


KL-Divergence의 의미를 먼저 생각해보겠습니다. 


- 베이지안 추론(Bayesian Inference)에서의 KL-Divergence


Q는 사전확률 분포이고, P는 사후확률 분포입니다. 이 때, DKL(P||Q)는 사전확률에서 사후확률로 변하면서 얻은 정보의 양으로 해석할 수 있습니다. 


- P와 Q의 일반적인 의미


P는 주로 참 분포(True distribution), 실제 관찰 데이터(Observations)를 나타냅니다. 

그리고 Q는 주로 가설(Theory), 모델(Model), 그리고 P의 근사(Approximation)로 사용합니다.


- 관측 데이터를 근사 확률 분포를 만들기 위한 목적함수


Q(근사 모델)를 최대한 P(실제 데이터 분포)에 가깝게 만들려면, KL Divergence를 최소화하도록 학습을 시키면 됩니다.


KL-Divergence에 대해 알아둬야할 몇 가지 중요한 특징이 있습니다.


1) 항상 0 이상의 값을 갖습니다.

깁스 부등식(Gibb's Inequality)을 활용하여 KL-Divergence가 항상 0 이상의 값을 갖는다는 것을 유도할 수 있습니다.


2) 비대칭적(Asymmetric)입니다.

KL-Divergence는 비대칭함수로 D KL ( p || q ) 와 D KL ( q || p )의 값이 다릅니다.

KL-Divergence는 직관적으로 두 확률분포의 거리 같은 느낌을 줍니다. 하지만, 비대칭이기 때문에 두 분포 사이의 거리라고 표현하기는 어렵습니다.


3) 두 확률 분포가 동일할 때 KL-Divergence의 값이 0이 됩니다.

두 확률 분포의 모든 데이터 분포가 동일할 때 KL-Divergence의 값이 0이 됩니다.


KL-Divergence 분해하기


KL-Divergence를 분해하면, 정보 엔트로피와 크로스 엔트로피로 나눌 수 있습니다.

KL-Divergence는 - 정보 엔트로피와 크로스 엔트로피의 합으로 나타낼 수 있습니다.


이렇게 KL-Divergence를 둘로 나눌 수 있기 때문습니다. 여기서 우리에게 익숙한 크로스 엔트로피(Cross-Entropy)가 나옵니다. 


우리가 Classification 문제를 풀 때 자주 활용하는 크로스 엔트로피에 대해선 MLE(Maximum Likelihood Estimation)과 함께 다음 포스팅에서 좀 더 자세히 다루어보도록 하겠습니다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari