1. 程式人生 > >一些對最大熵模型的理解

一些對最大熵模型的理解

一、最大熵原理

概念:對於隨機變數X,其概率分佈為P(X),一般在約束條件下會有無數P(X)存在。最大熵原理就是在所有符合約束條件的P(X)中,熵最大的模型即為最優模型。

二、最大熵模型

最大熵模型,就是基於最大熵原理的分類模型。李航《統計學習方法》中對最大熵模型的描述如下:

問題1:為什麼是條件熵?

因為我們需要的是一個分類模型,也就是對於樣本x,模型返回其對應的類別y,即模型應該是一個條件概率分佈,表示為P(Y|X)。

問題2:在最大熵模型定義中,式(6.12)究竟表示什麼意思?為什麼要引入這條約束條件?

(1)要理解這個問題,首先看式(6.12)等號的右側部分定義。後面距離比較長,理解的同學就不必看了):

也就是說,E_{\widetilde{P}}(f)是特徵函式f(x,y)的期望值,我們知道當x=y時,f(x,y)=1;否則f(x,y)=0。上面的公式表示,在訓練集中,所有x和y可能組成的關係中,滿足特徵函式f(x,y)=1的數量。

打個比方,你統計女人喜歡或不喜歡某個男人的原因。回答肯定有很多種,我們用變數x表示喜歡或不喜歡的原因,變數y表示喜歡或不喜歡。有女孩認為喜歡的原因是“他很帥氣”,此時事實就是“x=帥,y=喜歡”,我們定義特徵函式f(x=帥,y=喜歡)=1來表示這樣一個事實;但有的哥們就悲劇了,姑娘不喜歡的原因是認為他“窮”,此時事實就是“x=窮,y=不喜歡”,我們定義為特徵函式f(x=窮,y=不喜歡)=1來表示。現在,我們假設走訪了1000位女生,得到了1000個回答。E_{\widetilde{P}}(f)

就表示這1000個回答中,喜歡男生的原因是帥和不喜歡男生的原因是因為窮的女生總數。

我這裡只列舉了兩種事實,並假設通過這兩種事實就能很好地描述我走訪的這1000個女生的回答(也就是假設大部分女生都是這兩種回答)。由此可以看出,我們可以定義很多事實來描述給定的訓練集,好的事實更能得到好的模型,所以訓練最大熵模型時,確定好符合訓練集的事實很重要。比如上面的例子中,最好不要定義類似這樣的事實“x=按時吃飯,y=喜歡”,因為你覺得在回答喜歡的女生中,會有多少是因為“按時吃飯”這個原因喜歡男生的?本質原因是這樣的事實不能很好地描述已知資料集。

這個期望值衡量的是什麼呢?其實就是衡量你定義的這些個特徵函式(本質上表示x和y滿足某一事實),對已知事實(即訓練集)的描述程度。

(2)再看等式(6.12)左邊的部分,是不是發現很相似呢?它也是一個期望:

和右邊公式的差別就是右邊公式中的\widetilde{P}(x,y)變成了\widetilde{P}(x)P(y|x)。為什麼會是這樣?其實我們也不想這樣,我們也想獲得x和y的聯合概率分佈P(x,y),但我們是不知道P(x,y)的,只能另想辦法。辦法就是根據全概率公式P(x,y)=P(x)P(y|x),我們只要知道P(x)即可。但我們也不知道P(x),進死衚衕了嗎?沒有,好在我們知道\widetilde{P}(x)啊。根據大數定律,在樣本達到一定數量後,我們可以用經驗分佈\widetilde{P}(x)來表示真實的概率分佈P(x),這樣就可以表示E_{P}(f)啦。

(3)這兩個期望E_{\widetilde{P}}(f)E_{P}(f)相等,有什麼意義?

根據(1)中的舉例,其實就是為了描述女生喜歡或不喜歡男生的原因的分佈情況,我定義了n個事實,相應的有n個特徵函式。由於不可能去統計地球上所有女生的回答,因此我希望調研的1000個女生中的原因分佈與真實情況下的分佈最接近,理想的情況是相同!注意,E_{\widetilde{P}}(f)E_{P}(f)都是小於1的,因為本質上E_{\widetilde{P}}(f)={\sum_{}^{x,y}}\widetilde{P}(x,y),其中x和y滿足某一事實。而對所有x,y,有{\sum_{}^{x,y}}\widetilde{P}(x,y)=1。同理對於E_{P}(f)也是一樣。

問題3:為什麼公式中有個\widetilde{P}(x)?

按照熵的定義,公式中應該沒有\widetilde{P}(x)。個人認為是為了方便後面學習過程的推導(見下面的公式),如果沒有這個引數,下面公式最後一項中的\widetilde{P}(x)就提取不出來,就會造成在最後的模型中存在\widetilde{P}(x)引數,而\widetilde{P}(x)不一定是準確的。

那為什麼乘上\widetilde{P}(x)沒關係呢?因為對於給定的訓練資料集,\widetilde{P}(x)是一個常數,因此對於後面最大熵模型的極大似然估計是沒有影響的。

三、最大熵模型的學習

這部分難點是將約束最優化問題轉換為無約束最優化的對偶問題。

下面講講我對轉換的理解,請看書中公式:

對於為什麼會有公式(6.18)應該沒有問題吧?

(6.18)可以這樣理解:先給定某種模型P_{i}P{_{i}}\in C,其中C是模型空間),然後在引數空間{w}中,找到某個w_{{*}},得到L(P,w_{{}})的最小值max_{P_{i}}。一個模型對應一個最小值,求所有模型中L(P,w_{{}})的最小值就是min(max_{P_{i}}),i=1,2,...,k(C),k(C)表示模型空間中的模型數量。

很好,公式本身的邏輯沒有問題。問題在於公式中L(P,w)是凸函式,其影象也就是類似y=x^{^{2}}。凸函式有極小值,但可能沒有最大值,即最大值可能是正無窮(無約束或即使在某些約束條件下)。因此不能保證凸函式的max值存在且能求出。那怎麼辦呢?那就把上面求L(P,w_{{}})的過程反過來吧,也就是轉化為公式(6.18)的對偶問題,表示為公式(6.19)。

那麼就來說說我對公式(6.19)的理解。我們先固定住w,L(P,w_{{}})就可以表示為給定w時,約束曲線與模型P的等高線的最低相切點(如下圖,紅色曲線為約束曲線g(x,y),圖來自知乎,見上面給的連結。另外,其實應該是約束平面而不是曲線,因為g(x,y)=K),而min{_{P\in C}}L(P,w)表示求所有模型的最低相切點中,值最小的那個切點。現在解綁w,每個w都有一個這樣的切點,那麼我們求所有w中最大的那個切點max_{w_{*}}L(P_{t},w),也就是公式(6.19)。

這樣的一個點能夠使所有不滿足約束條件的點都在該點之下(也就是隻要該點之上的點都滿足約束條件)。這個時候的P_{t}就是拉格朗日函式中的H(P),也就是所求最大熵模型。需要注意的是,公式(6.19)的值≥公式(6.18)的值。

(圖片來自知乎)