熵、交叉熵和KL散度的基本概念和交叉熵損失函數的通俗介紹

2021-02-20 DeepHub IMBA

交叉熵(也稱為對數損失)是分類問題中最常用的損失函數之一。但是,由於當今龐大的庫和框架的存在以及它們的易用性,我們中的大多數人常常在不了解熵的核心概念的情況下著手解決問題。所以,在這篇文章中,讓我們看看熵背後的基本概念,把它與交叉熵和KL散度聯繫起來。我們還將查看一個使用損失函數作為交叉熵的分類問題的示例。

什麼是熵?

為了開始了解熵到底指的是什麼,讓我們深入了解信息理論的一些基礎知識。在這個數字時代,信息是由位(0和1)組成的。在通信時,有些位是有用的,有些是多餘的,有些是錯誤的,等等。當我們傳遞信息時,我們希望儘可能多地向接收者傳遞有用的信息。

在Claude Shannon的論文「通信數學理論(1948)」中,他指出傳輸1位信息意味著將接收者的不確定性降低2倍。

讓我們看看他是什麼意思。例如,假設一個地方的天氣是隨機的,每天都有50-50個晴天或下雨的機會。

現在,如果一個氣象站告訴你明天會下雨,那麼他們已經把你的不確定性降低了2倍。起初,有兩種可能性相同,但在收到氣象站的最新消息後,我們只有一種可能性。在這裡,氣象臺給我們發送了一點有用的信息,不管他們如何編碼這些信息,這都是真的。

即使發送的消息是「未雨綢繆」的,每個字符佔用一個字節,消息的總大小對應40位,但它們仍然只傳遞1位有用信息。

假設天氣有8種可能的狀態,所有的可能性都一樣。

現在,當氣象臺給你第二天的天氣時,他們會把你的不確定性降低8倍。由於每個事件都有1/8的機會發生,因此折減係數為8。

但如果可能性不一樣呢?比如說,75%的機率是晴天,25%的機率是雨天。

現在,如果氣象臺說第二天會下雨,那麼你的不確定性就降低了4倍,這是2位信息。不確定性的降低只是事件概率的倒數。在這種情況下,25%的反比是4,對數(4)到基2等於2。所以,我們得到了2位有用的信息。

如果氣象臺說第二天會是晴天,那麼我們就能得到0.41位有用的信息。那麼,我們平均要從氣象站得到多少信息呢?

好吧,有75%的可能性明天會是晴天,這給了你0.41比特的信息,25%的可能性明天會下雨,這給了你2比特的信息,這相當於,

我們平均每天從氣象站得到0.81位信息。所以,我們剛才計算的是熵。這是一個很好的衡量事件有多不確定的指標。它是由,

熵的方程現在完全有意義了。它測量你每天學習天氣時得到的平均信息量。一般來說,它給出了我們從一個給定概率分布的樣本中得到的平均信息量,它告訴我們概率分布是多麼不可預測。

如果我們生活在一個每天都是晴天的沙漠中間,平均來說,我們每天從氣象站得不到多少信息。熵將接近於零。另一方面,如果天氣變化很大,熵就會大得多。

交叉熵

現在,我們來談談交叉熵。它只是平均消息長度。考慮到8種可能的天氣條件的相同示例,所有這些條件都同樣可能,每個條件都可以使用3位編碼。

這裡的平均消息長度是3,這就是交叉熵。但現在,假設你生活在一個陽光充足的地區,那裡的天氣概率分布如下:

每天有35%的可能性是晴天,只有1%的可能性是雷雨。所以,我們可以計算這個概率分布的熵,

Entropy = -(0.35 * log(0.35) + 0.35 * log(0.35) + 0.1 * log(0.1) + 0.1 *  log(0.1) + 0.04 * log(0.04) + 0.04 * log(0.04) + 0.01 * log(0.01) + 0.01 * log(0.01))

Entropy = 2.23 bits

注意,這裡使用的二元的記錄。

所以,平均來說,氣象臺發送3位,但收信人只能得到2.23個有用的位。我們可以做得更好。

