高斯混合模型GMM是一個非常基礎並且應用很廣的模型。對於它的透徹理解非常重要。網上的關於GMM的大多資料介紹都是大段公式,而且符號表述不太清楚,或者文筆非常生硬。本文嘗試用通俗的語言全面介紹一下GMM,不足之處還望各位指正。
首先給出GMM的定義
這里引用李航老師《統計學習方法》上的定義,如下圖:

定義很好理解,高斯混合模型是一種混合模型,混合的基本分布是高斯分布而已。
第一個細節:為什么系數之和為0?
PRML上給出過一張圖:

這圖顯示了擁有三個高斯分量的一個維度的GMM是如何由其高斯分量疊加而成。這張圖曾經一度對我理解GMM造成了困擾。因為如果是這樣的話,那么這三個高斯分量的系數應該都是1,這樣系數之和便為3,才會有這樣直接疊加的效果。而這顯然不符合GMM的定義。因此,這張圖只是在形式上展現了GMM的生成原理而並不精確。
那么,為什么GMM的各個高斯分量的系數之和必須為1呢?
其實答案很簡單,我們所謂的GMM的定義本質上是一個概率密度函數。而概率密度函數在其作用域內的積分之和必然為1。GMM整體的概率密度函數是由若干個高斯分量的概率密度函數線性疊加而成的,而每一個高斯分量的概率密度函數的積分必然也是1,所以,要想GMM整體的概率密度積分為1,就必須對每一個高斯分量賦予一個其值不大於1的權重,並且權重之和為1。
第二個細節:求解GMM參數為什么需要用EM算法
總所周知,求解GMM參數使用EM算法。但是為什么呢?這樣是必須的嗎?
首先,類似於其他的模型求解,我們先使用最大似然估計來嘗試求解GMM的參數。如下:


可以看出目標函數是和的對數,很難展開,優化問題麻煩,難以對其進行求偏導處理。因此只能尋求其它方法。那就是EM算法。
第三個細節:求解GMM的EM算法隱變量的理解
使用EM算法必須明確隱變量。求解GMM的時候設想觀測數據x是這樣產生的:首選依賴GMM的某個高斯分量的系數概率(因為系數取值在0~1之間,因此可以看做是一個概率取值)選擇到這個高斯分量,然后根據這個被選擇的高斯分量生成觀測數據。然后隱變量就是某個高斯分量是否被選中:選中就為1,否則為0。
按照這樣的設想:隱變量是一個向量,並且這個向量中只有一個元素取值為1,其它的都是0。因為假設只有一個高斯分量被選中並產生觀測數據。然而我們的GMM的一個觀測數據在直觀上應該是每個高斯分量都有產生,而不是由一個高斯分量單獨生成,只是重要性不同(由系數控制)。那么,這樣的隱變量假設合理嗎?
答案是合理,只是理解起來比較“費勁”而已。
首先明確一點:GMM的觀測數據是啥,GMM的函數結果又是啥。如果是一個一維的GMM,那么其觀測數據就是任意一個實數。而GMM這個概率密度函數在輸入這個觀測數據之后輸出的是這個實數被GMM產生的概率而已。
接着,現在我們不知道GMM具體的參數值,想要根據觀測數據去求解其參數。而GMM的參數是由各個高斯分量的參數再加上權值系數組成的。那么我們就先假定,如果這個觀測值只是由其中一個高斯分量產生,去求解其中一個高斯分量的參數。我們假設不同的觀測值都有一個產生自己的唯一歸宿,就像K-means算法一樣。然后在后面的迭代過程中,根據數據整體似然函數的優化過程,逐漸找到一個最優的分配方案。然而,不同於K-means算法的是,我們最終給出的只是某一個觀測是由某一個高斯分量唯一生成的概率值,而不是確定下來的屬於某一類。每個高斯分量其實都可以產生這個觀測數據只是輸出不同而已,即產生觀測數據的概率不同。最后,根據每個高斯分量產生觀測數據的可能性不同,結合其權值匯總出整個GMM產生這個觀測數據的概率值。
終極理解:使用EM算法求解GMM參數
1、定義隱變量
我們引入隱變量γjk,它的取值只能是1或者0。
- 取值為1:第j個觀測變量來自第k個高斯分量
- 取值為0:第j個觀測變量不是來自第k個高斯分量
那么對於每一個觀測數據yj都會對應於一個向量變量Γj={γj1,...,γjK},那么有:
其中,K為GMM高斯分量的個數,αk為第k個高斯分量的權值。因為觀測數據來自GMM的各個高斯分量相互獨立,而αk剛好可以看做是觀測數據來自第k個高斯分量的概率,因此可以直接通過連乘得到整個隱變量Γj的先驗分布概率。
2、得到完全數據的似然函數
對於觀測數據yj,當已知其是哪個高斯分量生成的之后,其服從的概率分布為:
由於觀測數據從哪個高斯分量生成這個事件之間的相互獨立的,因此可以寫為:
這樣我們就得到了已知Γj的情況下單個觀測數據的后驗概率分布。結合之前得到的Γj的先驗分布,則我們可以寫出單個完全觀測數據的似然函數為:
最終得到所有觀測數據的完全數據似然函數為:
取對數,得到對數似然函數為:
3、得到各個高斯分量的參數計算公式
首先,我們將上式中的lnN(yj|μk,Σk)根據單高斯的向量形式的概率密度函數的表達形式展開:
假設我們已經知道隱變量γjk的取值,對上面得到的似然函數分別對αk和Σk求偏導並且偏導結果為零,可以得到:
由於在上面兩式的第二個求和符號是對k=1...K求和,而在求和過程中γjk只有以此取到1,其它都是0,因此上面兩式可以簡化為:
現在參數空間中剩下一個αk還沒有求。這是一個約束滿足問題,因為必須滿足約束ΣKk=1αk=1。我們使用拉格朗日乘子法結合似然函數和約束條件對αk求偏導,可以得到:
將上式的左右兩邊分別對k=1...K求和,可以得到:
將λ代入,最終得到:
至此,我們在隱變量已知的情況下得到了GMM的三種類型參數的求解公式。
4、得到隱變量的估計公式
根據EM算法,現在我們需要通過當前參數的取值得到隱變量的估計公式也就是說隱變量的期望的表達形式。即如何求解E{γjk|y,Θ}。
5、使用EM算法迭代進行參數求解
熟悉EM算法的朋友應該已經可以從上面的推導中找到EM算法的E步和M步。
GMM和K-means直觀對比
最后我們比較GMM和K-means兩個算法的步驟。
GMM:
- 先計算所有數據對每個分模型的響應度
- 根據響應度計算每個分模型的參數
- 迭代
K-means:
- 先計算所有數據對於K個點的距離,取距離最近的點作為自己所屬於的類
- 根據上一步的類別划分更新點的位置(點的位置就可以看做是模型參數)
- 迭代
可以看出GMM和K-means還是有很大的相同點的。GMM中數據對高斯分量的響應度就相當於K-means中的距離計算,GMM中的根據響應度計算高斯分量參數就相當於K-means中計算分類點的位置。然后它們都通過不斷迭代達到最優。不同的是:GMM模型給出的是每一個觀測點由哪個高斯分量生成的概率,而K-means直接給出一個觀測點屬於哪一類。
