javascript
梳理 | 交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)
作者 KevinCK?編輯 極市平臺 侵刪
來源 https://zhuanlan.zhihu.com/p/74075915
目錄:
信息量
熵
相對熵(KL散度)
交叉熵
JS散度
推土機理論
Wasserstein距離
WGAN中對JS散度,KL散度和推土機距離的描述
寫在前面的總結
目前分類損失函數為何多用交叉熵,而不是 KL 散度。
首先損失函數的功能是通過樣本來計算模型分布與目標分布間的差異,在分布差異計算中,KL 散度是最合適的。但在實際中,某一事件的標簽是已知不變的(例如我們設置貓的 label 為 1,那么所有關于貓的樣本都要標記為 1),即目標分布的熵為常數。而根據下面 KL 公式可以看到,KL 散度 - 目標分布熵 = 交叉熵(這里的“-”表示裁剪)。所以我們不用計算 KL 散度,只需要計算交叉熵就可以得到模型分布與目標分布的損失值。
從上面介紹,知道了模型分布與目標分布差異可用交叉熵代替 KL 散度的條件是目標分布為常數。如果目標分布是有變化的(如同為貓的樣本,不同的樣本,其值也會有差異),那么就不能使用交叉熵,例如蒸餾模型的損失函數就是 KL 散度,因為蒸餾模型的目標分布也是一個模型,該模型針對同類別的不同樣本,會給出不同的預測值(如兩張貓的圖片 a 和 b,目標模型對 a 預測為貓的值是 0.6,對 b 預測為貓的值是 0.8)。
注:交叉熵和 KL 散度應用方式不同的另一種解釋(我更傾向于上面我自己的解釋,更具公式解釋性):
交叉熵:其用來衡量在給定的真實分布下,使用非真實分布所指定的策略消除系統的不確定性所需要付出的努力的大小。這也是為什么在機器學習中的分類算法中,我們總是最小化交叉熵,因為交叉熵越低,就證明由算法所產生的策略最接近最優策略,也間接證明我們算法所算出的非真實分布越接近真實分布。
KL 散度(相對熵):衡量不同策略之間的差異呢,所以我們使用 KL 散度來做模型分布的擬合損失。
詳細內容
信息量:
任何事件都會承載著一定的信息量,包括已經發生的事件和未發生的事件,只是它們承載的信息量會有所不同。如昨天下雨這個已知事件,因為已經發生,既定事實,那么它的信息量就為 0。如明天會下雨這個事件,因為未有發生,那么這個事件的信息量就大。
從上面例子可以看出信息量是一個與事件發生概率相關的概念,而且可以得出,事件發生的概率越小,其信息量越大。這也很好理解,狗咬人不算信息,人咬狗才叫信息嘛。
我們已知某個事件的信息量是與它發生的概率有關,那我們可以通過如下公式計算信息量:
假設??是一個離散型隨機變量,其取值集合為?χ?,概率分布函數?χ?,則定義事件??的信息量為:??
熵:
我們知道:當一個事件發生的概率為??,那么它的信息量是??。
那么如果我們把這個事件的所有可能性羅列出來,就可以求得該事件信息量的期望,
信息量的期望就是熵,所以熵的公式為:
假設 事件??共有 n 種可能,發生??的概率為??,那么該事件的熵??為:
然而有一類比較特殊的問題,比如投擲硬幣只有兩種可能,字朝上或花朝上。買彩票只有兩種可能,中獎或不中獎。我們稱之為 0-1 分布問題(二項分布的特例),對于這類問題,熵的計算方法可以簡化為如下算式:
相對熵(KL 散度):
相對熵又稱 KL 散度,如果我們對于同一個隨機變量 x 有兩個單獨的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分布的差異。
在機器學習中,P 往往用來表示樣本的真實分布,Q 用來表示模型所預測的分布,那么 KL 散度就可以計算兩個分布的差異,也就是 Loss 損失值。
從 KL 散度公式中可以看到 Q 的分布越接近 P(Q 分布越擬合 P),那么散度值越小,即損失值越小。
因為對數函數是凸函數,所以 KL 散度的值為非負數。
有時會將 KL 散度稱為 KL 距離,但它并不滿足距離的性質:
KL 散度不是對稱的;
KL 散度不滿足三角不等式。
交叉熵:
我們將 KL 散度公式進行變形:
等式的前一部分恰巧就是 p 的熵,等式的后一部分,就是交叉熵:
在機器學習中,我們需要評估 label 和 predicts 之間的差距,使用 KL 散度剛剛好,即??,由于 KL 散度中的前一部分 ?H(y)不變,故在優化過程中,只需要關注交叉熵就可以了。所以一般在機器學習中直接用用交叉熵做 loss,評估模型。
JS 散度:
JS 散度度量了兩個概率分布的相似度,基于 KL 散度的變體,解決了 KL 散度非對稱的問題。一般地,JS 散度是對稱的,其取值是 0 到 1 之間。定義如下:
Wasserstein 距離(該部分摘自KL 散度、JS 散度、Wasserstein 距離):
KL 散度和 JS 散度度量的問題:
如果兩個分配 P,Q 離得很遠,完全沒有重疊的時候,那么 KL 散度值是沒有意義的,而 JS 散度值是一個常數。這在學習算法中是比較致命的,這就意味這這一點的梯度為 0。梯度消失了。
Wasserstein 距離度量兩個概率分布之間的距離,定義如下
Π(P1,P2)是 P1 和 P2 分布組合起來的所有可能的聯合分布的集合。對于每一個可能的聯合分布 γ,可以從中采樣(x,y)~γ 得到一個樣本 x 和 y,并計算出這對樣本的距離||x?y||,所以可以計算該聯合分布 γ 下,樣本對距離的期望值 E(x,y)~γ[||x?y||]。在所有可能的聯合分布中能夠對這個期望值取到的下界 infγ~Π(P1,P2)E(x,y)~γ[||x?y||]就是 Wasserstein 距離。
直觀上可以把 E(x,y)~γ[||x?y||]理解為在 γ 這個路徑規劃下把土堆 P1 挪到土堆 P2 所需要的消耗。而 Wasserstein 距離就是在最優路徑規劃下的最小消耗。所以 Wesserstein 距離又叫 Earth-Mover 距離。
Wasserstein 距離相比 KL 散度、JS 散度的優越性在于,即便兩個分布沒有重疊,Wasserstein 距離仍然能夠反映它們的遠近;而 JS 散度在此情況下是常量,KL 散度可能無意義。WGAN 本作通過簡單的例子展示了這一點。考慮如下二維空間中的兩個分布??和??,??在線段 AB 上均勻分布,??在線段 CD 上均勻分布,通過控制參數??可以控制著兩個分布的距離遠近。
此時容易得到(讀者可自行驗證)
?(突變)
?(突變)
?(平滑)
KL散度和JS散度是突變的,要么最大要么最小,Wasserstein距離卻是平滑的,如果我們要用梯度下降法優化??這個參數,前兩者根本提供不了梯度,Wasserstein距離卻可以。類似地,在高維空間中如果兩個分布不重疊或者重疊部分可忽略,則KL和JS既反映不了遠近,也提供不了梯度,但是Wasserstein卻可以提供有意義的梯度。
WGAN中對KL散度和JS散度的描述(摘自:鄭華濱:令人拍案叫絕的Wasserstein GAN)
假設??表示真實樣本分布,??是由生成器產生的樣本分布。原始GAN中:
判別器損失函數:
生成器損失函數:
(公式)
(公式)
最優判別器:
首先根據公式1,當生成器固定時,確定最優的判別器。對判別器進行求導,并令導數為0,則:
化簡得:
從上述公式也可以很容易看出最優判別器的特征:當??且??,最優判別器可以給出概率值0,相反,最優判別器可以給出概率值1。
生成器損失:
普通的GAN在訓練時會有一個明顯問題,即如果判別器訓練的太好,生成器就會完全學不動;那么當判別器為最優時,我們可以通過公式推導生成器的損失函數是怎樣。
生成器損失函數(1)
(公式2)
首先給公式2添加一個不依賴生成器的項(真實分布損失:?? ):
添加該項后,上式變成了公式1的反,即最小化生成器損失變為了最大化判別器損失。代入最優判別器即公式4,再進行簡單的變換可以得到:
根據JS散度的公式:
于是公式5就可以繼續寫成:
(公式7)
公式7即為生產器損失函數1在判別器最優條件下的值。
根據原始GAN定義的判別器loss,我們可以得到最優判別器的形式;而在最優判別器的下,我們可以把原始GAN定義的生成器loss等價變換為最小化真實分布??與生成分布??之間的JS散度。我們越訓練判別器,它就越接近最優,最小化生成器的loss也就會越近似于最小化??和??之間的JS散度。
問題就出在這個JS散度上。我們會希望如果兩個分布之間越接近它們的JS散度越小,我們通過優化JS散度就能將??“拉向”??,最終以假亂真。這個希望在兩個分布有所重疊的時候是成立的,但是如果兩個分布完全沒有重疊的部分,或者它們重疊的部分可忽略,那它們的JS散度就變成了??。
換句話說,無論??跟??是遠在天邊,還是近在眼前,只要它們倆沒有一點重疊或者重疊部分可忽略,JS散度就固定是常數??,而這對于梯度下降方法意味著——梯度為0!此時對于最優判別器來說,生成器肯定是得不到一丁點梯度信息的;即使對于接近最優的判別器來說,生成器也有很大機會面臨梯度消失的問題。
生成器損失函數(2)
(公式3)
上文推導已經得到在最優判別器??下
(公式9)
我們可以把KL散度(注意下面是先g后r)變換成含??的形式:
由公式3,9,10可得最小化目標的等價變形
注意上式最后兩項不依賴于生成器G,最終得到最小化公式3等價于最小化
這個等價最小化目標存在兩個嚴重的問題。第一是它同時要最小化生成分布與真實分布的KL散度,卻又要最大化兩者的JS散度,一個要拉近,一個卻要推遠!這在直觀上非常荒謬,在數值上則會導致梯度不穩定,這是后面那個JS散度項的毛病。
參考:
1、https://blog.csdn.net/tsyccnh/article/details/79163834
2、[論文筆記] 損失函數整理(https://zhuanlan.zhihu.com/p/35027284)
3、https://blog.csdn.net/weixin_33869377/article/details/86808243
4、https://blog.csdn.net/zhangping1987/article/details/25368183
5、令人拍案叫絕的Wasserstein GAN(https://zhuanlan.zhihu.com/p/25071913)
6、https://zxth93.github.io/2017/09/27/KL散度JS散度Wasserstein距離/index.html
7、https://www.zhihu.com/question/41252833/answer/195901726
猜您喜歡:
超110篇!CVPR 2021最全GAN論文匯總梳理!
超100篇!CVPR 2020最全GAN論文梳理匯總!
拆解組新的GAN:解耦表征MixNMatch
StarGAN第2版:多域多樣性圖像生成
附下載 |?《可解釋的機器學習》中文版
附下載 |《TensorFlow 2.0 深度學習算法實戰》
附下載 |《計算機視覺中的數學方法》分享
《基于深度學習的表面缺陷檢測方法綜述》
《零樣本圖像分類綜述: 十年進展》
《基于深度神經網絡的少樣本學習綜述》
總結
以上是生活随笔為你收集整理的梳理 | 交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普中V2 7人多数表决器 51单片机 仿
- 下一篇: 搭建Wpf框架(1) —— 管理系统-W