天天看點

EM算法之一 ———— EM算法描述與推論,應用

       我希望自己能通俗地把它了解或者說明白,但是,em這個問題感覺真的不太好用通俗的語言去說明白,因為它很簡單,又很複雜。簡單在于它的思想,簡單在于其僅包含了兩個步驟就能完成強大的功能,複雜在于它的數學推理涉及到比較繁雜的機率公式等。如果隻講簡單的,就丢失了em算法的精髓,如果隻講數學推理,又過于枯燥和生澀,但另一方面,想把兩者結合起來也不是件容易的事。是以,我也沒法期待我能把它講得怎樣。希望各位不吝指導。

一、最大似然

       扯了太多,得入正題了。假設我們遇到的是下面這樣的問題:

       假設我們需要調查我們學校的男生和女生的身高分布。你怎麼做啊?你說那麼多人不可能一個一個去問吧,肯定是抽樣了。假設你在校園裡随便地活捉了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中各個樣本的聯合機率,用下式表示:

EM算法之一 ———— EM算法描述與推論,應用

     這個機率反映了,在機率密度函數的參數是θ時,得到x這組樣本的機率。因為這裡x是已知的,也就是說我抽取到的這100個人的身高可以測出來,也就是已知的了。而θ是未知了,則上面這個公式隻有θ是未知數,是以它是θ的函數。這個函數放映的是在不同的參數θ取值下,取得目前這個樣本集的可能性,是以稱為參數θ相對于樣本集x的似然函數(likehood

function)。記為l(θ)。

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

直接舉個例子:

      某位同學與一位獵人一起外出打獵,一隻野兔從前方竄過。隻聽一聲槍響,野兔應聲到下,如果要你推測,這一發命中的子彈是誰打的?你就會想,隻發一槍便打中,由于獵人命中的機率一般大于這位同學命中的機率,看來這一槍是獵人射中的。

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

      再例如:下課了,一群男女同學分别去廁所了。然後,你閑着無聊,想知道課間是男生上廁所的人多還是女生上廁所的人比較多,然後你就跑去蹲在男廁和女廁的門口。蹲了五分鐘,突然一個美女走出來,你狂喜,跑過來告訴我,課間女生上廁所的人比較多,你要不相信你可以進去數數。呵呵,我才沒那麼蠢跑進去數呢,到時還不得上頭條。我問你是怎麼知道的。你說:“5分鐘了,出來的是女生,女生啊,那麼女生出來的機率肯定是最大的了,或者說比男生要大,那麼女廁所的人肯定比男廁所的人多”。看到了沒,你已經運用最大似然估計了。你通過觀察到女生先出來,那麼什麼情況下,女生會先出來呢?肯定是女生出來的機率最大的時候了,那什麼時候女生出來的機率最大啊,那肯定是女廁所比男廁所多人的時候了,這個就是你估計到的參數了。

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

       回到男生身高那個例子。在學校那麼男生中,我一抽就抽到這100個男生(表示身高),而不是其他人,那是不是表示在整個學校中,這100個人(的身高)出現的機率最大啊。那麼這個機率怎麼表示?哦,就是上面那個似然函數l(θ)。是以,我們就隻需要找到一個參數θ,其對應的似然函數l(θ)最大,也就是說抽到這100個男生(的身高)機率最大。這個叫做θ的最大似然估計量,記為:

EM算法之一 ———— EM算法描述與推論,應用

      有時,可以看到l(θ)是連乘的,是以為了便于分析,還可以定義對數似然函數,将其變成連加的:

EM算法之一 ———— EM算法描述與推論,應用

      好了,現在我們知道了,要求θ,隻需要使θ的似然函數l(θ)極大化,然後極大值對應的θ就是我們的估計。這裡就回到了求最值的問題了。怎麼求一個函數的最值?當然是求導,然後讓導數為0,那麼解這個方程得到的θ就是了(當然,前提是函數l(θ)連續可微)。那如果θ是包含多個參數的向量那怎麼處理啊?當然是求l(θ)對所有參數的偏導數,也就是梯度了,那麼n個未知的參數,就有n個方程,方程組的解就是似然函數的極值點了,當然就得到這n個參數了。

      最大似然估計你可以把它看作是一個反推。多數情況下我們是根據已知條件來推算結果,而最大似然估計是已經知道了結果,然後尋求使該結果出現的可能性最大的條件,以此作為估計值。比如,如果其他條件一定的話,抽煙者發生肺癌的危險時不抽煙者的5倍,那麼如果現在我已經知道有個人是肺癌,我想問你這個人抽煙還是不抽煙。你怎麼判斷?你可能對這個人一無所知,你所知道的隻有一件事,那就是抽煙更容易發生肺癌,那麼你會猜測這個人不抽煙嗎?我相信你更有可能會說,這個人抽煙。為什麼?這就是“最大可能”,我隻能說他“最有可能”是抽煙的,“他是抽煙的”這一估計值才是“最有可能”得到“肺癌”這樣的結果。這就是最大似然估計。

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

      極大似然估計,隻是一種機率論在統計學的應用,它是參數估計的方法之一。說的是已知某個随機樣本滿足某種機率分布,但是其中具體的參數不清楚,參數估計就是通過若幹次試驗,觀察其結果,利用結果推出參數的大概值。最大似然估計是建立在這樣的思想上:已知某個參數能使這個樣本出現的機率最大,我們當然不會再去選擇其他小機率的樣本,是以幹脆就把這個參數作為估計的真實值。

求最大似然函數估計值的一般步驟:

(1)寫出似然函數;

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

(3)求導數,令導數為0,得到似然方程;

(4)解似然方程,得到的參數即為所求;

二、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個樣本的觀測值,也就是對應的這個人的身高,是可以觀測到的值。zi1和zi2表示男生和女生這兩個高斯分布中哪個被用來産生值xi,就是說這兩個值标記這個人到底是男生還是女生(的身高分布産生的)。這兩個值我們是不知道的,是隐含變量。确切的說,zij在xi由第j個高斯分布産生時值為1,否則為0。例如一個樣本的觀測值為1.8,然後他來自男生的那個高斯分布,那麼我們可以将這個樣本表示為{1.8,

1, 0}。如果zi1和zi2的值已知,也就是說每個人我已經标記為男生或者女生了,那麼我們就可以利用上面說的最大似然算法來估計他們各自高斯分布的參數。但是它們未知,是以我們隻能用em算法。

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

       這時候你就不服了,說你老疊代疊代的,你咋知道新的參數的估計就比原來的好啊?為什麼這種方法行得通呢?有沒有失效的時候呢?什麼時候失效呢?用到這個方法需要注意什麼問題呢?呵呵,一下子抛出那麼多問題,搞得我适應不過來了,不過這證明了你有很好的搞研究的潛質啊。呵呵,其實這些問題就是數學家需要解決的問題。在數學上是可以穩當的證明的或者得出結論的。那咱們用數學來把上面的問題重新描述下。(在這裡可以知道,不管多麼複雜或者簡單的實體世界的思想,都需要通過數學工具進行模組化抽象才得以使用并發揮其強大的作用,而且,這裡面蘊含的數學往往能帶給你更多想象不到的東西,這就是數學的精妙所在啊)

三、em算法推導

       假設我們有一個樣本集{x(1),…,x(m)},包含m個獨立的樣本。但每個樣本i對應的類别z(i)是未知的(相當于聚類),也即隐含變量。故我們需要估計機率模型p(x,z)的參數θ,但是由于裡面包含隐含變量z,是以很難用最大似然求解,但如果z知道了,那我們就很容易求解了。

       對于參數估計,我們本質上還是想獲得一個使似然函數最大化的那個參數θ,現在與最大似然不同的隻是似然函數式中多了一個未知的變量z,見下式(1)。也就是說我們的目标是找到适合的θ和z讓l(θ)最大。那我們也許會想,你就是多了一個未知的變量而已啊,我也可以分别對未知的θ和z分别求偏導,再令其等于0,求解出來不也一樣嗎?

EM算法之一 ———— EM算法描述與推論,應用

      本質上我們是需要最大化(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是常量時,上式取等号。

       如果用圖表示會很清晰:

EM算法之一 ———— EM算法描述與推論,應用

       圖中,實線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)式中

EM算法之一 ———— EM算法描述與推論,應用

的期望,(考慮到e(x)=∑x*p(x),f(x)是x的函數,則e(f(x))=∑f(x)*p(x)),又

EM算法之一 ———— EM算法描述與推論,應用

,是以就可以得到公式(3)的不等式了(若不明白,請拿起筆,呵呵):

EM算法之一 ———— EM算法描述與推論,應用

        ok,到這裡,現在式(3)就容易地求導了,但是式(2)和式(3)是不等号啊,式(2)的最大值不是式(3)的最大值啊,而我們想得到式(2)的最大值,那怎麼辦呢?

      現在我們就需要一點想象力了,上面的式(2)和式(3)不等式可以寫成:似然函數l(θ)>=j(z,q),那麼我們可以通過不斷的最大化這個下界j,來使得l(θ)不斷提高,最終達到它的最大值。

EM算法之一 ———— EM算法描述與推論,應用

     見上圖,我們固定θ,調整q(z)使下界j(z,q)上升至與l(θ)在此點θ處相等(綠色曲線到藍色曲線),然後固定q(z),調整θ使下界j(z,q)達到最大值(θt到θt+1),然後再固定θ,調整q(z)……直到收斂到似然函數l(θ)的最大值處的θ*。這裡有兩個問題:什麼時候下界j(z,q)與l(θ)在此點θ處相等?為什麼一定會收斂?

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

EM算法之一 ———— EM算法描述與推論,應用

     再推導下,由于

EM算法之一 ———— EM算法描述與推論,應用

(因為q是随機變量z(i)的機率密度函數),則可以得到:分子的和等于c(分子分母都對所有z(i)求和:多個等式分子分母相加不變,這個認為每個樣例的兩個機率比值都是c),則:

EM算法之一 ———— EM算法描述與推論,應用

      至此,我們推出了在固定參數θ後,使下界拉升的q(z)的計算公式就是後驗機率,解決了q(z)如何選擇的問題。這一步就是e步,建立l(θ)的下界。接下來的m步,就是在給定q(z)後,調整θ,去極大化l(θ)的下界j(在固定q(z)後,下界還可以調整的更大)。那麼一般的em算法的步驟如下:

em算法(expectation-maximization):

     期望最大算法是一種從不完全資料或有資料丢失的資料集(存在隐含變量)中求解機率模型參數的最大似然估計方法。

em的算法流程:

初始化分布參數θ;

重複以下步驟直到收斂:

        e步驟:根據參數初始值或上一次疊代的模型參數來計算出隐性變量的後驗機率,其實就是隐性變量的期望。作為隐藏變量的現估計值:

EM算法之一 ———— EM算法描述與推論,應用

        m步驟:将似然函數最大化以獲得新的參數值:

EM算法之一 ———— EM算法描述與推論,應用

        這個不斷的疊代,就可以得到使似然函數l(θ)最大化的參數θ了。那就得回答剛才的第二個問題了,它會收斂嗎?

感性的說,因為下界不斷提高,是以極大似然估計單調增加,那麼最終我們會到達最大似然估計的最大值。理性分析的話,就會得到下面的東西:

EM算法之一 ———— EM算法描述與推論,應用

具體如何證明的,看推導過程參考:andrew ng《the em algorithm》

<a target="_blank" href="http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html">http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html</a>

四、em算法另一種了解

坐标上升法(coordinate ascent):

EM算法之一 ———— EM算法描述與推論,應用

       圖中的直線式疊代優化的路徑,可以看到每一步都會向最優值前進一步,而且前進路線是平行于坐标軸的,因為每一步隻優化一個變量。

       這猶如在x-y坐标系中找一個曲線的極值,然而曲線函數不能直接求導,是以什麼梯度下降方法就不适用了。但固定一個變量後,另外一個可以通過求導得到,是以可以使用坐标上升法,一次固定一個變量,對另外的求極值,最後逐漸逼近極值。對應到em上,e步:固定θ,優化q;m步:固定q,優化θ;交替将極值推向最大。

五、em的應用

       em算法有很多的應用,最廣泛的就是gmm混合高斯模型、聚類、hmm等等。具體可以參考jerrylead的cnblog中的machine

learning專欄:

繼續閱讀