【機器學習】EM算法詳細推導和講解
今天不太想學習,炒個冷飯,講講機器學習十大算法里有名的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算法在混合高斯模型,隱馬爾科夫模型中都有應用,是著名的數據挖掘十大算法之一。
就醬~有什么錯漏和不同見解歡迎留言評論,我的推導和思路整理和網上的其他並不是完全相同,見仁見智吧~