高斯混合模型(GMM)與最大期望(EM)算法學習筆記

本文內容是我在學習過程中的個人總結與筆記。引用內容寫在灰色的引用框中。如有錯誤歡迎指正

這篇文章的主題是高斯混合模型(GMM),GMM與最大期望(EM)方法有很大的聯繫,而在GMM的求解過程中使用了極大似然估計法


一、極大似然估計

我們先來複習一下極大似然估計法是怎麼進行的,來看一個經典實例

問題

設樣本服從正態分佈N(μ,σ2)N(\mu,\sigma^2),則似然函數爲L(μ,σ2)=i=1N12πσe(xiμ)22σ2L(\mu,\sigma^2)=\prod^{N}_{i=1}\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x_{i}-\mu)^2}{2\sigma^2}}
試估計參數μ\muσ2\sigma^2的值
其中xix_{i}是樣本,也就是說這個函數L(μ,σ2)L(\mu,\sigma^{2})是各個樣本的概率的積。

分析

我們需要做的是由似然函數估計出參數μ\muσ2\sigma^2的值。之所以說是估計,是因爲使用有限的樣本不可能準確求出原本高斯分佈的參數
那麼怎麼由似然函數求值呢?

  1. 首先我們要對似然函數求對數,這是因爲似然函數是各個事件發生的概率的積,當很多概率乘在一起時,會導致這個似然函數的值非常小,計算機由於精度的原因無法處理
  2. 對參數求導,再令導數爲0。我們知道,這樣求出的點是似然函數的極值點,而我們需要的是使得似然函數取得最大值時的參數值。這樣這個極值點便很可能是我們要求的參數值
  3. 求解上述似然方程

求解

對似然函數取對數得到
lnL(μ,σ2)=i=1Nln12πσe(xiμ)22σ2\ln L(\mu,\sigma^2)=\sum_{i=1}^N \ln\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x_{i}-\mu)^2}{2\sigma^2}}
化簡得到lnL(μ,σ2)=n2ln(2π)n2ln(σ2)12σ2i=1n(xiμ)2\ln L(\mu,\sigma^2) = -\frac{n}{2}\ln(2\pi)-\frac{n}{2}\ln(\sigma^2)-\frac{1}{2\sigma^2}\sum_{i=1}^n(x_{i}-\mu)^2

對參數求導
{lnL(μ,σ2)μ=1σ2i=1n(xiμ)=0lnL(μ,σ2)σ=n2σ2+12σ4i=1n(xiμ)2 \left \{ \begin{aligned} & \frac{\partial \ln L(\mu,\sigma^2)}{\partial\mu}=\frac{1}{\sigma^2}\sum_{i = 1}^{n}(x_i-\mu) =0\\ & \frac{\partial \ln L(\mu,\sigma^2)}{\partial\sigma}=-\frac{n}{2\sigma^2}+\frac{1}{2\sigma^4}\sum_{i=1}^n(x_i-\mu)^2 \end{aligned} \right.
聯合求解
{μ^=x=1ni=1Nxiσ^2=1ni=1N(xix)2 \left \{ \begin{aligned} & \hat{\mu}=\overline x = \frac{1}{n}\sum_{i=1}^N x_i \\ & \hat\sigma^2=\frac{1}{n}\sum_{i=1}^N(x_i-\overline x)^2 \end{aligned} \right.


現在我們來概括一下,極大似然法分爲如下幾步

(1)寫出似然函數;
(2)對似然函數取對數,並整理
(3)求導數;
(4)解似然方程。

    最大似然估計的特點:
    1.比其他估計方法更加簡單;
    2.收斂性:無偏或者漸近無偏,當樣本數目增加時,收斂性質會更好;
    3.如果假設的類條件概率模型正確,則通常能獲得較好的結果。但如果假設模型出現偏差,將導致非常差的估計結果。

一定要注意一點,我們在進行極大似然估計時,樣本服從什麼分佈是我們假定的。
另外,極大似然估計方法也可以用一個簡單的式子來概括:
θ=argmaxθilogP(x(i);θ)θ=arg\max_θ∑_i \log P(x^{(i)};θ)
也即θ\theta爲使得似然函數取最大值時對應的θ\theta

二、GMM原理

首先我們來了解一下機器學習中的歸納偏執(bias)

在機器學習中,一個學習算法也會有一個前提假設,這裏被稱作“歸納偏執 (bias)”(bias 這個英文詞在機器學習和統計裏還有其他許多的意思)。例如線性迴歸,目的是要找一個函數儘可能好地擬合給定的數據點,它的歸納偏執就是“滿足要求的函數必須是線性函數”。一個沒有歸納偏執的學習算法從某種意義上來說毫無用處,就像一個完全沒有歸納能力的人一樣,在第一次看到魚的時候有人告訴他那是魚,下次看到另一條魚了,他並不知道那也是魚,因爲兩條魚總有一些地方不一樣的,或者就算是同一條魚,在河裏不同的地方看到,或者只是看到的時間不一樣,也會被他認爲是不同的,因爲他無法歸納,無法提取主要矛盾、忽略次要因素,只好要求所有的條件都完全一樣──然而哲學家已經告訴過我們了:世界上不會有任何樣東西是完全一樣的,所以這個人即使是有無比強悍的記憶力,也絕學不到任何一點知識。
這個問題在機器學習中稱作“過擬合 (Overfitting)”,例如前面的迴歸的問題,如果去掉“線性函數”這個歸納偏執,因爲對於 N 個點,我們總是可以構造一個 N-1 次多項式函數,讓它完美地穿過所有的這 N 個點,或者如果我用任何大於 N-1 次的多項式函數的話,我甚至可以構造出無窮多個滿足條件的函數出來。如果假定特定領域裏的問題所給定的數據個數總是有個上限的話,我可以取一個足夠大的 N ,從而得到一個(或者無窮多個)“超級函數”,能夠 fit 這個領域內所有的問題。然而這個(或者這無窮多個)“超級函數”有用嗎?只要我們注意到學習的目的(通常)不是解釋現有的事物,而是從中歸納出知識,並能應用到新的事物上,結果就顯而易見了。
沒有歸納偏執或者歸納偏執太寬泛會導致 Overfitting ,然而另一個極端──限制過大的歸納偏執也是有問題的:如果數據本身並不是線性的,強行用線性函數去做迴歸通常並不能得到好結果。難點正在於在這之間尋找一個平衡點。不過人在這裏相對於(現在的)機器來說有一個很大的優勢:人通常不會孤立地用某一個獨立的系統和模型去處理問題,一個人每天都會從各個來源獲取大量的信息,並且通過各種手段進行整合處理,歸納所得的所有知識最終得以統一地存儲起來,並能有機地組合起來去解決特定的問題。這裏的“有機”這個詞很有意思,搞理論的人總能提出各種各樣的模型,並且這些模型都有嚴格的理論基礎保證能達到期望的目的,然而絕大多數模型都會有那麼一些“參數”(例如 K-means 中的 k ),通常沒有理論來說明參數取哪個值更好,而模型實際的效果卻通常和參數是否取到最優值有很大的關係,我覺得,在這裏“有機”不妨看作是所有模型的參數已經自動地取到了最優值。另外,雖然進展不大,但是人們也一直都期望在計算機領域也建立起一個統一的知識系統(例如語意網就是這樣一個嘗試)。

GMM就是這樣的一種歸納偏執:我們假定樣本服從一種高斯分佈,不過這種高斯分佈與"單一的"高斯分佈不一樣,它由若干個高斯分佈混合起來而形成。

Gaussian Mixture Model (GMM)。
GMM 和 k-means 很像,不過 GMM 是學習出一些概率密度函數來(所以 GMM 除了用在 clustering 上之外,還經常被用於 density estimation ),簡單地說,k-means 的結果是每個數據點被 assign 到其中某一個 cluster 了,而 GMM 則給出這些數據點被 assign 到每個 cluster 的概率,又稱作 soft assignment 。

每個 GMM 由 K 個 Gaussian 分佈組成,每個 Gaussian 稱爲一個“Component”,這些 Component 線性加成在一起就組成了 GMM 的概率密度函數:

p(x)=k=1Kp(k)p(xk)=k=1KπkN(xμk,Σk)\displaystyle \begin{aligned} p(x) & = \sum_{k=1}^K p(k)p(x|k) \\ & = \sum_{k=1}^K \pi_k \mathcal{N}(x|\mu_k, \Sigma_k) \end{aligned}

根據上面的式子,如果我們要從 GMM 的分佈中隨機地取一個點的話,實際上可以分爲兩步:首先隨機地在這 K 個 Component 之中選一個,每個 Component 被選中的概率實際上就是它的係數 \pi_k ,選中了 Component 之後,再單獨地考慮從這個 Component 的分佈中選取一個點就可以了──這裏已經回到了普通的 Gaussian 分佈,轉化爲了已知的問題。

高斯混合模型解決了一個這樣的問題:如果一個樣本集的分佈有明顯的聚類特徵,那麼我們可以利用GMM來近似這種分佈。利用GMM,不僅完成了對樣本集的分類,還得到了它的一個概率密度函數。
利用概率密度函數,我們很容易就可以得到所謂似然函數,再對它進行求解,便可以得到高斯混合模型的參數
顯然,它的似然函數是L=i=1Nk=1KπkN(x;μk,Σk)L= \prod_{i=1}^N \sum_{k=1}^K \pi_k \mathcal{N}(x ; \mu_k, \Sigma_k)
log-likelihood function爲:
Llog=i=1Nlog{k=1KπkN(xi;μk,Σk)}L_{log}=\displaystyle \sum_{i=1}^N \log \left\{\sum_{k=1}^K \pi_k \mathcal{N}(x_i ; \mu_k, \Sigma_k)\right\}
然後求解這個似然函數即可,求解過程是一個純技術問題,我們暫時把它忽略。
總之,求解的結果是一個N×KN\times K的矩陣,這個矩陣的每一行代表了樣本屬於各個component的概率,對於每一個 xix_i ,我們只要取該矩陣第 i 行中最大的那個概率值所對應的那個 Component 爲 xix_i 所屬的 cluster 就可以實現一個完整的聚類方法了。

從上面的分析中我們可以看到 GMM 和 K-means 的迭代求解法其實非常相似,因此也有和 K-means 同樣的問題──並不能保證總是能取到全局最優,如果運氣比較差,取到不好的初始值,就有可能得到很差的結果。對於 K-means 的情況,我們通常是重複一定次數然後取最好的結果,不過 GMM 每一次迭代的計算量比 K-means 要大許多,一個更流行的做法是先用 K-means (已經重複並取最優值了)得到一個粗略的結果,然後將其作爲初值(只要將 K-means 所得的 centroids 傳入 gmm 函數即可),再用 GMM 進行細緻迭代。

如我們最開始所討論的,GMM 所得的結果(Px)不僅僅是數據點的 label ,而包含了數據點標記爲每個 label 的概率,很多時候這實際上是非常有用的信息

三丶EM算法

我們可以看到,K-means與GMM實際上是有幾分相似的,並且它們都可以追溯到EM算法。
EM算法是一種利用似然函數來獲取模型參數的算法。
首先我們來複習兩個概念

邊緣分佈

摘取百度百科對邊緣分佈的解釋

邊緣分佈(Marginal Distribution)指在概率論和統計學的多維隨機變量中,只包含其中部分變量的概率分佈。

假設有一個和兩個變量相關的概率分佈:
P(xy)P(x|y)
關於其中一個特定變量的邊緣分佈則爲給定其他變量的條件概率分佈:(增加了一個y和求和符號)
P(x)=yP(x,y)=yP(xy)P(y)P(x)=\sum_{y}P(x,y)=\sum_yP(x|y)P(y)

在這個邊緣分佈中,我們得到只關於一個變量的概率分佈,而不再考慮另一變量的影響,實際上進行了降維操作。在實際應用中,例如人工神經網絡的神經元互相關聯,在計算它們各自的參數的時候,就會使用邊緣分佈計算得到某一特定神經元(變量)的值。

Jensen不等式

定理:X爲一隨機變量,如果ff是凸函數,那麼有E[f(X)]f[E(X)]E[f(X)]\ge f[E(X)]

推導

問題引入

現在我們有一組觀測樣本x=(x1,x2...xm)\vec x=(x_1,x_2...x_m)
在確定了歸納偏執之後,我們希望獲得模型的參數,那麼有
θ=argmaxθlogP(xi;θ)θ=arg\max_θ∑\log P(x_i;θ)
但是很不幸,我們的觀測數據實際上還有隱藏的觀測值數據
z=(z1,z2,...zi)\vec z=(z_1,z_2,...z_i)
那麼我們利用邊緣分佈的定義,極大化模型分佈的對數似然函數如下:
θ=argmaxθlogP(xi;θ)=argmaxθlogziP(xizi;θ)θ=arg\max_θ∑logP(x_i;θ)=arg\max_θ∑log∑_{z_i}P(x_i,z_i;θ)
這個式子怎麼求解呢?所需要用到的方法就是EM算法了

求解過程

概括如下

EM是一個在已知部分相關變量的情況下,估計未知變量的迭代技術。EM的算法流程如下:
初始化分佈參數
重複直到收斂:
E步驟:根據參數的假設值,給出未知變量的期望估計,應用於缺失值。
M步驟:根據未知變量的估計值,給出當前的參數的極大似然估計。

現在我們總結下EM算法的流程。
    輸入:觀察數據x=(x(1),x(2),…x(m)),聯合分佈p(x,z;θ), 條件分佈p(z|x;θ), 最大迭代次數J。
    1) 隨機初始化模型參數θ的初值θ0。
    2) for j from 1 to J開始EM算法迭代:
      a) E步:計算聯合分佈的條件概率期望:
Qi(z(i))=P(z(i)x(i)θj))Qi(z(i))=P(z(i)|x(i),θj))
L(θ,θj)=i=1mziQi(zi)logP(xizi;θ)L(θ,θ_j)=∑_{i=1}^m∑_{z_i}Q_i(z_i)logP(x_i,z_i;θ)
      b) M步:極大化L(θ,θj),得到θj+1:
θj+1=argmaxθL(θ,θj)θ_{j+1}=arg\max_θL(θ,θ_j)
      c) 如果θj+1已收斂,則算法結束。否則繼續回到步驟a)進行E步迭代。
    輸出:模型參數θ。

證明

關於證明我就不ctrl+c/ctrl+v了,直接傳送門~
傳送門

參考資料

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