你是否有過疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?

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

1. 引言

我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。

2. 交叉熵的來源

2.1 信息量

一條信息的信息量大小和它的不確定性有很大的關係。一句話如果需要很多外部信息才能確定,我們就稱這句話的信息量比較大。比如你聽到「雲南西雙版納下雪了」,那你需要去看天氣預報、問當地人等等查證(因為雲南西雙版納從沒下過雪)。相反,如果和你說「人一天要吃三頓飯」,那這條信息的信息量就很小,因為條信息的確定性很高。

       那我們就能將事件x_0的信息量定義如下(其中p(x_0)表示事件x_0發生的概率):

概率總是一個0-1之間的值,-log(x)的圖像如上

2.2 熵

信息量是對於單個事件來說的,但是實際情況一件事有很多種發生的可能,比如擲骰子有可能出現6種情況,明天的天氣可能晴、多雲或者下雨等等。熵是表示隨機變量不確定的度量,是對所有可能發生的事件產生的信息量的期望。公式如下:

n表示事件可能發生的情況總數

其中一種比較特殊的情況就是擲硬幣,只有正、反兩種情況,該種情況(二項分布或者0-1分布)熵的計算可以簡化如下:

p(x)代表擲正面的概率,1-p(x)則表示擲反面的概率(反之亦然)

2.3 相對熵

相對熵又稱KL散度,用于衡量對於同一個隨機變量x的兩個分布p(x)和q(x)之間的差異。在機器學習中,p(x)常用於描述樣本的真實分布,例如[1,0,0,0]表示樣本屬於第一類,而q(x)則常常用於表示預測的分布,例如[0.7,0.1,0.1,0.1]。顯然使用q(x)來描述樣本不如p(x)準確,q(x)需要不斷地學習來擬合準確的分布p(x)。

       KL散度的公式如下:

n表示事件可能發生的情況總數

KL散度的值越小表示兩個分布越接近。

2.4 交叉熵

       我們將KL散度的公式進行變形,得到:

       前半部分就是p(x)的熵,後半部分就是我們的交叉熵:

       機器學習中,我們常常使用KL散度來評估predict和label之間的差別,但是由於KL散度的前半部分是一個常量,所以我們常常將後半部分的交叉熵作為損失函數,其實二者是一樣的。

3. 交叉熵作為loss函數的直覺

在回歸問題中,我們常常使用均方誤差(MSE)作為損失函數,其公式如下:

m表示樣本個數,loss表示的是m個樣本的均值

其實這裡也比較好理解,因為回歸問題要求擬合實際的值,通過MSE衡量預測值和實際值之間的誤差,可以通過梯度下降的方法來優化。而不像分類問題,需要一系列的激活函數(sigmoid、softmax)來將預測值映射到0-1之間,這時候再使用MSE的時候就要好好掂量一下了,為啥這麼說,請繼續看:

sigmoid加MES的基本公式

gradient推導過程

上面複雜的推導過程,其實結論就是下面一張圖:

C就是👆的J,sigma就是sigmoid函數,a就是predict

從以上公式可以看出,w和b的梯度跟激活函數的梯度成正比,激活函數的梯度越大,w和b的大小調整得越快,訓練收斂得就越快。而我們都知道sigmoid函數長這樣:

圖片來自:https://blog.csdn.net/u014313009/article/details/51043064

在上圖的綠色部分,初始值是0.98,紅色部分初始值是0.82,假如真實值是0。直觀來看那麼0.82下降的速度明顯高於0.98,但是明明0.98的誤差更大,這就導致了神經網絡不能像人一樣,誤差越大,學習的越快。

但是如果我們把MSE換成交叉熵會怎麼樣呢?

x表示樣本,n表示樣本的總數

重新計算梯度:

推導過程

另外sigmoid有一個很好的性質:

我們從結果可以看出梯度中不再含有sigmoid的導數,有的是sigmoid的值和實際值之間的差,也就滿足了我們之前所說的錯誤越大,下降的越快。

這也就是在分類問題中常用cross entropy 而不是 MSE的原因了。

來自 AI部落聯盟

作者 Jason Cai

乾貨推薦:

一大批歷史精彩文章啦

劉知遠:NLP研究入門之道(一)

劉知遠:NLP研究入門之道(二)走近NLP學術界

詳解Transition-based Dependency parser基於轉移的依存句法解析器

乾貨 | 找工作的經驗總結(一)

經驗 | 初入NLP領域的一些小建議

學術 | 如何寫一篇合格的NLP論文

乾貨 | 那些高產的學者都是怎樣工作的?

是時候研讀一波導師的論文--一個簡單有效的聯合模型

近年來NLP在法律領域的相關研究工作

相關焦點

  • Softmax函數與交叉熵
    = -tf.reduce_sum(label * tf.log(y))cross_entropy = -tf.reduce_sum(label * tf.log(y))是交叉熵的實現。先對所有的輸出用softmax進行轉換為概率值,再套用交叉熵的公式。
  • 簡單的交叉熵,你真的懂了嗎?
    引言        我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • 【小知識】Softmax函數與交叉熵
    = -tf.reduce_sum(label * tf.log(y))cross_entropy = -tf.reduce_sum(label * tf.log(y))是交叉熵的實現。先對所有的輸出用softmax進行轉換為概率值,再套用交叉熵的公式。
  • Binary_Cross_Entropy
    / log loss作為損失函數。下面詳細介紹這個損失函數binary cross-entropy二、A Simple Classification Problem比如說給10個點分類,只有兩個類別:Green or Red。設Green為positive,label=1,Red為negative,label=0.
  • TensorFlow四種Cross Entropy算法實現和應用
    ➤交叉熵介紹交叉熵(Cross Entropy)是Loss函數的一種(也稱為損失函數或代價函數),用於描述模型預測值與真實值的差距大小,常見的Loss函數就是均方平方差(Mean Squared Error),定義如下。
  • TensorFlow四種Cross Entropy算法的實現和應用
    歡迎技術投稿、約稿、給文章糾錯,請發送郵件至heyc@csdn.net交叉熵介紹交叉熵(Cross Entropy)是Loss函數的一種(也稱為損失函數或代價函數),用於描述模型預測值與真實值的差距大小,常見的Loss函數就是均方平方差(Mean Squared Error),定義如下:平方差很好理解,
  • 可視化理解二值交叉熵/對數損失
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?對於像我們的示例這樣的二分類,典型的損失函數是binary cross-entropy / log。
  • 可視化理解 Binary Cross-Entropy
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?問題是,鑑於如今庫和框架的易用性,很容易讓人忽略所使用損失函數的真正含義。動機我一直在尋找一個可以向學生展示的以清晰簡潔可視化的方式解釋二值交叉熵/對數損失背後概念的博客文章。
  • 透徹講解~交叉熵代價函數
    交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網絡(ANN)的預測值與實際值的一種方式。與二次代價函數相比,它能更有效地促進ANN的訓練。在介紹交叉熵代價函數之前,本文先簡要介紹二次代價函數,以及其存在的不足。
  • 深度學習中常見的損失函數
    而邏輯回歸的推導中,它假設樣本服從於伯努利分布(0-1分布),然後求得滿足該分布的似然函數,接著求取對數等(Log損失函數中採用log就是因為求解過中使用了似然函數,為了求解方便而添加log,因為添加log並不改變其單調性)。但邏輯回歸併沒有極大化似然函數,而是轉變為最小化負的似然函數,因此有了上式。已知邏輯函數(sigmoid函數)為:
  • 簡單的交叉熵損失函數,你真的懂了嗎?
    說起交叉熵損失函數「Cross Entropy Loss」,腦海中立馬浮現出它的公式:我們已經對這個交叉熵函數非常熟悉,大多數情況下都是直接拿來使用就好。但是它是怎麼來的?為什麼它能表徵真實樣本標籤和預測概率之間的差值?上面的交叉熵函數是否有其它變種?也許很多朋友還不是很清楚!
  • 【損失函數】常見的損失函數(loss function)總結
    注意公式中 最後奉獻上交叉熵損失函數的實現代碼:cross_entropy.這裡需要更正一點,對數損失函數和交叉熵損失函數應該是等價的!!!(此處感謝 @Areshyy 的指正,下面說明也是由他提供)下面來具體說明:
  • 入門| 機器學習中常用的損失函數你知多少?
    針對特定問題選擇損失函數涉及到許多因素,比如所選機器學習算法的類型、是否易於計算導數以及數據集中異常值所佔比例。從學習任務的類型出發,可以從廣義上將損失函數分為兩大類——回歸損失和分類損失。在分類任務中,我們要從類別值有限的數據集中預測輸出,比如給定一個手寫數字圖像的大數據集,將其分為 0~9 中的一個。
  • 完美解釋交叉熵
    其中一個最好的設計問題的策略如下:每一個硬幣有1/4的概率被選中, 1/4(機率) * 2道題目 * 4顆球 = 2,平均需要問兩道題目才能找出不同顏色的球,也就是說期望值為2,就是熵(entropy)。
  • 什麼是交叉熵啊?| 小白深度學習入門
    大家在學習深度學習的過程中,都會碰到cross-entropy這個詞,中文叫「交叉熵」,多麼高大上的名詞!
  • 關於交叉熵損失
    而softmax 函數能將一個向量的每個分量映射到[0,1]區間,並且對整個向量的輸出做了歸一化,保證所有分量輸出的和為1,正好滿足多分類任務的輸出要求。所以,在多分類中,在最後就需要將提取的到特徵經過softmax函數的,輸出為每個類別的概率,然後再使用交叉熵作為損失函數。softmax函數定義如下:
  • 【附代碼:AI實戰】快速掌握TensorFlow(四):損失函數
    (loss_l2_vals)# 均方誤差loss_mse_vals= tf.reduce.mean(tf.square(y_pred - y_target))loss_mse_out = sess.run(loss_mse_vals)L2正則損失函數在目標值附近有很好的曲度,離目標越近收斂越慢,是非常有用的損失函數。
  • 機器學習小知識: 圖解熵、交叉熵和 KL-散度
    交叉熵是分類問題中最常用的損失函數之一。但是由於如今有大量容易上手的現成庫和框架,我們大多數人常常在沒有真正了解熵的核心概念的情況下,就可以熟練地解決問題。在本文中,讓我們研究一下熵這個概念背後的基本直覺,並將其與交叉熵、KL-散度相關聯。我們還將使用交叉熵作為損失函數,結合一個實例來看看它在分類問題中的應用。1什麼是熵?
  • 熵、交叉熵和KL散度的基本概念和交叉熵損失函數的通俗介紹
    (也稱為對數損失)是分類問題中最常用的損失函數之一。但是,由於當今龐大的庫和框架的存在以及它們的易用性,我們中的大多數人常常在不了解熵的核心概念的情況下著手解決問題。所以,在這篇文章中,讓我們看看熵背後的基本概念,把它與交叉熵和KL散度聯繫起來。我們還將查看一個使用損失函數作為交叉熵的分類問題的示例。什麼是熵?
  • 交叉熵(Cross Entropy)從原理到代碼解讀
    原理部分:要想搞懂交叉熵需要先清楚一些概念,順序如下:==1.自信息量—>2.信息熵(熵)—>3.相對熵(KL散度)—>4.交叉熵==1.自信息量隨機事件4.交叉熵有了對前面概念的鋪墊,就很容易理解交叉熵