EM演算法總結
最近因工作需要,要學習概率圖模型,來對一些序列對象進行一些建模。概率圖模型根據不同情況的不同概率假設,能夠有效解釋一些現實問題,使得我們的模型能夠在一定程度上擬合現實的問題,但是存在模型不確定、參數不確定,建模比較難的特點。因此有很多思想方法幫助我們去進行參數估計和建模,本文準備將EM演算法總結一下。
什麼是EM演算法
EM演算法全稱Expectation-Maximization演算法,即最大化期望演算法。根據這個名字就能很清楚知道這個演算法的核心元素,一個是期望,另一個是期望的最大化。而這兩個元素代表了EM演算法的兩個流程。首先EM演算法是一個迭代性質的演算法,即每個迭代都能得到新的經過學習後的參數,迭代的結束標誌一般是人為定義閾值或者參數收斂。其次EM演算法每個迭代主要執行兩個步驟:
- 求期望,得到一個關於參數的期望函數式。類似於我將樣本數據輸入到
- 對期望函數式求使其最大化的參數。
上述描述比較簡略,下面會詳細將這兩個步驟說明。
為什麼用EM演算法
EM演算法的好處,或者說它被需要的原因是什麼?其實之前我已經在HMM模型的參數估計章節中,對EM演算法的具體應用已經有了一個專門的描述,感興趣的同學可以去看我之前的文章:《隱馬爾科夫模型學習總結之三》。從HMM的例子中,我們知道當一個實際問題中,除了可觀測的變數外,還需要一些隱變數幫助我們去建模,此時EM演算法可以幫助對這種包含隱變數的問題進行參數估計,除了HMM外,還有k-means聚類演算法也運用了EM演算法,它的隱變數可以說是具體的那些聚類本身。
除此以外,我們會存在無法確定問題對應的具體的模型的樣式的時候。說的有點拗口,我舉個例子,大家感受一下。
logistics regression的二分類例子
首先,我舉個能確定具體模型的例子,即使用logitstic regression對二分類數據進行建模,其中樣本數據之間是相互獨立的,沒有關聯,且當前數據標籤只有兩種0和1。其實這種數據分布可以看成是一個二項分布,即重複n次獨立的伯努利試驗。在每次試驗中只有兩種可能的結果,而且兩種結果發生與否互相對立,並且相互獨立,與其它各次試驗結果無關。對應於我們的數據就是每個樣本相當於一次拋硬幣,要麼正面要麼反面,且兩次拋硬幣(兩個數據樣本)之間沒有任何關聯,互不影響。那麼我們假設模型參數為 ,模型為 樣本數據集為 ,m表示m個樣本,那麼我們給定參數的情況下,每個樣本數據標籤的條件概率為: ,這個式子其實是兩個式子的合併,我們知道logistics regression是生成樣本屬於標籤1的概率,因此有如下兩個式子: , ,兩個式子合併,就成上面的式子。
由於樣本數據之間相互獨立,因此整個樣本集的預測目標概率為:
我們訓練模型的利用已知的樣本數據,反推最大概率能夠得到樣本數據的模型參數。因此對於這種已經確定模型形式,需要進行參數估計的問題,我們很自然想到使用極大似然估計方法MLE,即 。由於連乘式的求極值很好不做,且概率的多次連乘,尤其是在數據樣本很大的情況下,很容易造成最後結果幾乎為0,因此考慮在概率式子之前增加log函數,由於log函數的單調性,保證了原來概率式的性質,且可以將連乘式化簡為求和式。
然後就是以 為參數,對 求偏導數,並令偏導為0,求出 的表達式。
上述的例子說明只要是數據分布確定後,求具體數據分布的參數是比較容易的,一般是使用MLE方法。然而現實生活中存在很多數據分布無法確定的情形,如之前講的HMM中的問題,因為它引入了一個隱變數,帶來了不確定性,因此不能簡單地使用MLE方法,一步到位得將我們的參數估計出來,因此需要EM演算法,迭代得去估計我們的參數。
高斯混合模型應用EM演算法舉例
EM演算法問題描述
下面準備拿很多人都舉過的高斯混合模型的例子來講解EM演算法,參考了cs229以及徐亦達老師的講義。
假設當前數據符合上述分布,很明顯,該數據不是一種概率分布就能簡單得描述的,大致可以看出該數據有三個不同的概率分布,每個概率分布可先用高斯分布來解釋(分布中心數據密度大,周圍數據密度小,與高斯分布特徵相符)。高斯分布的概率密度公式如下:
其中, 表示期望, 表示方差。在混合高斯模型中,假設有k個高斯分布混合,概率密度公式為:
其中,有約束條件:
因此參數集合為:
若使用MLE方法來進行參數估計,則極大似然估計函數為:
如果單純使用求偏導的方式來求極值的參數是很難的,無法簡單做到。
此時,由於我們不知道這些數據具體從屬於哪個概率分布,因此引入一個隱變數Z,表示數據屬於哪個高斯分布。原始的MLE函數式為:
這個函數式無法一次使用求偏導的方法求出極值,因此需要迭代的方法,每個迭代產生參數估計。然後我們引入隱變數Z,在不改變原式子的情況下,我們可以採用貝葉斯公式以及期望積分的方式,將隱變數Z引入上式(之前講HMM的時候已經講過這種方法,感興趣的同學可以回頭去看一下),因此得到EM演算法每步迭代的問題描述式:
首先這是某步迭代的函數式,假設之前的迭代已經估計出了參數 ,因此在此式中 是一個已知的常數值,這個在後面化簡推導的時候很有用。其次在外層增加了對隱變數z的積分,結合內部的貝葉斯條件概率公式,可以將z的影響消除。
備註:隱變數引入不是隨便的,有一些要求,比如需要引入後簡化模型的求解,另外不能改變原邊緣分布,即 ,在高斯混合模型中,引入的隱變數z表示對應數據屬於哪個高斯,因此P(z)屬於先驗知識,來自於上面提到的 ,表示高斯分布的權重。因此可以很容易證明 ,這邊就不寫了,有興趣的同學自己推導,很簡單。
EM演算法迭代收斂性證明
既然是迭代的方法,那麼勢必要保證這種方法最後能夠收斂,事實上EM演算法的收斂性是可以證明的,下面簡單對這個收斂性做一個證明。即證明:
首先根據條件概率公式,有:
等式兩邊同時加log,得到:
等式左邊引入隱變數z,並對z做積分的期望,右邊同理,可得:
(上述使用了這個等式: )
我們將上面等號右邊的被減子式定義為 ,減子式定義為 ,因此 ,我們要證明 ,可以看到我們的Q項其實與我們一開始提出的EM演算法問題描述式是一樣的,即每個迭代, 都是在Q項上求極大值後的參數,因此 是必然成立的(因為本來就是求極大值,因此極大值只可能比上個迭代大或者一樣)。那麼我們接下來只要證明H項在每個迭代都在逐漸減小或者不變,即:
證明:我們將要證明的不等式做一個轉換,問題可以轉換為:
對任意的 ,我們要證明 ,有如下化簡:
其中-log()是一個凸函數,函數圖如下:
對於凸函數我先介紹一個性質:Jensen不等式:
我們引入一個變數 ,假設當前數據區間為 ,那麼該區間內任意一個數都可以用如下式子表示: 。而將函數曲線的兩端的點連接構成一條直線,該直線上的點可以表示為:(1-t)f(x_1)+tf(x_2)。那麼在函數為凸的情況下,根據圖上的示例(雖然比較難看),可以看出 ,這個就是Jensen不等式,應用到我們這邊證明,其實可以泛化為不等式左邊的式子可以看成是函數的期望,不等式右邊看成是期望的函數,其中t,1-t都是某個函數值的概率,因此可以寫成 ,即
而
是函數的期望,因此它比大於期望的函數:
因此,證畢。
使用EM演算法解決高斯混合模型問題
下面定義問題描述式中的具體項:
其中 表示一個高斯分布, 表示這個高斯分布的權重。k表示有k個不同的高斯分布,n表示數據樣本數。
定義 ,因為數據間獨立,且有貝葉斯公式:
因此有:
定義 ,根據數據獨立性,貝葉斯公式和積分期望,有如下式子:
因此可定義 為:
將上述兩個定義式代入之前的Q項中(H項已不需要),開始EM演算法中的E-step:
E-step:
將式子
定義為 ,將式子
定義為 。
對上述式子肯定是要進行化簡的:
把上述式子展開,其實是一個包含N個sum項的式子,我們把第一個sum式拿出來單獨分析:
上式中,後面對z2...zn的積分式,其實可以看做是z1變數的邊緣概率分布,因為其他z都被積分積掉了(原諒我用這麼口語的方式表達),因此上式可化簡為:
很明顯,其他sum項也可以做這樣的化簡,因此對所有N個sum項都做如此化簡後,可得如下式子:
最後得到的式子中,加號前面的只包含參數 ,加號後面的只包含參數 ,因此可以單獨對兩個式子分別求極大值,然後求得本次迭代的參數。下面就是我們的M-step。
M-Step:
主要是開始對E-Step構造的式子進行參數最大化,按照上面說的,將式子根據加號一拆為二,首先估計參數 。對式子求偏導,並令偏導為0,得到:
說明一下,為了描述方便,這裡定義 。
這個式子求解方法已經很熟悉了,之前SVM以及HMM中都講過這個,就不多說了,直接使用拉格朗日乘子法,得到:
接下來就是求參數 。這個推導比較複雜,因為牽扯到一些矩陣向量的求導的trick和小公式,先把公式列出來,有同學感興趣,我再把這些公式的推導過程列出來:
我們對Q項加號的第二項進行分析,即:
首先,我們對參數 進行估計,我們將下面的高斯分布的概率密度公式代入。
其中, 的多項式在此式可以視作一個const最後,對式子求偏導,令偏導為0,得到:
接下來是對 的推導,為了推導簡便,我們改變求偏導的變數對象,轉而對 求偏導,這樣利用上面的一些facts(fact2),然後得到:
這樣我們就將所有本迭代的參數求出來了,細心的同學可以發現所有參數裡面都包含一個式子: ,這個式子我們在之前的推導中已經得到,為:
因此,使用這個式子,加上迭代的方式,就可以一步一步逼近最優解。
備註:
放到最後一個講,但是非常重要的一個地方就是EM演算法不能保證對每個應用場景的問題都能都到全局最優解,如果我們的目標函數是凸函數(本文我們討論到的-log()),那麼可以保證得到全局最優解。但是,若我們的目標函數不是凸的,比如在聚類問題中,若對文本分類中的餘弦相似度計算函數就不能保證是凸的,此時EM演算法就有可能給出局部最優。
reference:
cs229 notes
徐亦達 notes
《數學之美》 吳軍
推薦閱讀:
※【機器學習Machine Learning】資料大全
※機器學習篇:XGB為啥這麼萬能
※斯坦福CS231n項目實戰(三):Softmax線性分類
※Google自動編程框架AutoML入門指南
※Python基礎_103.數據結構與演算法_查找