機器學習小知識: 圖解熵、交叉熵和 KL-散度

1什么是熵?
首先,本文指的熵是指信息熵。想要明白熵的確切含義,先讓我們了解一下信息論的一些基礎知識。在這個數(shù)字時代,信息由位(即比特,由 0 和 1)組成。在通信時,有些位是有用的,有些是冗余的,有些是錯誤,依此類推。當我們傳達信息時,我們希望向收件人發(fā)送盡可能多的有用信息。
在 Claude Shannon 的論文《通信的數(shù)學理論》(1948)中,他指出,傳輸 1 比特的信息意味著將接收者的不確定性降低 2 倍。
讓我們來看看他說的意思。例如,考慮一個天氣狀況隨機的地方,每天可能有 50% 的機率是晴天或陰雨。

現(xiàn)在,如果氣象站告訴你明天要下雨,那么他們將不確定性降低了 2 倍。起初,有兩種可能,但在收到氣象站的信息后,就只有一種可能了。在這里,氣象站向我們發(fā)送了一點點有用的信息,無論他們?nèi)绾尉幋a這些信息,這都是事實。
即使發(fā)送的信息是多雨(Rainy),并且每個字符占用一個字節(jié),消息總的大小也相當于 40 比特,但是它們?nèi)匀恢粋鬟_了 1 比特的有用信息。
假設天氣有 8 種可能的狀態(tài),所有可能性都相同。

現(xiàn)在,當氣象站為你提供第二天的天氣時,它們會將不確定性降低了 8 倍。由于每個事件的發(fā)生機率為 1/8,因此降低因子為 8。

但是,如果不同天氣的可能性不一樣該怎么辦呢?
假設有 75% 的概率是晴天,25% 的概率是下雨。

現(xiàn)在,如果氣象站說第二天要下雨,那么不確定性就會降低 4 倍,即 2 個比特信息。減少的不確定性是事件概率的倒數(shù)。在這種情況下,25% 的倒數(shù)是 4,以 2 為底的
解讀
原來憑空猜下雨,你只有 1/4 把握,得到天氣預報后現(xiàn)在的把握是 1 了。確定性提升到 4 倍,或者說不確定性降低到 4 倍。 原來猜晴天,你有 3/4 把握,得到天氣預報后現(xiàn)在的把握是 1 了。確定性提升到 4/3 倍,或者說不確定性降低到 4/3 倍。
2信息熵
我們經(jīng)常會說,某個新聞的信息量好大。那么這個信息量到底怎么定義呢?所含的文字?所表達的內(nèi)容?貌似并不好定義。
可以這么來理解,對某個事件由不確定到確定就得到了所謂的信息量,那么如何來量化它呢?即這個信息量到底有多大呢?這個就需要對不確定到確定這個轉(zhuǎn)化作量化了。首先看看怎么量化不確定性。通過前文我們知道,事件概率越大,不確定性自然就越小,再結合事件是獨立的這個前提。信息量應該滿足下面這些條件,
信息量跟事件的概率值成反比,即 。概率越大的事件確定性越大,因此由不確定到確定的轉(zhuǎn)化所含的信息量越小。 兩個獨立事件所對應的信息量應等于各自信息量之和,因為相互不影響,所謂的可加性,即 。
滿足這兩個條件的常見函數(shù)有嗎?答案是肯定的,比如
這個正是 Shannon 采用的函數(shù)。來一小段 Python 代碼繪制一下這個函數(shù),
#?compare?probability?vs?information?entropy
from?math?import?log2
from?matplotlib?import?pyplot
#?list?of?probabilities
probs?=?[0.1,?0.2,?0.3,?0.4,?0.5,?0.6,?0.7,?0.8,?0.9,?1.0]
#?calculate?information
info?=?[-log2(p)?for?p?in?probs]
#?plot?probability?vs?information
pyplot.plot(probs,?info,?marker='.')
pyplot.title('Probability?vs?Information')
pyplot.xlabel('Probability')
pyplot.ylabel('Information')
pyplot.show()
結果見下圖,對照一下圖像來更好地理解一下這個函數(shù)吧。

好了,接下來我們就用這個函數(shù)來計算信息熵。熵,從數(shù)學上看,衡量的是一種期望值,即隨機變量多次試驗后所傳遞的信息量的平均值。假設離散隨機變量對應的分布為
這里用的都是以 2 為底的對數(shù),也因此信息量對應的單位稱為比特(bit)。下面我們回到前文的例子。

如果氣象站說第二天是晴天,那么我們將獲得 0.41 比特的信息量。因此,平均而言,我們將從氣象站獲得多少信息量呢?
好吧,明天有 75% 的機率是晴天,這會給你 0.41 比特的信息,明天有 25% 的機率會下雨,它為給你提供 2 比特的信息,對應于下圖

平均而言,我們每天從氣象站獲得 0.81 比特的信息。因此,我們把剛剛計算出的平均值稱為信息熵。這很好地衡量了事件的不確定性。
希望熵的公式現(xiàn)在完全有了意義。它衡量的是你每天收到天氣預報時得到的平均信息量。通常,它給出了我們從給定的概率分布
如果我們生活在每天陽光明媚的沙漠中,平均來說,每天我們不會從氣象站獲得太多信息。熵值將接近于零。另一方面,如果每天的天氣情況變化很大,熵值將很大。
3交叉熵
現(xiàn)在,讓我們談談交叉熵??梢詫⑺闯善骄畔㈤L度。比如上面例子中,考慮到有 8 種可能的天氣狀況,它們的可能性均等,可以使用 3 個比特的信息對每種狀況來編碼。

