算法定義
最大期望算法(Exception Maximization Algorithm,后文簡稱EM算法)是一種啟發式的迭代算法,用於實現用樣本對含有隱變量的模型的參數做極大似然估計。已知的概率模型內部存在隱含的變量,導致了不能直接用極大似然法來估計參數,EM算法就是通過迭代逼近的方式用實際的值帶入求解模型內部參數的算法。
算法描述
算法的形式如下:
隨機對參數賦予初值; While(求解參數不穩定){ E步驟:求在當前參數值和樣本下的期望函數Q; M步驟:利用期望函數重新計算模型中新的估計值; }
上面的偽代碼形式可能過於抽象,就結合一個實際的例子來說明。
例子:存在3枚硬幣A,B和C,拋出正面的概率是π,p和q。進行如下拋硬幣的試驗:先拋硬幣A,如果A是正面則需要拋硬幣B,否則就拋硬幣C。如果B或C是正面結果為1,否則結果為0;獨立進行n次試驗。取n = 10,得到的觀測結果如下:
1,1,0,1,0,0,1,0,1,1
每一枚硬幣的分布都是一個二項分布,而A,B,C三個硬幣對應的事件之間又潛在有某種聯系。用Y表示觀測變量,對於第i次觀測結果的值記作yi,用向量θ來表示整個模型中的未知參數π,p和q,則整個三幣模型的概率可以表示為:
如果采用最大似然估計法來求解公式(1),以此來估計模型中的參數,即求解下式:
由於公式(1)內部包含了+號,很難直接求偏導求解得到參數的估計值。必須尋求其他的辦法解決這個問題,現引入一個隱含變量Z表示在試驗中拋擲A硬幣的結果(1代表正面,0代表反面),就可以將原先的似然函數轉換成下式:
我們給出E步驟中期望函數Q的定義如下,具體的證明會放到下一節:
對於上面的例子, P(Z|Y, θ(i)) =(zπpy(1-p)1-y + (1-z)(1-π)qy(1-q)1-y)/ P(Y|θ),上式中沒有未知的參數(Z的值在每次累加時被確定),所以可以直接算出具體的值。將計算出的結果帶入(4)式我們就得到了期望函數。
在M步驟中,分別對θ向量的每一個分量求其偏導,另偏導數的值等於零求出極大值得到新的參數估計值,重復以上兩個步驟,直到收斂。
理論與推導
在推導EM算法之前,有一些基本的數學概念需要重新梳理一下,以便可以透徹得理解EM算法。
a) 極大似然估計
極大似然估計是最常用的一種點估計方法,極大似然估計基於的一個直觀想法就是“概率最大的事件最有可能出現”。假設有一系列事件A1,A2,…,An被觀測到發生了,且事件Ai發生的概率為pi,就有理由相信事件序列A1,A2,…,An的理論概率是最大的,所以有max pi(1<=i<=n),以此可以估計出概率模型中參數。
利用極大似然估計方法進行參數估計,必須知道總體的概率分布類型。構造一個似然函數,將樣本的觀察值帶入似然函數,對某一個參數求偏導數另其為零,算出極值點的參數值就是估計得到的參數結果,用θ表示需要估計的參數向量,xi表示第i個樣本的觀測結果,似然函數的形式可以是:
b) Jessen不等式
Jessen不等式的形式如下:
f(E(X)) ≥ E[f(x)],當函數f(x)是一個凹函數時成立,且等號只有滿足對於任意x,都有E(X) = x時取到。
要理解Jessen不等式,可以參考下圖。在圖中曲線f(x)上取任意兩點x,y,有不等式f(1/2(x+y))≥ 1/2[f(x) + f(y)]恆成立,將這個不等式推廣到多維向量且考慮向量分布不均勻的情況,不等式左邊就是f(E(X)),右邊就是E(f(x))。
c) 最大下界函數
要用極大似然估計方法來確定模型中的參數,就是要計算在似然函數L(θ)最大化的時候對應的參數的值,上一節中已經提過對於含有隱含變量的模型,直接通過求偏導數的方法來確定似然函數的極大值是很困難的。在EM算法的求解過程中,每一次迭代構造了一個新的下界函數,最大化這個下界函數來逼近實際的似然函數,求解得到一個局部最優的極值。
假設在EM算法的求解過程中,經過第i次迭代后得到的參數向量為θ(i),這里我們以這組參數值作為觀測點,以此估計隱含變量的概率分布;將這個分布帶入似然函數的公式得到近似的L(θ(i)),考慮真實的似然函數與近似似然函數之間的差值:
由(6)和(7)可以構造似然函數的一個下界函數B(θ, θ(i)),有如下結論:
現在仔細回憶一下,模型中的參數之所以難以直接求解的根本原因是:在這一類問題中,實際上存在兩類參數,一類是模型自帶的參數向量θ,第二類是受這個參數影響的隱藏變量Z。在EM算法的第i次迭代的過程中,利用θ(i)構造了隱含變量Z的分布有效得消除了Z對結果的影響,同時根據Jessen不等式的性質,我們也能夠保證構造的下界函數與似然函數之間必然有交點,且始終處於了似然函數圖像的下方。
總結EM算法的E步驟,包含了如下幾個操作:
-
- 將當前輪次得到的參數θ(i)作為固定的觀測點;
- 利用參數θ(i)計算出隱含變量Z的分布;
- 將隱含變量Z的分布帶入構造似然函數在當前觀測點下的下界函數;
之后再M步驟中,通過極大化下界函數得到一組新的參數向量θ(i+1),如此循環既可以求出似然函數的一個局部最優。用一幅圖像更直觀得展現這第i次迭代的過程:
由公式(8)可知,下界函數由兩個部分組成,在參數θ(i)確定的條件下,L(θ(i))就是一個常量,極大化下界函數等價於極大化公式(7)中的G(θ,θ(i)),同時將G(θ,θ(i))在log內部的對求極大值沒有影響的常量部分P(Y,Z|θ(i)),即證最大化下界函數等價於證明公式(4)中的Q(θ,θ(i))。
補充幾點關於EM算法的細節,從圖中也可以清晰得看出:
a) EM算法是一種初始值敏感的算法,選取不同初始參數會有不同的最終結果;
b) EM算法得到的不會是全局最優,每次迭代逼近的都是當前的局部最優。
d)算法的收斂性
之前已經證明了可以通過定點參數值估計隱含變量的分布,並以此來構造下界函數,通過極大化下界函數來逼近似然函數的極大值。要證明EM算法的合理性,還有一個關鍵點就是,是不是每一次迭代都必定能比之前更優,即證明算法的收斂性。
已知條件概率公式:
將公式(11) 帶入(10)中並且在兩邊同時乘以P(Z|Y, θ(i)),可以得到下式:
解釋一下上面的公式,第一個不等號是調用了Jessen不等式,在EM算法M步驟中θ(i+1)是使Q(θ,θ(i))取極大值的參數,所以φ必定是大於等於零的值。
參考資料
[1]. 《統計學習方法》李航
[2]. https://www.coursera.org/course/ml
[3]. http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
[4]. http://www.cnblogs.com/mindpuzzle/archive/2013/04/05/2998746.html
后記
整理完成這篇文章前前后后花了本人接近半個月的時間(各期間種雜事,還生病靜養了好幾天),寫得也是斷斷續續,但是總算是基本完成了。EM算法雖然看似結構簡單,但是其證明和內部的數學原理理解起來還是相對有些難度的。期間找了相當多的資料進行參考,發現很多文章里都夾雜了過多復雜的公式,看着也很頭疼。在整理的過程中,我也盡量的避免大范圍得套用數學數學公式。