1. 前言
前面幾篇博文對EM算法和GMM模型進行了介紹,本文我們通過對GMM增加一個懲罰項。
2. 不帶懲罰項的GMM
原始的GMM的密度函數是
\[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 \]
其中\(K\)是高斯組件的個數,\([\pi_1,\pi_2,...,\pi_k]\)是每個組件的權重。其中的\(\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k\)是組件\(k\)的均值和協方差矩陣。
log極大似然函數的公式是:
\[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})]\;\;\;\;\;(1) \]
這里有一個響應度的變量\(\gamma_{ik}\),響應度\(\gamma_{ik}\)代表了第\(i\)個樣本,在第\(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)} \]
通過\(L(\theta, \theta^{j})\)對\(\mu_k\),\(\Sigma_k\)求偏倒等於0得到
\[\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i\;\;\;\;\;(2) \]
\[\Sigma_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2 \]
\[\pi_k=\frac{n_k}{N} \]
其中的\(n_k=\sum_{i=1}^N\gamma_{ik}\)。
到這里為止我們不帶懲罰項的所有變量都計算出來了,只要一直循環E步M步,就能使得loglikelihood最大化。
3. 帶懲罰項的GMM
在帶penality的GMM中,我們假設協方差是一個對角矩陣,這樣的話,我們計算高斯密度函數的時候,只需要把樣本各個維度與對應的\(\mu_k\)和\(\sigma_k\)計算一維高斯分布,再相加即可。不需要通過多維高斯進行計算,也不需要協方差矩陣是半正定的要求。
我們給上面的(1)式加入一個懲罰項,
\[\lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j} \]
其中的\(P\)是樣本的維度。\(\bar{x}_j\)表示每個維度的平均值,\(s_j\)表示每個維度的標准差。這個penality是一個L1范式,對\(\mu_k\)進行約束。
加入penality后(1)變為
\[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})] - \lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j} \]
這里需要注意的一點是,因為penality有一個絕對值,所以在對\(\mu_k\)求導的時候,需要分情況。於是(2)變成了
\[\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i \]
\[\mu_k= \left \{\begin{array}{cc} \frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i - \frac{\lambda\sigma^2}{s_j}), & \mu_k >= \bar{x}_j\\ \frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i + \frac{\lambda\sigma^2}{s_j}), & \mu_k < \bar{x}_j \end{array}\right. \]
3.1 注意點
- 在帶有penality的GMM中,如果從一開始迭代時,\(\lambda>0\)那這時loglikelihood很容易陷入一個局部最大值。如果前幾個迭代我們先令\(\lambda=0\),而后在令\(\lambda>0\),這樣能夠尋找到一個比較好的最大值點。
- 由於在算EM的時候,很容易出現underflow活着overflow,這是我們可以通過一個近似公式來避開這個問題。
\[log(\sum_hexp(a_h)) = m + log(\sum_hexp(a_h - m))\;\;\;m=max(a_h) \]
- 初始值很影響EM的聚類的結果,所以我們需要改變seed來多次運行程序,尋找導最好的EM結果。
4. 總結
本文對GMM模型進行了改良,加入了L1的penality項,使得\(\mu_k\)不會偏離\(\bar{x}_j\)太大,導致過擬合。下一篇博客通過代碼,詳細的展示這個過程。