Kullback–Leibler divergence(相对熵,KL距离,KL散度)
1 前言
?
注意兩個名詞的區別:
相對熵:Kullback–Leibler divergence
交叉熵:cross entropy
KL距離的幾個用途:
① 衡量兩個概率分布的差異。
② 衡量利用概率分布Q 擬合概率分布P 時的能量損耗,也就是說擬合以后丟失了多少的信息,可以參考前面曲線擬合的思想。
③ 對①的另一種說法,就是衡量兩個概率分布的相似度,在運動捕捉里面可以衡量未添加標簽的運動與已添加標簽的運動,進而進行運動的分類。
百度百科解釋的為什么KL距離不準確,不滿足距離的概念:
①KL散度不對稱,即P到Q的距離,不等于Q到P的距離
②KL散度不滿足三角距離公式,兩邊之和大于第三邊,兩邊之差小于第三邊。
2. 相對熵數學定義
KL散度的值始終大于0,并且當且僅當兩分布相同時,KL散度等于0.
從另一個角度也就可以發現,當P(x)和Q(x) 的相似度越高,KL距離越小。
有一個實例,可以參考:http://www.cnblogs.com/finallyliuyu/archive/2010/03/12/1684015.html
3. 交叉熵和相對熵
轉自知乎:如何通俗的解釋交叉熵與相對熵? - 知乎
作者:do Cre鏈接:https://www.zhihu.com/question/41252833/answer/108777563
來源:知乎
? 熵的本質是香農信息量的期望。
現有關于樣本集的2個概率分布p和q,其中p為真實分布,q非真實分布。按照真實分布p來衡量識別一個樣本的所需要的編碼長度的期望(即平均編碼長度)為: 如果使用錯誤分布q來表示來自真實分布p的平均編碼長度,則應該是: 因為用q來編碼的樣本來自分布p,所以期望H(p,q)中概率是p(i)。H(p,q)我們稱之為“交叉熵”。
比如含有4個字母(A,B,C,D)的數據集中,真實分布p=(1/2, 1/2, 0, 0),即A和B出現的概率均為1/2,C和D出現的概率都為0。計算H(p)為1,即只需要1位編碼即可識別A和B。如果使用分布Q=(1/4, 1/4, 1/4, 1/4)來編碼則得到H(p,q)=2,即需要2位編碼來識別A和B(當然還有C和D,盡管C和D并不會出現,因為真實分布p中C和D出現的概率為0,這里就欽定概率為0的事件不會發生啦)。
可以看到上例中根據非真實分布q得到的平均編碼長度H(p,q)大于根據真實分布p得到的平均編碼長度H(p)。事實上,根據Gibbs' inequality可知,H(p,q)>=H(p)恒成立,當q為真實分布p時取等號。我們將由q得到的平均編碼長度比由p得到的平均編碼長度多出的bit數稱為“相對熵”: 其又被稱為KL散度(Kullback–Leibler divergence,KLD),它表示2個函數或概率分布的差異性:差異越大則相對熵越大,差異越小則相對熵越小,特別地,若2者相同則熵為0。注意,KL散度的非對稱性。
比如TD-IDF算法就可以理解為相對熵的應用:詞頻在整個語料庫的分布與詞頻在具體文檔中分布之間的差異性。
交叉熵可在神經網絡(機器學習)中作為損失函數,p表示真實標記的分布,q則為訓練后的模型的預測標記分布,交叉熵損失函數可以衡量p與q的相似性。交叉熵作為損失函數還有一個好處是使用sigmoid函數在梯度下降時能避免均方誤差損失函數學習速率降低的問題,因為學習速率可以被輸出的誤差所控制。
PS:通?!跋鄬亍币部煞Q為“交叉熵”,雖然公式上看相對熵=交叉熵-信息熵,但由于真實分布p是固定的,D(p||q)由H(p,q)決定。當然也有特殊情況,彼時2者須區別對待。
稍微說一下中間那個例子,如果真正去計算的話,會發現H(p)=log2,而H(p,q)=log4,然后由于編碼位數必須為整數,所以是向上取整,即得到原作者的答案。
4. 交叉熵損失函數
看到交叉熵,想到機器學習中剛好有“交叉熵損失函數”這個東東,好像是針對分類任務,可以將前面的交叉熵公式改成二分類的情況: 交叉熵中用q擬合p,其中的q相當于預測值,p相當于正確的標簽 如果想好看點,那么一般的寫法就是,把y當做正確標簽,o當做網絡輸出,那么 這樣就跟我們經??吹降慕徊骒負p失函數一模一樣了。5.附錄
對數回歸的損失函數就是這樣的,詳細請看我后面的博客 softmax理論及代碼解讀——UFLDL 使用交叉熵損失函數相對于使用均方誤差函數的優勢請戳交叉熵代價函數(作用及公式推導)
本文已經同步到微信公眾號中,公眾號與本博客將持續同步更新運動捕捉、機器學習、深度學習、計算機視覺算法,敬請關注
總結
以上是生活随笔為你收集整理的Kullback–Leibler divergence(相对熵,KL距离,KL散度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通配符&正则表达式&特殊
- 下一篇: LUNIX命令集