EM算法原理

前言

EM 算法,全稱 Expectation Maximization Algorithm期望最大算法是一種迭代算法,用於含有隱變量(Hidden Variable)的概率參數模型的最大似然估計或極大後驗概率估計。它是一個基礎算法,是很多機器學習領域算法的基礎,比如隱式馬爾科夫算法(HMM), LDA 主題模型的變分推斷等等。

一、EM算法的思想

我們經常會從被觀察的樣本數據中,找出樣本的模型參數。 最常用的方法就是極大化模型分佈的對數似然函數

但是在一些情況下,我們得到的觀察數據有未觀察到的隱含數據,此時我們未知的有隱含數據和模型參數,因而無法直接用極大化對數似然函數得到模型分佈的參數。怎麼辦呢?這就是 EM 算法可以派上用場的地方了。

EM 算法解決這個的思路是使用啓發式的迭代方法,既然我們無法直接求出模型分佈參數,那麼我們可以先猜想隱含數據( EM 算法的 Expection-Step ,又稱 E步),接着基於觀察數據和猜測的隱含數據一起來極大化對數似然,求解我們的模型參數( EM 算法的 Maximization-Step ,又稱 M步 )。由於我們之前的隱藏數據是猜測的,所以此時得到的模型參數一般還不是我們想要的結果。不過沒關係,我們基於當前得到的模型參數,繼續猜測隱含數據( EM 算法的 E步 ),然後繼續極大化對數似然,求解我們的模型參數( EM 算法的 M步 )。以此類推,不斷的迭代下去,直到模型分佈參數基本無變化,算法收斂,找到合適的模型參數

從上面的描述可以看出, EM 算法是迭代求解最大值的算法,同時算法在每一次迭代時分爲兩步, E步M步 。一輪輪迭代更新隱含數據模型分佈參數,直到收斂,即得到我們需要的模型參數。

E-Step 主要通過觀察數據和現有模型來估計參數,然後用這個估計的參數值來計算上述對數似然函數的期望值;而 M-Step 是尋找似然函數最大化時對應的參數。由於算法會保證在每次迭代之後似然函數都會增加(每一次迭代都是 Maximization ),所以函數最終會收斂。

一個最直觀瞭解 EM 算法思路的是 K-Means 算法,在 K-Means 聚類時,每個聚類簇的質心是隱含數據。我們會假設 K 個初始化質心,即 EM 算法的 E步 ;然後計算得到每個樣本最近的質心,並把樣本聚類到最近的這個質心,即 EM 算法的 M步 。重複這個 E步M步 ,直到質心不再變化爲止,這樣就完成了 K-Means 聚類。

當然, K-Means 算法是比較簡單的,實際中的問題往往沒有這麼簡單。上面對 EM 算法的描述還很粗糙,我們需要用數學的語言精準描述

二、EM算法的推導

對於 m 個樣本觀察數據 x=(x(1),x(2),...,x(m))x=(x^{(1)}, x^{(2)}, ..., x^{(m)}) 中,找出樣本的模型參數 θ , 極大化模型分佈的對數似然函數如下:
L(θ)=i=1mlogP(x(i);θ) (一) L(\theta) = \sum_{i=1}^m log P(x^{(i)}; \theta) \quad \quad \text{$\cdots \cdots$ (一)}
=i=1mlogzP(x(i),z;θ) (二) = \sum_{i=1}^m log \sum_z P(x^{(i)}, z; \theta) \quad \quad \text{$\cdots \cdots$ (二)}
第(一)步是對極大似然函數取對數,第(二)步是對每個樣本的每個可能的類別 z 求聯合概率分佈之和。如果這個 z 是已知的數,那麼使用極大似然法求解參數 θ\theta 會很容易。但如果 z 是隱變量,我們就需要用 EM 算法來求解。
事實上,隱變量估計問題也可以通過梯度下降等優化算法,但事實由於求和項將隨着隱變量的數目以指數級上升,會給梯度計算帶來麻煩;而 EM 算法則可看作一種非梯度優化方法

如果我們得到的觀察數據有未觀察到的隱含數據 z=(z(1),z(2),...,z(m))z=(z^{(1)}, z^{(2)}, ..., z^{(m)}) ,此時我們的極大化模型分佈的對數似然函數如下:
L(θ)=i=1mlogP(x(i);θ)=i=1mlogz(i)P(x(i),z(i);θ) L(\theta) = \sum_{i=1}^m log P(x^{(i)}; \theta) = \sum_{i=1}^m log \sum_{z^{(i)}} P(x^{(i)}, z^{(i)}; \theta)
上面這個式子是沒有 辦法直接求出 θ 的。因此需要一些特殊的技巧,我們首先對這個式子進行縮放如下:
i=1mlogz(i)P(x(i),z(i);θ)=i=1mlogz(i)Qi(z(i))P(x(i),z(i);θ)Qi(z(i)) \sum_{i=1}^m log \sum_{z^{(i)}} P(x^{(i)}, z^{(i)}; \theta) = \sum_{i=1}^m log \sum_{z^{(i)}} Q_{i}(z^{(i)}) \frac{P(x^{(i)}, z^{(i)}; \theta)}{Q_{i}(z^{(i)})} \quad \quad \text{$\cdots \cdots$①}
i=1mz(i)Qi(z(i))logP(x(i),z(i);θ)Qi(z(i)) \geq \sum_{i=1}^m \sum_{z^{(i)}} Q_{i}(z^{(i)}) log \frac{P(x^{(i)}, z^{(i)}; \theta)}{Q_{i}(z^{(i)})} \quad \quad \text{$\cdots \cdots$②}
上面第①式引入了一個未知的新的分佈 Qi(z(i))Q_{i}(z^{(i)}) ,第②式用到了Jensen不等式
logjλjyjjλjlog(yj) log \sum_{j} \lambda_{j} y_{j} \geq \sum_{j} \lambda_{j} log(y_{j})
其中:
λj0,jλj=1 \lambda_{j} \geq 0, \quad \sum_{j} \lambda_{j} = 1
或者說由於對數函數(以自然數爲底)是凹函數,所以有:
f(E(x))E(f(x)) f(E(x)) \geq E(f(x))
此時如果要滿足Jensen不等式的等號,則有:
P(x(i),z(i);θ)Qi(z(i))=cc爲常數 \frac{P(x^{(i)}, z^{(i)}; \theta)}{Q_{i}(z^{(i)})} = c \quad \quad \text{c爲常數}
由於 Qi(z(i))Q_{i}(z^{(i)}) 是一個分佈,所以滿足:
z(i)Qi(z(i))=1 \sum_{z^{(i)}} Q_{i}(z^{(i)}) = 1 \quad \quad \text{$\cdots \cdots$③}
從上面第①式和第③式,我們可以得到:
Qi(z(i))=P(x(i),z(i);θ)z(i)P(x(i),z(i);θ)=P(x(i),z(i);θ)P(x(i);θ)=P(z(i)x(i);θ) Q_{i}(z^{(i)}) = \frac{P(x^{(i)}, z^{(i)}; \theta)}{\sum_{z^{(i)}} P(x^{(i)}, z^{(i)}; \theta)} = \frac{P(x^{(i)}, z^{(i)}; \theta)}{P(x^{(i)}; \theta)} = P(z^{(i)} | x^{(i)}; \theta)
如果 Qi(z(i))=P(z(i)x(i);θ))Q_{i}(z^{(i)}) = P(z^{(i)} | x^{(i)}; θ)) , 則第②式是我們的包含隱藏數據的對數似然的一個下界。如果我們能極大化這個下界,則也在嘗試極大化我們的對數似然。即我們需要最大化下式:
argmaxθi=1mz(i)Qi(z(i))logP(x(i),z(i);θ)Qi(z(i)) \arg \max_{\theta} \sum_{i=1}^m \sum_{z^{(i)}} Q_{i}(z^{(i)}) log \frac{P(x^{(i)}, z^{(i)}; \theta)}{Q_{i}(z^{(i)})}
去掉上式中爲常數的部分,則我們需要極大化的對數似然下界爲:
argmaxθi=1mz(i)Qi(z(i))logP(x(i),z(i);θ) \arg \max_{\theta} \sum_{i=1}^m \sum_{z^{(i)}} Q_{i}(z^{(i)}) logP(x^{(i)}, z^{(i)}; \theta)
即通過上面的分析我們得到了 L(θ)J(z,Q)L(\theta) \geq J(z, Q) 的形式(z爲隱變量),那麼我們就可以通過不斷優化下界 J(z,Q)J(z, Q) 來使得對數似然函數 L(θ)L(\theta) 不斷提高,如下圖所示:
1
上式也就是我們的 EM 算法的 M步 ,那 E步 呢?注意到上式中 Qi(z(i))Q_{i}(z^{(i)}) 是一個分佈,因此,Qi(z(i))logP(x(i),z(i);θ)Q_{i}(z^{(i)}) logP(x^{(i)}, z^{(i)}; \theta) 可以理解爲 logP(x(i),z(i);θ)logP(x^{(i)}, z^{(i)}; \theta) 基於條件概率分佈 Qi(z(i))Q_{i}(z^{(i)}) 的期望。

EM算法迭代優化的另一種理解:座標上升法(Coordinate ascent)

2
途中直線爲迭代優化的路徑,因爲每次只優化一個變量(參數),所以可以看到它每走一步都是平行於座標軸的。
EM 算法類似於座標上升法,E 步 :固定參數 θ\theta ,優化 Q;M 步 :固定 Q,優化參數 θ\theta 。交替將極值推向最大。

但是要注意,迭代一定會收斂,但不一定會收斂到真實的全局最優參數值,因爲可能會陷入局部最優。所以 EM 算法的結果很受初始值的影響

三、EM算法流程

輸入:觀察數據 x=(x(1),x(2),...,x(m))x=(x^{(1)}, x^{(2)}, ..., x^{(m)}) ,聯合分佈 p(x,z;θ)p(x, z; θ) , 條件分佈 p(zx;θ)p(z | x ; θ) , 最大迭代次數 JJ

  • ① 隨機初始化模型參數θ的初值θ0。

  • ② for j from 1 to J開始 EM 算法迭代:
    a) E步 :計算聯合分佈的條件概率期望:
    Qi(z(i))=P(z(i)x(i);θ) Q_{i}(z^{(i)}) = P(z^{(i)} | x^{(i)}; \theta)
    L(θ,θj)=i=1mz(i)Qi(z(i))logP(x(i),z(i);θ) L(\theta, \theta^j) = \sum_{i=1}^m \sum_{z^{(i)}} Q_{i}(z^{(i)}) logP(x^{(i)}, z^{(i)}; \theta)
    b) M步 :極大化 L(θ,θj)L(θ, θ_j) ,得到 θj+1θ^{j+1}
    θj+1=argmaxθL(θ,θj) θ^{j+1} = \arg \max_{\theta} L(\theta, \theta^j)
    c) 如果 θj+1θ^{j+1} 已收斂,則算法結束。否則繼續回到 步驟 a) 進行 E步 迭代。

輸出:模型參數 θθ

四、舉例

爲了讓大家更直觀的感受EM算法,在這裏給大家舉兩個例子來說明。

例一

我們將引用 Nature BiotechEM tutorial 文章中的例子。

假設有兩枚硬幣 AB ,他們的隨機拋擲的結果如下圖所示:
3
我們很容易估計出兩枚硬幣拋出正面的概率:
θA=2430=0.80 \theta_A = \frac{24}{30} = 0.80
θB=920=0.45 \theta_B = \frac{9}{20} = 0.45
現在我們加入隱變量,抹去每輪投擲的硬幣標記:

Coin Statistics
Coin * 5 H, 5 T
Coin * 9 H, 1 T
Coin * 8 H, 2 T
Coin * 4 H, 6 T
Coin * 7 H, 3 T

碰到這種情況,我們該如何估計 θA\theta_AθB\theta_B 的值?
我們多了一個隱變量 Z=(z1,z2,z3,z4,z5)Z = (z_1, z_2, z_3, z_4, z_5) ,代表每一輪所使用的硬幣,我們需要知道每一輪拋擲所使用的硬幣這樣才能去估計 θA\theta_AθB\theta_B 的值,但是估計隱變量 ZZ 我們又需要知道 θA\theta_AθB\theta_B 的值,才能用極大似然估計法去估計出 ZZ 。這就陷入了一個雞生蛋和蛋生雞的問題
其解決方法就是先隨機初始化 θA\theta_AθB\theta_B ,然後去估計 ZZ , 然後基於 ZZ 按照最大似然概率去估計新的 θA\theta_AθB\theta_B ,循環直至收斂

接下來我們隨機初始化 θA=0.6\theta_A = 0.6θB=0.5\theta_B = 0.5 ,按照上述的解決方案先計算第一輪的數據:
對於第一輪來說,如果使用的是硬幣 A ,得出的 5 正 5 反 的概率爲:0.65×0.450.6^5 \times 0.4^5 ;如果使用的是硬幣 B ,得出的 5 正 5 反 的概率爲:0.55×0.550.5^5 \times 0.5^5 。我們可以算出使用的是硬幣 A 和硬幣 B 的概率分別爲:
PA=0.65×0.450.65×0.45+0.55×0.55=0.45 P_A = \frac{0.6^5 \times 0.4^5}{0.6^5 \times 0.4^5 + 0.5^5 \times 0.5^5} = 0.45
PB=0.55×0.550.65×0.45+0.55×0.55=0.55 P_B = \frac{0.5^5 \times 0.5^5}{0.6^5 \times 0.4^5 + 0.5^5 \times 0.5^5} = 0.55
從期望的角度來看,對於第一輪拋擲,使用硬幣 A 的概率是 0.45 ,使用硬幣 B 的概率是 0.55 。同理,其他輪的概率計算結果爲:

No Coin A Coin B
1 0.45 0.55
2 0.80 0.20
3 0.73 0.27
4 0.35 0.65
5 0.65 0.35

這一步我們實際上是估計出了 ZZ 的概率分佈,這步就是 E-Step(E步)

結合硬幣 A 的概率和上面的投擲結果,我們利用期望可以求出硬幣 A 和硬幣 B 的貢獻。以第二輪硬幣 A 爲例子,計算方式爲:
H:0.80×9=7.2 H: 0.80 \times 9 = 7.2
T:0.80×1=0.8 T: 0.80 \times 1 = 0.8
同理,於是我們可以得到:

No Coin A Coin B
1 2.2 H, 2.2 T 2.8 H, 2.8 T
2 7.2 H, 0.8 T 1.8 H, 0.2 T
3 5.9 H, 1.5 T 2.1 H, 0.5 T
4 1.4 H, 2.1 T 2.6 H, 3.9 T
5 4.5 H, 1.9 T 2.5 H, 1.1 T
Total 21.3 H, 8.6 T 11.7 H, 8.4 T

然後再用極大似然估計來估計新的 PAP_APBP_B
PA=21.321.3+8.6=0.71 P_A = \frac{21.3}{21.3 + 8.6} = 0.71
PB=11.711.7+8.4=0.58 P_B = \frac{11.7}{11.7 + 8.4} = 0.58
這步就對應了 M-Step(M步) ,重新估計出了期望值。
如此反覆迭代,我們就可以算出最終的參數值。
上述講解對應下圖:
4
5
6

例二

如果說 例一 需要繁瑣的計算,而這對於你來說可能沒那麼直觀,那我們接下來就舉一個更直觀的例子:

現在一個班裏有 50 個男生和 50 個女生,且男女生分開。我們假定男生的身高服從正態分佈:N(μ1,σ12)\mathcal{N}(\mu_1, \sigma_1^2) ,女生的身高則服從另一個正態分佈:N(μ2,σ22)\mathcal{N}(\mu_2, \sigma_2^2) 。這時候我們可以用極大似然估計(MLE),分別通過這 50 個男生和 50 個女生的樣本來估計這兩個正態分佈的參數

但現在我們讓情況稍微複雜一點,就是這 50 個男生和 50 個女生混在一起了。我們擁有 100 個人的身高數據,卻不知道這 100 個人哪個是男生或者哪個是女生。
這個時候情況就有點尷尬,因爲通常來說,我們只有知道了精確的男女身高的正態分佈參數我們才能知道這 100 個人中某個人更有可能是男生還是女生。但從另一方面去考量,我們只有知道了每個人是男生還是女生才能儘可能準確地估計男女各自身高的正態分佈的參數。
這個時候有人就想到我們必須從某一點開始,並用迭代的辦法去解決這個問題:我們先設定男生身高和女生身高分佈的幾個參數(初始值),然後根據這些參數去判斷每一個樣本(學生)是男生還是女生,之後根據標註後的樣本再反過來重新估計參數。之後再多次重複這個過程,直至收斂。

五、參考文獻

EM算法原理總結 - 劉建平
② 機器學習 - 周志華 【162-165】
https://www.zhihu.com/question/27976634
https://blog.csdn.net/zouxy09/article/details/8537620
Do, C. B., & Batzoglou, S. (2008). What is the expectation maximization algorithm?. Nature biotechnology, 26(8), 897.
一文詳盡系列之EM算法 - Datawhale

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