高斯分布有很多重要的性质,但是用它来描述现实中的数据的话,它还是有很多局限的。如果将这些简单的分布线性组合,就可以更好的描述实际数据的性质了,这样的模型便被称为混合模型。最常用和最流行的混合模型就是高斯混合模型GMM(Gaussian Mixture Model )。如果用足够多的高斯分布,调整其期望和协方差矩阵,以及线性组合的系数,就可以精确的表述任何连续分布。

1). 有K个高斯分布的高斯混合模型,可以表示为:

(1) \begin{equation*} p(x)=\sum_{k=1}^{K}\pi_k \mathcal{N}(x | u_k, \Sigma_k) \end{equation*}

其中每个高斯分布\mathcal{N}(x | u_k, \Sigma_k)被称为一个component,参数\pi_k被称为混合系数,为了计算和分析的方便\pi_k通常被正则化为:

(2) \begin{equation*} \sum_{k=1}^K \pi_k = 1 \end{equation*}

如果把\pi_k=p(k)看做是能取到第k个component的先验概率,\matchcal{N}(x | u_k, \Sigma_k)=p(x|k)看做是第k个component中发生x的条件概率,那么根据贝叶斯定理,发生x之后,推断其属于第k个component的后验概率为:

(3) \begin{equation*} \gamma_k(x) \equiv p(k|x) =\frac{p(k)p(x|k)}{\sum_l p(l) p(x|l)} \end{equation*}

2) 高斯混合模型的最大似然
想要确定p(X|\pi,u,\sigma)中的参数\pi_k u_k \sigma_k,很容易想到用最大似然法。

(4) \begin{equation*} \begin{split} \ln p(X|\pi,u,\sigma) &= \ln \prod_{i=1}^{N}p(x_i)\\ &=\sum_{i=1}^{N} \ln \p(x_i) \\ &= \sum_{i=1}^{N} \ln \sum_{k=1}^{K}\pi_k \mathcal{N}(x_n|u_k,\Sigma_k) \end{split} \end{equation*}

但是这个log likelihood方程并不是很好解,因为需要在对数里面求和。于是一个优雅而强大的解决此问题的方法诞生了:期望最大化法EM(Expectation-Maximization)

3) 用EM法求高斯混合模型的参数
3.1)首先求解u_k。把\ln p(X|\pi,u,\Sigma)看做是u_k的方程,令式(4)的导数等于0,可得:

(5) \begin{equation*} 0=-\sum_{n=1}^{N}\underbrace{ \frac{\pi_k \mathcal{N}(x_n | u_k,\sigma_k) }{\sum_j \pi_j \mathcal{N}(x_n | u_j, \sigma_j)}}_{\gamma (z_{nk})} \Sigma_{k} (x_n-u_k) \end{equation*}

两边同乘以\Sigma_k^{-1},可得:

(6) \begin{equation*} u_k = \frac{1}{N_k}\sum \gamma (z_{nk})x_n \end{equation*}

其中N_k=\sum \gamma (z_{nk})

3.2) 同理将\ln p(X|\pi,u,\Sigma)看做是\Sigma_k的方程,令式(4)的导数等于0

(7) \begin{equation*} \Sigma_k=\frac{1}{N_k}\sum \gamma(z_nk)(x_n-u_k)(x_n-u_k)^T \end{equation*}

3.3) 求\pi_k. 将\ln p(X|\pi,u,\Sigma)看做是\pi_k的方程,由于\sum_{k=1}^{K}\pi_k=1,在这里引入拉格朗日乘子,令
\ln p(X|\pi,u,\Sigma)+\lambda(\sum_{k=1}^{K}-1)的导数等于0,可得

(8) \begin{equation*} 0=\sum_{n=1}^{N} \frac{\pi_k \mathcal{N}(x_n | u_k,\sigma_k) } {\sum_j \pi_j \mathcal{N}(x_n | u_j, \sigma_j)} + \lambda \end{equation*}

两边同乘以\pi_k,且令\lambda=-N,可得

(9) \begin{equation*} \pi_k = \frac{N_k}{N} \end{equation*}

然后有了式(6)(7)(9),并不能直接求出这些参数,因为\gamma(z_{nk})中同时包含这些未知量,这就引导我们通过一种迭代的方式来求解,这就是期望最大法。首先设定一些u_k,\Sigma_k,\pi_k的初始值,然后通过迭代不断的更新这些值,直到收敛。

高斯混合模型的的最大期望法

1. 选择期望u_k,协方差矩阵\Sigma_k,混合系数\pi_k的初始值,可以任意,但是通常可以先经过k-means得到一个较为理想的初始值,可以有效的减少迭代次数。
2. E step。计算每个变量属于哪个component的后验概率。

(10) \begin{equation*} \gamma (z_{nk}) =\frac{p(k)p(x|k)}{\sum_l p(l) p(x|l)} \end{equation*}

3. M step。根据计算的后验概率,计算每个component的参数:

(11) \begin{equation*} u_k^{new} = \frac{1}{N_k}\sum \gamma(z_{nk})x_n \end{equation*}

(12) \begin{equation*} \Sigma_k^{new}=\frac{1}{N_k}\sum \gamma(z_nk)(x_n-u_k^{new})(x_n-u_k^{new})^T \end{equation*}

(13) \begin{equation*} \pi_k^{new} = \frac{N_k}{N} \end{equation*}

4. 检查似然函数

(14) \begin{equation*} \ln p(X|\pi,u,\sigma) = \sum_{i=1}^{N} \ln \sum_{k=1}^{K}\pi_k \mathcal{N}(x_n|u_k,\Sigma_k) \end{equation*}

是否收敛,如果不是重复第二步。