談談交叉熵損失函式

weixin_33843409發表於2019-04-12

一.交叉熵損失函式形式

現在給出三種交叉熵損失函式的形式,來思考下分別表示的的什麼含義。

--式子1

--式子2

--式子3

解釋下符號,m為樣本的個數,C為類別個數。上面三個式子都可以作為神經網路的損失函式作為訓練,那麼區別是什麼?

■1》式子1,用於那些類別之間互斥(如:一張圖片中只能保護貓或者狗的其中一個)的單任務分類中。連線的 softmax層之後的概率分佈。
tensorflow中的函式為: tf.nn.softmax_cross_entropy_with_logits

■2》式子2,用於那些類別之間不存在互斥關係(如:一張圖片中可有貓和狗兩種以上的類別同時存在)的多工學習分類中。最後一層的每個節點不在是softmax函式的輸出了,而是sigmoid。把每個節點當成一個完整的分佈,而式子1是所有節點組合程一個完整分佈。
tensorflow中的函式為:tf.nn.sigmoid_cross_entropy_with_logits

■3》式子3,用於最後一層只有一個節點的二分類任務

二.交叉熵損失意義

要解釋交叉熵損失函式的意義,我認為應該從熵的根源說起。這裡我不介紹熵作者呀,來源呀什麼的不再介紹了(主要是懶),哈哈!)這裡講的順序是:資訊量--》資訊熵--》交叉熵

1.資訊量

意義:
如果一個事件發生的概率為p,那麼獲知該資訊發生能給到我們 的資訊量(可以理解為意外程度)

例子:巴西跟中國乒乓球比賽,歷史上交手64次,其中中國獲勝63次,那麼63/64是賽前普遍認為中國隊獲勝的概率,那麼這次中國獲勝的資訊量有多大?

如果這次是巴西獲勝,那麼帶給我們的資訊量為:

單位:bit

如果一件事件的發生概率為:100%,帶給我們的資訊量為:0
通俗點講就是,如果一件事情,本身發生的概率很大,如果再次發生,我們並沒有覺得有什麼好奇的。但是一件發生概率很小的事情發生了,我們就會非常驚訝,它能給到我們的資訊就越有價值。例如:太陽每天都是從東邊出來,這個概率幾乎是1,所以我們都其以為常,沒什麼好驚訝的,但是某天太陽從西邊出來了,這個時候,打破了我們的常識,這個概率非常小的事件居然發生了,我們就會非常驚訝,它給我們資訊量是非常大的,也許我們可以根據這個現象發現一種新的東西。

2.資訊熵

意義:
用來做資訊的雜亂程度的量化描述。
定義:

1.中國隊獲勝概率: 63/64,巴西獲勝概率:1/64,那麼資訊熵為:

2.中國隊獲勝概率: 1/2,巴西獲勝概率:1/2,那麼資訊熵為:

3.中國隊獲勝概率: 1,巴西獲勝概率:0,那麼資訊熵為:

結論:
資訊越確定,越單一,資訊熵就越小,
資訊越不確定,越混亂,資訊熵就越大。

注意:這裡的log以2為底,實際上可以與e,10等其他為底,主要對比的時候統一就好。從計算機角度來看,計算機只有0,1兩位,用2比較符合。

3.交叉熵

意義:
衡量真實分佈和預測的分佈的差異情況
離散形式為:

其中,p(x)為真實概率,q(x)為預測概率
從資訊量的角度,如果是真是真實的概率,那麼給到我們的資訊熵為:

如果是預測分佈,改到我們資訊熵(可以簡單理解為資訊量)為:

資訊熵的差異為:

這也叫:K-L散度

可以看出,只有當q(x)=p(x)時候差異為:0

K-L散度始終是>=0,但是不知道怎麼證明(我還沒推匯出來慚愧,以後推匯出來再補充,如果有讀者推出來,麻煩評論,非常感謝!)

問題:

為什麼大多數情況,我們都用交叉熵而不是K-L散度作為損失函式?

我來分析下:仔細觀察k-l散度,如果是多分類時候,one-hot形式【0,1,0,0】,那麼把p(x)=0,1,0,0,帶入K-L散度函式,那麼其實跟交叉熵形式是一樣的。

例如:在多一個4分類任務時候,計算其中一個樣本的第2個類別損失,其one-hot形式,【0,1,0,1】,模型預測出來的概率分佈為:【0.1,0.6,0.2,0.1】
那麼如果是K-L散度作為損失,那麼:

實際就是:-p(x)*log(q(x))

這下明白了吧。

參考:
1.https://en.wikipedia.org/wiki/Kullback–Leibler_divergence
2.https://www.reddit.com/r/MachineLearning/comments/4mebvf/why_train_with_crossentropy_instead_of_kl/
3.書籍《白話大資料》第六章資訊理論

https://www.cnblogs.com/aijianiula/p/9460842.html

相關文章