轉載:EM算法的最精闢講解

機器學習十大算法之一:EM算法。能評得上十大之一,讓人聽起來以爲挺NB的。什麼是NB啊,咱們通常說某我的很NB,是由於他能解決一些別人解決不了的問題。神爲何是神,由於神能作不少人作不了的事。那麼EM算法能解決什麼問題呢?或者說EM算法是由於什麼而來到這個世界上,還吸引了那麼多世人的目光。html

       我但願本身能通俗地把它理解或者說明白,可是,EM這個問題感受真的不太好用通俗的語言去說明白,由於它很簡單,又很複雜。簡單在於它的思想,簡單在於其僅包含了兩個步驟就能完成強大的功能,複雜在於它的數學推理涉及到比較繁雜的機率公式等。若是隻講簡單的,就丟失了EM算法的精髓,若是隻講數學推理,又過於枯燥和生澀,但另外一方面,想把二者結合起來也不是件容易的事。因此,我也無法期待我能把它講得怎樣。但願各位不吝指導。算法

 1、最大似然併發

       扯了太多,得入正題了。假設咱們遇到的是下面這樣的問題:機器學習

       假設咱們須要調查咱們學校的男生和女生的身高分佈。你怎麼作啊?你說那麼多人不可能一個一個去問吧,確定是抽樣了。假設你在校園裏隨便地活捉了100個男生和100個女生。他們共200我的(也就是200個身高的樣本數據,爲了方便表示,下面,我說「人」的意思就是對應的身高)都在教室裏面了。那下一步怎麼辦啊?你開始喊:「男的左邊,女的右邊,其餘的站中間!」。而後你就先統計抽樣獲得的100個男生的身高。假設他們的身高是服從高斯分佈的。可是這個分佈的均值u和方差2咱們不知道,這兩個參數就是咱們要估計的。記θ=[u, ∂]T函數

       用數學的語言來講就是:在學校那麼多男生(身高)中,咱們獨立地按照機率密度p(x|θ)抽取100了個(身高),組成樣本集X,咱們想經過樣本集X來估計出未知參數θ。這裏機率密度p(x|θ)咱們知道了是高斯分佈N(u,)的形式,其中的未知參數是θ=[u, ∂]T。抽到的樣本集是X={x1,x2,…,xN},其中xi表示抽到的第i我的的身高,這裏N就是100,表示抽到的樣本個數。工具

      因爲每一個樣本都是獨立地從p(x|θ)中抽取的,換句話說這100個男生中的任何一個,都是我隨便捉的,從個人角度來看這些男生之間是沒有關係的。那麼,我從學校那麼多男生中爲何就剛好抽到了這100我的呢?抽到這100我的的機率是多少呢?由於這些男生(的身高)是服從同一個高斯分佈p(x|θ)的。那麼我抽到男生A(的身高)的機率是p(xA|θ),抽到男生B的機率是p(xB|θ),那由於他們是獨立的,因此很明顯,我同時抽到男生A和男生B的機率是p(xA|θ)* p(xB|θ),同理,我同時抽到這100個男生的機率就是他們各自機率的乘積了。用數學家的口吻說就是從分佈是p(x|θ)的整體樣本中抽取到這100個樣本的機率,也就是樣本集X中各個樣本的聯合機率,用下式表示:學習

     這個機率反映了,在機率密度函數的參數是θ時,獲得X這組樣本的機率。由於這裏X是已知的,也就是說我抽取到的這100我的的身高能夠測出來,也就是已知的了。而θ是未知了,則上面這個公式只有θ是未知數,因此它是θ的函數。這個函數放映的是在不一樣的參數θ取值下,取得當前這個樣本集的可能性,所以稱爲參數θ相對於樣本集X的似然函數(likehood function)。記爲L(θ)優化

      這裏出現了一個概念,似然函數。還記得咱們的目標嗎?咱們須要在已經抽到這一組樣本X的條件下,估計參數θ的值。怎麼估計呢?似然函數有啥用呢?那我們先來了解下似然的概念。spa

直接舉個例子:htm

      某位同窗與一位獵人一塊兒外出打獵,一隻野兔從前方竄過。只聽一聲槍響,野兔應聲到下,若是要你推測,這一發命中的子彈是誰打的?你就會想,只發一槍便打中,因爲獵人命中的機率通常大於這位同窗命中的機率,看來這一槍是獵人射中的。

      這個例子所做的推斷就體現了極大似然法的基本思想。

      再例如:下課了,一羣男女同窗分別去廁所了。而後,你閒着無聊,想知道課間是男生上廁所的人多仍是女生上廁所的人比較多,而後你就跑去蹲在男廁和女廁的門口。蹲了五分鐘,忽然一個美女走出來,你狂喜,跑過來告訴我,課間女生上廁所的人比較多,你要不相信你能夠進去數數。呵呵,我纔沒那麼蠢跑進去數呢,到時還不得上頭條。我問你是怎麼知道的。你說:「5分鐘了,出來的是女生,女生啊,那麼女生出來的機率確定是最大的了,或者說比男生要大,那麼女廁所的人確定比男廁所的人多」。看到了沒,你已經運用最大似然估計了。你經過觀察到女生先出來,那麼什麼狀況下,女生會先出來呢?確定是女生出來的機率最大的時候了,那何時女生出來的機率最大啊,那確定是女廁所比男廁所多人的時候了,這個就是你估計到的參數了。

      從上面這兩個例子,你獲得了什麼結論?

       回到男生身高那個例子。在學校那麼男生中,我一抽就抽到這100個男生(表示身高),而不是其餘人,那是否是表示在整個學校中,這100我的(的身高)出現的機率最大啊。那麼這個機率怎麼表示?哦,就是上面那個似然函數L(θ)。因此,咱們就只須要找到一個參數θ,其對應的似然函數L(θ)最大,也就是說抽到這100個男生(的身高)機率最大。這個叫作θ的最大似然估計量,記爲:

有時,能夠看到L(θ)是連乘的,因此爲了便於分析,還能夠定義對數似然函數,將其變成連加的:

      好了,如今咱們知道了,要求θ,只須要使θ的似然函數L(θ)極大化,而後極大值對應的θ就是咱們的估計。這裏就回到了求最值的問題了。怎麼求一個函數的最值?固然是求導,而後讓導數爲0,那麼解這個方程獲得的θ就是了(固然,前提是函數L(θ)連續可微)。那若是θ是包含多個參數的向量那怎麼處理啊?固然是求L(θ)對全部參數的偏導數,也就是梯度了,那麼n個未知的參數,就有n個方程,方程組的解就是似然函數的極值點了,固然就獲得這n個參數了。

      最大似然估計你能夠把它看做是一個反推。多數狀況下咱們是根據已知條件來推算結果,而最大似然估計是已經知道告終果,而後尋求使該結果出現的可能性最大的條件,以此做爲估計值。好比,若是其餘條件必定的話,抽菸者發生肺癌的危險時不抽菸者的5倍,那麼若是如今我已經知道有我的是肺癌,我想問你這我的抽菸仍是不抽菸。你怎麼判斷?你可能對這我的一無所知,你所知道的只有一件事,那就是抽菸更容易發生肺癌,那麼你會猜想這我的不抽菸嗎?我相信你更有可能會說,這我的抽菸。爲何?這就是「最大可能」,我只能說他「最有可能」是抽菸的,「他是抽菸的」這一估計值纔是「最有可能」獲得「肺癌」這樣的結果。這就是最大似然估計。

      好了,極大似然估計就講到這,總結一下:

      極大似然估計,只是一種機率論在統計學的應用,它是參數估計的方法之一。說的是已知某個隨機樣本知足某種機率分佈,可是其中具體的參數不清楚,參數估計就是經過若干次試驗,觀察其結果,利用結果推出參數的大概值。最大似然估計是創建在這樣的思想上:已知某個參數能使這個樣本出現的機率最大,咱們固然不會再去選擇其餘小几率的樣本,因此乾脆就把這個參數做爲估計的真實值。

求最大似然函數估計值的通常步驟:

1)寫出似然函數;

2)對似然函數取對數,並整理;

3)求導數,令導數爲0,獲得似然方程;

4)解似然方程,獲得的參數即爲所求;

 

2、EM算法

       好了,從新回到上面那個身高分佈估計的問題。如今,經過抽取獲得的那100個男生的身高和已知的其身高服從高斯分佈,咱們經過最大化其似然函數,就能夠獲得了對應高斯分佈的參數θ=[u, ∂]T了。那麼,對於咱們學校的女生的身高分佈也能夠用一樣的方法獲得了。

       再回到例子自己,若是沒有「男的左邊,女的右邊,其餘的站中間!」這個步驟,或者說我抽到這200我的中,某些男生和某些女生一見傾心,已經好上了,糾纏起來了。我們也不想那麼殘忍,硬把他們拉扯開。那如今這200我的已經混到一塊兒了,這時候,你從這200我的(的身高)裏面隨便給我指一我的(的身高),我都沒法肯定這我的(的身高)是男生(的身高)仍是女生(的身高)。也就是說你不知道抽取的那200我的裏面的每個人究竟是從男生的那個身高分佈裏面抽取的,仍是女生的那個身高分佈抽取的。用數學的語言就是,抽取獲得的每一個樣本都不知道是從哪一個分佈抽取的。

        這個時候,對於每個樣本或者你抽取到的人,就有兩個東西須要猜想或者估計的了,一是這我的是男的仍是女的?二是男生和女生對應的身高的高斯分佈的參數是多少?

       只有當咱們知道了哪些人屬於同一個高斯分佈的時候,咱們纔可以對這個分佈的參數做出靠譜的預測,例如剛開始的最大似然所說的,但如今兩種高斯分佈的人混在一塊了,咱們又不知道哪些人屬於第一個高斯分佈,哪些屬於第二個,因此就無法估計這兩個分佈的參數。反過來,只有當咱們對這兩個分佈的參數做出了準確的估計的時候,才能知道到底哪些人屬於第一個分佈,那些人屬於第二個分佈。

       這就成了一個先有雞仍是先有蛋的問題了。雞說,沒有我,誰把你生出來的啊。蛋不服,說,沒有我,你從哪蹦出來啊。(呵呵,這是一個哲學問題。固然了,後來科學家說先有蛋,由於雞蛋是鳥蛋進化的)。爲了解決這個你依賴我,我依賴你的循環依賴問題,總得有一方要先打破僵局,說,無論了,我先隨便整一個值出來,看你怎麼變,而後我再根據你的變化調整個人變化,而後如此迭代着不斷互相推導,最終就會收斂到一個解。這就是EM算法的基本思想了。

       不知道你們可否理解其中的思想,我再來囉嗦一下。其實這個思想無處在不啊。

       例如,小時候,老媽給一大袋糖果給你,叫你和你姐姐等分,而後你懶得去點糖果的個數,因此你也就不知道每一個人到底該分多少個。我們通常怎麼作呢?先把一袋糖果目測的分爲兩袋,而後把兩袋糖果拿在左右手,看哪一個重,若是右手重,那很明顯右手這代糖果多了,而後你再在右手這袋糖果中抓一把放到左手這袋,而後再感覺下哪一個重,而後再從重的那袋抓一小把放進輕的那一袋,繼續下去,直到你感受兩袋糖果差很少相等了爲止。呵呵,而後爲了體現公平,你還讓你姐姐先選了。

       EM算法就是這樣,假設咱們想估計知道A和B兩個參數,在開始狀態下兩者都是未知的,但若是知道了A的信息就能夠獲得B的信息,反過來知道了B也就獲得了A。能夠考慮首先賦予A某種初值,以此獲得B的估計值,而後從B的當前值出發,從新估計A的取值,這個過程一直持續到收斂爲止。

         EM的意思是「Expectation Maximization」,在咱們上面這個問題裏面,咱們是先隨便猜一下男生(身高)的正態分佈的參數:如均值和方差是多少。例如男生的均值是1米7,方差是0.1米(固然了,剛開始確定沒那麼準),而後計算出每一個人更可能屬於第一個仍是第二個正態分佈中的(例如,這我的的身高是1米8,那很明顯,他最大可能屬於男生的那個分佈),這個是屬於Expectation一步。有了每一個人的歸屬,或者說咱們已經大概地按上面的方法將這200我的分爲男生和女生兩部分,咱們就能夠根據以前說的最大似然那樣,經過這些被大概分爲男生的n我的來從新估計第一個分佈的參數,女生的那個分佈一樣方法從新估計。這個是Maximization。而後,當咱們更新了這兩個分佈的時候,每個屬於這兩個分佈的機率又變了,那麼咱們就再須要調整E步……如此往復,直到參數基本再也不發生變化爲止。

      這裏把每一個人(樣本)的完整描述看作是三元組yi={xi,zi1,zi2},其中,xi是第i個樣本的觀測值,也就是對應的這我的的身高,是能夠觀測到的值。zi1zi2表示男生和女生這兩個高斯分佈中哪一個被用來產生值xi,就是說這兩個值標記這我的究竟是男生仍是女生(的身高分佈產生的)。這兩個值咱們是不知道的,是隱含變量。確切的說,zijxi由第j個高斯分佈產生時值爲1,不然爲0 。例如一個樣本的觀測值爲1.8,而後他來自男生的那個高斯分佈,那麼咱們能夠將這個樣本表示爲{1.8, 1, 0}。若是zi1zi2的值已知,也就是說每一個人我已經標記爲男生或者女生了,那麼咱們就能夠利用上面說的最大似然算法來估計他們各自高斯分佈的參數。可是它們未知,所以咱們只能用EM算法。

       我們如今不是由於那個噁心的隱含變量(抽取獲得的每一個樣本都不知道是從哪一個分佈抽取的)使得原本簡單的能夠求解的問題變複雜了,求解不了嗎。那怎麼辦呢?人類解決問題的思路都是想可否把複雜的問題簡單化。好,那麼如今把這個複雜的問題逆回來,我假設已經知道這個隱含變量了,哎,那麼求解那個分佈的參數是否是很容易了,直接按上面說的最大似然估計就行了。那你就問我了,這個隱含變量是未知的,你怎麼就來一個假設說已知呢?你這種假設是沒有根據的。呵呵,我知道,因此咱們能夠先給這個給分佈弄一個初始值,而後求這個隱含變量的指望,當成是這個隱含變量的已知值,那麼如今就能夠用最大似然求解那個分佈的參數了吧,那假設這個參數比以前的那個隨機的參數要好,它更能表達真實的分佈,那麼咱們再經過這個參數肯定的分佈去求這個隱含變量的指望,而後再最大化,獲得另外一個更優的參數,……迭代,就能獲得一個皆大歡喜的結果了。

       這時候你就不服了,說你老迭代迭代的,你咋知道新的參數的估計就比原來的好啊?爲何這種方法行得通呢?有沒有失效的時候呢?何時失效呢?用到這個方法須要注意什麼問題呢?呵呵,一會兒拋出那麼多問題,搞得我適應不過來了,不過這證實了你有很好的搞研究的潛質啊。呵呵,其實這些問題就是數學家須要解決的問題。在數學上是能夠妥當的證實的或者得出結論的。那我們用數學來把上面的問題從新描述下。(在這裏能夠知道,無論多麼複雜或者簡單的物理世界的思想,都須要經過數學工具進行建模抽象才得以使用併發揮其強大的做用,並且,這裏面蘊含的數學每每能帶給你更多想象不到的東西,這就是數學的精妙所在啊)

 

3、EM算法推導

       假設咱們有一個樣本集{x(1),…,x(m)},包含m個獨立的樣本。但每一個樣本i對應的類別z(i)是未知的(至關於聚類),也即隱含變量。故咱們須要估計機率模型p(x,z)的參數θ,可是因爲裏面包含隱含變量z,因此很難用最大似然求解,但若是z知道了,那咱們就很容易求解了。

       對於參數估計,咱們本質上仍是想得到一個使似然函數最大化的那個參數θ,如今與最大似然不一樣的只是似然函數式中多了一個未知的變量z,見下式(1)。也就是說咱們的目標是找到適合的θzL(θ)最大。那咱們也許會想,你就是多了一個未知的變量而已啊,我也能夠分別對未知的θz分別求偏導,再令其等於0,求解出來不也同樣嗎?

      本質上咱們是須要最大化(1)式(對(1)式,咱們回憶下聯合機率密度下某個變量的邊緣機率密度函數的求解,注意這裏z也是隨機變量。對每個樣本i的全部可能類別z求等式右邊的聯合機率密度函數和,也就獲得等式左邊爲隨機變量x的邊緣機率密度),也就是似然函數,可是能夠看到裏面有「和的對數」,求導後形式會很是複雜(本身能夠想象下log(f1(x)+ f2(x)+ f3(x)+…)複合函數的求導),因此很難求解獲得未知參數z和θ。那OK,咱們能否對(1)式作一些改變呢?咱們看2)式,(2)式只是分子分母同乘以一個相等的函數,仍是有「和的對數」啊,仍是求解不了,那爲何要這麼作呢?我們先無論,看(3)式,發現(3)式變成了「對數的和」,那這樣求導就容易了。咱們注意點,還發現等號變成了不等號,爲何能這麼變呢?這就是Jensen不等式的大顯神威的地方。

Jensen不等式:

      設f是定義域爲實數的函數,若是對於全部的實數x。若是對於全部的實數x,f(x)的二次導數大於等於0,那麼f是凸函數。當x是向量時,若是其hessian矩陣H是半正定的,那麼f是凸函數。若是隻大於0,不等於0,那麼稱f是嚴格凸函數。

Jensen不等式表述以下:

若是f是凸函數,X是隨機變量,那麼:E[f(X)]>=f(E[X])

特別地,若是f是嚴格凸函數,當且僅當X是常量時,上式取等號。

若是用圖表示會很清晰:

 

       圖中,實線f是凸函數,X是隨機變量,有0.5的機率是a,有0.5的機率是b。(就像擲硬幣同樣)。X的指望值就是a和b的中值了,圖中能夠看到E[f(X)]>=f(E[X])成立。

       當f是(嚴格)凹函數當且僅當-f是(嚴格)凸函數。

        Jensen不等式應用於凹函數時,不等號方向反向。

 

       回到公式(2),由於f(x)=log x 爲凹函數(其二次導數爲-1/x2<0)。

2)式中的指望,(考慮到E(X)=∑x*p(x),f(X)是X的函數,則E(f(X))=∑f(x)*p(x)),又,因此就能夠獲得公式(3)的不等式了(若不明白,請拿起筆,呵呵):

        OK,到這裏,如今式(3)就容易地求導了,可是式(2)和式(3)是不等號啊,式(2)的最大值不是式(3)的最大值啊,而咱們想獲得式(2)的最大值,那怎麼辦呢?

      如今咱們就須要一點想象力了,上面的式(2)和式(3)不等式能夠寫成:似然函數L(θ)>=J(z,Q),那麼咱們能夠經過不斷的最大化這個下界J,來使得L(θ)不斷提升,最終達到它的最大值。

     見上圖,咱們固定θ,調整Q(z)使下界J(z,Q)上升至與L(θ)在此點θ處相等(綠色曲線到藍色曲線),而後固定Q(z),調整θ使下界J(z,Q)達到最大值(θtθt+1),而後再固定θ,調整Q(z)……直到收斂到似然函數L(θ)的最大值處的θ*。這裏有兩個問題:何時下界J(z,Q)L(θ)在此點θ處相等?爲何必定會收斂?

     首先第一個問題,在Jensen不等式中說到,當自變量X是常數的時候,等式成立。而在這裏,即:

     再推導下,因爲(由於Q是隨機變量z(i)的機率密度函數),則能夠獲得:分子的和等於c(分子分母都對全部z(i)求和:多個等式分子分母相加不變,這個認爲每一個樣例的兩個機率比值都是c),則:

      至此,咱們推出了在固定參數θ後,使下界拉昇的Q(z)的計算公式就是後驗機率,解決了Q(z)如何選擇的問題。這一步就是E步,創建L(θ)的下界。接下來的M步,就是在給定Q(z)後,調整θ,去極大化L(θ)的下界J(在固定Q(z)後,下界還能夠調整的更大)。那麼通常的EM算法的步驟以下:

EM算法(Expectation-maximization):

     指望最大算法是一種從不徹底數據或有數據丟失的數據集(存在隱含變量)中求解機率模型參數的最大似然估計方法。

EM的算法流程:

初始化分佈參數θ;

重複如下步驟直到收斂

        E步驟:根據參數初始值或上一次迭代的模型參數來計算出隱性變量的後驗機率,其實就是隱性變量的指望。做爲隱藏變量的現估計值:
       

        M步驟:將似然函數最大化以得到新的參數值:

          

        這個不斷的迭代,就能夠獲得使似然函數L(θ)最大化的參數θ了。那就得回答剛纔的第二個問題了,它會收斂嗎?

感性的說,由於下界不斷提升,因此極大似然估計單調增長,那麼最終咱們會到達最大似然估計的最大值。理性分析的話,就會獲得下面的東西:

具體如何證實的,看推導過程參考:Andrew Ng 《The EM algorithm》

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html

 

4、EM算法另外一種理解

座標上升法(Coordinate ascent):

       圖中的直線式迭代優化的路徑,能夠看到每一步都會向最優值前進一步,並且前進路線是平行於座標軸的,由於每一步只優化一個變量。

       這猶如在x-y座標系中找一個曲線的極值,然而曲線函數不能直接求導,所以什麼梯度降低方法就不適用了。但固定一個變量後,另一個能夠經過求導獲得,所以可使用座標上升法,一次固定一個變量,對另外的求極值,最後逐步逼近極值。對應到EM上,E步:固定θ,優化Q;M步:固定Q,優化θ;交替將極值推向最大。

 

5、EM的應用

       EM算法有不少的應用,最普遍的就是GMM混合高斯模型、聚類、HMM等等。具體能夠參考JerryLead的cnblog中的Machine Learning專欄:

EM算法)The EM Algorithm

混合高斯模型(Mixtures of Gaussians)和EM算法

K-means聚類算法

相關文章
相關標籤/搜索