談談交叉熵損失函式
一.交叉熵損失函式形式
現在給出三種交叉熵損失函式的形式,來思考下分別表示的的什麼含義。
--式子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.書籍《白話大資料》第六章資訊理論
相關文章
- 圖示Softmax及交叉熵損失函式熵函式
- 交叉熵損失CrossEntropyLoss熵ROS
- TensorFlow筆記-06-神經網路優化-損失函式,自定義損失函式,交叉熵筆記神經網路優化函式熵
- 熵、交叉熵及似然函式的關係熵函式
- Java開發者的神經網路進階指南:深入探討交叉熵損失函式Java神經網路熵函式
- 損失函式函式
- 統計學習:邏輯迴歸與交叉熵損失(Pytorch實現)邏輯迴歸熵PyTorch
- 3D高斯損失函式(1)單純損失函式3D函式
- 熵,交叉熵,Focalloss熵
- 損失函式綜述函式
- Triplet Loss 損失函式函式
- Pytorch 常用損失函式PyTorch函式
- softmax迴歸——原理、one-hot編碼、結構和運算、交叉熵損失熵
- 談談JS中的函式劫持JS函式
- 大白話5分鐘帶你走進人工智慧-第十七節邏輯迴歸之交叉熵損失函式概念(2)人工智慧邏輯迴歸熵函式
- 例項解釋NLLLoss損失函式與CrossEntropyLoss損失函式的關係函式ROS
- PyTorch:損失函式loss functionPyTorch函式Function
- Pytorch中的損失函式PyTorch函式
- TensorFlow損失函式專題函式
- DDMP中的損失函式函式
- 深度學習基礎5:交叉熵損失函式、MSE、CTC損失適用於字識別語音等序列問題、Balanced L1 Loss適用於目標檢測深度學習熵函式
- 淺談eval函式函式
- 淺談生成函式函式
- 邏輯迴歸 損失函式邏輯迴歸函式
- SSD的損失函式設計函式
- 大白話5分鐘帶你走進人工智慧-第十八節邏輯迴歸之交叉熵損失函式梯度求解過程(3)人工智慧邏輯迴歸熵函式梯度
- 聊聊損失函式1. 噪聲魯棒損失函式簡析 & 程式碼實現函式
- 淺談尤拉函式函式
- 詳解常見的損失函式函式
- 2.3邏輯迴歸損失函式邏輯迴歸函式
- 淺談Swift中的函式式Swift函式
- 資訊熵,交叉熵與KL散度熵
- 交叉熵代價函式定義及其求導推導(讀書筆記)熵函式求導筆記
- 熵、資訊量、資訊熵、交叉熵-個人小結熵
- 二談三角函式函式
- 淺談Kotlin中的函式Kotlin函式
- 淺談php count()函式方法PHP函式
- 邏輯迴歸損失函式(cost function)邏輯迴歸函式Function