例如,讓我們這樣更改代碼:

我們現在只使用2位表示晴天或部分晴天,3位表示多雲和大部分多雲,4位表示小雨和中雨,5位表示大雨和雷雨。天氣的編碼方式是明確的,如果你連結多條信息,只有一種方法可以解釋比特序列。例如,01100隻能表示部分晴天,然後是小雨。所以,如果我們計算電臺每天發送的平均比特數,

35%*2 + 35%*2 + 10%*3 + 10%* 3+ 4%*4 + 4%*4 + 1%*5 + 1%*5 = 2.42 bits

這是我們的新的和改進的交叉熵,比之前的3位要好。現在,假設我們在不同的地方使用相同的代碼,那裡的天氣正好相反,而且大部分時間都在下雨。

我們計算交叉熵,

1%*2 + 1%*2 + 4%*3 + 4%* 3+ 10%*4 + 10%*4 + 35%*5 + 35%*5 = 4.58 bits

我們得到4.58比特。大約是熵的兩倍。平均而言,電臺發送4.58位,但只有2.23位對接收者有用。它發送的信息是每條消息所需信息的兩倍。這是因為我們使用的代碼對天氣分布做了一些隱含的假設。例如,當我們對晴天使用2位消息時,我們隱式地預測晴天的概率為25%。這是因為負二元對數(0.25)給出2。

同樣,我們計算所有的天氣條件。

分母中2的冪對應於用於傳輸消息的位數。現在,很明顯,預測的分布q與真實的分布p有很大的不同。

因此,現在我們可以將交叉熵表示為真概率分布p和預測概率分布q的函數,其表示為:

注意,我們示例中使用的是以2為基數的。

如你所見,它看起來與熵方程非常相似,除了我們在這裡使用預測概率的對數。如果我們的預測是完美的,即預測分布等於真分布,那麼交叉熵就是簡單的熵。但是,如果分布不同,那麼交叉熵將比熵大一些位。交叉熵超過熵的量稱為相對熵,或者更常見的稱為Kullback-Leibler散度(KL散度)。簡而言之,

從上面的例子,我們得到K-L散度=交叉熵 - 熵=4.58–2.23=2.35位。

應用

現在,讓我們在應用程式中使用交叉熵。考慮到我們正在訓練一個圖像分類器來對外觀基本相似的不同動物進行分類,例如浣熊、小熊貓、狐狸等等。

因此,對於可能的7個類中的每一個,分類器估計一個概率,這稱為預測分布。由於這是一個有監督的學習問題,我們知道真實的分布。

在上面的例子中,我拍攝了一隻浣熊的圖像,所以在真實分布中,它的概率是100%,其他的概率是0。我們可以用這兩種分布之間的交叉熵作為代價函數,稱之為交叉熵損失。

這只是我們前面看到的方程,除了它通常使用自然對數而不是二元對數。這對於訓練來說並不重要,因為二元對數(x)等於自然對數(x)/log(2),其中分母是常數。

因此,當類概率被稱為一個熱向量時(這意味著一個類有100%,其餘的都是0),那麼交叉熵就是真類估計概率的負對數。

在這個例子中,交叉熵=1*log(0.3)=-log(0.3)=1.203

現在,當真類的預測概率接近0時,代價將變得非常大。但當預測概率接近1時,成本函數接近於0。

由於得到的損失較多(由於預測的分布太低),我們需要為每一類訓練更多的例子來減少損失量。

結論

我們以氣象站更新次日天氣為例,了解香農資訊理論的概念。然後我們把它與熵和交叉熵聯繫起來。最後,我們以一個例子來說明交叉熵損失函數的實際應用。希望本文能澄清熵、交叉熵和KL散度背後的基本概念及其相互關係。

作者:Aakarsh Yelisetty

deephub翻譯組

微信號 : deephub-imba

每日大數據和人工智慧的重磅乾貨

大廠職位內推信息

長按識別二維碼關注 ->

好看就點在看!    


