簡單的交叉熵損失函數,你真的懂了嗎?

2021-02-20 深度學習自然語言處理

說起交叉熵損失函數「Cross Entropy Loss」,腦海中立馬浮現出它的公式:

我們已經對這個交叉熵函數非常熟悉,大多數情況下都是直接拿來使用就好。但是它是怎麼來的?為什麼它能表徵真實樣本標籤和預測概率之間的差值?上面的交叉熵函數是否有其它變種?也許很多朋友還不是很清楚!沒關係,接下來我將儘可能以最通俗的語言回答上面這幾個問題。

1. 交叉熵損失函數的數學原理

我們知道,在二分類問題模型:例如邏輯回歸「Logistic Regression」、神經網絡「Neural Network」等,真實樣本的標籤為 [0,1],分別表示負類和正類。模型的最後通常會經過一個 Sigmoid 函數,輸出一個概率值,這個概率值反映了預測為正類的可能性:概率越大,可能性越大。

Sigmoid 函數的表達式和圖形如下所示:

其中 s 是模型上一層的輸出,Sigmoid 函數有這樣的特點:s = 0 時,g(s) = 0.5;s >> 0 時, g ≈ 1,s << 0 時,g ≈ 0。顯然,g(s) 將前一級的線性輸出映射到 [0,1] 之間的數值概率上。這裡的 g(s) 就是交叉熵公式中的模型預測輸出 。

我們說了,預測輸出即 Sigmoid 函數的輸出表徵了當前樣本標籤為 1 的概率:

很明顯,當前樣本標籤為 0 的概率就可以表達成:

重點來了,如果我們從極大似然性的角度出發,把上面兩種情況整合到一起:

不懂極大似然估計也沒關係。我們可以這麼來看:

當真實樣本標籤 y = 0 時,上面式子第一項就為 1,概率等式轉化為:

當真實樣本標籤 y = 1 時,上面式子第二項就為 1,概率等式轉化為:

兩種情況下概率表達式跟之前的完全一致,只不過我們把兩種情況整合在一起了。

重點看一下整合之後的概率表達式,我們希望的是概率 P(y|x) 越大越好。首先,我們對 P(y|x) 引入 log 函數,因為 log 運算並不會影響函數本身的單調性。則有:

我們希望 log P(y|x) 越大越好,反過來,只要 log P(y|x) 的負值 -log P(y|x) 越小就行了。那我們就可以引入損失函數,且令 Loss = -log P(y|x)即可。則得到損失函數為:

非常簡單,我們已經推導出了單個樣本的損失函數,是如果是計算 N 個樣本的總的損失函數,只要將 N 個 Loss 疊加起來就可以了:

這樣,我們已經完整地實現了交叉熵損失函數的推導過程。

2. 交叉熵損失函數的直觀理解

可能會有讀者說,我已經知道了交叉熵損失函數的推導過程。但是能不能從更直觀的角度去理解這個表達式呢?而不是僅僅記住這個公式。好問題!接下來,我們從圖形的角度,分析交叉熵函數,加深大家的理解。

首先,還是寫出單個樣本的交叉熵損失函數:

我們知道,當 y = 1 時:

這時候,L 與預測輸出的關係如下圖所示:

看了 L 的圖形,簡單明了!橫坐標是預測輸出,縱坐標是交叉熵損失函數 L。顯然,預測輸出越接近真實樣本標籤 1,損失函數 L 越小;預測輸出越接近 0,L 越大。因此,函數的變化趨勢完全符合實際需要的情況。

當 y = 0 時:

這時候,L 與預測輸出的關係如下圖所示:

同樣,預測輸出越接近真實樣本標籤 0,損失函數 L 越小;預測函數越接近 1,L 越大。函數的變化趨勢也完全符合實際需要的情況。

從上面兩種圖,可以幫助我們對交叉熵損失函數有更直觀的理解。無論真實樣本標籤 y 是 0 還是 1,L 都表徵了預測輸出與 y 的差距。

另外,重點提一點的是,從圖形中我們可以發現:預測輸出與 y 差得越多,L 的值越大,也就是說對當前模型的 「 懲罰 」 越大,而且是非線性增大,是一種類似指數增長的級別。這是由 log 函數本身的特性所決定的。這樣的好處是模型會傾向於讓預測輸出更接近真實樣本標籤 y。

3. 交叉熵損失函數的其它形式

什麼?交叉熵損失函數還有其它形式?沒錯!我剛才介紹的是一個典型的形式。接下來我將從另一個角度推導新的交叉熵損失函數。

這種形式下假設真實樣本的標籤為 +1 和 -1,分別表示正類和負類。有個已知的知識點是Sigmoid 函數具有如下性質:

這個性質我們先放在這,待會有用。

好了,我們之前說了 y = +1 時,下列等式成立:

如果 y = -1 時,並引入 Sigmoid 函數的性質,下列等式成立:

重點來了,因為 y 取值為 +1 或 -1,可以把 y 值帶入,將上面兩個式子整合到一起:

這個比較好理解,分別令 y = +1 和 y = -1 就能得到上面兩個式子。

接下來,同樣引入 log 函數,得到:

要讓概率最大,反過來,只要其負數最小即可。那麼就可以定義相應的損失函數為:

還記得 Sigmoid 函數的表達式吧?將 g(ys) 帶入:

好咯,L 就是我要推導的交叉熵損失函數。如果是 N 個樣本,其交叉熵損失函數為:

接下來,我們從圖形化直觀角度來看。當 y = +1 時:

這時候,L 與上一層得分函數 s 的關係如下圖所示:

橫坐標是 s,縱坐標是 L。顯然,s 越接近真實樣本標籤 1,損失函數 L 越小;s 越接近 -1,L 越大。

另一方面,當 y = -1 時:

這時候,L 與上一層得分函數 s 的關係如下圖所示:

同樣,s 越接近真實樣本標籤 -1,損失函數 L 越小;s 越接近 +1,L 越大。

4. 總結

本文主要介紹了交叉熵損失函數的數學原理和推導過程,也從不同角度介紹了交叉熵損失函數的兩種形式。第一種形式在實際應用中更加常見,例如神經網絡等複雜模型;第二種多用於簡單的邏輯回歸模型。

相關焦點

  • 理解熵、交叉熵和交叉熵損失
    交叉熵損失是深度學習中應用最廣泛的損失函數之一,這個強大的損失函數是建立在交叉熵概念上的。當我開始使用這個損失函數時,我很難理解它背後的直覺。在google了不同材料後,我能夠得到一個令人滿意的理解,我想在這篇文章中分享它。
  • 透徹講解~交叉熵代價函數
    可能有人會說,那就選擇一個梯度不變化或變化不明顯的激活函數不就解決問題了嗎?圖樣圖森破,那樣雖然簡單粗暴地解決了這個問題,但可能會引起其他更多更麻煩的問題。而且,類似sigmoid這樣的函數(比如tanh函數)有很多優點,非常適合用來做激活函數,具體請自行google之交叉熵代價函數的定義那麼我們如何解決這個問題呢?研究表明,我們可以通過使用交叉嫡函數來替換二次代價函數。為了理解什麼是交叉嫡,我們稍微改變一下之前的簡單例子。
  • 你還認為似然函數跟交叉熵是一個意思呀?
    似然函數不就是交叉熵嗎?」「機器學習中的似然函數怎麼看起來跟概率統計課本裡的不一樣呢?」「學長學長,我把這個model的輸出接上交叉熵後怎麼報錯了?」本文中,我們將似然函數作為機器學習模型的損失函數,並且用在分類問題中。
  • 完美解釋交叉熵
    通過幾個簡單的例子來解釋和總結什麼是交叉熵( Cross Entropy) 以及機器學習分類問題中為什麼使用交叉熵。在這個問題中, 問題個數的期望是這個式子就是熵的表達式. 簡單來說, 其意義就是在最優化策略下, 猜到顏色所需要的問題的個數。熵代表的是隨機變量或整個系統的不確定性,熵越大,隨機變量或系統的不確定性就越大。
  • 機器學習之模型評估(損失函數)
    2.分類問題分類問題損失函數主要有交叉熵損失、0-1損失、合頁損失、指數損失和Modified Huber 損失。其中最重要的是交叉熵損失。本文對它做一個重點介紹。交叉熵損失也稱負對數似然,它是二分類問題中最常用的損失函數,比如邏輯回歸。
  • softmax 損失函數 & 參數更新詳解
    對參數求偏導推導及更新要點回歸:邏輯回歸二分類用sigmoid變換成預測單個「概率」,損失函數為交叉熵,用梯度下降求解參數wbsoftmax多分類用softmax變換成多個「概率」,損失函數和求解思路類似相比(−∞,+∞)範圍內的數值結果,概率天然具有更好的可解釋性;我們獲得了K個類別(−
  • 深度學習中常見的損失函數
    該式就是sigmoid函數的交叉熵,這也是上文說的在分類問題上,交叉熵的實質是對數似然函數。在深度學習中更普遍的做法是將softmax作為最後一層,此時常用的仍是對數似然損失函數,如下所示:該式其實是式(1)的推廣,正如softmax是sigmoid的多類別推廣一樣,在TensorFlow裡面根據最後分類函數softmax和sigmoid就分為softmax交叉熵以及sigmoid的交叉熵,並對這兩個功能進行統一封裝。
  • 神經網絡中的各種損失函數介紹
    二元交叉熵當你執行二元分類任務時,可以選擇該損失函數。如果你使用BCE(二元交叉熵)損失函數,則只需一個輸出節點即可將數據分為兩類。輸出值應通過sigmoid激活函數,以便輸出在(0-1)範圍內。(也就是輸出概率值)如果你不想在最後一層上顯示使用sigmoid激活函數,你可以在損失函數的參數上設置from logits為true,它會在內部調用Sigmoid函數應用到輸出值。多分類交叉熵當你執行多類分類任務時,可以選擇該損失函數。
  • 乾貨|不同的損失函數會對深度神經網絡帶來什麼樣的影響?
    二次損失函數會在神經元犯了明顯錯誤的情況下使得網絡學習緩慢,而使用交叉熵損失函數則會在明顯犯錯的時候學的更快。 今天,我們主要來談談不同的損失函數會對深度神經網絡帶來什麼樣的影響?
  • 機器學習算法中的7個損失函數的詳細指南
    損失函數是我們喜歡使用的機器學習算法的核心。但大多數初學者和愛好者不清楚如何以及在何處使用它們。它們並不難理解,反而可以增強你對機器學習算法的理解。那麼,什麼是損失函數,你如何理解它們的意義?在本文中,我將討論機器學習中使用的7種常見損失函數,並解釋每種函數的使用方法。
  • 從最優化的角度看待 Softmax 損失函數
    Softmax交叉熵損失函數應該是目前最常用的分類損失函數了,在大部分文章中,Softmax交叉熵損失函數都是從概率角度來解釋的,本周二極市就推送了一篇Softmax相關文章:一文道盡softmax loss及其變種。本文將嘗試從最優化的角度來推導出Softmax交叉熵損失函數,希望能夠啟發出更多的研究思路。
  • Python機器學習算法中的7個損失函數的詳細指南
    它們並不難理解,反而可以增強你對機器學習算法的理解。那麼,什麼是損失函數,你如何理解它們的意義?在本文中,我將討論機器學習中使用的7種常見損失函數,並解釋每種函數的使用方法。目錄什麼是損失函數?回歸損失函數平方誤差損失絕對誤差損失Huber損失二分類損失函數二分類交叉熵Hinge損失多分類損失函數多分類交叉熵損失KL散度(Kullback Leibler Divergence Loss)1. 什麼是損失函數?假設你在山頂,需要下山。你如何決定走哪個方向?我要做的事情如下:環顧四周,看看所有可能的路徑拒絕那些上升的路徑。
  • 入門| 機器學習中常用的損失函數你知多少?
    損失函數和優化機器通過損失函數進行學習。這是一種評估特定算法對給定數據建模程度的方法。如果預測值與實際結果偏離較遠,損失函數會得到一個非常大的值。在一些優化函數的輔助下,損失函數逐漸學會減少預測值的誤差。本文將介紹幾種損失函數及其在機器學習和深度學習領域的應用。沒有一個適合所有機器學習算法的損失函數。
  • TensorFlow2.0(8):誤差計算——損失函數總結
    1 均方差損失函數:MSE 均方誤差(Mean Square Error),應該是最常用的誤差計算方法了,數學公式為:其中,,對於分類問題,特別是目標輸出為One-hot向量的分類任務中,下面要說的交叉熵損失函數就要合適的多。
  • 深度人臉識別中不同損失函數的性能對比
    因此,近年來研究者也在研究 CNN 模型的其它方面,如損失函數、非線性、優化器等。其中一個重要研究是開發適合人臉識別的損失函數。關於損失函數的早期研究包括 Center Loss 和 Triplet Loss,主要用於減少當前樣本和正樣本之間的距離、增加當前樣本和負樣本之間的距離,從而更緊密地與人臉識別產生關聯。
  • 通過對抗損失函數來降低對抗損失函數的效用
    該文將進一步通過對抗損失函數來降低對抗損失函數的效用,並且使用優化ranknet-2模型實現對抗損失函數。同時將softmax函數映射到了循環網絡中,即將損失函數映射到了dnn整體和用戶的得分之間的差值之間的回歸梯度,增強網絡網絡的泛化能力。
  • 機器學習中各種熵的定義及理解
    針對這類問題,利用香農熵以及衍生的其他熵概念去度量概率分布的信息量是個很好的解決方案。本文會儘可能用簡單的描述分享自己對各種熵的定義及理解,歡迎交流討論。1. 自信息自信息又稱信息量。「陳羽凡吸毒?!工作室不是剛闢謠了嗎?哇!信息量好大!」在生活中,極少發生的事情最容易引起吃瓜群眾的關注。
  • 只需一個損失函數,一個超參數即可壓縮BERT,MSRA提模型壓縮新方法
    與之前用於 BERT 壓縮的知識蒸餾方法相比,該方法僅利用一個損失函數和一個超參數,將開發者從調參這一繁瑣過程中解放出來。該方法在 GLUE 基準上的性能優於現有的知識蒸餾方法,為模型壓縮開啟了新方向。
  • 深度學習激活函數完全指南:在數據科學的諸多曲線上進行現代之旅
    增強函數的非線性能力增強函數特定的數值性質ReLU 類激活函數整流器: ReLU,LeakyReLU,和 PReLU指數類: ELU和SELU非單調類: Swish和SERLU特殊的激活函數線性函數:輸出原始數據或進行融合操作Tanh:回歸 +L1/L2正則項Sigmoid:二分類 + 二元交叉熵。Softmax:多分類+ 多元交叉熵結語為什麼要使用激活函數?