機器學習之 各種熵詳解

本文爲轉載博文,原文地址: https://www.jianshu.com/p/09b70253c840

請聽題:什麼是熵?什麼是交叉熵?什麼是聯合熵?什麼是條件熵?什麼是相對熵?它們的聯繫與區別是什麼?


如果你感到回答這些問題有些吃力,對這些概念似乎清楚,似乎又沒有那麼明白,那這篇文章就是爲你準備的。


1 從隨機變量說起

假設有一枚硬幣,將其拋出,落下後朝上的面爲y。

這裏的y是對未知量的一個表示。但它的值卻是不確定的,可能取正面和反面兩個值。

類似的不確定變量還有好多,比如說,將人的身高設爲z,z中也包含了不確定性,因爲不同的人身高是不一樣的。

這類包含不確定性的變量我們稱爲隨機變量。統計學就是研究這類不確定性變量的工具。

刻畫隨機變量最有力的一個工具就是它的概率分佈。關於什麼是概率分佈,這裏就不多說了,可以百度百科。

有了概率分佈,我們可以說對一個隨機變量有了完全的掌握,因爲我們可以知道它可能取哪些值,某個值的概率是多少。

以上,是對基礎知識的簡單複習,下面開始進入正題。

2 什麼是熵?

上面,我們知道,概率分佈是對隨機變量的刻畫,不同的隨機變量有着相同或不同的概率分佈,熵,就是對不同概率分佈的刻畫!

爲什麼我們還需要對不同的概率分佈進行刻畫?

本質上,是爲了描述不確定的程度,並以此對不同的概率分佈進行比較。

請允許我舉個栗子。

假如我告訴你,我有兩枚硬幣,一個上拋一次正面朝上概率是0.5,另一個是0.8。此時,假設兩枚硬幣上拋一次落下後朝上的面分別是x,y。

此時,我們可以很容易確定隨機變量x,y的概率分佈,並藉此對兩個隨機變量有準確的掌握。

但我們要問,這兩個隨機變量哪個更隨機?或者說,哪個隨機變量包含的不確定性更大?

如果發揮直覺,我們可以感覺到,正面朝上概率爲0.8的概率分佈不確定性小於正面朝上概率爲0.5的不確定性。

進一步思考,我們爲什麼會有這樣的直覺?

因爲我們是從“使用”概率分佈的角度來思考問題的。也就是說,如果我們知道一枚硬幣拋出後正面朝上概率爲0.8,要比知道概率爲0.5,更容易猜對硬幣拋出後哪面朝上。

換句話說,0.8的概率分佈比0.5的概率分佈對我們來說,具有更大的信息量。

現在,我們對概率分佈中的不確定性有了感性的認識,現在需要的是一個定量的指標,來衡量這個不確定性。想必你已經猜到了,這個指標就是熵。


3 熵的數學表達

熵應該是什麼樣子,才能表達出概率分佈中的不確定性呢?

爲了解決這個問題,我們來考察一下概率分佈中的某個取值,以拋硬幣爲例,我們看正面這個取值。可以看到,取正面的概率越大,則不確定性就越小。概率越大,不確定性越小!請把這句話在心中默唸三遍。

能夠表達出概率越大,不確定性越小的表達式就是:

-logP

爲了讓大家有一個感性的認識,我特意畫了一個圖:


640?wx_fmt=png

上圖中的縱軸爲-logP,橫軸爲P。

然後,我們繼續思考,上面的-logP只是衡量了某個概率的不確定性,一個概率分佈包含多個概率,而且概率相加等於1,一個概率大,必然會有其他的概率小。還是以拋硬幣爲例,0.8概率的正面,不確定性固然很小,但同時會造成反面的概率爲0.2,不確定性比較大。這意味着,我們猜對一次拋硬幣正面朝上的難度比較小,但要猜對一次反面朝上的難度就比較大。很顯然,我們要衡量一個概率的分佈的不確定性,就要綜合衡量所有概率表達的不確定性。也就是求一個概率分佈綜合的不確定性。噹噹噹噹噹!熵正式出場!

-∑PlogP

這個指標可以理解成概率分佈的不確定性的期望值。這個值越大,表示該概率分佈不確定性越大。它爲我們人類提供的“信息”就越小,我們越難利用這個概率分佈做出一個正確的判斷。從這個角度,我們可以看到,熵是對概率分佈信息含量的衡量,這與它是不確定性的衡量,其實是兩種解讀方式而已。


4 伯努利分佈的熵

對於拋硬幣判正反面來說,它的概率分佈是伯努利分佈,我們假設正面朝上的概率爲p,則反面朝上的概率爲(1-p),它的熵就是:

