你真的瞭解EM算法嗎?

衆所周知,極大似然估計是一種應用很廣泛的參數估計方法。例如我手頭有一些東北人的身高的數據,又知道身高的概率模型是高斯分佈,那麼利用極大化似然函數的方法可以估計出高斯分佈的兩個參數,均值和方差。這個方法基本上所有概率課本上都會講,我這就不多說了,不清楚的請百度。

  然而現在我面臨的是這種情況,我手上的數據是四川人和東北人的身高合集,然而對於其中具體的每一個數據,並沒有標定出它來自“東北人”還是“四川人”,我想如果把這個數據集的概率密度畫出來,大約是這個樣子:

  

  好了不要吐槽了,能畫成這個樣子我已經很用心了= =

  其實這個雙峯的概率密度函數是有模型的,稱作高斯混合模型(GMM),寫作:

  

  話說往博客上加公式真是費勁= =這模型很好理解,就是k個高斯模型加權組成,α是各高斯分佈的權重,Θ是參數。對GMM模型的參數估計,就要用EM算法。更一般的講,EM算法適用於帶有隱變量的概率模型的估計,什麼是隱變量呢?就是觀測不到的變量,對於上面四川人和東北人的例子,對每一個身高而言,它來自四川還是東北,就是一個隱變量。

  爲什麼要用EM,我們來具體考慮一下上面這個問題。如果使用極大似然估計——這是我們最開始最單純的想法,那麼我們需要極大化的似然函數應該是這個:

  

  然而我們並不知道p(x;θ)的表達式,有同學說我知道啊,不就是上面那個混個高斯模型?不就是參數多一點麼。

  仔細想想,GMM裏的θ可是由四川人和東北人兩部分組成喲,假如你要估計四川人的身高均值,直接用GMM做似然函數,會把四川人和東北人全考慮進去,顯然不合適。

  另一個想法是考慮隱變量,如果我們已經知道哪些樣本來自四川,哪些樣本來自東北,那就好了。用Z=0或Z=1標記樣本來自哪個總體,則Z就是隱變量,需要最大化的似然函數就變爲:


  然而並沒有卵用,因爲隱變量確實不知道。要估計一個樣本是來自四川還是東北,我們就要有模型參數,要估計模型參數,我們首先要知道一個樣本是來自四川或東北的可能性...

  到底是雞生蛋,還是蛋生雞?

  不鬧了,我們的方法是假設。首先假設一個模型參數θ,然後每個樣本來自四川/東北的概率p(zi)就能算出來了,p(xi,zi)=p(xi|zi)p(zi),而x|z=0服從四川人分佈,x|z=1服從東北人分佈,所以似然函數可以寫成含有θ的函數,極大化它我們可以得到一個新的θ。新的θ因爲考慮了樣本來自哪個分佈,會比原來的更能反應數據規律。有了這個更好的θ我們再對每個樣本重新計算它來自四川和東北的概率,用更好的θ算出來的概率會更準確,有了更準確的信息,我們可以繼續像上面一樣估計θ,自然而然這次得到的θ會比上一次更棒,如此蒸蒸日上,直到收斂(參數變動不明顯了),理論上,EM算法就說完了。

  然而事情並沒有這麼簡單,上面的思想理論上可行,實踐起來不成。主要是因爲似然函數有“和的log”這一項,log裏面是一個和的形式,一求導這畫面不要太美,直接強來你要面對 “兩個正態分佈的概率密度函數相加”做分母,“兩個正態分佈分別求導再相加”做分子的分數形式。m個這玩意加起來令它等於0,要求出關於θ的解析解,你對自己的數學水平想的不要太高。

  怎麼辦?先介紹一個不等式,叫Jensen不等式,是這樣說的:

  X是一個隨機變量,f(X)是一個凸函數(二階導數大或等於0),那麼有:

  

 

  當且僅當X是常數的時候等號成立

  如果f(X)是凹函數,不等號反向

  關於這個不等式,我既不打算證明,也不打算說明,希望你承認它正確就好。

  半路殺出一個Jensen不等式,要用它解決上面的困境也是應有之義,不然說它做什麼。直接最大化似然函數做不到,那麼如果我們能找到似然函數的一個的下界一直優化它,並保證每次迭代能夠使總的似然函數一直增大,其實也是一樣的。怎麼說?畫個圖你就明白了:

  

  圖畫的不好,多見諒。橫座標是參數,縱座標是似然函數,首先我們初始化一個θ1,根據它求似然函數一個緊的下界,也就是圖中第一條黑短線,黑短線上的值雖然都小於似然函數的值,但至少有一點可以滿足等號(所以稱爲緊下界),最大化小黑短線我們就hit到至少與似然函數剛好相等的位置,對應的橫座標就是我們的新的θ2,如此進行,只要保證隨着θ的更新,每次最大化的小黑短線值都比上次的更大,那麼算法收斂,最後就能最大化到似然函數的極大值處。

  構造這個小黑短線,就要靠Jensen不等式。注意我們這裏的log函數是個凹函數,所以我們使用的Jensen不等式的凹函數版本。根據Jensen函數,需要把log裏面的東西寫成一個數學期望的形式,注意到log裏的和是關於隱變量Z的和,於是自然而然,這個數學期望一定是和Z有關,如果設Q(z)是Z的分佈函數,那麼可以這樣構造:

  這幾句公式比較多,我不一一敲了,直接把我PPT裏的內容截圖過來:

  

  所以log裏其實構造了一個隨機變量Y,Y是Z的函數,Y取p/Q的值的概率是Q,這點說的很清楚了。

  構造好數學期望,下一步根據Jensen不等式進行放縮:

  

  有了這一步,我們看一下整個式子:

  

  也就是說我們找到了似然函數的一個下界,那麼優化它是否就可以呢?不是的,上面說了必須保證這個下界是緊的,也就是至少有點能使等號成立。由Jensen不等式,等式成立的條件是隨機變量是常數,具體到這裏,就是:

    

  又因爲Q(z)是z的分佈函數,所以:

  把C乘過去,可得C就是p(xi,z)對z求和,所以我們終於知道了:

  

  得到Q(z),大功告成,Q(z)就是p(zi|xi),或者寫成p(zi),都是一回事,代表第i個數據是來自zi的概率。

  於是EM算法出爐,它是這樣做的:

  首先,初始化參數θ

  (1)E-Step:根據參數θ計算每個樣本屬於zi的概率,即這個身高來自四川或東北的概率,這個概率就是Q

  (2)M-Step:根據計算得到的Q,求出含有θ的似然函數的下界並最大化它,得到新的參數θ

  重複(1)和(2)直到收斂,可以看到,從思想上來說,和最開始沒什麼兩樣,只不過直接最大化似然函數不好做,曲線救國而已。

  至於爲什麼這樣的迭代會保證似然函數單調不減,即EM算法的收斂性證明,我就先不寫了,以後有時間再考慮補。需要額外說明的是,EM算法在一般情況是收斂的,但是不保證收斂到全局最優,即有可能進入局部的最優。EM算法在混合高斯模型,隱馬爾科夫模型中都有應用,是著名的數據挖掘十大算法之一。

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