機器學習-EM算法通俗詳解

本篇參考了白板推導系列以及其他關於EM算法的書籍,盡力做到通俗易懂,第一次學習機器學習算法的時候容易混亂,尤其是在學習完理論之後,具體實踐和代碼實現都還是很模糊。在查閱了多方資料,和各種大神的博客之後,終於算是弄懂了,在此集百家之長,站在巨人的肩膀上,總結和推導下EM的從始到終,如果不足之處還望多多指正。

一、爲什麼使用EM算法(什麼情況下使用)

在學習一個知識的時候,我認爲最關鍵的是要知道我們爲什麼學它它有什麼用,這樣才能在學習過程中有目的有針對地吸取知識點,同時在掌握之後能運用到實際當中。
迴歸正題,要知道EM 首先我們得從最大似然開始講起。

1、什麼是最大似然(MLE)

在數理統計中,似然函數是關於一種統計模型中參數的函數,表示模型中參數的似然率(“似然”與“概率”意思相近,都是指某種事件發生的概率)。現在我們知道似然函數的概念了,不就是帶參數的函數嘛,那麼極大似然就相當於最大化這個可能性意思。
現在舉個例子,你和一位獵人去打獵(參數就是你和獵人θ\theta={獵人,你}),一隻野兔飛過,只聽一聲槍響,野兔應聲倒下(兔子:我招誰惹誰了),問你,這一槍是獵人打中的還是你打中的。顯然你覺得更可能是獵人,因爲獵人的命中概率要更高。這就是我們是已知結果反推條件的方式.而似然函數就是以條件概率推測的結果,一般我們設計好一個帶參數的模型P(xθ)P(x|\theta),就可以知道其結果P(x=兔子是否會死亡)的概率,而實際上我們不知道參數θ\theta應該是多少,這時候我們就要從後驗概率入手,在已知x的情況下(因爲樣本x是我們可以得到的),來估計我們的θ\theta我們實際上得到的是P(θX)P(\theta|X),通過它能對θ\theta有個估計,爲了使這個估計可靠,我們必須取得最大可能的那個(就是我們前面例子提到的,在知道兔子死了的情況下,參數是獵人的可能性最大,所以獵人是最佳的參數估計)。通過貝葉斯公式我們有P(θX)=P(Xθ)P(θ)P(X)P(\theta|X)=\frac{P(X|\theta)P(\theta)}{P(X)},P(X)是可以觀察到的,我們只需要取怎樣的θ^\hat{\theta}能使得P(Xθ)P(X|\theta)最大(逼近現實),也就能得到最可靠的P(θX)P(\theta|X),現在在已知X的情況下,要你估計參數的值,即通過最大似然函數L(P(Xθ))\mathbb{L}(P(X|\theta)),來估計最可能的參數θ\theta。有的地方將P(Xθ)P(X|\theta)也寫成P(x;θ)P(x;\theta)。如果涉及到貝葉斯公式的話,用前者的表達更好。

2、最大似然估計

