深度學習中交叉熵和KL散度和最大似然估計之間的關係

機器學習的面試題中常常會被問到交叉熵(cross entropy)和最大似然估計(MLE)或者KL散度有什麼關係,查了一些資料發現優化這3個東西實際上是等價的。git

熵和交叉熵

提到交叉熵就須要瞭解下信息論中熵的定義。信息論認爲:github

肯定的事件沒有信息,隨機事件包含最多的信息。面試

事件信息的定義爲:\(I(x)=-log(P(x))\);而熵就是描述信息量:\(H(x)=E_{x\sim P}[I(x)]\),也就是\(H(x)=E_{x\sim P}[-log(P(x))]=-\Sigma_xP(x)log(P(x))\)。若是log的base是2,熵能夠認爲是衡量編碼對應的信息須要的最少bits數;那麼交叉熵就是來衡量用特定的編碼方案Q來對分佈爲P的信息x進行編碼時須要的最少的bits數。定義以下:
\(H(P, Q)=-\Sigma_xP(x)log(Q(x))\)
在深度學習中,P是gt label的真實分佈;Q就是網絡學習後輸出的分佈。網絡

最大似然估計

機器學習中,經過最大似然估計方法使參數爲\(\hat\Theta\)的模型使預測值貼近真實數據的機率最大化,即\(\hat\Theta=arg\ max_\theta \Pi_{i=1}^Np(x_i|\Theta)\)。實際操做中,連乘很容易出現最大值或最小值溢出,形成計算不穩定,因爲log函數的單調性,因此將上式進行取對數取負,最小化負對數似然(NLL)的結果與原始式子是同樣的,即\(\hat \Theta =arg\ min_\Theta - \Sigma_{i=1}^Nlog(p(x_i|\Theta))\).機器學習

對模型的預測值進行最大似然估計,
\(\hat \Theta =arg\ min_\Theta - \Sigma_{i=1}^Nlog(q(x_i|\Theta))\)
\(=arg\min_\Theta-\Sigma_{x\in X}p(x)log(q(x|\Theta))\)
\(=arg\ min_\Theta H(p, q)\)函數

因此最小化NLL和最小化交叉熵最後達到的效果是同樣的。學習

KL散度

在深度學習中,KL散度用來評估模型輸出的預測值分佈與真值分佈之間的差別,定義以下:\(D_{KL}(P||Q)=E_xlog(P(x)/Q(x))\)
\(D_{KL}(P||Q)=\Sigma_{x=1}^NP(x)log(P(x)/Q(x))\)
\(=\Sigma_{x=1}^NP(x)[logP(x)-logQ(x)]\)優化

注意:KL散度不是標準的距離,由於不知足互換性,即\(D_{KL}(P||Q)\neq D_{KL}(Q||P)\)
對於交叉熵:
\(H(P, Q) = -\Sigma PlogQ\)
\(= -\Sigma PlogP+\Sigma PlogP-\Sigma PlogQ\)
\(= H(P) +\Sigma PlogP/Q\)
\(=H(P)+D_{KL}(P||Q)\)ui

也就是交叉熵就是真值分佈的熵與KL散度的和,而真值的熵是肯定的,與模型的參數\(\Theta\)無關,因此梯度降低求導時 \(\nabla H(P, Q)=\nabla D_{KL}(P||Q)\),也就是說最小化交叉熵與最小化KL散度是同樣的。編碼

總結

從優化模型參數角度來講,最小化交叉熵,NLL,KL散度這3種方式對模型參數的更新來講是同樣的。從這點來看也解釋了爲何在深度學習中交叉熵是很是經常使用的損失函數的緣由了。

參考:

https://jhui.github.io/2017/01/05/Deep-learning-Information-theory/

相關文章
相關標籤/搜索