請聽題:什么是熵?什么是交叉熵?什么是聯合熵?什么是條件熵?什么是相對熵?它們的聯系與區別是什么?
如果你感到回答這些問題有些吃力,對這些概念似乎清楚,似乎又沒有那么明白,那這篇文章就是為你準備的。
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
為了讓大家有一個感性的認識,我特意畫了一個圖:
上圖中的縱軸為-logP,橫軸為P。
然后,我們繼續思考,上面的-logP只是衡量了某個概率的不確定性,一個概率分布包含多個概率,而且概率相加等于1,一個概率大,必然會有其他的概率小。還是以拋硬幣為例,0.8概率的正面,不確定性固然很小,但同時會造成反面的概率為0.2,不確定性比較大。這意味著,我們猜對一次拋硬幣正面朝上的難度比較小,但要猜對一次反面朝上的難度就比較大。很顯然,我們要衡量一個概率的分布的不確定性,就要綜合衡量所有概率表達的不確定性。也就是求一個概率分布綜合的不確定性。當當當當當!熵正式出場!
-∑PlogP
這個指標可以理解成概率分布的不確定性的期望值。這個值越大,表示該概率分布不確定性越大。它為我們人類提供的“信息”就越小,我們越難利用這個概率分布做出一個正確的判斷。從這個角度,我們可以看到,熵是對概率分布信息含量的衡量,這與它是不確定性的衡量,其實是兩種解讀方式而已。
4 伯努利分布的熵
對于拋硬幣判正反面來說,它的概率分布是伯努利分布,我們假設正面朝上的概率為p,則反面朝上的概率為(1-p),它的熵就是:
H(p) = -plogp -(1-p)log(1-p)
我們把它畫出來就是這樣。
可以看到,p=0.5時,伯努利分布的熵達到最大。這與我們的經驗常識一致,因為此時,硬幣朝上還是朝下完全是隨機的,不確定性最大。
當p趨向于0時,熵也趨向于0,舉個極端例子,如果硬幣以概率1正面朝上,概率0反面朝上,則完全沒有不確定性,所以熵就是0,因為熵是對不確定性的一個測量。
再來思考一個問題,我們說熵是描述不確定性的,在概率論中,不是有一個方差可以用來描述變量變化程度的嗎,它和熵是什么關系呢?
直覺上,方差越大,不確定性就越大,熵就應該越大,事實上確實如此,請看下圖:
對我們投硬幣的伯努利分布,方差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,那么,它們的聯合熵是多少呢?
顯然,我們需要找出聯合概率分布,如下圖所示:
上面就是聯合分布,自然可以據此算出它的熵,由于表達式寫出來太麻煩,這里就省去了,感興趣的可以自己寫一下。
我們關心的問題是,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是相互獨立的**。
可見,所有的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個樣本:
我們要以此推導出標簽的真實分布。假設標簽的真實分布是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 無總結,不進步
以上,是我對各種熵的概念的一些理解和感悟,分享出來,希望能夠幫助到需要的朋友,當然,由于是個人理解,難免有不到位,甚至錯誤的地方,還望各路大神多多批評指正!