H(p) = -plogp -(1-p)log(1-p)

我們把它畫出來就是這樣。


640?wx_fmt=png


可以看到,p=0.5時,伯努利分佈的熵達到最大。這與我們的經驗常識一致,因爲此時,硬幣朝上還是朝下完全是隨機的,不確定性最大。

當p趨向於0時,熵也趨向於0,舉個極端例子,如果硬幣以概率1正面朝上,概率0反面朝上,則完全沒有不確定性,所以熵就是0,因爲熵是對不確定性的一個測量。

再來思考一個問題,我們說熵是描述不確定性的,在概率論中,不是有一個方差可以用來描述變量變化程度的嗎,它和熵是什麼關係呢?

直覺上,方差越大,不確定性就越大,熵就應該越大,事實上確實如此,請看下圖:


640?wx_fmt=png

variance_entropy


對我們投硬幣的伯努利分佈,方差pq的最大值在p=0.5時取得,由上文我們知道,這也是熵取得最大值的p值。

對於正態分佈,我們可以看到,期望對熵沒有影響,只有方差纔對熵有影響。這於我們的直覺也是相符的。

以上,我們儘可能從直覺的角度分析出了熵的表達式,也查看了幾種分佈的熵,以及它們和該分佈的方差的關係,發現二者要描述的含義具有內在一致性。至此,我們終於可以說一窺熵的廬山真面目了。

下面,我們開始討論由熵引出的各種其他熵,也就是本文文首提出的那些。


5 聯合熵

雖然文首提出了那麼多熵,但它們之間是有內在聯繫的,所以,我們儘可能按照它們的內在關係開展學習,先從聯合熵說起。

聯合熵與聯合概率分佈有關,對於隨機變量X和Y,二者的聯合概率分佈爲p(x,y),則這個聯合概率分佈的熵就叫做聯合熵:

H(x,y) = -Σp(x,y)log(p(x,y))

我們假設X和Y都服從伯努利分佈,且相互獨立,可以把二者想象爲上面的拋硬幣,這樣思考可以有所依託,不至於太抽象。X正面朝上的概率爲p1,Y正面朝上的概率爲p2,那麼,它們的聯合熵是多少呢?

顯然,我們需要找出聯合概率分佈,如下圖所示:


640?wx_fmt=png

association


上面就是聯合分佈,自然可以據此算出它的熵,由於表達式寫出來太麻煩,這裏就省去了,感興趣的可以自己寫一下。

我們關心的問題是,H(x,y)和H(x),H(y)有什麼關係呢?

這裏不想進行繁雜的數學證明,而是要繼續用我們的直覺來幫助思考。查看上圖,我們和Y的概率分佈進行對比。

Y原先只有兩個概率p2和(1-p2),聯合分佈卻有四個概率,這四個概率又可以認爲是將Y的每個概率進行了分拆,p2 被分成了p2\*p1和p2\*(1-p1)。也就是說,對於Y的每個取值,本身就具有一個不確定性(p2),由於要與X聯合起來,就在每個取值的不確定性上又引入了不確定性,不確定性顯然是增大了。

如果你理解了上面關於熵的含義,那麼,不難想出,H(x,y)肯定是大於等於H(x)和H(y)的。僅當X沒有不確定性時,比如永遠是正面朝上,此時,在Y的基礎上聯合X,並沒有引入新的不確定性,所以,H(x,y)=H(y)。

以上,我們沒有運用數學,僅僅依靠感性直覺的思考就確定了聯合熵的一些性質,可見,善於運用直覺是很重要的。


6 條件熵

現在我們知道,x,y的聯合熵大於等於x和y單獨的熵,對於y來說,引入的x增大了熵,那麼,x的引入增加了多大的熵呢?這就是條件熵。

H(x|y) = H(x,y) - H(y)

這裏,有一個容易搞錯的地方,H(x|y)叫做條件熵,它可不是條件概率p(x|y)的熵。爲啥?因爲p(x|y)壓根就不是一個概率分佈!!!還是以上面的兩枚硬幣爲例,我們來計算一下p(x|y),注意,我們的例子中**假設x,y是相互獨立的**。


640?wx_fmt=png

condition


可見,所有的P(x|y)相加是2,根本就不是一個概率分佈。有人可能會說,那爲什麼要叫條件熵,這不是故意誤導人嗎!

這是因爲,條件熵的計算,和條件概率還是有點關係的。如下:

H(x|y) = - Σp(x,y)log(p(x|y))

