1. 程式人生 > >香濃熵(轉)

香濃熵(轉)

原文:Shannon Entropy, Information Gain, and Picking Balls from Buckets

參考視訊:Information Entropy

在1948年,Glaude Shannon發表了文章《A Mathematical Theory of Communication》首次提出了革命性的概念“資訊熵”。 熵也是物理中的一個概念。簡單來說,如果一個系統中的粒子在運動過程中有很多可能的位置,那麼這個系統具有比較高的熵值,反之,如果系統中的粒子處於靜止狀態(粒子的位置相對固定),則系統具有很低的熵值。例如,水有三種狀態:固液氣,具有不同的熵值。冰中的分子位置固定,是一個穩定的狀態,所以冰具有最低的熵值。水中的分子相對可以進行一些移動,所以水具有中間大小的熵值。水蒸氣中的分子幾乎可以移動到任何地方,所以水蒸氣具有最大的熵值。 

夏農熵

但是這個和資訊理論有什麼關係呢。答案需要通過研究“知識”和“概率”來說明。 熵和知識為了使用概率來介紹熵的概念,這篇文章中我們將用這樣一個例子加以說明:有三個桶,每個桶裡面有四個小球,每個桶裡面的小球的顏色分佈如下: 桶1:4個紅色小球 桶2:三個紅色小球,1個藍色小球 桶3:兩個紅色小球,2個藍色小球 

夏農熵

我們將通過從桶裡面取出小球的顏色來判斷我們可以獲得多少知識。結論如下: 在第一個桶中,我們可以確定取出來的所有小球顏色都是紅色的; 在第二個桶中,取出紅色小球的概率是75%,取出藍色小球的概率是25%; 在第三個桶中,取出紅色小球的概率是50%,取出藍色小球的概率是50%.

所以,我們可以說桶1給出了關於小球顏色最多的知識(因為我們確定地知道所有小球都是紅色),桶2給出了部分知識,而桶3給出了最少量的知識。熵和知識類似,但是卻剛好相反。所以,桶1具有最小的熵,桶2次之,桶3具有最高的熵。 
夏農熵

我們需要一個公式定量地表示熵,為了找到這樣一個公式,我們需要使用概率。 熵和概率

現在的問題是如何創造出一個公式對於桶1中的4個紅球具有較低的值,對於桶2中的三個紅球1個藍球具有中等的值,對於桶3中的2個紅球和2個藍球具有較高的值。首先,我們需要記住熵的定義:一個系統中的粒子具有很大的可重新排列的可能性,系統具有較高的熵;反之,具有較低的熵。所以,我們首先

計算桶中的球可以重新排列的可能情況。對於桶1,只有一種可能性;對於桶2,有兩種可能性;對於桶3,有六種可能。這個可以通過二項式係數計算得到(1,4,6,1)。

對於小球排列情況的計算並不是熵公式的一部分,但是我們可以發現,有越多排列的可能性,則其熵越大;有越少的排列的可能性,則其熵越小。在下一節,我們將會構造熵的計算公式。基本思想通過考慮以某種確定的方式從每個桶中取出特定顏色排列的小球的概率。 熵和有趣的小球實驗

現在我們正式開始通過下面的遊戲發現用於計算熵的公式。可以提前劇透一下:通過遊戲獲勝的概率,我們可以得到熵的定義公式。

在這個遊戲中,我們給定三個桶。遊戲規則如下: 首先我們選擇一個桶; 以某種顏色排列取出該桶裡面的小球,然後將小球放回; 每次從該桶中取出一個小球並記錄顏色,並放回; 四次以後如果記錄的顏色和2中的顏色排列一致,則我們獲勝,可贏得1,000,000人民幣,否則遊戲失敗。

這個聽起來可能有些負責,但是實際很簡單。舉個例子,比如我們選擇桶2,裡面有三個紅球,一個藍球。我們從桶裡面以某種特定的排列取出小球,比如說(紅,紅,紅,藍)這個顏色排列。然後我們開始一次一次從桶裡面取一個小球,如果四次以後,我們取出來的顏色排列也是(紅,紅,紅,藍)這個組合,我們獲勝。那麼我們獲勝的概率是多少呢。 第一次取出紅球的概率是3/4,即0.75; 第二次取出紅球的概率是3/4(我們每次都是有放回的取出); 第三次取出紅球的概率仍然是3/4; 第四次取出藍球的概率是1/4,即0.25。

這四次操作都是獨立事件,獨立事件同時發生的概率使用乘法公式即: (3/4)∗(3/4)∗(3/4)∗(1/4)=27/256 ( 3 / 4 ) ∗ ( 3 / 4 ) ∗ ( 3 / 4 ) ∗ ( 1 / 4 ) = 27 / 256 ,即0.105。這是一個很小的概率。下面的圖給出了我們使用每個桶想要獲勝的概率。

