3月機器學習在線班第六課筆記--信息熵與最大熵模型


原文:https://www.zybuluo.com/frank-shaw/note/108124

信息熵

信息是個很抽象的概念。人們常常說信息很多,或者信息較少,但卻很難說清楚信息到底有多少。比如一本五十萬字的中文書到底有多少信息量。直到1948年,香農提出了“信息熵”的概念,才解決了對信息的量化度量問題。(百度百科)

香農定義的信息熵的計算公式如下: 

H(X)=p(xi)log(p(xi))    (i=1,2,,n)

 


其中X 表示的是隨機變量,隨機變量的取值為(x1,x2,,xn) ,p({x_i}) 表示事件xi發生的概率,且有p(xi)=1 。信息熵的單位為bit。 
說實在的,在聽課的時候對這個概念一直是懵懵懂懂的,一直跨不過去。現在查找一些資料,希望能夠通過筆記讓自己清楚該概念。首先的疑問就是:為什么這樣表達? 
首先定義事件xi的信息量為其發生概率對數的負數,記為I(x_i),有: 

I(xi)=logp(xi)


有了該定義,可以發現信息熵H(X)即為隨機變量X的平均信息量(期望)。那么疑問就變成:為什么logp(xi)可以表示為事件xi的信息量?

 

其實這挺好理解:事件xi的信息量大小和它發生的概率(不確定性)有直接的關系。比如說,要搞清楚一件非常不確定的事,或是一無所知的事情,就需要了解大量的信息。相反,如果對某件事已經有較多了解,我們不需要太多的信息就能把它搞清楚。即信息量函數應該與事件概率成單調遞減關系。同時,兩個獨立事件xi,xj(滿足p(xi,xj)=p(xi)p(xj))的信息量大小應等於各自信息量之和。那么同時符合以上要求的是I(xi)=logp(xi)。 
在香農1948年的論文《A Mathematical Theory of Communication》中,他通過論證信息熵函數需要滿足的多條性質,推導出信息熵公式的唯一性。有興趣的可以看看。

為了更好的理解,我們舉例說明:

 

隨機變量為均勻分布

在《數學之美》中的例子:假如我錯過了看世界杯,賽后我問一個知道決賽結果的觀眾“哪支球隊是冠軍?”他不願意直接告訴我,而是讓我猜,每猜一次需要1bit,他的回答是以下2個中的一個:是,否。假設我對這32支球隊一無所知,即我認為每支球隊獲得冠軍的概率是相等的,那么我至少需要付多少bit給他才能知道誰是冠軍? 
我把球隊編號為1到32,然后使用折半查找法的原理(如:”冠軍隊在1-16嗎?”)每一次就可以減少一半的隊伍,這樣只需要5次,就能夠知道冠軍球隊。也就是說,誰是世界杯冠軍這條信息的信息量只值5bit。代入計算公式,在這種情況下(等概率假設)得到的信息熵即為5bit。

課堂上,鄒博老師給出的一個例子:

有五個硬幣,四個等重,另外一個是假幣所以質量相比其他4個要輕。我事先不知道關於任何硬幣的信息(即認為每一個硬幣是假幣的概率都是1/5)。這個例子和之前的猜球隊冠軍有一些相似,我也是需要經過詢問才能得到答案,且每問一次需要付1bit。但不同之處在於,現在我可以詢問的對象變成了天平,天平每一次能夠比較兩堆硬幣,且能夠給出3個結果中的一個:左邊比右邊重,右邊比左邊重,兩邊同樣重。問我至少需要付多少bit就能夠確保知道哪個是假幣?

我們通過自己的計算可知道,如果幸運的話我只需要1bit就能夠把假幣測出來(天平左右各兩個硬幣,結果等重,那么假幣即為天平外的一個),但是通常情況下需要2bit才能知道假幣。這個時候,會發現不能夠按照之前的預測世界杯冠軍的方式來計算信息熵了(按照之前的方法直接計算得到log25>2),畢竟之前問觀眾只能給出2種結果,現在問天平能夠給出3種結果啊,需要的bit應該更少。 
實際上不僅僅需要關心隨機變量的信息熵,還應該關心被詢問對象(例子中觀眾、天平)的表達能力(即被詢問對象的信息熵)。正確的表達式應該是: 