如圖所示,這里的平均信息長度為 3,這就是這個例子的交叉熵。
但是現(xiàn)在,假設你住在陽光充足的地區(qū),天氣的概率分布并不均勻,具體如下圖所示,

每天都有 35% 的機率是晴天,雷雨的可能性只有 1%。因此,我們可以計算該概率分布的熵,得,
請注意,此處使用的是以 2 為底的對數(shù)。
因此,氣象站平均發(fā)送 3 個比特信息,但是接收者僅獲得 2.23 個有用的比特信息。那么,是不是說明我們還可以做得更好呢?
例如,像下面這樣來更改編碼,

現(xiàn)在,我們只使用 2 個比特信息表示晴天或部分晴天,使用 3 個比特信息表示多云和大部分多云,使用 4 個比特信息表示中雨和小雨,使用 5 個比特信息表示大雨和雷暴。對天氣坐這樣的編碼方式是不會引起歧義的,例如,你鏈接多條消息,則只有一種方法可以解釋比特流。例如,01100 只能表示部分晴天(01),然后是小雨(100)。因此,如果我們計算該站每天發(fā)送的平均比特數(shù),則可以得出,
這是我們新的和改進的交叉熵,它比以前的 3 個比特更好?,F(xiàn)在,假設我們在不同的地方使用相同的代碼,那兒的天氣是相反的,多雨。

現(xiàn)在,如果我們計算交叉熵,
我們得到 4.58 個比特,大約是熵的兩倍。平均而言,該站發(fā)送 4.58 個比特信息,但只有 2.23 個比特信息對接收者來說是有用的。每條消息發(fā)送的信息量是必要信息的兩倍。這是因為我們使用的代碼對天氣分布做出了一些隱含的假設。例如,當我們在晴天使用 2 個比特信息時,我們含蓄地預測了晴天的概況為 25%。這是因為
同樣,我們計算所有的天氣情況。

分母中 2 的冪對應于用于傳輸信息的比特數(shù)。很明顯,預測分布
因此,現(xiàn)在我們可以將交叉熵(
請注意,本示例中使用的對數(shù)均是以 2 為底的。
正如你所見,除了我們在這里使用預測概率的對數(shù)外,它看起來與熵的等式非常相似。如果我們的預測是完美的,那就是預測分布等于真實分布,那么交叉熵就等于熵。但是,如果分布不同,交叉熵就會比熵更大一些,因為多了一些比特。交叉熵超過熵的數(shù)量,被稱為相對熵,或更通常稱為 Kullback-Leibler Divergence(KL-散度)??偨Y一下,簡而言之,
從上面的例子中,我們得到
4應用
現(xiàn)在,讓我們在實際應用中來用一用交叉熵。比如,我們正在訓練一個圖像分類器,對看起來比較相似的不同動物進行分類,例如浣熊啊、小熊貓啊、狐貍之類等等。

因此,對于可能的 7 個類別中的每一個類別,分類器會分別給出一個概率,即所謂的預測分布。由于這是有監(jiān)督的學習問題,因此我們是知道真實分布的。
在上面的示例中,我拍了一只浣熊的照片,因此在真實分布中,浣熊類的概率應該為 100%,其他類的概率為 0。我們可以將這兩個分布之間的交叉熵作為成本函數(shù),稱為交叉熵損失。
這只是我們前面看到的等式,除了它通常使用自然對數(shù)而不是 以 2 為底的對數(shù)。對于訓練而言,這無關緊要,因為以 2 為底的對數(shù)
因此,當類別概率被稱為一個獨熱編碼向量(這意味著一個類別具有 100% 概率,其余類別均為 0%)時,交叉熵只是真實類別的估計概率的負對數(shù)。
在這個例子中,交叉熵為
現(xiàn)在,你可以看到,當對真實類別的預測概率接近 0 時,成本函數(shù)可能會非常大。但是,當預測概率接近 1 時,成本函數(shù)將接近 0。因此,我們需要對每個類使用更多的例子來訓練分類器,以減少損失。
5小結
我們以氣象站更新第二天的天氣為例,了解了香農(nóng)信息理論的概念。然后我們將其與熵、交叉熵相關聯(lián)。最后,我們使用一個例子看了下交叉熵損失函數(shù)的實際用法。我希望本文能幫大家弄清熵、交叉熵和 KL-散度以及他們之間的聯(lián)系。
?參考資料?
Hands-On Machine Learning with Scikit-Learn and TensorFlow: https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/
[2]Entropy, Cross-Entropy, and KL-Divergence Explained: https://towardsdatascience.com/entropy-cross-entropy-and-kl-divergence-explained-b09cdae917a
[3]A Gentle Introduction to Information Entropy: https://machinelearningmastery.com/what-is-information-entropy
[4]Entropy_information_theory: https://en.wikipedia.org/wiki/Entropy_information_theory
↓掃描二維碼添加好友↓ 推薦閱讀
(點擊標題可跳轉(zhuǎn)閱讀)
