GAN学习笔记——KL散度、交叉熵、JS散度

首先,我们知道, 熵 是用来量化数据中含有的信息量的,其计算公式为:
H=i=1Np(xi)logp(xi)H=-\sum_{i=1}^{N}p(x_{i})\cdot \log p(x_{i})


1)KL散度(Kullback–Leibler divergence)
又称KL距离,相对熵,用来比较两个概率分布的接近程度。

假设 p(x)p(x) 为数据的真实概率分布,q(x)q(x) 为数据的理论概率分布,计算它们每个取值之间对应的差:
KL(pq)=i=1Np(xi)(logp(xi)logq(xi))KL(p||q)=\sum_{i=1}^{N}p(x_{i})\cdot \left (\log p(x_{i})-\log q(x_{i}) \right )
可以简写成:
KL(pq)=i=1Np(xi)logp(xi)q(xi)KL(p||q)=\sum_{i=1}^{N}p(x_{i})\cdot \log \frac{ p(x_{i})}{q(x_{i})}
p(x)p(x)q(x)q(x)的相似度越高,KL散度越小。因此使用KL散度进行优化的过程为:通过不断改变预估分布的参数,我们可以得到不同的KL散度的值。 在某个变化范围内,KL散度取到最小值的时候,对应的参数是我们想要的最优参数。

KL散度主要有两个性质:

  • 不对称性
    KL散度不具有对称性,即KL(pq)!=KL(qp)KL(p||q)!=KL(q||p)因此不能将它视为“距离”,它衡量的是一个分布相比另一个分布的信息损失。

  • 非负性
    KL散度的值是非负值,即KL(pq)0KL(p||q)≥0


2)交叉熵(Cross Entropy)
H(p,q)=i=1Np(xi)log1q(xi)H(p,q)=\sum_{i=1}^{N}p(x_{i})\cdot \log \frac{1}{q(x_{i})}
交叉熵和相对熵的关系如下:
KL(pq)=H(p,q)H(p)KL(p||q)=H(p,q)-H(p)
因为训练数据的分布是已知的,所以交叉熵与KL散度的意义类似。


3)JS散度(Jensen-Shannon divergence)
JS(pq)=12KL(pp+q2)+12KL(qp+q2)JS(p||q)=\frac{1}{2}KL(p||\frac{p+q}{2})+\frac{1}{2}KL(q||\frac{p+q}{2})
JS散度主要有两个性质:

  • 对称性
    JS散度具有对称性,即JS(pq)=JS(qp)JS(p||q)=JS(q||p)

  • 值域范围
    JS散度的值域范围是[0,1],相同为0,相反为1。

在GAN中,它衡量的是随机噪声生成数据的概率分布拟合真实数据的概率分布的过程中产生的信息损耗,损耗越少,拟合越好,生成的数据越真实。但是KL散度和JS散度存在同一个问题,如果p分布和q分布相距很远完全没有重叠,KL散度值是没有意义的,且会导致梯度消失,故引出了Wasserstein距离,明天学习这一部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章