H(X)H(Y)

 


其中X為隨機變量,Y為被詢問對象。該問題最終得到的結果是H(X)H(Y)=log25log23=1.46。世界杯冠軍問題中之所以只計算隨機變量的信息熵是因為被詢問對象的信息熵剛好是1(H(Y)=log22),所以忽略了。在計算機領域和通信領域,被詢問對象一般都只能給出{0,1}兩種結果,其信息熵為1,由此直接忽略。特殊情況下的忽略不代表不存在。

 

 

隨機變量不再是均勻分布

有五個硬幣,四個等重,另外一個是假幣所以質量相比其他4個要輕。已知第一個硬幣和第二個硬幣是假硬幣的概率為1/3,其他硬幣為假硬幣的概率為1/9。天平每一次能夠比較兩堆硬幣,且能夠給出3個結果中的一個:左邊比右邊重,右邊比左邊重,兩邊同樣重。問我至少需要付多少bit就能夠確保知道哪個是假幣? 
由於之前已經分析過,直接帶入上面的計算公式即可得: 

H(X)H(Y)=(13log213)2(19log219)3log23=1.333

 


也就是說,實際編碼過程中需要2個bit來存儲每一次。

 

在經典熵的定義式中,對數的底是2,單位為bit。在我們之后的例子中,為了方便分析使用底數e。如果底數為e,那么單位是nat(奈特)。重新寫一遍信息熵的公式: 

H(X)=p(xi)ln(p(xi))  (i=1,2,,n)

 


為此,我們來研究研究函數f(x)=xln(x),看看圖像長啥樣。由信息熵的公式及定義,可以發現此時的x 表示的是事件發生的概率,有x[0,1]。求導分析:f(x)=lnx+1,f′′(x)=1x>0;由此發現f(x)是凸函數。令f(x)=0可得x=1e。由於limx0f(x)=0,我們定義f(0)=0 。最后經過采樣可得圖像如下: 
信息熵圖像

 

 

信息熵的總體理解

從之前的分析可以看出,熵其實定義了一個函數(概率分布函數p(x))到一個值(信息熵H(X))的映射。而且從表達式中可以知道:隨機變量不確定性越大,p(x)越小,熵值越大。由此,熵是隨機變量不確定性的度量。一種極限情況是:當隨機變量退化為定值時(概率為1),那么此時的熵值為0。另一個極限就是:當隨機變量服從均勻分布的時候,此時的熵值最大。

讓我們以較為熟悉的隨機變量分布來舉例說明信息熵:

 

兩點分布的熵

假設兩點分布中p(X=1)=q,直接將概率分布函數代入信息熵公式可得: 

H(X)=xXp(x)ln(p(x))=qlnq(1q)ln(1q)

 


通過隨機采樣可以得到圖像: 
兩點分布的熵圖像 
通過對圖像的分析可以印證我們之前的結論:當p(X=1)=0.5,二點分布即為均勻分布,此時對應於圖像中熵的最大值;當p(X=1)=1p(X=1)=0時,二點分布退化為確定性分布,那么此時的熵為0.

 

 

聯合熵、條件熵和相對熵

之前定義了單個隨機變量的熵,現在將定義推廣到兩個隨機變量的情形。對於服從聯合分布為p(x,y)的一對離散隨機變量(X,Y) ,其聯合熵定義為: 

H(X,Y)=xX,yYp(x,y)ln(p(x,y))

 


上式也可以表示為: 

H(X,Y)=E(logp(x,y)).


我們也可以定義一個隨機變量在給定另一個隨機變量下的條件熵,它是條件分布上關於起條件作用的那個隨機變量取平均之后的期望值。

 

定義:若 (X,Y)p(x,y),條件熵定義為: 

