1. 程式人生 > >談談交叉熵損失函數

談談交叉熵損失函數

instead 樣本 怎麽 type 為什麽 技術分享 span 書籍 max

一.交叉熵損失函數形式 現在給出三種交叉熵損失函數的形式,來思考下分別表示的的什麽含義。 技術分享圖片 技術分享圖片 --式子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.書籍《白話大數據》第六章信息論

談談交叉熵損失函數