機器學習入門:重要的概念---信息熵(Shannon』s Entropy Model)

原創文章,一家之言。

轉載請註明出處。

個人公眾號:follow_bobo

機器學習入門:重要的概念---信息熵(Shannon』s Entropy Model)

在機器學習裡面,信息熵(Shannon』s Entropy Model)其實是一個很重要的概念,多重要呢?大概有

(-------------------------)這麼重要。

好了,那邊拿槍的朋友,請把你的刀從我脖子上拿開,還有那邊揮拳頭的朋友,你踢到我了。

機器學習中很多地方都要根據目前的信息做出決策,信息熵主要是反應信息的不確定性,它的一個很重要的作用,就是做決策時提供一定的判斷依據,比如決策樹根據熵來往下設置分枝(branch)。

.

『同學你好,說了半天我也不知道你說了啥,我們想打你。』

冷靜冷靜,好了,我們接下開始講正題。。。

嗎?不,我們來先拋硬幣。

我們拋一個硬幣,正反面發生的概率都是50%,那麼我們可以分別用0,1來表示正反面結果。

當拋出硬幣的那一刻,我們會得到2個信息量,0和1。如果我們同時拋兩枚呢,我們知道這個時候用00,01,10,11表示出了這個隨機事件,我們獲得了4個信息量(2^2, 拋4枚呢,有16種可能性,那我們可以獲得16(2^4)個信息量。

硬幣拋完了,有什麼用呢,其實沒什麼用,我就是想讓你們感受下。。。

刀放下,這位同志,讓我們先看完下面的。。

大家應該對數學期望(Mean)都有所了解吧,它試驗中每次可能結果的概率乘以其結果的總和,是最基本的數學特徵之一。它反映隨機變數平均取值的大小。本質上是對未知的預期

敲黑板了,注意關鍵字:概率,結果。隨機,平均,預期。

我們現在來看什麼是信息熵模型(Shannon』s Entropy Model), 信息熵實際反應的是一個信息的不確定度。在一個隨機事件中,某個事件發生的不確定度越大,熵也就越大,那我們要搞清楚所需要的信息量越大。

在信息熵的定義中,假設兩個隨機變數x和y是相互獨立的,那麼分別觀測兩個變數得到的信息量應該和同時觀測兩個變數的信息量是相同的,我們用h()來表示信息量,即:h(x+y) = h(x) + h(y),比如小明今天失業了和今天失戀了是兩個獨立事件,單獨一個一個知道和一起知道,對大家來說都挺好笑的,不是,對大家來說獲得的信息量是相同的。

對小明來說,失業的p(x)和失戀的p(y)同時發生的概率是:p(x,y) = p(x)p(y).

那好,我們現在把表撥回昨天小明還是人生贏家的時候,我們猜想,第二天小明是可能失業呢,還是失戀呢,還是同時發生呢,我們不得而知,但是好奇心(小明心裡:我也是日了汪汪了)驅使我們去想知道接下來會發生的事,那我們用什麼方式方式來度量將發生失戀和失業的信息量呢?我們剛剛提及了期望,巧了,這兩個隨機事件完全符合數學期望的要求,所以我們可能在小明身上獲得的預期信息量為(真是狠啊,誰還算這東西):

H[x] = p(x)h(x)+ p(y)h(y)

我們現在回到信息量h()來, 在我們生活中,信息的大小跟隨機事件的概率有關。越小概率的事情發生了產生的信息量越大,如湖南產生的地震了;越大概率的事情發生了產生的信息量越小,如太陽從東邊升起來了(肯定發生嘛,沒什麼信息量)。這很好理解,也就是說:

1. 當一個事件發生的概率p(x)為1並且它發生了,那我們等到的信息量是h(x) = 0。

2. 當一個事件發生的概率p(x) 為0 並且它發生了,那我們得到的信息可能是無限大。

3. H(x)隨p(x)單調遞增。

4. p(x,y) = p(x)p(y)。

5. h(x,y) = h(x) + h(y)。

6. 信息量h(x) 反比於p(x) 。

7.信息量是非負的。

看到上面的條件,是不是想到一個函數可以來表達,對,就是log,這個h(x) 會等於 Clog(A*p(x))+D 的形式嗎?不會,只能是Clog(p(x)),這個係數C對整個信息量影響不大,因為大家都乘了個C,不是相當於沒乘么。同時,p(x) 肯定小於等於1,log(p(x))一直小於等於0 ,而信息量又是非負的,那麼,我們就把C設為-1 吧。

信息量:h(x) = - log(p(x))。

我們來驗證一下:

1. p(x)= 1, h(x) =0.

2. p (x) = 0, h(x) 等於無窮大。

3. 假如有n個可能結果,那麼出現任意一個的概率是1/n,而-log(1/n)是n的增函數,沒問題。

4. 第四點不用說了。

5. log(p(x,y)) = log(p(x)p(y)) = log(p(x)) + log(p(y)),沒毛病。

但是,這個log的底是多少呢?

以前人們一般會用ln, 現在主流的認識是log以2為底,為什麼呢?我們一般考慮到一個事件的信息量是一連串相互獨立隨機變數發生的結果,其中每一個選擇都在0或1之間做出,我們能算出所有可能結果數為N=2^n,n是獨立隨機變數的個數, 於是,我們把指數形式變成線性形式就是n= log2(N)了。

這其實涉及到資訊理論中編碼問題,數學之美裡面有提過一個例子:

假設我們沒有看世界盃的比賽,但是想知道哪支球隊會是冠軍,只能去問已經看過比賽的觀眾,但是我們只能猜測某支球隊是或不是冠軍,然後觀眾用對或不對來回答,我們想要猜測次數儘可能少,所用的方法就是二分法。假如有 16 支球隊,分別編號,先問是否在 1-8 之間,如果是就繼續問是否在 1-4 之間,以此類推,直到最後判斷出冠軍球隊是哪只。如果球隊數量是 16,我們需要問 4 次來得到最後的答案。那麼世界冠軍這條消息的信息量就是 4。在計算機中,這條信息的信息量就是 4 比特,如果一共是 32 支球隊參賽,那麼世界冠軍的信息量就是 5 比特,可以看到信息量跟可能情況的對數 log (以 2 為底)有關(這裡大概有點知道為什麼求熵的公式里會有一個 log 了)。

其實對於底數來說,只要大於1就可以,因為它只是一個比例因子。

這下小明發生失戀和失業的平均信息量就是:

H[x] = - p(x)log2(p(x)) - p(y)log2(p(y))

萬一,我說萬一,小明不僅失戀(p(x)),失業了(p(y)),還出門被撞(p(z)),走路摔跤(p(w)),等等一系列衰事。。。

小明同學,你的刀有點弄疼我了。。。。

那麼整個事件的信息量期望可以表示為:

H[x] = - p(x)log2(p(x)) - p(y)log2(p(y)) - p(z)log2(p(z)) -p(w)log2(p(w))。。。

我們可以總結為:

H[x] =

(1,1)

好了,我們就得到了信息熵的公式了(1,1),即一個總的事件的信息量的期望。

(附錄會放我在網上找的關於信息熵的數學推導過程)

我們來舉個例子方便大家理解,小明在一道選擇題的A,B,C,D中選出答案,A對的概率為1/2,B對的概率變成了1/4,C和D則分別是1/8。

如果答案為A,小明要猜1次,概率為1/2。

如果答案為B,小明要猜2次(先猜A,因為A對的概率最大,發現不對,再猜B),概率為1/4。

如果答案為C,或者D,小明要猜3次,概率都是1/8。

那麼在以上的情況中,小明要猜多少次才是正確答案呢?

實際上就是一個求期望的問題:

E[N]=1/2 *1 +1/4*2+1/8*3+1/8*3 = 1.75

對,大概要猜1.75次。

那我們來求一下信息熵:

H[x] = - 1/2*log2(1/2)-1/4*log2(1/4) - 1/8*log2(1/8) - 1/8*log2(1/8)

= 1.75 bits (信息熵單位為bit, 為什麼是bit, 我覺得主要還是和二進位編碼有關)

我們要獲得正確信息需要付出的熵是1.75bits。

兩個結果竟然一樣誒,6不6 。什麼,你覺得是巧合?我把C的概率換成3/16,D的概率換成1/16,結果還是非常非常接近1.75 bits(估計因為中間有四捨五入)。

是不是有點開始懂了?

那麼信息熵的本質到底是什麼呢,我認為本質就是我要獲得某些信息的代價,當信息的稀有度越高,得到這個信息需要付出的代價越高。

到這,估計很多讀者們還是一臉懵逼,你得到這個公式,有啥用呢,怎麼用呢?

我們下期再講,機器學習入門:從信息熵到決策樹。

Appendix:

摘錄自別人的著作,怎麼從純數學上推出信息熵公式:

推薦閱讀:

為什麼信息量不能為負值?
從熵增(熱力學第二定律)的角度,能否說明戰爭是必然?
「熵增」然後「熵減」
熵的概念是否存在層級性?

TAG:机器学习 | | 人工智能 |