H(Y|X)=xXp(x)H(Y|X=x)=xXp(x)yYp(y|x)logp(y|x)=xXyYp(x,y)logp(y|x)

 


聯合熵和條件熵的定義的這個自然性可由一個事實得到體現:一對隨機變量的熵等於其中一個隨機變量的熵加上另一個隨機變量的條件熵,即: H(X,Y)=H(X)+H(Y|X)(鏈式法則)。其證明見如下: 

H(X,Y)=xXyYp(x,y)logp(x,y)=xXyYp(x,y)logp(x)p(y|x)=xXyYp(x,y)logp(x)xXyYp(x,y)logp(y|x)=xXp(x)logp(x)xXyYp(x,y)logp(y|x)=H(X)+H(Y|X)


相對熵是兩個隨機分布之間距離的度量。假設p(x),q(x) 是隨機變量X中取不同值時的兩個概率分布,那么 pq的相對熵是: 

D(p||q)=xp(x)logp(x)q(x)=Ep(x)logp(x)q(x)


在上述定義中,我們約定:0log00=0,0log0q=0,0logp0=(基於連續性)。因此,如果存在xX使得p(x)>0,q(x)=0,則有D(p||q)=。 
可以通過證明知道相對熵總是非負的,而且,當且僅當 p=q時為零。但是由於相對熵並不對稱(一般D(p||q)D(q||p) ),而且也不滿足三角不等式,因此它實際上並不是兩個分布之間的真正距離。然而,將相對熵視作分布之間的“距離”往往會很有用。

 

 

互信息

互信息是一個隨機變量包含另一個隨機變量信息量的度量。互信息也是在給定另一個隨機變量知識的條件下,原隨機變量不確定度的縮減量。(為什么這么說,接下來會有解釋。) 
定義:考慮兩個隨機變量XY,它們的聯合概率密度函數為p(x,y),其邊緣概率密度函數分別為p(x),p(y)。互信息I(x,y)為聯合分布p(x,y)和乘積分布 p(x)p(y)之間的相對熵,即: 

I(X;Y)=xXyYp(x,y)logp(x,y)p(x)p(y)=D(p(x,y)||(p(x)p(y)))=Ep(x,y)logp(X,Y)p(X)p(Y)

 


通過查看表達式,即可知道互信息具有對稱性,即 。同樣可以簡單證明得互信息的非負性,這里省略。

 

 

熵與互信息的關系

可將互信息I(x,y)重新寫為: 

I(X;Y)=xX,yYp(x,y)logp(x,y)p(x)p(y)=xX,yYp(x,y)logp(x|y)p(x)=xXyYp(x,y)logp(x)+xXyYp(x,y)logp(x|y)=xXp(x)logp(x)(xXyYp(x,y)logp(x|y))=H(X)H(X|Y)

 


由此可見,互信息息I(x,y)是在給定另一個隨機變量Y知識的條件下,X 不確定度的縮減量。

 

由於互信息的對稱性,可得: 

I(X;Y)=I(Y;X)=H(Y)H(Y|X)

 


由於之前已經得到表達式H(X,Y)=H(X)+H(Y|X),代入上式可得: 

I(X;Y)=H(X)+H(Y)H(X,Y)


我們把之前的一些重要表達式都放在一塊: 

I(X;Y)=H(X)H(X|Y)I(X;Y)=H(Y)H(Y|X)I(X;Y)=H(X)+H(Y)H(X,Y)I(X;Y)=I(Y;X)


實際上,韋恩圖可以很好地表示以上各變量之間的關系,對着上面的公式,應該可以很好理解下面的圖表達的含義。 
韋恩圖表示關系

 


 

最大熵模型

當我們需要對一個隨機事件的概率分布做出預測的時候,我們的預測應當滿足全部一致的條件,而對未知的情況不要做任何主觀的假設。在這種情況下,概率分布最均勻,預測的風險最小。因為這個時候分布的信息熵是最大的,所以人們稱滿足上述條件要求的模型就是“最大熵模型”。“最大熵模型”的核心兩點:1.承認已知事物(或知識);2.對未知事物不做任何假設,沒有任何偏見。 It agrees with everything that is known, but carefully avoids assuming anything that is not known.

