高斯混合模型¶
当观测变量 \(X\) 是高斯分布时,就称为高斯混合模型(Gaussian mixture model,GMM) ,高斯混合模型是应用最广的混合模型。 此时构成 \(X\) 的每个分量都是一个高斯变量, 通常在高斯混合模型中,\(X\) 的每个分量是一个多元高斯分布, 为了以示区分,我们用粗体符号,观测变量整体记作 \(\pmb{X}\) ,第 \(k\) 个分量记作 \(\pmb{X}_k\) ,粗体表示变量是一个多元高斯分布, 记作 \(\pmb{X}_k \sim \mathcal{N}(\pmb{\mu}_k,\Sigma_k)\) 。隐变量 \(Z\) 仍然是一个服从类别分布的单变量, 记作 \(Z \sim Cat(\lambda_k)\)。
模型的表示¶
高斯混合模型的有向图表示为
高斯混合模型的有向图表示¶
同理,模型的联合概率分布为
()¶\[P(Z,\pmb{X};\lambda,\mu,\Sigma) = P(Z;\lambda)P(\pmb{X}|Z;\mu,\Sigma)\]
类别变量 \(Z\) 的边缘概率分布 \(P(Z;\lambda)\) 为
()¶\[P(Z;\lambda) = \prod_{k=1}^K \lambda_k^{z_k} ,\quad \sum_{k=1}^K \lambda_k = 1\]
条件概率分布 \(P(\pmb{X}|Z)\) 为
()¶\[P(X|Z) = \prod_{k=1}^K P(\pmb{X}_k;\theta_k)^{z_k}
= \prod_{k=1}^K \mathcal{N}(\pmb{X};\pmb{\mu}_k,\Sigma_k)^{z_k}\]
单一分量 \(\pmb{X}_k\) 的概率密度函数为
()¶\[P(\pmb{X}_k;\theta_k) = \mathcal{N}(\pmb{X};\pmb{\mu}_k,\Sigma_k)\]
参数估计¶
按照上一节混合模型的 EM 算法的过程填充相应的部分即可。
E-步骤: 计算隐变量 \(Z\) 的后验概率
()¶\[\begin{split}\gamma_{ik}
&= \frac{P(Z_i=z_k;\lambda^{t-1})P(\pmb{X}_{i}=\pmb{x}_i;\theta_k^{t-1})}
{\sum_{k=1}^K P(Z_i=z_k;\lambda^{t-1})P(\pmb{X}_{i}=\pmb{x}_i;\theta_k^{t-1}) }\\
&= \frac{ \lambda_k \mathcal{N}(\pmb{x}_i; \pmb{\mu}_k,\Sigma_k) }
{\sum_{k=1}^K \lambda_k \mathcal{N}(\pmb{x}_i ; \pmb{\mu}_k,\Sigma_k) }\end{split}\]
在这一步中,所有参数认为是已知的,使用上一轮迭代得到的估计值。
M-步骤: 极大化Q函数得到参数的解。
目标函数为
()¶\[\begin{split}Q &= \left [ \sum_{i=1}^N \sum_{k=1}^K \gamma_{ik} \ln P(Z_i=z_k;\lambda^{t}) \right ]
+ \left [ \sum_{i=1}^N \sum_{k=1}^K \gamma_{ik} \ln P(\pmb{X}_{i}=\pmb{x}_i;\theta^{t}_k) \right ] \\
&= \left [ \sum_{i=1}^N \sum_{k=1}^K \gamma_{ik} \lambda_k \right ]
+ \left [ \sum_{i=1}^N \sum_{k=1}^K \gamma_{ik} \ln \mathcal{N}(\pmb{x}_i ; \pmb{\mu}_k,\Sigma_k) \right ]\end{split}\]
在这一步骤中,\(\gamma_{ik}\) 由上一步计算得到,其值是已知的; 所有模型参数是未知的,需要极大化求解。 对于高斯混合模型来讲,可以直接令目标函数参数的偏导数为零得到参数估计值。
()¶\[ \begin{align}\begin{aligned}\lambda_k &= \frac{N_k}{N}\\\pmb{\mu}_k &= \frac{\sum_{i=1}^N \gamma_{ik} \pmb{x}_i }{N_k}\\
\Sigma_k &= \frac{ \sum_{i=1}^N \gamma_{ik} (\pmb{x}_i- \pmb{\mu}_k)^2 }{N_k}\end{aligned}\end{align} \]
其中
()¶\[N_k = \sum_{i=1}^N \gamma_{ik}\]
得到参数值后检查是否收敛,如果没有收敛则重复执行E步骤和M步骤,直到参数收敛为止。