EM 算法

因爲時間原因實在是來不及一一看那些書籍,經學長指點,直接學習統計翻譯的em算法,然後是基於短語的概率翻譯表提取,再者就是去學習bp神經網絡。

em在ibm model1中的應用,看了很久纔看明白,當我以爲自己看懂了的時候,學長讓我用一句話概括一下em,我竟一時語塞,才驚覺其實並不是很懂。於是老老實實去翻看李航老師的《統計學習方法》,第九章詳細介紹了em算法,也加深了自己的印象。

什麼是EM

簡單來說,em算法是用來解決含有隱變量的概率模型的參數最大似然估計的迭代算法。
用數學語言來說,就是觀測數據已知,求參數θ ,那麼我們建立數學模型P(y|θ) ,其似然函數是L(y,θ )=logP(y|θ) ;求L的最大值,當無法得到L的解析解時,要用em來迭代求解。
關鍵詞: 隱變量 概率模型 參數估計 迭代算法

Why EM

其實根據上面對em的理解,大致就可以看出來,em用來進行最大似然參數估計,我們之前會使用最小二乘法進行似然估計,但是當無法得到參數解析解時,我們只能一步步減小參數的值,使得概率模型最優。

三枚硬幣的例子

李航老師的書中提到的一個例子,就是拋三枚硬幣的例子。有三枚硬幣,先拋出硬幣A,如果A是正面,就選擇B,然後拋B,記錄結果,反之則選擇C,記錄結果;重複上述過程10次,得到如下結果:1101100110. 我們需要做的,就是求出三枚硬幣拋出正面的概率p,q, π。

解:對於這樣一個問題,我們首先來看看隱變量是什麼。對於這個問題,直接觀測的變量是y,1101100110. 隱變量則是觀測變量對應的A的結果。假設參數用θ 來表示,那麼整個模型就可以表示爲:

P(y|θ)=zP(y,z|θ)=zP(z|θ)P(y|z,θ)=P(y,z=0|θ)+P(y,z=1|θ)=πpy(1p)1y+(1π)qy(1q)1y

這裏面的y表示的是每一個樣本值,假設用Y表示每一次實驗的觀測變量值,用Z表示隱變量的值,那麼Y={y1,y2,y3…..y10},Z={在z1,z2,z3…..z10}. 模型的似然估計函數爲:

P(Y|θ)=ZP(Y,Z|θ)

也就是:
P(Y|θ)=yi=110P(yi|θ)=yi=1πpyi(1p)1yi+(1π)qyi(1q)1yi

L(y,θ)=logP(Y|θ)

利用最大似然估計法,求解最大的 θ , 即

θ^=argmaxθL(Y,θ)

可以看到這個表達式是沒有解析解的,只能通過迭代的方式來更新參數,求得最大解。而em算法則正是用來對此進行求解的一種算法。
首先,需要對參數進行初始化,這裏假設初始化爲0.5,比較符合常識。
θ0=(π0=0.5,p0=0.5,q0=0.5);
然後,採用em算法的e步,求出隱變量,也就是A拋出的是正面的概率。
P(zi+1|θi,y)=πi(pi)y(1pi)1yπi(pi)y(1pi)1y+(1πi)(qi)y(1qi)1y
其次,利用M步來迭代更新參數。
πi+1=1nyi=010P(zi+1|θi,yi)

pi+1=10yi=0P(zi+1|θi,yi)yi10yi=0P(zi+1|θi,yi)

qi+1=10yi=0(1P(zi+1|θi,yi))yi10yi=0(1P(zi+1|θi,yi))

最後重複EM步驟,直到收斂爲止。

EM算法的推導

看完上面的例子,似乎還是無法明白這個EM算法到底是怎麼回事。
來重新理一下思路,根據上面對問題的描述,其實我們的目的就是要通過迭代的思想,來使得L(Y,θ) 達到一個最大值。

L(Y|θ)L(Y|θi+1)=logP(Y|θ)logP(Y|θi+1)=logzP(Y,z|θ)logP(Y|θi+1)=logzP(z|y,θi+1)P(Y|z,θ)P(z|θ)P(z|y,θi+1)logP(Y|θi+1)>=zP(z|y,θi+1)logP(Y|z,θ)P(z|θ)P(z|y,θi+1)logP(Y|θi+1)=zP(z|y,θi+1)logP(Y|z,θ)P(z|θ)P(z|y,θi+1)P(Y|θi+1)

那麼,

L(Y|θ)=zP(z|y,θi+1)logP(Y|z,θ)P(z|θ)P(z|y,θi+1)P(Y|θi+1)+L(Y|θi+1)

可以看到,我們使用Jensen不等式,成功地把和的對數轉換爲了對數的和,可以求導來得到最大值。下面對上式化簡:

θ^max=argmaxzP(z|y,θi+1)logP(Y|z,θ)P(z|θ)P(z|y,θi+1)P(Y|θi+1)+L(Y|θi+1)=argmax{zP(z|y,θi+1)logP(Y,Z|θ)}=argmaxQ(θ,θi+1)

實際上我們要最大化的其實就是這個Q函數,但這個是L的下界,因此em算法就是通過一步步的迭代求解下界,來逼近L的最大值,可以參考梯度下降的思想。下面的一幅圖解釋了具體的過程。
這裏寫圖片描述

EM算法步驟

(1) 首先需要對參數θ0 進行初始化。一般會採用均勻分佈的方法來初始化參數。當然,參數的初始值直接影響到em參數估計的結果。
(2) E步:
θi 表示在i次迭代的θ 值。
那麼, 這個所謂的期望值,其實指的是,完全數據(觀測值和隱變量值)在參數的條件概率下的對數似然函數,對上一次迭代求出的參數和當前觀測值y的期望,假設用Q來表示,則在第i+1次迭代中:

Q(θ,θi)=Ez(logP(Y,Z|θ)|Y,θi)=zlogP(Y,Z|θ)P(Z|Y,θi)

可以看到這個Q函數的來源正是上面推導,所要最大化的表達式。

關於這一部分,其實不是很能理解,按照這個公式來看的確是正確的,難點就在於這個Q函數的確定。看了大多分的例子,其實,一般在E步,會先求解出P(Z|Y,θi) ,也就是根據當前的參數和觀測變量來求出可能的隱變量的分佈,然後在M步的時候,再根據隱變量和觀測變量來寫出參數的估計計算方法。
(3)M步:
這一步主要是求最大值的,更新第i+1次迭代的參數:
θi+1=argmaxθQ(θ,θi)
(4)重複(2)(3)步驟,直到θi,θi+1 的差值在一個極小的範圍之內。

================
以上就是整個em的介紹了。拖拖拉拉好幾天才把這個算法寫完,太拖拉了,好嘛原諒我畢竟是在家寫,沒動力啊╮(╯▽╰)╭。

不過em的入門還是因爲IBM1 model,所以在下一篇會以翻譯模型中的em作進一步的案例分析。

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