【機器學習】EM算法詳解

B站視頻講解

EM算法

EM算法是一種迭代算法,用於含有隱變量(hidden variable)的概率模型參數的極大似然估計,或極大後驗概率估計。EM算法的每次迭代由兩步組成:E步,求期望(expectation);M步,求極大(maximization)。所以這一算法稱爲期望極大算法(expectation maximization),簡稱EM算法。概率模型有時既含有觀測變量(observable variable),又含有隱變量或者潛在變量(latent variable)。EM算法就是含有隱變量的概率模型參數的極大似然估計法,或極大後驗概率估計法。

算法引入

最大似然估計

一個例子:假如你去賭場,但是不知道能不能賺錢,你就在賭場門口等,出來一個人,就問這個人是賺了還是賠了,如果問了10個人都說賺了,那麼你就會認爲,賺錢的概率肯定是非常大的。那麼我們就可以理解這樣的問題:

  • 已知:1.樣本服從分佈的模型,2.觀測到的樣本

  • 求解:模型的參數

總的來說:極大似然估計就是用樣本來估計模型參數的統計學方法。

上面介紹一個粗淺的例子,現在我們引入一個最大似然函數的數學問題:100名學生的身高問題

這個時候,我們可以認爲這100個人的身高是滿足高斯分佈的(正太分佈),那麼就涉及到兩個參數:均值(μ\mu)和標準差(δ\delta),或者方差(δ2\delta ^2),爲了便於表示,這裏我們統一使用θ\theta表示,根據極大(最大)似然估計,我們就要找到兩個參數的值,使得恰好抽到這100個學生的概率最大。那麼數學化則有:

  • 樣本集X={x1,x2, ,xN},N=100X=\{x_1,x_2,\cdots,x_N\},N=100

  • 概率密度:p(xiθ)p(x_i|\theta)抽到某個人i(的身高)的概率

  • θ\theta是服從分佈的參數

  • 獨立同分布:同時抽到這100個人的概率就是抽到他們各自概率的乘積。(也就是說,你抽到x1x_1,不會影響抽到x2x_2

那麼,我們就有了目標似然函數:
L(θ)=i=1mp(xi;θ) L(\theta)=\prod_{i=1}^mp(x_i;\theta)
爲了便於計算,我們將等式兩邊同時取對數有(學過數理統計的友友都應該知道的吧):
l(θ)=i=1mlogp(xi;θ) l(\theta)=\sum_{i=1}^m\log p(x_i;\theta)
下一步,就是什麼樣的參數θ\theta能夠使得出現當前這批樣本(抽到這個100個人)的概率最大,那麼就要對θ\theta進行估計了。如何做呢?這就是極大似然估計求解的最基本做法了(取對數,求偏導,令等式爲0,求解),已知某個隨機樣本滿足某種概率分佈,但是其中具體的參數不清楚,參數估計就是通過若干次實驗,觀察其結果,利用結果推出參數的大概值。

EM算法引入

問題升級:當然問題不是那麼簡單,

  • 現在這100個人中,包含的有男生和女生(也就是兩個類別,2套參數/2個高斯分佈)

  • 男生和女生的身高都服從高斯分佈,但是參數不同(均值和方差)

  • 用數學的語言描述:抽取得到的每個樣本都不知道是從哪個(男生/女生)分佈抽取的

  • 求解目標:男生和女生對應的身高的高斯分佈的參數是多少?

那麼也就是說,我們加入一個隱變量(是男生,還是女生)。這個時候,傳統的極大似然估計就不好解決了,於是就使用EM算法來計算,換句話說,EM算法就是能夠計算含有隱變量的極大似然估計算法。讓我們繼續來看:

我們用Z表示這個隱變量,Z=1或Z=2標記樣本來自哪個分佈。那麼使用之前的最大似然估計函數則有:
l(θ)=i=1mlogp(xi;θ)=i=1mlogZp(xi,z;θ) l(\theta)=\sum_{i=1}^m\log p(x_i;\theta)=\sum_{i=1}^m\log \sum_Z p(x_i,z;\theta)
上式中,第二個求和符號就是要考慮的隱變量的情況。這個時候使用極大似然估計(求偏導)就不方便計算了。現在先不從數學公式的角度來說EM算法,我們看一個計算案例:

在這裏插入圖片描述
假設有賭場中的兩個硬幣A,B。我們現在想計算出這兩個硬幣正面朝上的概率分別是多少?現在有n組(上圖中有五組)數據(HT的序列,表示硬幣的正反面,並且我們不知道是哪個硬幣擲出來的)

我們現在先假設兩個硬幣的分佈(二項分佈),初始化時數據最好是比較接近實際情況的,否則可能迭代次數比較多(也和你選擇的停迭代止閾值有關),有:A:0.6機率正面,記爲θA\theta_A,B:0.5機率正面,記爲θB\theta_B

現在我們來看第一組數據(HTTTHHTHTH),其中:H有5個,T有5個。那麼隱變量Z=A和Z=B.那麼就有:

pA=C1050.650.4105p_A=C_{10}^50.6^50.4^{10-5}pB=C1050.550.5105p_B=C_{10}^50.5^50.5^{10-5}

接着我們選擇硬幣A,B的概率分別是:pa=pApA+pB=0.45p_a=\frac{p_A}{p_A+p_B}=0.45,pb=1pa=0.55p_b=1-p_a=0.55

現在我們進行E步(求期望):

對硬幣A有:0.45×5T=2.2T,0.45×5H=2.2H0.45\times 5T=2.2T,0.45\times 5H=2.2H

對硬幣B有:0.55×5T=0.275T,0.55×5H=2.275H0.55\times5T=0.275T,0.55\times5H=2.275H

現在我們對這五組數據分別進行這樣的計算,有如上圖所示的結果。現在我們使用M步對初始的分佈參數進行更新,其中的更新方式一看公式就明白了,就是將硬幣A中計算出的所有H,T分別加在一起,然後計算各自得佔比,如下:

θ^A(1)=21.321.3+8.60.71,θ^B(1)=11.711.7+8.40.58\hat{\theta}_A^{(1)}=\frac{21.3}{21.3+8.6}\approx0.71,\hat{\theta}_B^{(1)}=\frac{11.7}{11.7+8.4}\approx0.58

這就是對這五組數據進行了一次迭代計算,之後就是多次迭代計算,最後輸出結果。這樣一看EM算法其實就很簡單了,但是我們憑什麼這麼做呢?下面我們就帶着問題看看EM算法的推導。

EM算法推導

問題:樣本{x(1), ,x(m)}\{x(1),\cdots,x(m)\},包含m個獨立的樣本,其中每個樣本i對應的類別z(i)是未知的,所以很難用最大似然估計。
l(θ)=i=1mlogp(xi;θ)=i=1mlogZp(xi,z;θ) l(\theta)=\sum_{i=1}^m\log p(x_i;\theta)=\sum_{i=1}^m\log \sum_Z p(x_i,z;\theta)
剛纔已經說過,使用最大似然估計比較難求解,本來正常求偏導就可以了,但是現在log後面還有求和,那麼就麻煩了。於是我們就是使用EM算法進行求解,下面就是對其進行推導。

EM算法推導

我們現在上式中一部分logZp(xi,z;θ)log \sum_Z p(x_i,z;\theta),對其分子分母同時乘Q(z)Q(z)有:
logZp(xi,z;θ)=logZQ(z)p(xi,z;θ)Q(z) \log\sum_Zp(x_i,z;\theta)=log\sum_ZQ(z)\frac{p(x_i,z;\theta)}{Q(z)}
爲什麼這麼做呢?其實就是爲了配湊Jensen不等式(Q(z)是z的分佈函數)。這個估計大家都不是很瞭解,讓我們來看看,jensen不等式吧:(需要申明的是,國內與國外定義凹凸函數是不同的,這個大家可以百度一下,不要糾結下面的問題。)
在這裏插入圖片描述

設f是定義爲實數的函數,如果對於定義域內的所有實數x,有f(x)的二次導數大於等於0,那麼f就是凸函數(你會說,這明明就是凹函數嘛,不要糾結);如果f是凸函數,X是隨機變量,那麼:E(f(X))>=f(E(X))E(f(X))>=f(E(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))。,那麼對於凹函數,那麼就會有:E[f(X)]<=f(E[X])E[f(X)]<=f(E[X])。現在Jensen的介紹就告一段落。我們再回到EM算法中涉及的算式:

ZQ(z)p(xi,z;θ)Q(z)\sum_ZQ(z)\frac{p(x_i,z;\theta)}{Q(z)}可以看成p(xi,z;θ)Q(z)\frac{p(x_i,z;\theta)}{Q(z)}的期望,這又該如何理解呢?我們知道在連續變量的概率密度中計算期望的公式xf(x)\int xf(x),看到這個就不難理解上面的那句話了。下面我們可以設Y=p(xi,z;θ)Q(z)Y=\frac{p(x_i,z;\theta)}{Q(z)},進而化簡有:
logZQ(z)p(xi,z;θ)Q(z)=logYP(Y)Y=logE(Y) \log\sum_ZQ(z)\frac{p(x_i,z;\theta)}{Q(z)} =\log\sum_YP(Y)Y=\log E(Y)
這個時候我們就可以利用Jensen不等式了,log函數是凹函數,則有:
logE(Y)E(logY)=YP(Y)logY=ZQ(z)log(p(xi,z;θ)Q(z)) \log E(Y)\geq E(\log Y)=\sum_YP(Y)\log Y=\sum_ZQ(z)\log(\frac{p(x_i,z;\theta)}{Q(z)})
那麼對於原極大似然估計則有:
l(θ)=i=1mlogZp(xi,z;θ)i=1mZQ(z)logp(xi,z;θ)Q(z) l(\theta)=\sum_{i=1}^m\log \sum_Z p(x_i,z;\theta)\geq\sum_{i=1}^m\sum_ZQ(z)\log\frac{p(x_i,z;\theta)}{Q(z)}
這個時候,我們需要計算的就是下界值,我們通過優化這個下界來使得似然函數最大。那麼在訓練的過程中,我們使得下界一直取最大,那麼最後得到的結果就是我們 需要的。那麼問題又來了,如何使得不等式取等號呢,在Jensen不等式中等號的成立條件是隨機變量是常數的時候(結合上面中的Jensen不等式的圖形,思考一下就應該明白了),那麼也就是Y=p(xi,z;θ)Q(z)=CY=\frac{p(x_i,z;\theta)}{Q(z)}=CQ(z)Q(z)是z的分佈函數,那麼我們根據Y對所有的z進行求和有必然爲1(概率和爲1):
ZQ(z)=Zp(xi,z;θ)C=1 \sum_ZQ(z)=\sum_Z\frac{p(x_i,z;\theta)}{C}=1
那麼爲了使得結果爲1,所有的分子的和就等於常數C(與分母相同),那麼也就是說,C就是所有的p(xi,z)p(x_i,z)對z求和。我們可以單獨拿出Q(z)來看有:
Q(z)=p(xi,z;θ)C=p(xi,z;θ)Zp(xi,z;θ)=p(xi,z;θ)p(xi)=p(zxi;θ) Q(z)=\frac{p(x_i,z;\theta)}{C}=\frac{p(x_i,z;\theta)}{\sum_Zp(x_i,z;\theta)}=\frac{p(x_i,z;\theta)}{p(x_i)}=p(z|x_i;\theta)
那麼也就是說,Q(z)代表第i個數據是來自ziz_i的概率,這其實就是Estep要做的事情。那麼我們來總結一下EM算法:

  1. 初始化分佈參數θ\theta
  2. E-step:根據參數θ\theta計算每個樣本屬於ziz_i的概率(也就是我們的Q)
  3. M-step:根據Q,求出含有θ\theta的似然函數的下界,並最大優化它,得到新的參數θ\theta
  4. 不斷的迭代更新下去

EM算法的應用

如高斯混合模型,HMM等。簡要介紹一下高斯混合模型(GMM),數據可以看作是從數個Gaussian Distribution中生成出來的,GMM由K個Gaussian分佈組成,每個Gaussian成爲一個”Component“;類似於k-means方法,求解方式根EM一樣,不斷迭代更新下去。
個人訂閱號
更多編程,人工智能知識等着你
image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章