初探高斯混合模型GMM

839 阅读2分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

高斯混合模型 GMM

Gaussian Mixture Model 高斯混合模型,属于常见的一种生成模型。

Mixture Model

混合模型是一个可以用来表示在总体分布(distribution)中含有 K 个子分布的概率模型,换句话说,混合模型表示了观测数据在总体中的概率分布,它是一个由 K 个子分布组成的混合分布。混合模型不要求观测数据提供关于子分布的信息,来计算观测数据在总体分布中的概率。

Gaussian Mixture Model

我们知道多维高斯分布遵从如下的概率密度函数:

p(xθ)=1(2π)n2Σ12exp(12(xμ)TΣ1(xμ))p(x\mid \theta)=\dfrac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\dfrac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))

高斯混合模型(Gaussian Mixture Model, GMM)是单一高斯概率密度函数的延伸,GMM能够平滑地近似任意形状的密度分布。

高斯混合模型可以看作是由 K 个单高斯模型组合而成的模型,这 K 个子模型是混合模型的隐变量。

而我们可以认为混合高斯模型的概率密度函数可由其k个单高斯分布概率密度函数加权得来。

假设我们的样本数据为 XX,共有 x1,x2,...,xN  Nx_1,x_2,...,x_N\; N个样本,用 αk\alpha_k 表示第 kk 个单高斯模型的权值因子,G(xθ)G(x|\theta) 表示单高斯的概率密度函数,有:

p(xθ)=k=1KαkG(xθk)p(x|\theta)=\sum_{k=1}^{K}\alpha_kG(x|\theta_k)

显然,GMM的参数是一组 θ\theta

θ=(μk~,Σk~,αk~)\theta = (\tilde{\mu_k},\tilde{\Sigma_k},\tilde{\alpha_k})

看到这里会发现,kk 的取值需要事先确定,非常重要,类似 kmeansk-means 那样需要先确定 kk

参数估计

在多维高斯分布的学习中,我们知道,可以用最大似然来估算 θ\theta 的值,似然函数即 L(θ)=p(xθ)L(\theta)=p(x|\theta)

θ=argmaxL(θ)\theta = argmaxL(\theta)

对于GMM,我们假设每组样本数据是独立的,则似然函数就是kk 个的累乘,考虑到单个点的概率很小,连乘后数据会更小,容易造成浮点数下溢,所以我们可以采用对数似然:

L(θ)=k=1Kp(xkθ)logL(θ)=j=1Nlogk=1KαkG(xθk)L(\theta)=\prod_{k=1}^{K}p(x_k|\theta) \\ logL(\theta)=\sum_{j=1}^{N}log\sum_{k=1}^{K}\alpha_kG(x|\theta_k)

使用EM算法求解

首先随机初始化一组参数

θ=(μk,Σk,αk),  k=1,2,...,K\theta=(\mu_k,\Sigma_k,\alpha_k),\;k=1,2,...,K

E步:

所谓E就是Expectation,就是在当我们知道模型参数时,对隐变量 XX 求期望,如下所示:

γj,k=αkG(xjμk,Σk)k=1KαkG(xjμk,Σk)\gamma_{j,k}=\dfrac{\alpha_k G(x_j|\mu_k,\Sigma_k)}{\sum_{k=1}^{K}\alpha_k G(x_j|\mu_k,\Sigma_k)}

γj,k\gamma_{j,k} 也就是表示数据 xjx_j 属于第 kk 个子高斯模型的概率。

M步:

现在我们有了 γj,k\gamma_{j,k} ,就可以利用最大似然估计下一轮迭代的参数了:

μk=j=1N(γj,kxj)j=1Nγj,k,  k=1,2,...,KΣk=j=1Nγj,k(xjμk)(xjμk)Tj=1Nγj,k,  k=1,2,...,Kαk=j=1Nγj,kN,  k=1,2,...,K\mu_k=\dfrac{\sum_{j=1}^{N}(\gamma_{j,k}x_j)}{\sum_{j=1}^{N}\gamma_{j,k}},\; k=1,2,...,K \\ \Sigma_k=\dfrac{\sum_{j=1}^{N}\gamma_{j,k}(x_j-\mu_k)(x_j-\mu_k)^T}{\sum_{j=1}^{N}\gamma_{j,k}},\; k=1,2,...,K \\ \alpha_k = \dfrac{\sum_{j=1}^{N}\gamma_{j,k}}{N},\; k=1,2,...,K

重复E步和M步直至收敛

需要注意的是,EM 算法具备收敛性,但并不保证找到全局最大值,有可能找到局部最大值。解决方法是初始化几次不同的参数进行迭代,取结果最好的那次。

参考

  1. 李航老师——《统计学习方法》