本篇參考了白板推導系列以及其他關於EM算法的書籍,盡力做到通俗易懂,第一次學習機器學習算法的時候容易混亂,尤其是在學習完理論之後,具體實踐和代碼實現都還是很模糊。在查閱了多方資料,和各種大神的博客之後,終於算是弄懂了,在此集百家之長,站在巨人的肩膀上,總結和推導下EM的從始到終,如果不足之處還望多多指正。
一、爲什麼使用EM算法(什麼情況下使用)
在學習一個知識的時候,我認爲最關鍵的是要知道我們爲什麼學它,它有什麼用,這樣才能在學習過程中有目的有針對地吸取知識點,同時在掌握之後能運用到實際當中。
迴歸正題,要知道EM 首先我們得從最大似然開始講起。
1、什麼是最大似然(MLE)
在數理統計中,似然函數是關於一種統計模型中參數的函數,表示模型中參數的似然率(“似然”與“概率”意思相近,都是指某種事件發生的概率)。現在我們知道似然函數的概念了,不就是帶參數的函數嘛,那麼極大似然就相當於最大化這個可能性意思。
現在舉個例子,你和一位獵人去打獵(參數就是你和獵人θ={獵人,你}),一隻野兔飛過,只聽一聲槍響,野兔應聲倒下(兔子:我招誰惹誰了),問你,這一槍是獵人打中的還是你打中的。顯然你覺得更可能是獵人,因爲獵人的命中概率要更高。這就是我們是已知結果反推條件的方式.而似然函數就是以條件概率推測的結果,一般我們設計好一個帶參數的模型P(x∣θ),就可以知道其結果P(x=兔子是否會死亡)的概率,而實際上我們不知道參數θ應該是多少,這時候我們就要從後驗概率入手,在已知x的情況下(因爲樣本x是我們可以得到的),來估計我們的θ,我們實際上得到的是P(θ∣X),通過它能對θ有個估計,爲了使這個估計可靠,我們必須取得最大可能的那個(就是我們前面例子提到的,在知道兔子死了的情況下,參數是獵人的可能性最大,所以獵人是最佳的參數估計)
。通過貝葉斯公式我們有P(θ∣X)=P(X)P(X∣θ)P(θ),P(X)是可以觀察到的,我們只需要取怎樣的θ^能使得P(X∣θ)最大(逼近現實),也就能得到最可靠的P(θ∣X),現在在已知X的情況下,要你估計參數的值,即通過最大似然函數L(P(X∣θ)),來估計最可能的參數θ。有的地方將P(X∣θ)也寫成P(x;θ)。如果涉及到貝葉斯公式的話,用前者的表達更好。
2、最大似然估計
現在是不是有點暈了? 那我們再舉個例子,比如你全校的學生,有男的有女的有中性的,男生女生的身高分別服從兩個參數θ1,θ2未知的正太分佈,你要估計出這個兩個參數分別是多少。首先我們不可能全校所有學生的身高去量一下,我們要採用抽樣建模的方法,先從男生女生中各抽100人做爲樣本,X={x1,x2,..,xN},其中xi表示抽到的第i個人的身高,N=100,表示抽取個數。
那麼男生抽取的這100個樣本的聯合分佈(各自概率乘積),用下列式子表示:L(θ)=L(x1,x2,..,xn)=i=1∏np(xi;θ)
那麼,以上聯合概率就是我們抽取的結果,是我們的已知事實,首先我們的模型必須要滿足這個已知事實,其次,我們要最大化這個事實,爲什麼?因爲我抽100人就抽到他們,說明這100個人被我抽到的概率是比較大的,從一定程度上就能反應真實樣本的分佈。當然了,抽樣的數量越多就會越接近真正的分佈。
當我們選取不同的θ,這個似然函數L(θ)就不一樣,我們最大化它,就是要找到一個最合適的θ^,使得似然函數最大,這個θ^就是“最可能”的值,就是θ的最大估計量,記爲:
θ^=θarg max l(θ)
爲了方便計算,通常我們對釋然函數取對數:
lnL(θ)=i=1∑nlnp(xi;θ)
之後就是我們本科學的微積分知識,對這個函數的參數求導取得極值,如果參數是多元的就求多個偏導,讓導數等於0,解這個方程即可。
對女生我們也是用同樣的方法就可以求得參數。
3、引入EM算法
現在我們讓這個例子,稍微複雜一丟丟,假如這100個男生和100個女生混在了一起,這200個人當中,你不知道每一個樣本是男是女。這種情況下你該如何估計你的參數呢?我們只有知道了男生女生的正太分佈參數,才能知道這個人是男生還是女生。反過來我們只有知道了每個人是男生還是女生,才能準確估計出他們整體分佈的參數。我去!這不是蛋生雞,雞生蛋的無限循環嗎?這時候我們大名鼎鼎的EM算法就派上用場了!我們把這個樣本是男生還是女生,看成是潛在的隱變量Latent Variable,這個潛在變量會影響我們的評估,EM算法就是爲了解決這種隱變量存在的情況下的“極大似然估計”。(潛在變量可以想象成偷偷隱藏在背後,影響模型估計的一種變量。嗯~ 搜嘎!原來我模型估計的不準,是你小子在背地裏偷偷搞鬼,看我不用EM來消滅你!)
二、EM算法推導
EM算法的推導主要有兩種角度,本質是一樣的,這裏我們先從條件概率的角度出發進行推導。
1、公式推導
首先上文我們已經說了,最大似然函數其實是最大後驗概率,我們的目標就是最大化logP(x∣θ)來估計我們的參數。爲了引入隱變量,我們先做如下恆等變形:logP(x∣θ)=logP(x,z∣θ)−logP(z∣θ,x)
接下來我們用點技巧,在做個恆等變換,引入一個概率函數q(z)。logP(x∣θ)=logq(z)P(x,z∣θ)−logq(z)P(z∣θ,x)
現在對等式兩邊對q(z)積分,即兩邊求q(z)的期望,左邊與q(z)無關,期望就是自己本身。
∫zq(z)logP(X∣θ)dz=∫zq(z)logq(z)P(x,z∣θ)dz−∫zlogq(z)P(z∣θ,X)dz
logP(x∣θ)=E L B O∫zq(z)logq(z)P(x,z∣θ)dz+KL(q(z)∣∣P(z∣θ,x))(−∫zq(z)logq(z)P(z∣θ,x)dz)
上式的右邊的左半部分,我們通常叫做ELBO evidence lower bound,右半部分是KL散度,它是用來衡量兩個分佈的距離。例如KL(q(z)||p(z))就用來衡量q(z)與p(z)這兩個分佈的距離,KL散度是永遠大於0的,當q(z)與p(z)分佈相等時,KL爲0.
由此可知,ELBO是它的一個下界,我們有下列不等式:
logP(x∣θ)≥ELBO
那麼什麼時候取等號成立呢?很明顯,當KL爲0的時候,即q(z)=p(z∣θt,x)時,等號成立,這裏的θ是上一時刻的參數估計,初始時刻,我們先隨機設定參數值,之後進行迭代來糾正參數(EM算法是E-step,M-step反覆迭代的過程)。
現在我們把q(z)=p(z∣θt−1,x)帶入ELBO中,得到:
logP(x∣θ)=ELBO=∫zp(z∣θt,x)logp(z∣θt,x)P(x,z∣θ)dz
我們的目標就變成了最大化ELBO:
θ^=arg θmaxlogP(x∣θ)
θ^=arg θmaxELBO
θt+1=arg θmax∫zp(z∣θt,x)logp(z∣θt,x)P(x,z∣θ)dz
進一步,我們將上式log拆開,變成:
θt+1=arg θmax∫zp(z∣θt,x)[logP(x,z∣θ)−logp(z∣θt,x)]dz
可以看到logp(z∣θt,x)與θ無關,可以去除,所以最終的表達式爲:
θt+1=arg θmax∫zp(z∣θt,x)logP(x,z∣θ)dz
2、算法總結
以上EM推導算是完成了。現在我們來從頭梳理下,EM算法的具體步驟。
我先從公式上描述一遍,在用文字描述一遍,加深理解。
①:初始化:設定初始值θ
②:E-step: 計算∫zp(z∣θt,x)logP(x,z∣θ)dz 即期望Ez∣θt,x(P(x,z∣θ))(帶有參數)
③:M-step:最大期望, θt+1=argθmaxEz∣θt,x(P(x,z∣θ))=argθmax∫zp(z∣θt,x)logP(x,z∣θ)dz
④:重複②,③,將③中得到的θt+1帶入②中。
文字描述:
①:給定初始值θ(比如上面例子中,100個男生女生混合,我假定x1x2…x30是男生,x31…x100是女生)
②:根據觀測的數據,和之前假定的參數θ,來求觀測數據z的條件概率分佈的期望(在你的上述假設中,計算這種參數情況下的期望)。
③:通過調整θ,最大化期望。(得到新的θ作爲新的參數估計繼續迭代)
④:重複② ③,直到收斂。
3、具體事例
現在我們再來舉個簡單的例子,來描述EM的計算過程。
假如有A B兩枚硬幣,你需要計算A 和B 正面朝上的概率是分別是多少。實驗總共扔了五輪硬幣,每輪扔5次。但是每一輪你不知道扔的是A硬幣還是B硬幣,顯然每輪扔的是A還是B就是潛在變量z,你要評估的參數就是A B 分別正面朝上的概率。以下是實驗的統計結果:T表示正,H表示反
Unknown TTHTH 3正-2反
Unknown HHTTH 2正-3反
Unknown THHHH 1正-4反
Unknown THHTT 3正-2反
Unknown HTTHH 2正-3反
回想下EM算法,
第一步,初始化
我們先隨機設定參數值,不妨我們設定
A硬幣正面朝上的概率PA=0.2,同理PB=0.7
第二步,計算期望。
我們先看看第一輪 3正-2反
如果是A硬幣,期望是:0.2*0.2*0.2*0.8*0.8=0.00512
如果是B硬幣,期望是:0.7*0.7*0.7*0.3*0.3=0.03087
以此類推,計算每輪的概率
第三步,最大化期望
以第一輪爲例,B的期望大於A的期望 0.03087>0.00512,所以第一輪最有可能是B硬幣。
以此類推,我們就得到了最大似然的法則:
第一輪:最可能B硬幣 3正-2反
第二輪:最可能A硬幣 2正-3反
第三輪:最可能A硬幣 1正-4反
第四輪:最可能B硬幣 3正-2反
第五輪:最可能A硬幣 2正-3反
通過這個最大化的期望,我們重新跟新下我們的參數,此時PA=(2+1+2)/(5+5+5)=0.33,PB=(3+3)/(5+5)=0.6
第四步,重複2 、3,
有了新的參數估計,我們在帶入第二部,反覆,直到收斂。