交叉熵與KL散度和交叉熵之間的關係

1.熵

熵的本質是香農信息量log1plog\frac{1}{p}

現有關於樣本的兩個概率分佈ppqq,其中pp爲真實分佈,qq爲非真實分佈。按照真實分佈pp來衡量識別一個樣本所需要的編碼長度的期望(即平均編碼長度)爲:H(p)=iP(i)logP(i)H(p)=-\sum_i P(i)log P(i)

通用的說,熵被用於描述一個系統中的不確定性。放在信息論的語境裏來說,就是一個事件所包含的信息量。變量的不確定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。
可以看出,當兩種取值的可能性相等時,不確定度最大,當p爲0或1時,確定其一定不會或一定會發生,信息量(輸出概率函數)爲H(P)=0H(P)=0
在這裏插入圖片描述
如果使用錯誤分佈qq來表示來自真實分佈pp的平均編碼長度,則應該是:H(p,q)=iP(i)log Q(i)H(p,q)=-\sum_i P(i)log\ Q(i)

因爲用qq來編碼的樣本來自分佈pp,所以期望中的概率爲p(i)p(i)H(p,q)H(p,q)稱之爲交叉熵, 就是來衡量用特定的編碼方案Q來對分佈爲P的信息進行編碼時需要的最少的bits數.

比如含有4個字母(A,B,C,D)的數據集中,真實分佈p=(1/2,1/2,0,0)p=(1/2, 1/2, 0, 0),即A和B出現的概率均爲1/2,C和D出現的概率都爲0。計算H(p)H(p)爲1,即只需要1位編碼即可識別A和B。如果使用分佈Q=(1/4,1/4,1/4,1/4)Q=(1/4, 1/4, 1/4, 1/4)來編碼則得到H(p,q)=2H(p,q)=2,即需要2位編碼來識別AABB(當然還有CCDD,儘管CCDD並不會出現,因爲真實分佈pp中C和D出現的概率爲0,這裏就欽定概率爲0的事件不會發生啦)。

2.KL散度

可以看到上例中根據非真實分佈qq得到的平均編碼長度H(p,q)H(p,q)和根據真實分佈pp得到的平均編碼長度H(p)H(p)。事實上,根據Gibbs’ inequality可知,H(p,q)>=H(p)H(p,q)>=H(p)恆成立,當qq爲真實分佈pp時,取等號。

對於固定的ppH(p,q)H(p,q)將隨着qq變得與pp越來越不同而增長。 而如果pp沒有固定,很難將H(p,q)H(p,q)解釋爲差異的絕對量度,因爲它隨着pp的熵增長。所以我們使用另一種度量方式來度量兩個分佈的差異性,將由qq得到的平均編碼長度比由pp得到的平均編碼長度多出的bit數稱爲“相對熵”,也叫做KL散度(Kullback–Leibler divergence):

DKL(pq)=H(p,q)H(p)=iP(i)(logP(i)logQ(i))D_{KL}(p||q)=H(p,q)-H(p)=\sum_{i}^{} P(i)*(logP(i)-logQ(i))

它表示2個函數或概率分佈的差異性:差異越大則相對熵越大,差異越小則相對熵越小,特別地,若兩者相同則KL散度爲0,而交叉熵不爲0,而是等於pp的熵。

KL散度的非對稱性

注意,KL散度的非對稱性,一些同學把K-L散度看作是不同分佈之間距離的度量。這是不對的,因爲從K-L散度的計算公式就可以看出它不符合對稱性(距離度量應該滿足對稱性),即$D_{KL}(P||Q) \neq DKL(QP)D_{KL}(Q||P)。也就是說用pp近似qq和用qq近似pp,二者所得的損失信息並不是一樣的。

比如TD-IDF算法就可以理解爲相對熵的應用:詞頻在整個語料庫的分佈與詞頻在具體文檔中分佈之間的差異性。

KL散度與交叉熵的關係

H(p,q)=PlogQ==PlogP+PlogPPlogQH(p,q)=-\sum P logQ==-\sum P logP+\sum P logP-\sum P logQ
=H(P)+PlogP/Q=H(P)+DKL(PQ)=H(P)+\sum P logP/Q=H(P)+D_{KL}(P||Q)
可見,交叉熵就是真值分佈的熵與KL散度的和,而真值的熵是確定的,與模型的參數θ\theta無關,所以梯度下降求導時,H(P,Q)=DKL(PQ)\nabla H(P,Q)=\nabla D_{KL}(P||Q),即最小化交叉熵與最小化KL散度是一樣的;

最大似然估計

交叉熵經常出現在(神經網絡)機器學習的損失函數中。pp表示真實的分佈,qq則爲訓練後的模型的預測標記分佈。例如,在分類問題中,通常使用交叉熵損失度量標籤的真實分佈和由分類器預測的分佈之間的差異。每個數據點的真實分佈將概率1分配給該數據點所屬的類,將0分配給所有其他類。在這種情況下,交叉熵與負對數似然成正比,最小化負對數似然等價於最小化交叉熵:
極大似然估計:
θ^=argmaxθi=1Nq(xiθ)\hat{\theta}=arg max_{\theta}\prod_{i=1}^{N}q(x_i | \theta)
等價於最小化負對數似然
θ^=argminθi=1Nlog(q(xiθ))\hat{\theta}=arg min_{\theta}-\sum_{i=1}^{N}log(q(x_i | \theta))
=argminθxXp(x)log(q(xθ))=arg min_{\theta}-\sum_{x \in X} p(x)log(q(x | \theta))
=argminθH(p,q)=arg min_{\theta}H(p,q)

交叉熵作爲損失函數還有一個好處是使用sigmoid函數在梯度下降時能避免均方誤差損失函數學習速率降低的問題,因爲學習速率可以被輸出的誤差所控制。??

從優化模型參數角度來說,最小化交叉熵,NLL,KL散度這3種方式對模型參數的更新來說是一樣的。從這點來看也解釋了爲什麼在深度學習中交叉熵是非常常用的損失函數的原因了。

參考資料:

  1. 如何通俗的解釋交叉熵與相對熵?
  2. Why do we use Kullback-Leibler divergence rather than cross entropy in the t-SNE objective function?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章