高斯混合模型(GMM)

  本内容主要介绍 高斯混合模型,以及 如何使用 EM 算法(期望最大算法)估计其参数

  高斯混合模型(Gaussian Mixture Model,GMM),是一种业界广泛使用的 聚类 算法,该方法使用 高斯分布 作为参数模型,并使用 期望最大(Expectation Maximization,简称 EM)算法 进行训练。

1.1 高斯分布

  高斯分布(Gaussian distribution)有时也被称为 正态分布(normal distribution),是一种在自然界大量存在的、最为常见的分布形式。

  高斯分布的概率密度函数公式如下:

N ( x ∣ μ , σ ) = 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) (1.1) \mathcal{N}(x|\mu, \sigma) =\frac{1}{\sqrt{2\pi} \sigma} \exp(-\frac{(x-\mu)^2}{2\sigma^2}) \tag{1.1} N(xμ,σ)=2π σ1exp(2σ2(xμ)2)(1.1)

其中,参数 μ \mu μ 表示均值,参数 σ \sigma σ 表示标准差。均值对应正态分布的中间位置,标准差衡量了数据围绕均值分散的程度。图 1.1 是标准正态分布的图形,即 μ = 1 \mu=1 μ=1 σ = 0 \sigma=0 σ=0 的正态分布。

图 1.1 标准正态分布

  当一个模型为一个高斯分布时,我们可以将其称为 单高斯模型(Gaussian single model, GSM)。如果样本数据 x x x 为一维的,称这个模型为 一维单高斯模型;当样本数据 x \mathbf{x} x 是多维数据时,称这个模型为 多维单高斯模型,其概率密度函数为:

N ( x ∣ μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ⁡ ( − ( x − μ ) T Σ − 1 ( x − μ ) 2 ) (1.2) \mathcal{N}(\mathbf{x} | \mu,\Sigma) = \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp\left( -\frac{(\mathbf{x} - \mu)^{\Tau} \Sigma^{-1} (\mathbf{x}-\mu)}{2} \right) \tag{1.2} N(xμ,Σ)=(2π)2nΣ211exp(2(xμ)TΣ1(xμ))(1.2)

其中, n n n 为数据维度, μ \mu μ n n n 维均值向量(期望), Σ \Sigma Σ n × n n \times n n×n 的协方差矩阵。

1.2 高斯混合模型

  高斯混合模型(Gaussian Mixture Model,GMM)是由多个高斯分布组成的模型,其密度函数为多个高斯密度函数的加权组合,即:

p ( x ) = ∑ j = 1 k p ( j ) p ( x ∣ j ) = ∑ j = 1 k π j N ( x ∣ μ j , σ j ) (1.3) p(x) = \sum_{j=1}^{k} p(j)p(x|j) =\sum_{j=1}^{k} \pi_j \mathcal{N}(x|\mu_j, \sigma_j) \tag{1.3} p(x)=j=1kp(j)p(xj)=j=1kπjN(xμj,σj)(1.3)
其中, π j \pi_j πj 表示第 j j j 个高斯分布的权重系数,并满足 π j ≥ 0 \pi_j \geq 0 πj0 ∑ j = 1 k π j = 1 \sum_{j=1}^{k} \pi_{j} = 1 j=1kπj=1

图 1.2 高斯混合模型

  图 1.2 中 y 1 y_1 y1 y 2 y_2 y2 y 3 y_3 y3 分别表示三个一维单高斯模型; y g m m 1 y_{gmm1} ygmm1 y g m m 2 y_{gmm2} ygmm2 y g m m 3 y_{gmm3} ygmm3 分别表示三个高斯混合模型。理论上 GMM 可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况。

  高斯混合模型的生成过程可以分为两步:

  1. 首先按 π 1 , π 2 , ⋯   , π k \pi_1,\pi_2,\cdots,\pi_k π1,π2,,πk 的分布,随机选取一个高斯分布;
  2. 假设选中第 j j j 个高斯分布,再从高斯分布 N ( x ∣ μ j , σ j ) \mathcal{N}(x|\mu_j,\sigma_j) N(xμj,σj) 中选取一个样本 x x x

1.3 使用 EM 算法估计 GMM 的参数

  针对单高斯模型,我们可以使用 最大似然估计 估计其参数。针对高斯混合模型,因为无法知道当前样本来自于哪个高斯分布,即存在隐变量,所以无法使用最大似然估计估计其参数,需要使用 EM 算法估计其参数。

1.3.1 使用 EM 算法估计 GMM 的参数

  下面我们使用 EM 算法 估计 GMM 的参数,我们以样本 x x x 为一维数据进行介绍。

  首先 E 步,我们需要求 Q i ( z ( i ) = j ) Q_i(z^{(i)}=j) Qi(z(i)=j),即:

Q i ( z ( i ) = j ) = p ( z ( i ) ∣ x ( i ) ; θ ) (1.4) Q_i(z^{(i)} = j) = p(z^{(i)} | x^{(i)}; \theta) \tag{1.4} Qi(z(i)=j)=p(z(i)x(i);θ)(1.4)

根据 贝叶斯定理 得:

γ j ( i ) = p ( z ( i ) = j ∣ x ( i ) ) = p ( z ( i ) = j ) p ( x ( i ) ∣ z ( i ) = j ) p ( x ( i ) ) = π j N ( x ( i ) ∣ μ j , σ j ) ∑ l = 1 k π l N ( x ( i ) ∣ μ l , σ l ) (1.5) \begin{aligned} \gamma_{j}^{(i)} &= p(z^{(i)} = j|x^{(i)}) \\ &= \frac{p(z^{(i)} = j) p(x^{(i)}|z^{(i)}=j)}{p(x^{(i)})} \\ &= \frac{\pi_j \mathcal{N}(x^{(i)}|\mu_j,\sigma_j)} {\sum_{l=1}^{k} \pi_l \mathcal{N}(x^{(i)}|\mu_l,\sigma_l)} \end{aligned} \tag{1.5} γj(i)=p(z(i)=jx(i))=p(x(i))p(z(i)=j)p(x(i)z(i)=j)=l=1kπlN(x(i)μl,σl)πjN(x(i)μj,σj)(1.5)

在式(1.5)中,定义了 γ j ( i ) \gamma_j^{(i)} γj(i) 为样本 x ( i ) x^{(i)} x(i) 属于第 j j j 个高斯分布的后验概率。

  然后 M 步,最大化下界,下界表达式为:

L L ( D ) = ∑ i = 1 m ∑ z ( i ) Q i ( z ( i ) ) log ⁡ p ( x ( i ) , z ( i ) ; π , μ , σ ) Q i ( z ( i ) ) = ∑ i = 1 m ∑ j = 1 k Q i ( z ( i ) = j ) log ⁡ p ( x ( i ) ∣ z ( i ) = j ; μ , σ ) p ( z ( i ) = j ) Q i ( z ( i ) = j ) = ∑ i = 1 m ∑ j = 1 k γ j ( i ) log ⁡ N ( x ( i ) ∣ μ j , σ j ) π j γ j ( i ) = ∑ i = 1 m ∑ j = 1 k γ j ( i ) log ⁡ 1 2 π σ j exp ⁡ ( − ( x ( i ) − μ j ) 2 2 σ j 2 ) ⋅ π j γ j ( i ) = ∑ i = 1 m ∑ j = 1 k γ j ( i ) ( − log ⁡ 2 π − log ⁡ σ j − ( x ( i ) − μ j ) 2 2 σ j 2 + log ⁡ π j − log ⁡ γ j ( i ) ) (1.6) \begin{aligned} LL(D) &=\sum_{i=1}^{m} \sum_{z^{(i)}} Q_i(z^{(i)}) \log \frac{p(x^{(i)},z^{(i)};\pi,\mu,\sigma)}{Q_i(z^{(i)})} \\ &= \sum_{i=1}^{m} \sum_{j=1}^{k} Q_i(z^{(i)}=j) \log \frac{p(x^{(i)}|z^{(i)}=j;\mu,\sigma) p(z^{(i)}=j)} {Q_i(z^{(i)}=j)} \\ &= \sum_{i=1}^{m} \sum_{j=1}^{k} \gamma_j^{(i)} \log \frac{\mathcal{N}(x^{(i)}|\mu_j,\sigma_j) \pi_j}{\gamma_j^{(i)}} \\ &= \sum_{i=1}^{m} \sum_{j=1}^{k} \gamma_j^{(i)} \log \frac{\frac{1}{\sqrt{2\pi} \sigma_j} \exp{(-\frac{(x^{(i)}-\mu_j)^2}{2\sigma_j^2})} \cdot \pi_j} {\gamma_j^{(i)}} \\ &= \sum_{i=1}^{m} \sum_{j=1}^{k} \gamma_j^{(i)} \left(-\log\sqrt{2\pi} - \log \sigma_j -\frac{(x^{(i)}-\mu_j)^2}{2\sigma_j^2} +\log \pi_j - \log{\gamma_j^{(i)}} \right) \end{aligned} \tag{1.6} LL(D)=i=1mz(i)Qi(z(i))logQi(z(i))p(x(i),z(i);π,μ,σ)=i=1mj=1kQi(z(i)=j)logQi(z(i)=j)p(x(i)z(i)=j;μ,σ)p(z(i)=j)=i=1mj=1kγj(i)logγj(i)N(x(i)μj,σj)πj=i=1mj=1kγj(i)logγj(i)2π σj1exp(2σj2(x(i)μj)2)πj=i=1mj=1kγj(i)(log2π logσj2σj2(x(i)μj)2+logπjlogγj(i))(1.6)

  我们通过最大化 L L ( D ) LL(D) LL(D) 来求得 μ j \mu_j μj σ j \sigma_j σj π j \pi_{j} πj

1.3.2 求解 μ j \mu_j μj σ j \sigma_j σj π j \pi_{j} πj 的公式推导

  下面我们详细介绍一下 μ j \mu_j μj 的求解过程。首先求式(1.6)中 L L ( D ) LL(D) LL(D) 关于 μ j \mu_j μj 的偏导:

∇ μ j ∑ i = 1 m ∑ j = 1 k γ j ( i ) ( − log ⁡ 2 π − log ⁡ σ j − ( x ( i ) − μ j ) 2 2 σ j 2 + log ⁡ π j − log ⁡ γ j ( i ) ) = ∑ i = 1 m γ j ( i ) ( 2 ( x ( i ) − μ j ) 2 σ j 2 ) = ∑ i = 1 m γ j ( i ) ( x ( i ) − μ j ) σ j 2 (1.7) \begin{aligned} \nabla_{\mu_j} &\sum_{i=1}^{m} \sum_{j=1}^{k} \gamma_j^{(i)} \left(-\log\sqrt{2\pi} - \log \sigma_j -\frac{(x^{(i)}-\mu_j)^2}{2\sigma_j^2} +\log \pi_j - \log{\gamma_j^{(i)}} \right) \\ &= \sum_{i=1}^{m} \gamma_j^{(i)} (\frac{2(x^{(i)}-\mu_j)}{2\sigma_j^2}) \\ &= \sum_{i=1}^{m} \gamma_j^{(i)} \frac{(x^{(i)}-\mu_j)}{\sigma_j^2} \end{aligned} \tag{1.7} μji=1mj=1kγj(i)(log2π logσj2σj2(x(i)μj)2+logπjlogγj(i))=i=1mγj(i)(2σj22(x(i)μj))=i=1mγj(i)σj2(x(i)μj)(1.7)

然后令式(1.7)为 0 0 0,并且两边同时乘以 σ j 2 \sigma_j^2 σj2 得:

∑ i = 1 m γ j ( i ) ( x ( i ) − μ j ) = 0 ∑ i = 1 m γ j ( i ) x ( i ) = μ j ∑ i = 1 m γ j ( i ) (1.8) \begin{aligned} \sum_{i=1}^{m} \gamma_j^{(i)} (x^{(i)}-\mu_j) &= 0 \\ \sum_{i=1}^{m} \gamma_j^{(i)} x^{(i)} &= \mu_j \sum_{i=1}^{m} \gamma_j^{(i)} \end{aligned} \tag{1.8} i=1mγj(i)(x(i)μj)i=1mγj(i)x(i)=0=μji=1mγj(i)(1.8)

根据式(1.8)得:

μ j = ∑ i = 1 m γ j ( i ) x ( i ) ∑ i = 1 m γ j ( i ) (1.9) \mu_j = \frac{\sum_{i=1}^{m} \gamma_j^{(i)} x^{(i)}}{\sum_{i=1}^{m} \gamma_j^{(i)}} \tag{1.9} μj=i=1mγj(i)i=1mγj(i)x(i)(1.9)

这样我们就求得 μ j \mu_j μj 的值了。采用同样的方法,可以求得:

σ j = ∑ i = 1 m γ j ( i ) ( x ( i ) − μ j ) 2 ∑ i = 1 m γ j ( i ) (1.10) \sigma_j = \frac{\sum_{i=1}^m \gamma_j^{(i)} (x^{(i)} - \mu_j)^2} {\sum_{i=1}^{m} \gamma_j^{(i)}} \tag{1.10} σj=i=1mγj(i)i=1mγj(i)(x(i)μj)2(1.10)

  对于 π j \pi_{j} πj,因为其需要满足 π j ≥ 0 \pi_j \geq 0 πj0 ∑ j = 1 k π j = 1 \sum_{j=1}^{k} \pi_j = 1 j=1kπj=1,所有我们需要使用 拉格朗日乘子法 求它的值。即求 L L ( D ) + λ ( ∑ j = 1 m π j − 1 ) LL(D) + \lambda(\sum_{j=1}^m\pi_j - 1) LL(D)+λ(j=1mπj1) 关于 π j \pi_j πj 的偏导,然后令其为 0 0 0,最终可求得:

π j = 1 m ∑ i = 1 m γ j ( i ) (1.11) \pi_j = \frac{1}{m} \sum_{i=1}^{m} \gamma_j^{(i)} \tag{1.11} πj=m1i=1mγj(i)(1.11)

  当样本 x \mathbf{x} x 为多维数据时,需要转换为向量形式, μ j \mu_j μj Σ j \Sigma_j Σj π j \pi_{j} πj 分别为:

μ j = ∑ i = 1 m γ j ( i ) x ( i ) ∑ i = 1 m γ j ( i ) (1.12) \mathbf{\mu}_j = \frac{\sum_{i=1}^{m} \gamma_j^{(i)} \mathbf{x}^{(i)}}{\sum_{i=1}^{m} \gamma_j^{(i)}} \tag{1.12} μj=i=1mγj(i)i=1mγj(i)x(i)(1.12)

Σ j = ∑ i = 1 m γ j ( i ) ( x ( i ) − μ j ) ( x ( i ) − μ j ) T ∑ i = 1 m γ j ( i ) (1.13) \Sigma_j =\frac{\sum_{i=1}^m \gamma_j^{(i)} (\mathbf{x}^{(i)}-\mu_j)(\mathbf{x}^{(i)}-\mu_j)^{\Tau}} {\sum_{i=1}^{m} \gamma_j^{(i)}} \tag{1.13} Σj=i=1mγj(i)i=1mγj(i)(x(i)μj)(x(i)μj)T(1.13)

π j = 1 m ∑ i = 1 m γ j ( i ) (1.14) \pi_j = \frac{1}{m} \sum_{i=1}^{m} \gamma_j^{(i)} \tag{1.14} πj=m1i=1mγj(i)(1.14)


1.3.3 高斯混合模型的参数学习算法

  高斯混合模型的参数学习算法流程如下:

  1. 随机初始化参数: π j \pi_j πj μ j \mu_j μj σ j \sigma_j σj 1 ≤ j ≤ k 1 \leq j \leq k 1jk

  2. E 步:根据当前参数(即 π j \pi_j πj μ j \mu_j μj σ j \sigma_j σj,由第 1 步初始化或第 3 步求得的)来计算每个样本属于每个高斯分布的后验概率 γ j i \gamma_j^{i} γji 1 ≤ i ≤ m 1 \leq i \leq m 1im 1 ≤ j ≤ k 1 \leq j \leq k 1jk

  3. M 步:根据第 2 步求得的 γ j ( i ) \gamma_j^{(i)} γj(i) 计算 π j \pi_j πj μ j \mu_j μj σ j \sigma_j σj 1 ≤ j ≤ k 1 \leq j \leq k 1jk

  4. 重复第 2 步和第 3 步,直到收敛。

1.4 K-means 和 GMM 的关系

  K-means 模型首先随机初始化聚类中心,然后计算所有样本到 k 个聚类中心的距离,将样本归入离其最近的一个聚类中心所在的簇。然后对形成的每个簇,重新计算聚类中心,计算方式为簇内所有样本点的均值。有了新的聚类中心后,重新计算所有样本到 k 个聚类中心的距离,将样本归入离其最近的聚类中心所在的簇。不断迭代这两个步骤,当聚类中心不再发生变化或者达到最大迭代次数时结束。

  k-means 将样本分到离其最近的聚类中心所在的簇,也就是每个样本数据属于某簇的概率非 0 即 1。对比 k-means,高斯混合的不同之处在于,样本点属于某簇的概率不是非 0 即 1 的,而是属于不同簇有不同的概率值。

参考

[1] 李航《统计学习方法》
[2] 周志华《机器学习》
[3] 邱锡鹏《神经网络与深度学习》
[4] http://cs229.stanford.edu/notes/cs229-notes8.pdf
[5] 高斯混合模型(GMM)及其EM算法的理解
[6] 详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
[7] 手把手教你实现一个高斯混合模型
[8] 一文详解高斯混合模型原理

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值