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

讓咱們試着去理解最普遍使用的損失函數-交叉熵。框架

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

什麼是熵?

爲了開始瞭解熵到底指的是什麼,讓咱們深刻了解信息理論的一些基礎知識。在這個數字時代,信息是由位(0和1)組成的。在通訊時,有些位是有用的,有些是多餘的,有些是錯誤的,等等。當咱們傳遞信息時,咱們但願儘量多地向接收者傳遞有用的信息。學習

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

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

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

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

假設天氣有8種可能的狀態,全部的可能性都同樣。 blog

 如今,當氣象臺給你次日的天氣時,他們會把你的不肯定性下降8倍。因爲每一個事件都有1/8的機會發生,所以折減係數爲8。 事件

 但若是可能性不同呢?好比說,75%的概率是晴天,25%的概率是雨天。 get

 如今,若是氣象臺說次日會下雨,那麼你的不肯定性就下降了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散度背後的基本概念及其相互關係。

 

本文轉載自:https://zhuanlan.zhihu.com/p/150774518

相關文章
相關標籤/搜索