這個公式可以由上面的熵的定義和條件熵的定義推導得出,這裏就不推導了,感興趣的可以自己推導下,並不難。

這裏我們再分析一下條件熵H(x|y)與H(x)的關係,仍然用直覺法。條件熵是在Y上引入X後增加的不確定性,從感覺上,增加的不確定性無論如何不可能大於X本身自有的不確定性,也就是:

H(x|y) <= H(x)

僅當x,y相互獨立時,等號才成立。

這個結論是我們感性認識到的,事實上,也可以進行證明得到。

學習過《統計學習方法》的同學,肯定對裏面的信息增益概念有所瞭解,其實,我們仍然可以用直覺來理解這個概念。

不過,我們需要換種方式解讀H(x|y) <= H(x)

之前,我們得出這個結論,是說Y上引入的X增加的不確定性不能大於X本身的不確定性。換個角度,X原有的不確定性是H(x),現在我們引入Y,得到了聯合的不確定性H(x,y),從這個不確定性中減去Y自身帶來的不確定性H(Y),剩下的就是H(x|y),這個值小於等於H(x),說明什麼?說明,由於Y的引入,X的不確定性變小了,不確定性變小,就是信息含量的增加。不確定性變小的多少就是信息增益:

gain(X) = H(x) - H(x|y)

信息增益也叫做互信息。二者完全一樣。


Note:

這裏簡單說下我對李航書的看法,一句話:不適合用來入門!只適合用來提高和麪試準備。我意見比較大的是對邏輯迴歸的推導,不優雅。回頭,我會專門寫一篇邏輯迴歸的推導文章。


7 相對熵(又叫互熵,KL散度)

把相對熵放到最後來講,是因爲它和前面的幾個概念聯繫不大。

假設我們有如下5個樣本:


640?wx_fmt=png

huxinxi


我們要以此推導出標籤的真實分佈。假設標籤的真實分佈是q(x),x取值爲1和-1

爲了確定q(x)在x=1和x=-1處的值,我們當然要運用最大似然法則。最大似然函數是:

q(x=1)\*q(x=1)\*q(x=-1)\*q(x=-1)\*q(x=-1)

如果你最大似然函數理解上有困難,建議補充一下這方面的知識,因爲這個知識點在機器學習中運用的太多,確實無法繞過,邏輯迴歸本質上也是用的最大似然函數。

對上面的式子做合併處理,得到:

q(x=1)^2\*q(x=-1)^3

進一步,對上面的式子開5次方,得到:

q(x=1)^(2/5)\*q(x=-1)^(3/5)

假設p(x)就是由樣本中統計出來的標籤分佈

2/5就是p(x=1)

3/5就是p(x=-1)

所以,對上面的式子進行規整就得到最大似然函數最終表達式:

Πq(x)^(p(x))

再取對數就是

Σp(x)log(q(x))

再取負號就是

d= -Σp(x)log(q(x))

最大化似然函數就是最小化d。

心急的朋友可能在想,說了半天,互熵到底是啥?現在就給出定義:

D(q||p) = d - H(p)

這裏的d就是我們上面得到的d。

互熵描述的是什麼呢?如何從直覺上進行理解?畢竟,上面用最大似然推出互熵還是有點太數學了。

這裏,我們需要觀察一下d,假設q和p完全相同,那麼d就是H(p),互熵D也就等於0了。

同理,q和p越接近,越相同,則D就越小。互熵D(q||p)實際上就是在衡量我們通過計算得出的真實分佈的表達式q,究竟與由樣本統計得來的分佈p有多接近,在衡量多接近這個概念時,我們運用到了熵的形式。


8 交叉熵

交叉熵放到最後,因爲它最簡單,它就是上面得出的d!

我們可以體會一下爲什麼叫做交叉熵,交叉是什麼含義?

d= -Σp(x)log(q(x))

原本,p的熵是-Σp(x)log(p(x)),q的熵是-Σq(x)log(q(x))

現在,把p熵的log成分換成q(x), q熵的log成分換成p(x),(這裏做了一個“交叉”!)就是

d= -Σp(x)log(q(x))      d2 = -Σq(x)log(p(x)) 

 d 就是p和q的交叉熵,

d2就是q和p的交叉熵。

從中我們也體會到,交叉熵是不滿足交換律的,也就是說p和q的交叉熵與q和p的交叉熵是不一樣的。


9 無總結,不進步

以上,是我對各種熵的概念的一些理解和感悟,分享出來,希望能夠幫助到需要的朋友,當然,由於是個人理解,難免有不到位,甚至錯誤的地方,還望各路大神多多批評指正!



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