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
'머신러닝' 카테고리의 다른 글
[머신러닝]DCGAN 알아보기 (0) | 2018.02.18 |
---|---|
[머신러닝] 스타일을 바꿔주는 Style Transfer (0) | 2018.02.03 |
[머신러닝]GAN - Generative Adversarial Network 훑어보기 (0) | 2017.12.22 |
[머신러닝] Sigmoid를 넘어 ReLU 로 (0) | 2017.09.08 |
[파이썬 딥러닝]퍼셉트론 (0) | 2017.08.03 |