現在是不是有點暈了? 那我們再舉個例子,比如你全校的學生,有男的有女的有中性的,男生女生的身高分別服從兩個參數θ1,θ2\theta_{1},\theta_{2}未知的正太分佈,你要估計出這個兩個參數分別是多少。首先我們不可能全校所有學生的身高去量一下,我們要採用抽樣建模的方法,先從男生女生中各抽100人做爲樣本,X={x1,x2,..,xN}X=\{x_1,x_2,..,x_N\},其中xix_i表示抽到的第ii個人的身高,N=100,表示抽取個數。
那麼男生抽取的這100個樣本的聯合分佈(各自概率乘積),用下列式子表示:L(θ)=L(x1,x2,..,xn)=i=1np(xi;θ)L(\theta)=L(x_1,x_2,..,x_n)=\prod^{n}_{i=1}p(x_i;\theta)
那麼,以上聯合概率就是我們抽取的結果,是我們的已知事實,首先我們的模型必須要滿足這個已知事實,其次,我們要最大化這個事實,爲什麼?因爲我抽100人就抽到他們,說明這100個人被我抽到的概率是比較大的,從一定程度上就能反應真實樣本的分佈。當然了,抽樣的數量越多就會越接近真正的分佈。
當我們選取不同的θ\theta,這個似然函數L(θ)L(\theta)就不一樣,我們最大化它,就是要找到一個最合適θ^\hat{\theta},使得似然函數最大,這個θ^\hat{\theta}就是“最可能”的值,就是θ\theta的最大估計量,記爲:
θ^=argθ max l(θ) \hat{\theta}= \mathop{arg}\limits _{\theta }\ max\ l(\theta)
爲了方便計算,通常我們對釋然函數取對數:
lnL(θ)=i=1nlnp(xi;θ)ln\,L(\theta)=\sum^n_{i=1}ln\,p(x_i;\theta)
之後就是我們本科學的微積分知識,對這個函數的參數求導取得極值,如果參數是多元的就求多個偏導,讓導數等於0,解這個方程即可。
對女生我們也是用同樣的方法就可以求得參數。

3、引入EM算法

現在我們讓這個例子,稍微複雜一丟丟,假如這100個男生和100個女生混在了一起,這200個人當中,你不知道每一個樣本是男是女。這種情況下你該如何估計你的參數呢?我們只有知道了男生女生的正太分佈參數,才能知道這個人是男生還是女生。反過來我們只有知道了每個人是男生還是女生,才能準確估計出他們整體分佈的參數。我去!這不是蛋生雞,雞生蛋的無限循環嗎?這時候我們大名鼎鼎的EM算法就派上用場了!我們把這個樣本是男生還是女生,看成是潛在的隱變量Latent VariableLatent\ Variable,這個潛在變量會影響我們的評估,EM算法就是爲了解決這種隱變量存在的情況下的“極大似然估計”。(潛在變量可以想象成偷偷隱藏在背後,影響模型估計的一種變量。嗯~ 搜嘎!原來我模型估計的不準,是你小子在背地裏偷偷搞鬼,看我不用EM來消滅你!)

二、EM算法推導

EM算法的推導主要有兩種角度,本質是一樣的,這裏我們先從條件概率的角度出發進行推導。

1、公式推導

首先上文我們已經說了,最大似然函數其實是最大後驗概率,我們的目標就是最大化logP(xθ)logP(x|\theta)來估計我們的參數。爲了引入隱變量,我們先做如下恆等變形:logP(xθ)=logP(x,zθ)logP(zθ,x)logP(x|\theta)=logP(x,z|\theta)-logP(z|\theta,x)
接下來我們用點技巧,在做個恆等變換,引入一個概率函數q(z)。logP(xθ)=logP(x,zθ)q(z)logP(zθ,x)q(z)logP(x|\theta)=log\frac{P(x,z|\theta)}{q(z)}-log\frac{P(z|\theta,x)}{q(z)}
現在對等式兩邊對q(z)積分,即兩邊求q(z)的期望,左邊與q(z)無關,期望就是自己本身。
zq(z)logP(Xθ)dz=zq(z)logP(x,zθ)q(z)dzzlogP(zθ,X)q(z)dz\int_z q(z)logP(X|\theta)dz=\int _zq(z)log\frac{P(x,z|\theta)}{q(z)}dz-\int _zlog\frac{P(z|\theta,X)}{q(z)}dz
logP(xθ)=zq(z)logP(x,zθ)q(z)dzE L B O+(zq(z)logP(zθ,x)q(z)dz)KL(q(z)P(zθ,x))logP(x|\theta)=\mathop{\int _zq(z)log\frac{P(x,z|\theta)}{q(z)}dz}\limits _{E\ L\ B\ O}+\mathop{(-\int _zq(z)log\frac{P(z|\theta,x)}{q(z)}dz)}\limits_{KL(q(z)||P(z|\theta,x))}
上式的右邊的左半部分,我們通常叫做ELBO evidence lower boundevidence\ lower\ bound,右半部分是KL散度,它是用來衡量兩個分佈的距離。例如KL(q(z)||p(z))就用來衡量q(z)與p(z)這兩個分佈的距離,KL散度是永遠大於0的,當q(z)與p(z)分佈相等時,KL爲0.
由此可知,ELBO是它的一個下界,我們有下列不等式:
logP(xθ)ELBOlogP(x|\theta)\ge ELBO
那麼什麼時候取等號成立呢?很明顯,當KL爲0的時候,即q(z)=p(zθt,x)q(z)=p(z|\theta^{t},x)時,等號成立,這裏的θ\theta上一時刻的參數估計,初始時刻,我們先隨機設定參數值,之後進行迭代來糾正參數(EM算法是E-step,M-step反覆迭代的過程)。

