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

交叉熵(也稱爲對數損失)是分類問題中最常用的損失函數之一。但是,由於當今龐大的庫和框架的存在以及它們的易用性,我們中的大多數人常常在不瞭解熵的核心概念的情況下着手解決問題。所以,在這篇文章中,讓我們看看熵背後的基本概念,把它與交叉熵和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翻譯組

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章