相關焦點

  • 機器學習小知識: 圖解熵、交叉熵和 KL-散度
    交叉熵是分類問題中最常用的損失函數之一。但是由於如今有大量容易上手的現成庫和框架,我們大多數人常常在沒有真正了解熵的核心概念的情況下,就可以熟練地解決問題。在本文中,讓我們研究一下熵這個概念背後的基本直覺,並將其與交叉熵、KL-散度相關聯。我們還將使用交叉熵作為損失函數,結合一個實例來看看它在分類問題中的應用。1什麼是熵?
  • 小孩都看得懂的熵、交叉熵和 KL 散度
    主題:物理概念的熵熵(entropy)是物理中的一個概念。如下圖,水有三種狀態:固態、液態和氣態,分別以冰、水和水蒸氣的形式存在。主題:KL 散度Kullback-Leibler 散度(KL 散度)是熵與交叉熵之間的差值。稱之為散度而不是距離是因為距離是對稱的,而散度可以是不對稱的。回到我們的場景,把哈登動作分布稱為 p 分布,把威少動作分布稱為 q 分布,那麼 p 分布對 q 分布的 KL 散度定義為
  • 透徹講解~交叉熵代價函數
    交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網絡(ANN)的預測值與實際值的一種方式。與二次代價函數相比,它能更有效地促進ANN的訓練。在介紹交叉熵代價函數之前,本文先簡要介紹二次代價函數,以及其存在的不足。
  • 關於交叉熵損失
    2.2 和交叉熵等價最大似然估計、相對熵、交叉熵的公式如下: 而softmax 函數能將一個向量的每個分量映射到[0,1]區間,並且對整個向量的輸出做了歸一化,保證所有分量輸出的和為1,正好滿足多分類任務的輸出要求。所以,在多分類中,在最後就需要將提取的到特徵經過softmax函數的,輸出為每個類別的概率,然後再使用交叉熵作為損失函數。softmax函數定義如下:
  • Softmax函數與交叉熵
    交叉熵說交叉熵之前先介紹相對熵,相對熵又稱為KL散度(Kullback-Leibler Divergence),用來衡量兩個分布之間的距離,記為關於熵與交叉熵等概念,可以參考該博客再做了解。回到我們多分類的問題上,真實的類標籤可以看作是分布,對某個樣本屬於哪個類別可以用One-hot的編碼方式,是一個維度為
  • 熵、交叉熵和散度,這是一篇最純碎的理解!
    物理概念的熵熵(entropy)是物理中的一個概念。熵和交叉熵的總結在下圖。lt; Hq(p)H(q) = Hq(q) < Hp(q)交叉熵不對稱(不直觀,接受吧少年)    Hq(p) ≠ Hp(q)    熵比交叉熵要小,那兩者之間的差距是什麼?
  • 可視化理解二值交叉熵/對數損失
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?問題是,鑑於如今庫和框架的易用性,很容易讓人忽略所使用損失函數的真正含義。動機我一直在尋找一個可以向學生展示的以清晰簡潔可視化的方式解釋二值交叉熵/對數損失背後概念的博客文章。
  • 簡單的交叉熵損失函數,你真的懂了嗎?
    說起交叉熵損失函數「Cross Entropy Loss」,腦海中立馬浮現出它的公式:我們已經對這個交叉熵函數非常熟悉,大多數情況下都是直接拿來使用就好。但是它是怎麼來的?為什麼它能表徵真實樣本標籤和預測概率之間的差值?上面的交叉熵函數是否有其它變種?也許很多朋友還不是很清楚!
  • Pytorch 中交叉熵 Loss 趣解
    信息量的計算公式為:信息熵理解了信息量之後,信息熵的理解也就不再困難了。熵原本是熱力學中的一個概念,是用來衡量混亂程度的物理量。信息熵則是借用熱力學的概念,衡量在事件發生前對於產生信息量的期望。KL散度與交叉熵理解了信息量和信息熵之後,接下來就是交叉熵的概念了。介紹交叉熵之前,Loss是繞不開的。
  • 簡單的交叉熵,你真的懂了嗎?
    引言        我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • 【小知識】Softmax函數與交叉熵
    交叉熵說交叉熵之前先介紹相對熵,相對熵又稱為KL散度(Kullback-Leibler Divergence),用來衡量兩個分布之間的距離,記為關於熵與交叉熵等概念,可以參考該博客再做了解。回到我們多分類的問題上,真實的類標籤可以看作是分布,對某個樣本屬於哪個類別可以用One-hot的編碼方式,是一個維度為
  • 你是否有過疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?
    引言我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • 機器學習最常用的損失函數之交叉熵
    在這篇文章裡將對這個概念進行詳細的分析。相對熵(relative entropy)又稱為KL散度(Kullback-Leibler divergence),KL距離,是兩個隨機分布間距離的度量。記為DKL(p||q)。它度量當真實分布為p時,假設分布q的無效性。
  • 為什麼交叉熵(cross-entropy)可以用於計算代價?
    先給出一個「接地氣但不嚴謹」的概念表述:熵:可以表示一個事件A的自信息量,也就是A包含多少信息。KL散度:可以用來表示從事件A的角度來看,事件B有多大不同。交叉熵:可以用來表示從事件A的角度來看,如何描述事件B。一句話總結的話:KL散度可以被用於計算代價,而在特定情況下最小化KL散度等價於最小化交叉熵。
  • 交叉熵(Cross Entropy)從原理到代碼解讀
    原理部分:要想搞懂交叉熵需要先清楚一些概念,順序如下:==1.自信息量—>2.信息熵(熵)—>3.相對熵(KL散度)—>4.交叉熵==1.自信息量隨機事件4.交叉熵有了對前面概念的鋪墊,就很容易理解交叉熵
  • 完美解釋交叉熵
    通過幾個簡單的例子來解釋和總結什麼是交叉熵( Cross Entropy) 以及機器學習分類問題中為什麼使用交叉熵。其中2是這個方案中的交叉熵。而最優方案的交叉熵是1.75。給定一個策略, 交叉熵就是在該策略下猜中顏色所需要的問題的期望值。更普遍的說,交叉熵用來衡量在給定的真實分布下,使用非真實分布所指定的策略消除系統的不確定性所需要付出成本的大小。交叉的字面意思在於:真實分布與非真實分布的交叉。給定一個方案, 越優的策略, 最終的交叉熵越低。
  • Softmax和交叉熵的深度解析和Python實現
    當中,老師一定會告訴你在全連接層後面應該加上 Softmax 函數,如果正常情況下(不正常情況指的是類別超級多的時候)用交叉熵函數作為損失函數,你就一定可以得到一個讓你基本滿意的結果。▌交叉熵損失函數下面我們來看一下對模型優化真正起到作用的損失函數——交叉熵損失函數。交叉熵函數體現了模型輸出的概率分布和真實樣本的概率分布的相似程度。
  • 為什麼分類問題的損失函數採用交叉熵而不是均方誤差MSE
    我們可以回憶下交叉熵Loss和均方差Loss定義是什麼:最小均方誤差,MSE(Mean Squared Error)Loss我們想衡量模型輸出a和label y的逼近程度,其實這兩個Loss都可以。但是為什麼Logistic Regression採用的是交叉熵作為損失函數呢?
  • 什麼是交叉熵啊?| 小白深度學習入門
    但如果前女友和你說「我是女的」,這句話就毫無信息量,這就是廢話。信息熵,泛泛的說是用來衡量一段信息的信息量大小的。這個定義我之前也不理解,直到我看見一個說法,突然茅塞頓開:信息熵是用來衡量表達一個隨機變量需要的最少的比特位數。在資訊理論的世界裡,我們追求的是用最經濟實惠的方法表達信息(「好話不說二遍」嘛)。
  • 機器學習中各種熵的定義及理解
    即在x條件下,y的條件熵 = x,y的聯合熵 - x的信息熵。5. 交叉熵交叉熵是一個用來比較兩個概率分布p和q的度量公式。同樣地,交叉熵可也以推廣到連續域。對於連續隨機變量x和概率密度函數p(x)和假設分布概率密度函數q(x), 交叉熵的定義如下: