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距離,明天學習這一部分。

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