我們常說,不要把所有的雞蛋放在一個籃子里,其實就是最大熵原理的一個朴素說法,因為當我們遇到不確定性時,就要保留各種可能性。說白了,就是保留全部的不確定性,將風險降到最小。--摘自《Google黑板報》作者:吳軍。

如何引入最大熵模型呢?我們使用NLP(自然語言處理)中的例子來說明: 
“學習”這個詞可能是動詞,也可能是名詞。另一方面,“學習”這個詞可以被標為主語、謂語、賓語、定語。 
x1表示“學習”被標成名詞,x2表示“學習”被標成動詞。令y1表示“學習”被標為主語,y2 表示被標為謂語,y3表示賓語,y4表示定語。得到下面的表示: 

p(x1)+p(x2)=1i=14p(yi)=1

 


如果沒有其他的知識,根據信息熵的理論,概率趨向於均勻。所以有: 

p(x1)=p(x2)=0.5p(y1)=p(y2)=p(y3)=p(y4)=0.25


但是在實際情況中,“學習”被標為定語的可能性很小,只有0.05。我們引入這個新的知識: ,在滿足了這個約束的情況下,其他的事件我們盡可能的讓他們符合自然,符合均勻分布(無偏原則): 

p(x1)=p(x2)=0.5p(y1)=p(y2)=p(y3)=0.953


再加入一個知識:當“學習”被標作動詞的時候,它被標作謂語的概率為0.95。這個其實是很自然的事情。都已經是動詞了,那么是謂語的可能性就很大了: 

p(y2|x1)=0.95


已經有了兩個知識了,第二個還是條件概率相關的知識。就像最大熵模型的核心兩點所述,已知的知識點我需要承認,未知的部分不做任何假設,保持無偏(讓概率盡量分布平均)。我們現在需要做的就是:在滿足這兩個已知知識點的前提下,讓剩余的概率符合盡可能的均勻分布。可以想象,隨着已知的知識點越來越多,其實也就是約束越來越多,求解的過程會變得越來越復雜。那么該怎么做呢?其實就是使得熵盡可能的大就行了。寫成表達式即為:

 

我們要一個xy 的分布,滿足: 

p(x1)+p(x2)=1   i=14p(yi)=1p(y2|x1)=0.95   p(y4)=0.05

而且使得 H(Y|X)達到最大值。

 

以上表達中,一般我們用H(Y|X),其實這跟用H(X,Y) 是一個效果。因為根據之前推導可得H(X,Y)=H(Y|X)+H(X),而X是訓練集合,分布已經知道的(記住,我們認為訓練集合是有代表性的),所以H(X) 是一個定值。由此,令H(Y|X)最大相當於令H(X,Y) 最大。 
最后的數學表達式為: 

maxH(Y|X)=x,yp(x,y)logp(y|x)                p(x1)+p(x2)=1p(y1)+p(y2)+p(y3)+p(y4)=1                        p(y4)=0.05                    p(y2|x1)=0.95

 

 

上面的表達式僅僅針對某一個NLP的特例。最大熵模型Maxent(Maximum Entropy)的一般式為: 

maxpPH(Y|X)=(x,y)p(x,y)logp(y|x)

 


其中,P={p|pX滿} 。注意區分這里的Pp

 


