EM算法
EM算法是一種迭代算法,用於含有隱變量(hidden variable)的概率模型參數的極大似然估計,或極大後驗概率估計。EM算法的每次迭代由兩步組成:E步,求期望(expectation);M步,求極大(maximization)。所以這一算法稱爲期望極大算法(expectation maximization),簡稱EM算法。概率模型有時既含有觀測變量(observable variable),又含有隱變量或者潛在變量(latent variable)。EM算法就是含有隱變量的概率模型參數的極大似然估計法,或極大後驗概率估計法。
算法引入
最大似然估計
一個例子:假如你去賭場,但是不知道能不能賺錢,你就在賭場門口等,出來一個人,就問這個人是賺了還是賠了,如果問了10個人都說賺了,那麼你就會認爲,賺錢的概率肯定是非常大的。那麼我們就可以理解這樣的問題:
-
已知:1.樣本服從分佈的模型,2.觀測到的樣本
-
求解:模型的參數
總的來說:極大似然估計就是用樣本來估計模型參數的統計學方法。
上面介紹一個粗淺的例子,現在我們引入一個最大似然函數的數學問題:100名學生的身高問題
這個時候,我們可以認爲這100個人的身高是滿足高斯分佈的(正太分佈),那麼就涉及到兩個參數:均值()和標準差(),或者方差(),爲了便於表示,這裏我們統一使用表示,根據極大(最大)似然估計,我們就要找到兩個參數的值,使得恰好抽到這100個學生的概率最大。那麼數學化則有:
-
樣本集
-
概率密度:抽到某個人i(的身高)的概率
-
是服從分佈的參數
-
獨立同分布:同時抽到這100個人的概率就是抽到他們各自概率的乘積。(也就是說,你抽到,不會影響抽到)
那麼,我們就有了目標似然函數:
爲了便於計算,我們將等式兩邊同時取對數有(學過數理統計的友友都應該知道的吧):
下一步,就是什麼樣的參數能夠使得出現當前這批樣本(抽到這個100個人)的概率最大,那麼就要對進行估計了。如何做呢?這就是極大似然估計求解的最基本做法了(取對數,求偏導,令等式爲0,求解),已知某個隨機樣本滿足某種概率分佈,但是其中具體的參數不清楚,參數估計就是通過若干次實驗,觀察其結果,利用結果推出參數的大概值。
EM算法引入
問題升級:當然問題不是那麼簡單,
-
現在這100個人中,包含的有男生和女生(也就是兩個類別,2套參數/2個高斯分佈)
-
男生和女生的身高都服從高斯分佈,但是參數不同(均值和方差)
-
用數學的語言描述:抽取得到的每個樣本都不知道是從哪個(男生/女生)分佈抽取的
-
求解目標:男生和女生對應的身高的高斯分佈的參數是多少?
那麼也就是說,我們加入一個隱變量(是男生,還是女生)。這個時候,傳統的極大似然估計就不好解決了,於是就使用EM算法來計算,換句話說,EM算法就是能夠計算含有隱變量的極大似然估計算法。讓我們繼續來看:
我們用Z表示這個隱變量,Z=1或Z=2標記樣本來自哪個分佈。那麼使用之前的最大似然估計函數則有:
上式中,第二個求和符號就是要考慮的隱變量的情況。這個時候使用極大似然估計(求偏導)就不方便計算了。現在先不從數學公式的角度來說EM算法,我們看一個計算案例:
假設有賭場中的兩個硬幣A,B。我們現在想計算出這兩個硬幣正面朝上的概率分別是多少?現在有n組(上圖中有五組)數據(HT的序列,表示硬幣的正反面,並且我們不知道是哪個硬幣擲出來的)
我們現在先假設兩個硬幣的分佈(二項分佈),初始化時數據最好是比較接近實際情況的,否則可能迭代次數比較多(也和你選擇的停迭代止閾值有關),有:A:0.6機率正面,記爲,B:0.5機率正面,記爲
現在我們來看第一組數據(HTTTHHTHTH),其中:H有5個,T有5個。那麼隱變量Z=A和Z=B.那麼就有:
,
接着我們選擇硬幣A,B的概率分別是:,
現在我們進行E步(求期望):
對硬幣A有:
對硬幣B有:。
現在我們對這五組數據分別進行這樣的計算,有如上圖所示的結果。現在我們使用M步對初始的分佈參數進行更新,其中的更新方式一看公式就明白了,就是將硬幣A中計算出的所有H,T分別加在一起,然後計算各自得佔比,如下:
這就是對這五組數據進行了一次迭代計算,之後就是多次迭代計算,最後輸出結果。這樣一看EM算法其實就很簡單了,但是我們憑什麼這麼做呢?下面我們就帶着問題看看EM算法的推導。
EM算法推導
問題:樣本,包含m個獨立的樣本,其中每個樣本i對應的類別z(i)是未知的,所以很難用最大似然估計。
剛纔已經說過,使用最大似然估計比較難求解,本來正常求偏導就可以了,但是現在log後面還有求和,那麼就麻煩了。於是我們就是使用EM算法進行求解,下面就是對其進行推導。
EM算法推導
我們現在上式中一部分,對其分子分母同時乘有:
爲什麼這麼做呢?其實就是爲了配湊Jensen不等式(Q(z)是z的分佈函數)。這個估計大家都不是很瞭解,讓我們來看看,jensen不等式吧:(需要申明的是,國內與國外定義凹凸函數是不同的,這個大家可以百度一下,不要糾結下面的問題。)
設f是定義爲實數的函數,如果對於定義域內的所有實數x,有f(x)的二次導數大於等於0,那麼f就是凸函數(你會說,這明明就是凹函數嘛,不要糾結);如果f是凸函數,X是隨機變量,那麼:,我們來解釋一下這個屬性,上圖的實線f是凸函數,X有0.5的概率選擇a,也有0.5的概率選擇b(這裏是假設選值),那麼隨機變量X的期望值(均值)就爲a和b的中值(0.5a+0.5b)即,E[X]=0.5(a+b)。而E[f(X)]=0.5E[f(a)]+0.5E[f(b)](a和b各有50%的概率取到)。那麼從圖中可以看出,E[f(X)]>=f(E(X))。,那麼對於凹函數,那麼就會有:。現在Jensen的介紹就告一段落。我們再回到EM算法中涉及的算式:
可以看成的期望,這又該如何理解呢?我們知道在連續變量的概率密度中計算期望的公式,看到這個就不難理解上面的那句話了。下面我們可以設,進而化簡有:
這個時候我們就可以利用Jensen不等式了,log函數是凹函數,則有:
那麼對於原極大似然估計則有:
這個時候,我們需要計算的就是下界值,我們通過優化這個下界來使得似然函數最大。那麼在訓練的過程中,我們使得下界一直取最大,那麼最後得到的結果就是我們 需要的。那麼問題又來了,如何使得不等式取等號呢,在Jensen不等式中等號的成立條件是隨機變量是常數的時候(結合上面中的Jensen不等式的圖形,思考一下就應該明白了),那麼也就是,是z的分佈函數,那麼我們根據Y對所有的z進行求和有必然爲1(概率和爲1):
那麼爲了使得結果爲1,所有的分子的和就等於常數C(與分母相同),那麼也就是說,C就是所有的對z求和。我們可以單獨拿出Q(z)來看有:
那麼也就是說,Q(z)代表第i個數據是來自的概率,這其實就是Estep要做的事情。那麼我們來總結一下EM算法:
- 初始化分佈參數
- E-step:根據參數計算每個樣本屬於的概率(也就是我們的Q)
- M-step:根據Q,求出含有的似然函數的下界,並最大優化它,得到新的參數
- 不斷的迭代更新下去
EM算法的應用
如高斯混合模型,HMM等。簡要介紹一下高斯混合模型(GMM),數據可以看作是從數個Gaussian Distribution中生成出來的,GMM由K個Gaussian分佈組成,每個Gaussian成爲一個”Component“;類似於k-means方法,求解方式根EM一樣,不斷迭代更新下去。
個人訂閱號
更多編程,人工智能知識等着你