高斯混合模型(GMM)



文章目錄
  1. 1. 1. 高斯模型簡介
    1. 1.1. 1.1. 單高斯模型
    2. 1.2. 1.2. 高斯混合模型
    3. 1.3. 1.3. 高斯混合模型與K-means異同點
  2. 2. 2. 高斯混合模型參數估計說明(EM算法)
    1. 2.1. 2.1. 明確影變量,寫出完全數據的對數似然函數
    2. 2.2. 2.2. EM算法E步
    3. 2.3. 2.3. EM算法M步
  3. 3. 3. 總結
  4. 4. 4. 主要參考資料

  將以前寫的高斯混合模型的博客重新修改,主要是將圖片的公式改成latex形式,更加美觀,以后也更加好修改。

1. 高斯模型簡介

  首先介紹一下單高斯模型(GSM)和高斯混合模型(GMM)的大概思想。

1.1. 單高斯模型

  如題,就是單個高斯分布模型 or 正態分布模型。想必大家都知道正態分布,這一分布反映了自然界普遍存在的有關變量的一種統計規律,例如身高,考試成績等;而且有很好的數學性質,具有各階導數,變量頻數分布由 $\mu$、$\sigma$ 完全決定等等,在許多領域得到廣泛應用。在這里簡單介紹下高斯分布的概率密度分布函數: \begin{equation}\label{SGM}\phi \left ( y\mid \theta \right )= \frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left ( y-\mu \right )^{2}}{2\sigma^{2}} \right )\end{equation}其中$\theta=(\mu,\sigma^2)$

1.2. 高斯混合模型

  注:在介紹GMM的時候,注意跟K-means的相似點
  K個GSM混合成一個GMM,每個GSM稱為GMM的一個component,也就是分為K個類,與K-means一樣,K的取值需要事先確定,具體的形式化定義如下:\begin{equation}\label{GMM}P(y\mid \theta )=\sum_{k=1}^{K}\alpha_{k}\phi (y\mid \theta_{k})\end{equation}其中,$\alpha_k$ 是樣本集合中 $k$ 類被選中的概率:$\alpha_k=P(z=k|\theta)$,其中 $z=k$ 指的是樣本屬於 $k$ 類,那么 $\phi (y\mid \theta_{k})$ 可以表示為 $\phi (y\mid \theta_{k})=P(y|z=k,\theta$,很顯然 $\alpha_k \geq 0$,$\sum_{k=1}^K \alpha_k =1$ y是觀測數據。
  這里如果我們事先知道每個樣本的分類情況,那么求解GMM的參數非常直觀,如下表示:

假設 有K個類,樣本數量分別為 $N_1,N_2,…, N_k$ 且 $N_1+N_2+…+N_k=N$,即有觀測數據 $y_1,y_2,…, y_k$,第 $k$ 個分類的樣本集合表示為 $S(k)$,那么公式 $\eqref{GMM}$ 中的三個參數可以表示為:\begin{equation}\label{alpha}\alpha_{k}=N_{k}/N\end{equation}\begin{equation}\label{mu}\mu_{k}=\frac{1}{N_{k}}\sum_{y\in S(k)}y\end{equation}\begin{equation}\label{sigma}\sigma_{k}=\frac{1}{N_{k}}\sum_{y\in S(k)}(y-\mu_{k} )^{2}\end{equation}

  這樣是理想情況,例如給你一堆人類的身高的數據,以及對應的性別,那么這個就是估計兩個分量的高斯混合模型,需要學習至少5個參數(事實是6個,另外一個可以有 $1-\alpha$ 得出)。但是如果給你的人類身高的數據,為給出相應的性別的數據,這樣進行學習的話就是一個聚類問題,同樣可以知道需要聚成兩類(注:許多時候連K也是需要事先假設的),直觀上可以按照跟K-means算法以致的思路,只是這里的屬於某個類是一個概率,而不是一定的。
  首先可以先假設聚成K類,然后選擇參數的初始值 $\theta_0$(總共2K個變量),這里需要引進一個變量 $\gamma_{jk}$,表示的是第 $j$ 個觀測來自第 $k$ 個component的概率,即數據 $j$ 由第 $k$ 個Component 生成的概率,或者可以說是這個component上生成這個數據的概率,可以根據后驗概率計算得到:\begin{align} \gamma_{jk} & = P(z=k\mid y_{j},\theta )\label{postgama1}\\
& =\frac{P(z=k,y_{j}\mid \theta )}{\sum_{k=1}^{K}P(z=k,y_{j}\mid \theta )}\label{postgama2}\\
& =\frac{P(y_{j}\mid z=k,\theta )P(z=k\mid \theta )}{\sum_{k=1}^{K}P(y_{j}\mid z=k,\theta )P(z=k\mid \theta)}\label{postgama3}\\
& =\frac{\alpha_{k}\phi (y_{j}\mid \theta_{k})}{\sum_{k=1}^{K}\alpha_{k}\phi (y_{j}\mid \theta_{k})}\label{postgama4}
\end{align}   注:這個與 $\alpha_k$ 的區別,$\alpha_k$ 指的是第k個component被選中的概率,需要 $\gamma_jk$ 對所有的數據j進行累加
  公式$\eqref{postgama1}\Rightarrow\eqref{postgama2}\Rightarrow\eqref{postgama3}\Rightarrow\eqref{postgama4}$分別使用了貝葉斯估計,全概率公式以及 $\alpha_k$ 和 $\phi (y_{j}\mid \theta_{k})$ 的定義就可得出。
  上面是根據數據 $j$ 計算各個component的生成概率,而現在根據每個component生成了1,2,…N點數據,每個component有事一個高斯分布,那么根據 $\alpha,\mu, \sigma^2$ 的定義又可以直觀地得出如下式子:\begin{equation}\label{GMMalpha}\alpha_{k}=\frac{\sum_{j=1}^{N} \gamma_{jk}}{N}\end{equation}\begin{equation}\label{GMMmu}\mu_{k}=\frac{\sum_{j=1}^{N} \gamma_{jk}y_{j}}{\sum_{j=1}^{N} \gamma_{jk}}\end{equation}\begin{equation}\label{GMMsigma}\sigma^{2}_{k}=\frac{\sum_{j=1}^{N} \gamma_{jk}(y_{j}-\mu_{k})^{2}}{\sum_{j=1}^{N} \gamma_{jk}}\end{equation}  這樣其實只是把原本樣本一定屬於某一類改成了一個樣本屬於某類的概率,而k類樣本數量 $N_k$ 變成了概率相加,$N_k = \sum_{j=1}^N \gamma_{jk}$ ,就可以直接得出 $\eqref{GMMalpha},\eqref{GMMmu},\eqref{GMMsigma}$ 的公式。
  不知不覺就把EM算法的兩步迭代給寫完了,即將公式 $\eqref{postgama4}$ 和公式 $\eqref{GMMalpha},\eqref{GMMmu},\eqref{GMMsigma}$ 進行相互迭代,直到收斂,高斯混合模型就聚類好了。
  下面給出較為清晰的訓練高斯混合模型的算法步驟:

GMM算法1
選取初始值初始化θ,
repeat{
  (1)估計每個數據的每個component生成概率,即:$$ \gamma_{jk} =\frac{\alpha_{k}\phi (y_{j}\mid \theta_{k})}{\sum_{k=1}^{K}\alpha_{k}\phi (y_{j}\mid \theta_{k})}$$  (2)根據,估計每個component的參數,得:
    公式 $\eqref{GMMalpha},\eqref{GMMmu},\eqref{GMMsigma}$
}直到收斂

  這樣,高斯混合模型已經介紹完,當然上面只是直觀介紹,具體的與EM算法思想對應關系說明會放在后面一節。
  再算法推導之前,我們先看下K-means和高斯混合模型的異同點。

1.3. 高斯混合模型與K-means異同點

  • 相同點:
    (1)需要指定K值
    (2)需要指定初始值,例如K-means的中心點,GMM的各個參數
    (3)都是含有EM算法思想
  • 不同點:
    (1)優化目標函數不同,K-means:最短距離,GMM:最大化log似然估計
    (2)E步的指標不同,K-means:點到中心的距離(硬指標),GMM:求解每個觀測數據 的每個component的概率(軟指標)

2. 高斯混合模型參數估計說明(EM算法)

  下面將EM算法與高斯混合模型的參數估計對應起來,如果不清楚地或者已經忘了部分內容的,可以參照上篇博客EM算法學習

2.1. 明確影變量,寫出完全數據的對數似然函數

  從上節,我們可以看出,就可以作為隱變量,那么完全數據的對數似然函數為:\begin{equation}
\begin{split}
\label{loglikelihood}
l(\theta ) & =\sum_{j=1}^{N}logP(y_{j}\mid \theta )\\
& =\sum_{j=1}^{N}log\sum_{k=1}^{K}\alpha_{k}\phi (y_{j}\mid \theta_{k})\\
& =\sum_{j=1}^{N}log\sum_{k=1}^{K}\gamma_{jk}\frac{\alpha_{k}\phi (y_{j}\mid \theta_{k})}{\gamma_{jk}}\\
& \geq \sum_{j=1}^{N}\sum_{k=1}^{K}\gamma_{jk}log\frac{\alpha_{k}\phi (y_{j}\mid \theta_{k})}{\gamma_{jk}}
\end{split}
\end{equation}  可以發現這就是很簡單的EM算法利用Jensen不等式的推導。

2.2. EM算法E步

  見上篇博客EM算法學習,這部分就是求解期望H函數,也就是求解隱含參數概率 $\gamma_{jk}$ 即可,那么根據Jensen不等式,等式成立的約束條件,即可得出公式 $\eqref{postgama2},\eqref{postgama3},\eqref{postgama4}$,這里不做多復述。
  在李航老師的《統計學習方法》中,給了 $\gamma_{jk}$ 比較正規的說明,即在當前模型參數下第 $j$ 個觀測數據來自第 $k$ 個分模型的概率,稱為分模型 $k$ 對觀測數據 $y_j$ 的響應度。

2.3. EM算法M步

  根據EM算法M步,可得,這里就是在知道 $\gamma_{jk}$ 的情況下,求解 $\theta$ 使得 $\sum_{j=1}^N\sum_{k=1}^K\phi_{jk}\log \frac{\alpha_k \phi(y_j|\theta_k)}{\gamma_{jk}}$ 取到最大值,而這個式子中 $\log$ 上沒有疊加式子,就可以求偏導為零,求得參數值。
  這里所遇到的問題,怎樣詳細地推導出公式 $\eqref{GMMalpha},\eqref{GMMmu},\eqref{GMMsigma}$。
  首先將公式 $\eqref{SGM}$ 代入 $\eqref{loglikelihood}$,得:\begin{equation}
\begin{split}
\label{Hiteration}
H(\theta ,\theta ^{t}) &= \sum_{j=1}^{N}\sum_{k=1}^{K}\gamma_{jk}log\frac{\alpha_{k}\phi (y_{j}\mid \theta_{k})}{\gamma_{jk}}\\
& =\sum_{j=1}^{N}\sum_{k=1}^{K}\gamma_{jk}log\frac{\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left ( y-\mu \right )^{2}}{2\sigma^{2}} \right )}{\gamma_{jk}}\\
& =\sum_{j=1}^{N}\sum_{k=1}^{K}\gamma_{jk}\left [\log \alpha_{k} +\log \left ( \frac{1}{\sqrt{2\pi }} \right ) -\log \sigma_{k}-\frac{(y-\mu )^{2}}{2\sigma_{k}^{2}}-\log\gamma_{jk} \right ]
\end{split}
\end{equation}  那么我們只要對公式 $\eqref{Hiteration}$ 分別對 $\mu,\sigma^2$ 偏導為零即可,而 $\alpha$ 在 $\alpha_k \geq 0, \sum_{k=1}^K \alpha_k = 1$的條件下求偏導為 0,需要使用拉格朗日定理。

具體推導如下:

公式 $\eqref{GMMalpha}$
  令,那么對L(θ)分別對α和λ求偏導為零,得(這里謝謝網友@紫夢lan提醒,有個公式推導小錯誤,現在已經修改):\begin{align}
& \because\ \frac{ \partial L(\theta) }{\partial \alpha_{k}}=\sum_{j=1}^{N}\gamma_{jk}/\alpha_{k}-\lambda =0,\notag\\
& \therefore \alpha_{k}=\frac{\sum_{j=1}^{N}\gamma_{jk}}{\lambda} \label{GMMalpha-1}\\
& \because\ \frac{ \partial L(\theta) }{\partial \lambda }=\sum_{k=1}^{K}\alpha_{k}-1=0 \label{GMMalpha-2}\\
& take\;\eqref{GMMalpha-1}\; into\; \eqref{GMMalpha-2} \notag\\
& \therefore \frac{\sum_{k=1}^{K}\sum_{j=1}^{N}\gamma_{jk}}{\lambda }-1=\frac{\sum_{j=1}^{N}\sum_{k=1}^{K}\gamma_{jk}}{\lambda }-1=0\notag\\
& According\; to\; the \; definition\; of \; \gamma_{jk}:\notag\\
& \gamma_{jk}=\frac{\alpha_{k}\phi (y_{j}\mid \theta_{k})}{\sum_{k=1}^{K}\alpha_{k}\phi (y_{j}\mid \theta_{k})}\notag\\
& \therefore \sum_{k=1}^{K}\gamma_{jk}=0 \; \; \therefore \frac{\sum_{j=1}^{N}1}{\lambda }-1=0\notag\\
& \therefore \lambda =N\; \; \; \therefore \alpha_{k}=\frac{\sum_{j=1}^{N}\gamma_{jk}}{N}\notag
\end{align}  (我這邊latex公式中不能輸入中文,所以上式推導用英文說明了,應該推導清楚了。)

公式 $\eqref{GMMmu}$
\begin{align*}
& \because \frac{\partial H(\theta, \theta^t)}{\partial\mu_k}=\sum_{j=1}^N \gamma_{jk} \frac{y_k-\mu_k}{\sigma_k^2}=0 \\
& \therefore \sum_{j=1}^N \gamma_{jk}(y_k-\mu_k)=0\\
& \therefore \sum_{j=1}^N \gamma_{jk}y_k= \sum_{j=1}^N \gamma_{jk}\mu_k\\
& \therefore \mu_k = \frac{\sum_{j=1}^N \gamma_{jk}y_k}{\sum_{j=1}^N \gamma_{jk}}
\end{align*}

公式 $\eqref{GMMsigma}$
  對 $\sigma^2$ 求偏導為零得到的 $\sigma^2$ 值跟對 $\sigma$ 求偏導為零得到的 $\sigma^2$ 值是一樣的,所以這里我對 $\sigma$ 求偏導為零得到的 $\sigma^2$:
\begin{align*}
& \because \frac{\partial H(\theta ,\theta ^{t})}{\partial \sigma_{k}}=\sum_{j=1}^{N}\gamma_{jk}\left [ -\frac{1}{\sigma_{k}} +\frac{(y_{k}-\mu_{k})^{2}}{\sigma_{k}^{3}}\right ]=0\\
& \;\ two \; sides \times \sigma_{k}^{3}\\
& \therefore \sum_{j=1}^{N}\gamma_{jk}\left [ -\sigma_{k}^{2} +(y_{k}-\mu_{k})^{2}\right ]=0\\
& \therefore \sigma_{k}^{2}=\frac{\sum_{j=1}^{N}\gamma_{jk}(y_{k}-\mu_{k})^{2}}{\sum_{j=1}^{N}\gamma_{jk}}
\end{align*}  到現在公式 $\eqref{GMMalpha},\eqref{GMMmu},\eqref{GMMsigma}$ 都已推出,其實這部分的推導只是簡單的應用了最大似然估計得出。

3. 總結

  其他的混合模型,例如朴素貝葉斯混合模型都可以使用EM算法推出使用,這里不再次推導。我個人覺得EM算法就是相互迭代,求出一個穩定值,而這種相互迭代的方法用的范圍挺廣的,例如混合模型,k-means,HMM中的Baum-welch算法等。
  思考:相互迭代,比較試用的場景:某個事件大概可以分為兩部分,一個是整一個類發生的概率,一個每個小個體發生的概率,而這個兩個部分可以相互求解計算,迭代到一個穩定值或者類似於hits算法一樣。例:記得去年WWW會議中有以一篇惡意評論用戶的查找,就是給每個用戶一個概率,給每個惡意評論組(包括幾個一起惡意評論的用戶)一個概率,而這兩個概率就可以相互迭代達到穩定值,得到的結果也較好。是否可以利用相同思想應用到其他場景。

4. 主要參考資料

[1]李航.統計學習方法.北京:清華大學出版社,2012
[2]http://www.cnblogs.com/zhangchaoyang/articles/2624882.html
[3]http://blog.pluskid.org/?p=39, pluskid的
[4]http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html JerryLead
[5]http://cs229.stanford.edu/materials.html, Andrew NG教授的講義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM