본문 바로가기

머신러닝

[머신러닝] Jensen–Shannon 발산과 Kullback–Leibler 발산

GAN에서 조금 고전하던 도중 GAN에서 D와 G 사이의 확률분포 차이를 줄이기 위해 사용하는 발산들을 알아보았다.

1. KLD(쿨백-라이블러 발산)

쿨백-라이블러 발산, 줄여서 KLD는 간단히 말해 한 확률분포와 그 확률분포의 근사 간의 정보 손실율을 계산하는것이다. 양 확률분포가 같으면 KLD는 0이 된다.

확률분포 p와 근사 분포 q의 KLD는 다음과 같이 나타낸다
 

 

또한 KLD는 로그값을 이용해 그 차이를 계산하기 때문에 KLD는 다음과 같이 설명할 수 있다



또한 이 수식은 log a - log b = log a/b이므로 다음과 같이 정리된다



즉, log p(xi)와 log q(xi)의 차를 이용하여 KLD를 구하는 것을 알수 있으며 p와 q가 완전히 같으면 0이 된다는 것을 알 수 있다

2. JSD(젠슨-섀넌 발산)

KLD를 이해했다며 JSD는 매우 간단하다. 
JSD는 다음과 같이 표현된다

                 

즉, P와 P와 Q의 평균인 M에 대한 KLD와 Q와 M의 KLD의 평균을 구하여 KLD를 대칭적이고 평탄하게 만든다.(wikipedia 참조)


여기서도 JSD가 0이 되면 비교하고자 하는 확률분포가 같은 것이다.


3. 추가

KLD는 함수 근사를 위해 사용할 수 있다.  즉 신경망의 Cross-Entropy에서 사용된다. 나중에 포스팅 해야지(...)




REFERENCE

http://jaejunyoo.blogspot.com/2017/01/generative-adversarial-nets-2.html


http://dongwonshin.net/kullback-leibler-divergence-%EC%84%A4%EB%AA%85/


https://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence


https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence