本文首發(fā)于CSDN巴元,https://blog.csdn.net/weixin_43661031/article/details/91358990论矾, 請(qǐng)勿轉(zhuǎn)載。
最近在做文本挖掘的時(shí)候遇到了EM算法沛简,雖然讀書(shū)的時(shí)候簡(jiǎn)單地接觸過(guò)硼身,但當(dāng)時(shí)并沒(méi)有深入地去了解,導(dǎo)致現(xiàn)在只記得算法的名字覆享。既然EM算法被列為數(shù)據(jù)挖掘的十大算法之一佳遂,正好借這個(gè)機(jī)會(huì),重新學(xué)習(xí)一下這個(gè)經(jīng)典的算法撒顿。學(xué)習(xí)的過(guò)程中丑罪,我發(fā)現(xiàn)網(wǎng)上的資料大多講解地不夠細(xì)致,很多地方解釋得并不明了。因此我決定拋開(kāi)別人的想法吩屹,僅從數(shù)學(xué)推導(dǎo)本身出發(fā)跪另,盡力理解每一個(gè)公式的含義,并將其對(duì)應(yīng)到實(shí)際的實(shí)驗(yàn)過(guò)程當(dāng)中煤搜。這篇博客記錄了我對(duì)與EM算法的思考與理解免绿,也是我人生中的第一篇博客,希望能夠?qū)τ谙胍獙W(xué)習(xí)EM算法的同學(xué)有所幫助擦盾。
極大似然估計(jì)與隱變量
前面談到我在做文本挖掘的時(shí)候遇到了EM算法嘲驾,EM算法用于估計(jì)模型中的參數(shù)。提到參數(shù)估計(jì)迹卢,最常見(jiàn)的方法莫過(guò)于極大似然估計(jì)——在所有的候選參數(shù)中辽故,我們選擇的參數(shù)應(yīng)該讓樣本出現(xiàn)的概率最大。相信看到這篇筆記的同學(xué)一定對(duì)極大似然估計(jì)非常熟悉腐碱,而EM算法可以看作是極大似然估計(jì)的一個(gè)擴(kuò)充誊垢,這里就讓我們用極大似然估計(jì)來(lái)解決一個(gè)簡(jiǎn)單的例子,來(lái)開(kāi)始正式的討論症见。
拋硬幣1.
有A喂走,B,C三枚硬幣谋作,我們想要估計(jì)A缴啡,B,C三枚硬幣拋出正面的概率,
,
瓷们。我們按如下流程進(jìn)行實(shí)驗(yàn)100次:
隨機(jī)拋一次硬幣A
若硬幣A拋出正面,則拋10次硬幣B
若硬幣A拋出反面秒咐,則拋10次硬幣C
記錄100次實(shí)驗(yàn)的結(jié)果如下:
硬幣A | 硬幣B/C拋出正面的次數(shù) | |
---|---|---|
1 | 1 | 5 |
2 | 0 | 8 |
3 | 1 | 4 |
... | ... | ... |
100 | 0 | 7 |
我們將上面的實(shí)驗(yàn)結(jié)果表述如下:
表示第i次實(shí)驗(yàn)中谬晕,硬幣A的結(jié)果,1代表正面携取,0代表反面攒钳;
表示第i次實(shí)驗(yàn)中,硬幣B或硬幣C拋出正面的個(gè)數(shù)雷滋,則參數(shù)
的極大似然估計(jì)分別為:
即硬幣A不撑,B,C各自拋出正面的次數(shù)占總次數(shù)的比例晤斩,其中為指示函數(shù)焕檬。
拋硬幣2.
實(shí)驗(yàn)流程與1相同,但是我們不慎遺失了硬幣A的記錄結(jié)果澳泵,導(dǎo)致我們只知道隨后十次拋出了多少次正面实愚,多少次反面,卻不知道實(shí)驗(yàn)結(jié)果來(lái)自于硬幣B還是硬幣C。在這種情況下腊敲,我們是否還能估計(jì)出,
,
的值呢击喂?
硬幣A | 硬幣B/C拋出正面的次數(shù) | |
---|---|---|
1 | ? | 5 |
2 | 碰辅? | 8 |
3 | 懂昂? | 4 |
... | ... | ... |
100 | ? | 7 |
這時(shí)候利用極大似然估計(jì)似乎行不通了没宾, 因?yàn)檫@種情況下凌彬,我們不但缺失了硬幣A產(chǎn)生的觀測(cè)值,同時(shí)也不知道哪些觀測(cè)值屬于硬幣B榕吼,哪些觀測(cè)值屬于硬幣C饿序。
有些同學(xué)可能會(huì)提出,雖然我們無(wú)法得到三個(gè)硬幣各自產(chǎn)生的樣本羹蚣,但是我們依然可以得到每個(gè)觀測(cè)值出現(xiàn)的概率原探。比如在第一次實(shí)驗(yàn)中, 我們拋出了5次正面5次反面顽素,我們可以做如下思考:
??假設(shè)這5次正面由硬幣B得到咽弦,那么概率應(yīng)該為 ,而這次觀測(cè)值來(lái)自于硬幣B,也就是硬幣A拋出正面的概率為
??假設(shè)這5次正面由硬幣C得到,那么概率應(yīng)該為 泽本,而這次觀測(cè)值來(lái)自于硬幣C悼枢,也就是硬幣A拋出反面的概率為
??綜合起來(lái),利用條件概率公式艺玲,這個(gè)觀測(cè)值出現(xiàn)的概率就是
因此我們可以將樣本整體的概率和似然函數(shù)利用,
,
表示出來(lái),通過(guò)對(duì)似然函數(shù)求導(dǎo),令其關(guān)于
的偏導(dǎo)數(shù)等于0绷落,我們可以求出三個(gè)參數(shù)的值。
這個(gè)思路聽(tīng)上去十分合理始苇,我們可以順著這個(gè)思路進(jìn)行數(shù)學(xué)推導(dǎo)砌烁,看看可以得到什么樣的結(jié)果。首先我們計(jì)算樣本的概率:
對(duì)應(yīng)的似然函數(shù)為
其中關(guān)于
的條件分布為
的分布為
因此我們可以得到
至此催式,我們成功地得到了似然函數(shù)函喉。然而觀察可以發(fā)現(xiàn),這個(gè)函數(shù)是由100項(xiàng)對(duì)數(shù)函數(shù)相加組成荣月,每個(gè)對(duì)數(shù)函數(shù)內(nèi)部包含一個(gè)求和管呵,想通過(guò)求導(dǎo)并解出導(dǎo)數(shù)的零點(diǎn)幾乎是不可能的。當(dāng)然我們可以通過(guò)梯度下降來(lái)極小化這個(gè)函數(shù)哺窄,借助深度學(xué)習(xí)庫(kù)的自動(dòng)微分系統(tǒng)在實(shí)現(xiàn)上也非常容易撇寞。但是這種做法過(guò)于簡(jiǎn)單粗暴顿天,有沒(méi)有辦法來(lái)優(yōu)雅地解決這個(gè)問(wèn)題呢?在繼續(xù)討論之前蔑担,我們先將這類問(wèn)題進(jìn)行一般化表述:
我們觀測(cè)到隨機(jī)變量產(chǎn)生的m個(gè)相互獨(dú)立的樣本
,
的分布由聯(lián)合分布
決定牌废,
是缺失數(shù)據(jù)或無(wú)法在實(shí)驗(yàn)中被直接觀測(cè)到,稱為隱變量啤握,我們想要從樣本中估計(jì)出模型參數(shù)
的值鸟缕。在接下來(lái)的討論中,我們假定
的取值是離散的排抬,于是可以得到似然函數(shù)如下:
接下來(lái)懂从,我們就探討一下,如何利用EM算法解決這個(gè)問(wèn)題蹲蒲。
EM算法的數(shù)學(xué)原理
這一部分的數(shù)學(xué)推導(dǎo)番甩,主要參考了吳恩達(dá)CS229n的筆記,并且根據(jù)個(gè)人的思考和理解届搁,盡力對(duì)公式的每一步進(jìn)行詳細(xì)的解釋缘薛。我們先簡(jiǎn)單地介紹一下琴生不等式。
琴生不等式
琴生不等式有多種形式卡睦,下面給出其離散形式的表述和概率論中的表述:
1.若為嚴(yán)格凹函數(shù)宴胧,
為定義域內(nèi)的n個(gè)點(diǎn),
是n個(gè)正實(shí)數(shù)表锻,且滿足
, 則下述不等式成立:
當(dāng)且僅當(dāng)時(shí)恕齐,不等式取等號(hào)。
2.若為嚴(yán)格凹函數(shù)瞬逊,
為實(shí)值隨機(jī)變量显歧,且期望存在,則下述不等式成立:
當(dāng)且僅當(dāng)确镊,即
為常數(shù)時(shí)士骤,不等式取等號(hào)。
注: 這里將函數(shù)上方為凹集的函數(shù)稱為凹函數(shù)骚腥, 例如函數(shù)就是凹函數(shù)。
相信大家對(duì)琴生不等式都十分熟悉瓶逃,因此這里就不做過(guò)多的說(shuō)明束铭。接下來(lái),我們將琴生不等式應(yīng)用到我們的問(wèn)題中厢绝。
EM算法的數(shù)學(xué)基礎(chǔ)
回到我們之前的問(wèn)題上契沫, 我們想要極大化下面這個(gè)函數(shù):
但是我們無(wú)法對(duì)這個(gè)函數(shù)直接求導(dǎo),因此我們借助琴生不等式昔汉,對(duì)這個(gè)函數(shù)進(jìn)行變換懈万。為了讓過(guò)程看上去簡(jiǎn)潔,下面只對(duì)求和中的第項(xiàng)進(jìn)行計(jì)算。
令滿足
会通,且
口予,則根據(jù)琴生不等式,可以得到:
當(dāng)且僅當(dāng)為常數(shù)時(shí)涕侈,上述不等式取等號(hào)沪停。也就是說(shuō),對(duì)于任意
裳涛,
是一個(gè)與
無(wú)關(guān)的量木张。設(shè)對(duì)于任意
,我們可以得到:
因此當(dāng)時(shí)端三,不等式
取等號(hào)舷礼,容易驗(yàn)證此時(shí)
, 與
無(wú)關(guān)。將
綜合一下郊闯,我們可以得到以下結(jié)論:
到這里為止妻献,我們已經(jīng)擁有了推導(dǎo)出EM算法的全部數(shù)學(xué)基礎(chǔ),基于我們可以構(gòu)建出E步和M步虚婿。上面的數(shù)學(xué)推導(dǎo)雖然看上去略為復(fù)雜旋奢,但實(shí)際上只用到了三個(gè)知識(shí)點(diǎn):
??1.琴生不等式:
??2.條件概率:
??3.聯(lián)合分布求和等于邊緣分布:
對(duì)上面的數(shù)學(xué)推導(dǎo)有疑問(wèn)的同學(xué),可以結(jié)合上面這三點(diǎn)然痊,再將整個(gè)推導(dǎo)過(guò)程耐心地看一遍至朗。
函數(shù)
大部分關(guān)于EM算法的資料,只是在數(shù)學(xué)形式上引入了函數(shù)剧浸,即
锹引,以滿足琴生不等式的使用條件,卻沒(méi)有過(guò)多地解釋
函數(shù)本身唆香。這導(dǎo)致了很多人完全看懂了算法的推導(dǎo)嫌变,卻還是不理解這些數(shù)學(xué)公式究竟在做什么,甚至不明白EM算法為什么叫做EM算法躬它。所以在給出E步和M步之前腾啥,我想先談一談
函數(shù)。
我們回顧一下函數(shù)所滿足的條件(暫時(shí)不考慮琴生不等式取等號(hào)的限制)冯吓,
在
所有可能的取值處有定義倘待。可以看出组贺,
是
的樣本空間上任意的一個(gè)概率分布凸舵。因此,我們可以對(duì)不等式
進(jìn)行改寫(xiě)失尖。首先我們可以將含有
的求和寫(xiě)成期望的形式:
這里指的是在概率分布
下啊奄,求隨機(jī)變量
和
的期望渐苏。有同學(xué)會(huì)問(wèn),為什么我們平時(shí)求期望的時(shí)候只要寫(xiě)
菇夸,并沒(méi)有指明是在哪個(gè)概率分布下的期望琼富。這是因?yàn)橐话闱闆r下,我們都清楚地知道隨機(jī)變量
所服從的分布
峻仇,并且默認(rèn)在分布
下求期望公黑。
舉個(gè)例子,我手上有一個(gè)硬幣摄咆,拋了10次凡蚜,問(wèn)拋出正面次數(shù)的期望。這種情況下吭从,大部分人會(huì)默認(rèn)硬幣是均勻的朝蜘,也就是說(shuō)拋出正面的次數(shù)服從二項(xiàng)分布
,期望
涩金。這時(shí)有人提出了質(zhì)疑谱醇,他說(shuō)我認(rèn)為你這個(gè)硬幣有問(wèn)題,拋出正面的概率只有0.3步做,那么在他眼里副渴, 期望
。
回到正題全度,我們利用等式改寫(xiě)不等式
煮剧,可以得到:
這正是琴生不等式在概率論中的形式。我們可以將不等式倒過(guò)來(lái)理解:
??首先将鸵,假定隨機(jī)變量服從概率分布
勉盅,
是
的樣本空間上的任意一個(gè)概率分布。這里
可以是一組定值顶掉,也可以是關(guān)于參數(shù)
的函數(shù)草娜。
??顯然,當(dāng)我們?nèi)〔煌?img class="math-inline" src="https://math.jianshu.com/math?formula=Q%5Ei" alt="Q^i" mathimg="1">時(shí)痒筒,隨機(jī)變量的期望也會(huì)隨之改變宰闰。需要注意的是,由于
與
相關(guān)簿透,所以這里的期望不是一個(gè)數(shù)值移袍,而是關(guān)于
的函數(shù)。
??當(dāng)我們令為
的后驗(yàn)分布
時(shí)萎战,上面的期望最大咐容。這里有兩點(diǎn)需要注意舆逃,1. 后驗(yàn)分布
也是一個(gè)關(guān)于參數(shù)
的函數(shù)蚂维。2. 由于期望是關(guān)于
的函數(shù)戳粒,所以這里的最大指的并非是最大值,而是最大的函數(shù)虫啥。
??若對(duì)于每一個(gè)蔚约,我們都令
為
的后驗(yàn)分布
,則上述期望之和等于我們要極大化的似然函數(shù)涂籽,即
通過(guò)上述分析苹祟,我們?yōu)閷ふ宜迫缓瘮?shù)的極大值點(diǎn)提供了一個(gè)思路。我們不去極大化似然函數(shù)本身评雌,而是去極大化
树枫。至于如何將這個(gè)思路實(shí)際應(yīng)用,就要利用到EM算法中的E-step和M-step景东。
E-step和M-step
這一節(jié)中砂轻,我們先給出E-step和M-step的數(shù)學(xué)形式,隨后在結(jié)合拋硬幣的例子來(lái)解釋這兩步究竟在做什么斤吐。下面進(jìn)入算法的流程搔涝,首先我們?nèi)我獬跏蓟?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Ctheta_0" alt="\theta_0" mathimg="1">,按下述過(guò)程進(jìn)行迭代直至收斂:
在第次迭代中和措,
(E-step)對(duì)于每個(gè)庄呈,令
(M-step)更新的估計(jì)值,令
EM算法從任意一點(diǎn)出發(fā)派阱,依次利用E-step優(yōu)化
诬留,M-step優(yōu)化
,重復(fù)上述過(guò)程從而逐漸逼近極大值點(diǎn)颁褂。而這個(gè)過(guò)程究竟是怎樣的呢故响,就讓我們一步步地揭開(kāi)EM算法的面紗。
假設(shè)我們現(xiàn)在隨機(jī)初始化了颁独,進(jìn)入第一輪迭代:
(E-step)
由于我們已經(jīng)假定模型參數(shù)為彩届,所以此時(shí)
不再是與
有關(guān)的函數(shù),而是由一組常數(shù)構(gòu)成的概率分布誓酒。結(jié)合拋硬幣的例子來(lái)看樟蠕,這一步是在我們已知模型參數(shù)
的基礎(chǔ)上(雖然這是我們瞎猜的),去推測(cè)每一次的觀測(cè)值是由哪個(gè)硬幣產(chǎn)生的靠柑,或者說(shuō)我們對(duì)每一次觀測(cè)值做一個(gè)軟分類寨辩。比如我們根據(jù)初始化的參數(shù),計(jì)算出
歼冰,
靡狞。可以解釋為第
個(gè)觀測(cè)值有20%的概率來(lái)自于硬幣B隔嫡,80%的概率來(lái)自于硬幣C甸怕;或者說(shuō)硬幣A拋出了0.2個(gè)正面甘穿,0.8個(gè)反面。
(M-step)
考慮到是一組常數(shù)梢杭,我們可以舍棄常數(shù)項(xiàng)温兼,進(jìn)一步簡(jiǎn)化上面這個(gè)要極大化的函數(shù)
由于不再與
相關(guān),因此上面的函數(shù)變成了對(duì)數(shù)函數(shù)求和的形式武契,這個(gè)函數(shù)通常來(lái)說(shuō)是容易求導(dǎo)的募判,令導(dǎo)數(shù)等于0,我們可以求出新的參數(shù)
咒唆。我們?nèi)耘f以拋硬幣為例進(jìn)行解釋届垫,
令, 可以得到,
這三個(gè)參數(shù)的解釋是顯而易見(jiàn)的全释。我們?cè)贓-step中對(duì)每個(gè)觀測(cè)值進(jìn)行了軟分類敦腔,可以看成是硬幣A拋出正面的次數(shù),所以
是
的極大似然估計(jì)恨溜;
是我們拋硬幣B的次數(shù)符衔,
是硬幣B拋出正面的次數(shù),所以
是
的極大似然估計(jì)糟袁;對(duì)于
我們有相同的解釋判族。
我們將這個(gè)結(jié)果與拋硬幣1中極大似然估計(jì)的結(jié)果相比較可以發(fā)現(xiàn),之前結(jié)果中的指示函數(shù)變成了這里的
项戴,在指示函數(shù)下形帮,某個(gè)觀測(cè)值要么來(lái)自于硬幣B,要么來(lái)自于硬幣C周叮,因此也稱為硬分類辩撑。而在
函數(shù)下,某個(gè)觀測(cè)值可以一部分來(lái)自于硬幣B仿耽,一部分來(lái)自于硬幣C合冀,因此也稱作軟分類。
將上述兩步綜合起來(lái)项贺,EM算法可以總結(jié)如下:我們首先初始化模型的參數(shù)君躺,我們基于這個(gè)參數(shù)對(duì)每一個(gè)隱變量進(jìn)行分類,此時(shí)相當(dāng)于我們觀測(cè)到了隱變量开缎。有了隱變量的觀測(cè)值之后棕叫,原來(lái)含有隱變量的模型變成了不含隱變量的模型,因此我們可以直接使用極大似然估計(jì)來(lái)更新模型的參數(shù)奕删,再基于新的參數(shù)開(kāi)始新一輪的迭代俺泣,直到參數(shù)收斂。接來(lái)下我們就討論為什么參數(shù)一定會(huì)收斂。
EM算法的收斂性
前面寫(xiě)了太多的公式伏钠,但是這一部分我不打算給出收斂性的數(shù)學(xué)推導(dǎo)侮邀。其實(shí)數(shù)學(xué)上證明EM算法的收斂性很容易,只需要證明每一輪迭代之后贝润,參數(shù)的似然函數(shù)遞增,即铝宵,再結(jié)合單調(diào)有界收斂定理便可證明打掘。
下面我從最直觀的角度,展示一下EM算法迭代的全過(guò)程鹏秋。
首先我們看一下與
之間的關(guān)系。我們之前說(shuō)過(guò),當(dāng)
自由變化時(shí)钳枕,
的集合構(gòu)成了一族函數(shù)梦重,而當(dāng)我們固定
為任意
,并令
時(shí)百拓,
便構(gòu)成了函數(shù)族中一個(gè)特殊的子集琴锭,注意此時(shí)
被
固定,不再與
有關(guān)衙传。這一族子集具有如下性質(zhì):
也就是說(shuō)决帖,每一個(gè)都是
的一個(gè)下界,且在唯一的一點(diǎn)
處相切蓖捶,
構(gòu)成了這一族曲線的包絡(luò)線地回。下面的動(dòng)圖直觀地展示了這一點(diǎn):
EM算法正是在這一族曲線上進(jìn)行反復(fù)迭代,逐漸逼近似然函數(shù)的極大值點(diǎn)俊鱼。因此EM算法也可以看成是如下的流程:
??1.選定一個(gè)初始值刻像,
??2.選定在與似然函數(shù)相切的函數(shù)
??3.求出上述函數(shù)的極大值,將更新為并闲,重復(fù)上述過(guò)程直至收斂
從圖中可以看出细睡,E-step的是從一個(gè)函數(shù)跳躍到另一個(gè)函數(shù),在不變的情況下帝火,直接對(duì)進(jìn)行優(yōu)化纹冤。而M-step則是沿著某一個(gè)函數(shù)曲線進(jìn)行優(yōu)化。到此為止购公,我們已經(jīng)從不同的角度深度剖析了EM算法的內(nèi)涵萌京。最后我補(bǔ)充兩點(diǎn)來(lái)結(jié)束本文的討論。
小結(jié)
本文從最基本的極大似然估計(jì)開(kāi)始宏浩,討論了模型中存在隱變量時(shí)知残,極大似然估計(jì)所遇到的困難,從而引入了EM算法比庄。我們將琴生不等式應(yīng)用于似然函數(shù)中求妹,并詳細(xì)解釋了函數(shù)的意義乏盐,進(jìn)而給出了E-step和M-step,和這兩步在拋硬幣例子中的實(shí)際應(yīng)用制恍。最后我們從函數(shù)圖像的角度父能,直觀地展示了EM算法收斂的過(guò)程。相信耐心讀完本文的同學(xué)净神, 對(duì)EM算法一定有了一個(gè)比較透徹的理解何吝。關(guān)于EM算法,我在這里在最后補(bǔ)充兩點(diǎn):
??1.EM算法并不能給我們提供任何額外的信息鹃唯,它只是給我們提供了一條巧妙的路徑去逼近似然函數(shù)的極大值爱榕。即使我們不用EM算法,而是借助計(jì)算機(jī)直接對(duì)似然函數(shù)求導(dǎo)坡慌,同樣可以獲得問(wèn)題的解黔酥。對(duì)于拋硬幣問(wèn)題而言,EM算法收斂之后洪橘,依舊不能告訴我們某個(gè)觀測(cè)值到底是來(lái)自B還是C跪者,而是只能給出一個(gè)概率。
??2.EM算法無(wú)法保證求出的解是全局最優(yōu)解熄求,它只能給我們一個(gè)局部最優(yōu)解坑夯,至于求出的是哪個(gè)局部最優(yōu)解,就與函數(shù)的形狀和給定的初值有關(guān)了抡四。在樣本規(guī)模不太大的情況下柜蜈,可以對(duì)參數(shù)空間進(jìn)行網(wǎng)格搜索,選取最優(yōu)的那個(gè)解指巡。至于為什么動(dòng)圖中可以求出全局最優(yōu)淑履,是因?yàn)閳D中的函數(shù)只有一個(gè)極大值點(diǎn),是一個(gè)凸優(yōu)化問(wèn)題藻雪。對(duì)于任意給定的函數(shù)求最大值秘噪,是一個(gè)至今仍沒(méi)有解決的問(wèn)題。
這篇博客里除了部分?jǐn)?shù)學(xué)推導(dǎo)參考了吳恩達(dá)的cs229n筆記勉耀, 其余的內(nèi)容基本是自己思考過(guò)程的總結(jié)指煎,故難免有疏漏和不當(dāng)之處,歡迎大家留言與我討論便斥。
ps.斷斷續(xù)續(xù)寫(xiě)了三周的時(shí)間才完工至壤,把自己的想法以一種容易理解的方式用文字表達(dá)出來(lái)的確是一個(gè)燒腦的過(guò)程,但是寫(xiě)完之后自己對(duì)于算法的理解更深了一層枢纠,所帶來(lái)的成就感也值得一行行敲公式的辛苦像街。這是我的第一篇博客,希望能將這個(gè)習(xí)慣堅(jiān)持下去吧。