為了進一步說明最大熵模型在NLP中的應用,我們給出一些在NLP中的常用的定義,以此推出最大熵模型的一個約束條件的具體表達式:

  • 特征:(x,y) 
    x:這個特征中的上下文信息(已知部分) 
    y:這個特征中需要確定的信息(未知部分)
  • 樣本:關於某個特征(x,y)的樣本,特征所描述的語法現象在標准集合里的分布; 
    也就是(xi,yi)對,形如:(x1,y1),(x2,y2),(x3,y3)... 其中yiy的一個實例,xiyi的上下文信息。
  • 特征函數:對於一個特征(xi,yi),定義特征函數: 
    f(x,y)={10x=xi and y=yielse

    這個特征函數很簡單,只有當x=xi and y=yi 時候為1,其他均為0。該函數為接下來的樣本特征期望值做鋪墊。
  • 樣本特征函數期望值:對於一個特征(xi,yi),在樣本中的特征函數期望值是: 
    p¯(f)=(xi,yi)p¯(x,y)f(x,y)

    其中p¯(x,y)(x,y)在樣本中出現的概率。由特征函數的定義,可以很好理解上式,求解的即為特征(xi,yi)在樣本中出現的概率,也可以看成是特征函數的期望值。

條件Constraints: 
對每個特征(x,y),模型所建立的特征函數的期望值必須與訓練樣本特征函數期望值相等,即p(f)=p¯(f)

特征f在模型中的特征函數期望值為: 

p(f)=(xi,yi)p¯(x)p(y|x)f(x,y)

 


其中,p¯(x)表示樣本中x出現的概率,而p(y|x)則是模型中需要求解的條件概率。 
由條件Constraints中的要求,可得:p(f)=p¯(f)。即: 

(xi,yi)p¯(x)p(y|x)f(x,y)=(xi,yi)p¯(x,y)f(x,y)


上面這個等式就是最大熵模型中的限制條件,那么最大熵模型的完整提法是: 

p=argmaxpPH(Y|X)=(x,y)p(x,y)logp(y|x)=(x,y)p(y|x)p¯(x)logp(y|x)P={p(y|x)|fi:(x,y)p¯(x)p(y|x)fi(x,y)=(x,y)p¯(x,y)fi(x,y),x:yp(y|x)=1}fi                                                

 

 

求解最大熵模型

我們使用Lagrange乘子法來求解,該條件約束優化問題的Lagrange函數為: 

Λ(p,λ⃗ )=H(Y|X)+i=1mλi(E(fi)E¯(fi))+λ0(yp(y|x)1)

 


其中參數p表示p(y|x),λ⃗ 表示λ的向量形式,即: 

L=(x,y)p(y|x)p¯(x)log1p(y|x)+i=1mλi(x,y)fi(x,y)[p¯(x)p(y|x)p¯(x,y)]+λ0⎡⎣yp(y|x)1⎤⎦


按照Lagrange乘子法的思路,對參數p 求偏導,可得: 

Lp(y|x)=p¯(x)(logp(y|x)1)+i=1mλip¯(x)fi(x,y)+λ0=Δ0p(y|x)=exp(i=1mλifi(x,y)+λ0p¯(x)1)=exp(i=1mλifi(x,y))exp(λ0p¯(x)1)

 

可以看出p(y|x)表達式的第二個因子對應的是約束yp(y|x)=1。將p(y|x)表達式帶入到yp(y|x)=1,可求得: 

yexp(i=1mλifi(x,y))exp(λ0p¯(x)1)=1exp(λ0p¯(x)1)=1yexp(i=1mλifi(x,y))

 


Zλ(x)=yexp(i=1mλifi(x,y))可得: 

p(y|x)=1Zλ(x)exp(iλifi(x,y))

 

經過這個步驟,我們似乎已經求得了最優的最大熵模型中p(y|x) 的表達式,但是,請注意的是參數λ⃗ 並沒有求解得到,p(y|x)的表達式依賴於參數λ⃗  。下一步,如果我們能夠求解出λ⃗  ,那么問題才算真正解決。 
關於參數λ⃗  的求解,我們使用對偶函數來幫助我們解決。將已經求得的p(y|x) 的表達式代入到Lagrange函數中,可得到以上問題的對偶函數L(λ)為 

L(λ)=x,yp(y|x)p¯(x)logp(y|x)+i=1kλix,yfi(x,y)[p(y|x)p¯(x)p¯(x,y)]+λ0⎡⎣yp(y|x)1⎤⎦=x,ypλ(y|x)p¯(x)logpλ(y|x)+i=1kλix,yfi(x,y)[pλ(y|x)p¯(x)p¯(x,y)]=x,yp¯(x)pλ(y|x)logpλ(y|x)+i=1kp¯(x)pλ(y|x)λix,yfi(x,y)i=1kp¯(x,y)λix,yfi(x,y)=x,yp¯(x)pλ(y|x)logpλ(y|x)+x,yp¯(x)pλ(y|x)i=1kλifi(x,y)i=1kp¯(x,y)λix,yfi(x,y)=x,yp¯(x)pλ(y|x)logZλ(x)i=1kp¯(x,y)x,yλifi(x,y)

 


上述表達式中,Zλ(x)=yexp(i=1mλifi(x,y)) 
因為沒有顯式的解析式,我們使用IIS (Improved Iterative Scaling) 改進的迭代尺度算法來計算最大熵模型的數值解。具體做法是: 
假設最大熵模型當前的參數向量是λ⃗  ,希望能夠找到新的參數向量λ⃗ +δ ,使得對偶函數L增加。重復這個過程,直到找到對偶函數的最大值。 

L(λ+δ)L(λ)=x,yp¯(x,y)i=1nδifi(x,y)xp¯(x)logZλ+δ(x)Zλ(x)x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)Zλ+δ(x)Zλ(x)=x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)Zλ+δ(x)Zλ(x)=x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)exp(i=1nδifi(x,y))=x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)ypλ(y|x)exp(i=1nδifi(x,y))


