1. 前言
GMM(Gaussian mixture model) 混合高斯模型在機器學習、計算機視覺等領域有着廣泛的應用。其典型的應用有概率密度估計、背景建模、聚類等。
2. GMM介紹
高斯混合模型(Gaussian Mixed Model)指的是多個高斯分布函數的線性組合,理論上GMM可以擬合出任意類型的分布,通常用於解決同一集合下的數據包含多個不同的分布的情況。

3. GMM原理解析
根據我們之前EM算法-原理詳解,我們已經學習了EM算法的一般形式:
\[Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)},\theta^{j})\;\;\;\;(1) \]
\[\sum\limits_{z}Q_i(z^{(i)}) =1 \]
\[L(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)},z^{(i)}|\theta)} \]
現在我們用高斯分布來一步一步的完成EM算法。
設有隨機變量\(\boldsymbol{X}\),則混合高斯模型可以用下式表示:
\[p(\boldsymbol{x}|\boldsymbol{\pi},\boldsymbol{\mu},\boldsymbol{\Sigma})=\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k) \]
\[\sum_{k=1}^K\pi_k=1 \]
\[0<\pi_k<1 \]
其中\(\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)\)稱為混合模型中的第\(k\)個分量(component)。可以看到\(\pi_k\)相當於每個分量\(\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)\)的權重
3.1 引入隱變量
我們引入一個隱變量\(z_{ik}\),\(z_{ik}\)的含義是樣本\(x_i\)來自第\(k\)個模型的數據分布。
\[z_{ik}= \left \{\begin{array}{cc} 1, & if\ data\ item\ i\ comes\ from\ component\ k\\ 0, & otherwises \end{array}\right. \]
則有
\[P(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) = \prod_{k=1}^K\prod_{i=1}^N[\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)]^{z_{ik}}=\prod_{k=1}^K\pi_k^{n_k}\prod_{i=1}^N[\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)]^{z_{ik}}\;\;\;\;(2) \]
其中\(n_k=\sum\limits_{i=1}^Nz_{ik}\),\(\sum\limits_{k=1}^Kn_k=N\)
再對(2)進一步化簡得到:
\[P(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)=\prod_{k=1}^K\pi_k^{n_k}\prod_{i=1}^N[\frac{1}{\sqrt{2\pi}\boldsymbol{\Sigma_k}}exp(-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k})]^{z_{ik}} \]
取對數log后:
\[logP(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)=\sum_{k=1}^Kn_klog\pi_k+\sum_{i=1}^Nz_{ik}[log(\frac{1}{\sqrt{2\pi}})-log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k}] \]
3.2 確定E步極大似然函數
計算最大似然估計\(L(\theta,\theta^{(j)})\),\(j\)是第\(j\)次EM的過程,下式子中的\(E_Q\)是(1)中\(Q\)函數的期望值
\[L(\theta,\theta^{(j)})=E_Q[logP(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)] \]
\[L(\theta,\theta^{(j)})=E_Q[\sum_{k=1}^Kn_klog\pi_k+\sum_{i=1}^Nz_{ik}[\frac{D}{2}log(2\pi)-\frac{1}{2}log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k}]] \]
\[L(\theta,\theta^{(j)})=\sum_{k=1}^K[\sum_{i=1}^N(E_Q(z_{ik}))log\pi_k+\sum_{i=1}^NE_Q(z_{ik})[\frac{D}{2}log(2\pi)-\frac{1}{2}log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k}]] \]
我們記\(\gamma_{ik}=E_Q(z_{ik})\),\(n_k=\sum\limits_{i=1}^N\gamma_{ik}\)可以算出
\[L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k+(\frac{D}{2}log(2\pi)-\frac{1}{2}(log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k})] \]
因為\(\frac{D}{2}log(2\pi)\)是常數,忽略不計
\[L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})] \]
\[\gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)} \]
3.3 確定M步,更新參數
M步的過程是最化大\(L(\theta, \theta^{j})\),求出\(\theta^{(j+1)}\)
\[\theta^{j+1} = arg \max \limits_{\theta}L(\theta, \theta^{j}) \]
因為有
\[n_k=\sum_{i=1}^N\gamma_{ik} \]
通過\(L(\theta, \theta^{j})\)對\(\mu_k\),\(\Sigma_k\)求偏倒等於0得到
\[\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i \]
\[\Sigma_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2 \]
\[\pi_k=\frac{n_k}{N} \]
4. GMM算法流程
輸入:觀測數據\(x_1,x_2,x_3,...,x_N\)
輸出:GMM的參數
- 初始化參數
- E步:根據當前模型,計算模型\(k\)對\(x_i\)的影響
\[\gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)} \]
- M步:計算\(\mu_{k+1},\Sigma_{k+1}^2,\pi_{k+1}\)。
\[n_k=\sum_{i=1}^N\gamma_{ik} \]
\[\mu_{k+1}=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i \]
\[\Sigma_{k+1}^2=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2 \]
\[\pi_{k+1}=\frac{n_k}{N} \]
- 重復2,3兩步直到收斂