為了方面說明,下面的圖給出了使用每個桶獲勝的概率。對於桶1,獲勝的概率為1;對於桶2,概率為0.105;對於桶3,概率為0.0625.

夏農熵
夏農熵
夏農熵

三個桶獲勝的概率總結如下表: 
夏農熵

這樣我們就可以定量評價使用三個桶獲勝的情況。遊戲獲勝的概率為: 桶1為1 桶2為0.105 桶3為0.0625

為了得到熵的計算公式,我們需要一個大小相反的度量,對於桶1有最小值,對於桶2有一箇中間的值,對於桶3有最大值。這個很簡單,我們可以使用對數進行處理得到我們想要的結果。 將連乘轉變為連加

下面的處理使用了很簡單的數學技巧,特別是在機器學習中使用的比較廣泛。連乘一般都不會得到一個比較好的結果。這裡我們有四個數字,每個都不是特別差,但是如果我們有一百萬個數據點,這一百萬個概率的連乘會得到一個怎麼樣的結果。可想而知是特別特別地小。一般我們要儘可能地避免連乘。什麼比連乘好呢。當然是連加。我們如何將連乘轉變為連加呢。對,使用對數函式,因為下面的恆等式特別有用:

log(ab)=log(a)+log(b) log ⁡ ( a b ) = log ⁡ ( a ) + log ⁡ ( b )

 

我們有四個概率的連乘,使用對數以後,可以變為四個數字的連加。對於桶2(三個紅球,一個藍球的排列),我們有如下的計算過程:

0.75∗0.75∗0.75∗0.25=0.10546875 0.75 ∗ 0.75 ∗ 0.75 ∗ 0.25 = 0.10546875

 

通過使用對數變換(為了,使得結果是正數,這裡在對數前面添加了一個負號),我們有:

−log2(0.75)−log2(0.75)−log2(0.75)−log2(0.25)=3.245 − log 2 ⁡ ( 0.75 ) − log 2 ⁡ ( 0.75 ) − log 2 ⁡ ( 0.75 ) − log 2 ⁡ ( 0.25 ) = 3.245

 

現在,只剩下最後一步了。為了對結果進行規範化,我們對該結果取平均。這就是我們要找的熵的靜思園公式了。對於桶2,其熵為0.811.

14(−log2(0.75)−log2(0.75)−log2(0.75)−log2(0.25))=0.811 1 4 ( − log 2 ⁡ ( 0.75 ) − log 2 ⁡ ( 0.75 ) − log 2 ⁡ ( 0.75 ) − log 2 ⁡ ( 0.25 ) ) = 0.811

 

如果我們計算桶1的熵,可以得到:

14(−log2(1)−log2(1)−log2(1)−log2(1))=0 1 4 ( − log 2 ⁡ ( 1 ) − log 2 ⁡ ( 1 ) − log 2 ⁡ ( 1 ) − log 2 ⁡ ( 1 ) ) = 0

 

桶3的熵為:

14(−log2(0.5)−log2(0.5)−log2(0.5)−log2(0.5))=1 1 4 ( − log 2 ⁡ ( 0.5 ) − log 2 ⁡ ( 0.5 ) − log 2 ⁡ ( 0.5 ) − log 2 ⁡ ( 0.5 ) ) = 1

 

至此,我們已經找到了熵的定義公式:對概率對對數的負值。注意到桶1具有最低的熵,桶3具有最高的熵,桶2居於中間。總結如下: 
夏農熵

對於更通用的公式,我們可以總結如下:假設我們的桶裡有 m m 個紅球和 n n 個藍球,則: 
夏農熵

Entropy=−mm+nlog2(mm+n)+−nm+nlog2(nm+n) E n t r o p y = − m m + n log 2 ⁡ ( m m + n ) + − n m + n log 2 ⁡ ( n m + n )

多類別熵

目前為止我們處理了連個類別的熵(紅色和藍色)。為了使得熵和資訊理論關聯起來,我們有必要看一些多個類別的情況。這裡為了是情況更加清晰一些,我們使用字母來進行說明。假設我們有三個桶,每個桶裡面有8個字母。桶1中的字母是AAAAAAAA,桶2中的字母是AAAABBCD,桶3中的字母是AABBCCDD。我們可以很直觀地感受到桶1中的熵最小,但是桶2和桶3的卻並不是很明顯。我們下面通過計算知道桶3具有最高的熵值,桶2熵值居中。 
夏農熵

對於多個類別的可以推廣我們對於熵的定義如下:

Entropy=−∑i=1npilog2pi E n t r o p y = − ∑ i = 1 n p i log 2 ⁡ p i

 

公式中的 n n 是類別數, pi p i 是第 i i 個類別出現的概率。對於我們的三個桶,我們有如下分析:

對於桶1,只有一個類別(字母A),出現的概率肯定是1,所以熵值為:

Entropy=−1log2(1)=0 E n t r o p y = − 1 log 2 ⁡ ( 1 ) = 0

 

對於桶2,我們有四個類別(字母A,B,C和D),A出現的概率是4/8,B的概率是2/8,C的概率是1/8,D的概率是1/8。所以熵值為:

Entropy=−48log2(48)−28log2(28)−18log2(18)−18log2(18)=1.75 E n t r o p y = − 4 8 log 2 ⁡ ( 4 8 ) − 2 8 log 2 ⁡ ( 2 8 ) − 1 8 log 2 ⁡ ( 1 8 ) − 1 8 log 2 ⁡ ( 1 8 ) = 1.75

 

對於桶3,我們也有四個類別(字母A,B,C和D),每個字母出現的概率都是1/4,所以:

Entropy=−28log2(28)−28log2(28)−28log2(28)−28log2(28)=2 E n t r o p y = − 2 8 log 2 ⁡ ( 2 8 ) − 2 8 log 2 ⁡ ( 2 8 ) − 2 8 log 2 ⁡ ( 2 8 ) − 2 8 log 2 ⁡ ( 2 8 ) = 2

 

對於三個桶,我們總結如下: 
夏農熵

更有趣的在下面,這兒就是資訊理論發揮作用的地方。 資訊理論

下面還有一種方式來理解熵。我們還是以從桶中隨機取出字母為例。我們要判斷從桶中取出的字母平均需要提出多少個問題。(假設有一個人從桶裡取字母,另外一個人通過提問得到取出來的是哪個字母)

首先看最簡單的情況。對於桶1,我們可以確信取出來的肯定是A。所以我們不用提出任何問題就可以知道從桶裡面取出來的字母是什麼。用公式簡單表示如下:

Average Number of Questions=0 A v e r a g e   N u m b e r   o f   Q u e s t i o n s = 0

 

對於桶3和桶4,可能有人認為通過四個問題可以知道到底取出來的是什麼字母。這四個問題如下: 是不是字母A。 是不是字母B。 是不是字母C。 是不是字母D。

其實,這四個問題是有冗餘的,因為如果前面三個問題的答案如果是“NO”的話,那麼我們肯定知道取出來的屙屎字母D。所以三個問題足夠了,但是我們可以做得更好嗎。我們提出的問題需要消除冗餘。我們可以這樣改進我們的提問: 該字母是A或者B。 如果1的回答是“YES”,繼續提問是否是字母A。如果1的回答是“NO”,繼續提問是否是字母C。

如果這樣提問,只需要基於兩個問題就可以得到答案: 對於YES,YES的回答,則取出來的是A 對於YES,NO的回答,則取出來的是B 對於NO,YES的回答,則取出來的是C 對於NO,NO的回答,則取出來的是D

以樹狀結構表示如下: 
夏農熵

對於桶3,每個字母出現的概率都是1/4,所以為了找出取出來的字母平均提問的個數應該為2。計算如下:

Average Number of Questions=14⋅2+14⋅2+14⋅2+14⋅2=2 A v e r a g e   N u m b e r   o f   Q u e s t i o n s = 1 4 ⋅ 2 + 1 4 ⋅ 2 + 1 4 ⋅ 2 + 1 4 ⋅ 2 = 2

 

對於桶1,我們如果使用桶3的提問策略,當然得出的結果也是2,然而我們可以做得更好。我們可以首先提問是不是A,然後問是不是B,然後再問是不是C。 
夏農熵

這樣我們的提問順序如下: 如果是字母A,則我們只用了1次提問 如果是字母B,則我們只用了2次問題 如果是字母C或者D,則我們只用了3次提問

對於是字母C和D,我們3次提問超出了對於桶2的提問策略,但是平均來看,我們可能做得更好。桶3有字母AAAABBCD,A出現了一半,B出現了1/4,C和D都出現了1/8。平均提問次數為:

Average Number of Questions=12⋅1+14⋅2+18⋅3+18⋅3=1.75 A v e r a g e   N u m b e r   o f   Q u e s t i o n s = 1 2 ⋅ 1 + 1 4 ⋅ 2 + 1 8 ⋅ 3 + 1 8 ⋅ 3 = 1.75

 

總結如下: 
夏農熵

這就是熵。熵和資訊理論就是這樣關聯起來的。如果我們想要找出從桶裡取出來的字母,平均需要提出問題的個數就是熵的值。

當然,這引出了更大問題:我們如何確定我們提問的方式是最可能好的。如果提問的方式不是太明顯,當然需要做更多的工作。