現在我們把q(z)=p(zθt1,x)q(z)=p(z|\theta^{t-1},x)帶入ELBO中,得到:
logP(xθ)=ELBO=zp(zθt,x)logP(x,zθ)p(zθt,x)dzlogP(x|\theta)=ELBO=\int _zp(z|\theta^{t},x)log\frac{P(x,z|\theta)}{p(z|\theta^{t},x)}dz
我們的目標就變成了最大化ELBO:
θ^=arg maxθlogP(xθ) \hat{\theta}=arg \ \mathop{max}\limits_{\theta}logP(x|\theta)

θ^=arg maxθELBO \hat{\theta}=arg \ \mathop{max}\limits_{\theta}ELBO

θt+1=arg maxθzp(zθt,x)logP(x,zθ)p(zθt,x)dz {\theta}^{t+1}=arg \ \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)log\frac{P(x,z|\theta)}{p(z|\theta^{t},x)}dz
進一步,我們將上式log拆開,變成:
θt+1=arg maxθzp(zθt,x)[logP(x,zθ)logp(zθt,x)]dz {\theta}^{t+1}=arg \ \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)[log P(x,z|\theta) -log p(z|\theta^{t},x)]dz
可以看到logp(zθt,x)log p(z|\theta^{t},x)θ\theta無關,可以去除,所以最終的表達式爲:
θt+1=arg maxθzp(zθt,x)logP(x,zθ)dz {\theta}^{t+1}=arg \ \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)log P(x,z|\theta)dz

2、算法總結

以上EM推導算是完成了。現在我們來從頭梳理下,EM算法的具體步驟。
我先從公式上描述一遍,在用文字描述一遍,加深理解。
①:初始化:設定初始值θ\theta
②:E-step: 計算zp(zθt,x)logP(x,zθ)dz\int _zp(z|\theta^{t},x)log P(x,z|\theta)dz 即期望Ezθt,x(P(x,zθ))E_{z|\theta^{t},x}(P(x,z|\theta))(帶有參數)
③:M-step:最大期望, θt+1=argmaxθEzθt,x(P(x,zθ))=argmaxθzp(zθt,x)logP(x,zθ)dz{\theta}^{t+1}=arg \mathop{max}\limits_{\theta}E_{z|\theta^{t},x}(P(x,z|\theta))=arg \mathop{max}\limits_{\theta}\int _zp(z|\theta^{t},x)log P(x,z|\theta)dz
④:重複②,③,將③中得到的θt+1\theta^{t+1}帶入②中。

文字描述:
①:給定初始值θ\theta(比如上面例子中,100個男生女生混合,我假定x1x2…x30是男生,x31…x100是女生)
②:根據觀測的數據,和之前假定的參數θ\theta,來求觀測數據z的條件概率分佈的期望(在你的上述假設中,計算這種參數情況下的期望)。
③:通過調整θ\theta,最大化期望。(得到新的θ\theta作爲新的參數估計繼續迭代)
④:重複② ③,直到收斂。

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,
有了新的參數估計,我們在帶入第二部,反覆,直到收斂。

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