深度學習中交叉熵和KL散度和最大似然估計之間的關系
機器學習的面試題中經常會被問到交叉熵(cross entropy)和最大似然估計(MLE)或者KL散度有什麽關系,查了一些資料發現優化這3個東西其實是等價的。
熵和交叉熵
提到交叉熵就需要了解下信息論中熵的定義。信息論認為:
確定的事件沒有信息,隨機事件包含最多的信息。
事件信息的定義為:\(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數。定義如下:
在深度學習中,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)\)
也就是交叉熵就是真值分布的熵與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/
深度學習中交叉熵和KL散度和最大似然估計之間的關系