為進一步推導,我們打算針對凸函數f(x)=ex使用Jensen不等式,令f#(x,y)=mi=1fi(x,y),可得: 

A(δ|λ)=x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)ypλ(y|x)exp(i=1nδifi(x,y))=x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)ypλ(y|x)exp(f#(x,y)i=1nδifi(x,y)f#(x,y))x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)ypλ(y|x)i=1nfi(x,y)f#(x,y)exp(δif#(x,y))

 

接下來,對該下界求偏導,令偏導為0,求出相應的δ。這么做的原因是:每一次迭代的δ 都能夠令相鄰兩次迭代的函數值之間的差值L(λ+δ)L(λ)盡可能大,也就是通過每一次迭代的δ盡快達到L最大。令 

B(δ|λ)=x,yp¯(x,y)i=1nδifi(x,y)+1xp¯(x)ypλ(y|x)i=1nfi(x,y)f#(x,y)exp(δif#(x,y))

 


δ求偏導,得: 

B(δ|λ)δi=x,yp¯(x,y)fi(x,y)xp¯(x)ypλ(y|x)fi(x,y)exp(δif#(x,y))=x,yp¯(x,y)fi(x,y)x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))=Ep¯(fi)x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))


令偏導為0,得到: 

x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))Ep¯(fi)=0

 

分情況討論:

  • f#(x,y)=M為常數,那么: 
    δi=1MlogEp¯(fi)Ep(fi)
  • f#(x,y)不是常數,那么無法直接求得令偏導為0時候δ的值,令偏導表示為 
    g(δi)=x,yp¯(x)pλ(y|x)fi(x,y)exp(δif#(x,y))Ep¯(fi)

    轉化為求解g(δi)=0 的根。使用牛頓法: 
    δi(k+1)=δi(k)g(δi(k))g(δi(k))

因為需要計算g(δi)=0的根而不是求g(δi) 的極小值,所以牛頓法中是函數值除以一階導,而不是一階導除以二階導。實踐中,可采用擬牛頓法BFGS解決。

將上述求解過程中得到的參數λ⃗ ,回代到下式中,即可得到最大熵模型的最優估計: 

p(y|x)=1Zλ(x)eiλifi(x,y)Zλ(x)=yeiλifi(x,y)

 

 


參考文獻:

《統計學習方法》,李航著,清華大學出版社,2012年 
A Mathematical Theory of Communication,shannon,1948


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM