不同背景下不同交叉熵公式的異和同

交叉熵公式的幾個問題

本小白在學習過程中在很多地方都遇到過交叉熵公式,一般我們遇到的是這樣的:
C1=1nx[ylna+(1y)ln(1a)] C1 = -\frac{1}{n}\sum_{x}[y\ln a+(1-y)\ln (1-a)]

然而在學習cs231線性分類(softmax)那一節的時候也遇到了交叉熵,包括一些博客和資料中,它們形式是這樣的:
C2=xp(x)logq(x)C2 = -\sum_xp(x)\log q(x)

作爲小白的我瞬間懵逼了,之前看了Michael Nielsen的《神經網絡與深度學習》,其中講softmax那一層的時候,用的是對數似然(log-likelihood)代價函數。用x表示訓練輸出,y表示對應目標輸出,則對數似然代價函數爲:
C3=lnayL C3 = -\ln a^L_y

ayLa^L_y 爲第L層第y個輸出值。我們暫且爲上述三個代價函數命名爲C1、C2和C3,便於後邊討論。懵不懵!C1和C2交叉熵什麼關係,C2和C3又有點異曲同工之妙。

對上述問題的幾點結論

這裏先給出結論。查閱了一些資料和blog,得出了幾點結論
注意二分類的交叉熵和多分類問題的交叉熵形式不一樣。

  • 二分類交叉熵形式如下:
    C1=1nx[ylna+(1y)ln(1a)] C1 = -\frac{1}{n}\sum_{x}[y\ln a+(1-y)\ln (1-a)]

  • 多分類交叉熵形式如下:
    C2=xp(x)logq(x) C2 = -\sum_xp(x)\log q(x)

  • 歸納問題中公式出現的場景,當交叉熵前接的是 sigmoid 層的時候,交叉熵形式用 C1,當前面接的是 softmax 層的時候,交叉熵形式用 C2。因爲 sigmoid 是二分類的分類器,softmax 是歸一化多分類的分類器,這也側面印證了上面的兩個結論。

  • C3 的log似然函數也接在 softmax 層後邊,那它和 C2 背景是一樣的。對於多分類問題,每個樣本只有一個標籤,因而 C2 的累加項中只有一項不爲0,其餘p(x)均爲0,因而 C2 經過化簡即可得到 C3,注意深度學習中 log 和 ln 代表一個意思,很多教程都是混合是使用,都作爲 ln 來看。

對於結論的一些解答

首先我們需要區分 二分類、多分類、多標籤和多輸出問題的基本概念:
二分類問題:表示分類任務中有兩個類別,輸出用0或1表示,二分類的每個樣本都有一個標籤0或者1;
多分類問題:分類任務有多個類別,其每個樣本也只有一個標籤,輸出一般用概率表示;
多標籤分類:一個樣本可以有多個標籤,比如水果盤裏有蘋果和梨子,那麼標籤中代表蘋果梨子都有;
多輸出分類:多個多分類或多標籤的組合分類。如一個網絡同時預測服飾款式類型和顏色類型。
這裏我們討論二分類問題和多分類問題,這一默認對於一個樣本只有一個標籤,即是蘋果就是蘋果,大棗就是大棗,梨子就是梨子,不帶水果拼盤這樣玩的。
我們再很多地方都看到由相對熵(KL散度)推導出交叉熵的,對於兩個概率分佈p(x)p(x)q(x)q(x),其相對熵爲:
KL(pq)=p(x)lnq(x)dx(p(x)lnp(x)dx) KL(p||q)=- \int p(x)\ln q(x)dx -(- \int p(x)\ln p(x)dx)

p(x)爲真實分佈,即我們所講的標籤y的分佈,爲已知,所以p(x)lnp(x)dx-\int p(x)\ln p(x)dx爲已知,而p(x)lnq(x)dx- \int p(x)\ln q(x)dx未知,就是我們需要關心的交叉熵。交叉熵公式已經知道啦,即:
p(x)lnq(x)dx -\int p(x)\ln q(x)dx

現在我們進行二分類的討論,二分類下p(x)p(x)爲二項分佈,因而分類器輸出第 i 個神經元交叉熵爲:
p(x)lnq(x)dx=p1(x)lnq1(x)p2(x)lnq2(x)=p1(x)ln(q1(x))(1p1(x))ln(1q1(x)) \int p(x)\ln q(x)dx = -p_1(x)\ln q_1(x)-p_2(x)\ln q_2(x)=-p1(x)\ln (q1(x))-(1-p1(x))\ln(1-q1(x))

即上述C1的公式。再來看看多分類情況。這裏 p(x) 是標籤值(one-hot),比如三個分類,某個樣本屬於第一個分類,標籤值爲1 0 0。代入上述的交叉熵公式,即得:
piln(yi) -p_i\ln (y_i)

其中,p_i是輸出正確分類的標籤值,其爲1。因而又可以寫爲:
ln(yi) -\ln (y_i)

該式和C3對數似然代價函數一致。這也就解釋了C1和C2在搭配softmax時,即多分類情況下公式是一樣的。
另外,前文已述二分類和多分類情況下交叉熵推導結果不一,因此也有人建議採用 Kears 中的命名方法,對於二分類的交叉熵損失函數稱之爲 “二分類交叉熵損失函數”,對於多分類的交叉熵損失函數稱之爲"多類別交叉熵損失函數"。至於我們平時使用,清楚怎麼回事就行啦
以上
參考:
[1]: https://juejin.im/post/5b38971be51d4558b10aad26
[2]: https://www.zhihu.com/question/41252833

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章