本内容主要介绍 高斯混合模型,以及 如何使用 EM 算法(期望最大算法)估计其参数。
高斯混合模型(Gaussian Mixture Model,GMM),是一种业界广泛使用的 聚类 算法,该方法使用 高斯分布 作为参数模型,并使用 期望最大(Expectation Maximization,简称 EM)算法 进行训练。
高斯分布(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 的正态分布。
当一个模型为一个高斯分布时,我们可以将其称为 单高斯模型(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 的协方差矩阵。
高斯混合模型(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=1∑kp(j)p(x∣j)=j=1∑kπjN(x∣μj,σj)(1.3)
其中, π j \pi_j πj 表示第 j j j 个高斯分布的权重系数,并满足 π j ≥ 0 \pi_j \geq 0 πj≥0, ∑ j = 1 k π j = 1 \sum_{j=1}^{k} \pi_{j} = 1 ∑j=1kπj=1。
图 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 可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况。
高斯混合模型的生成过程可以分为两步:
针对单高斯模型,我们可以使用 最大似然估计 估计其参数。针对高斯混合模型,因为无法知道当前样本来自于哪个高斯分布,即存在隐变量,所以无法使用最大似然估计估计其参数,需要使用 EM 算法估计其参数。
下面我们使用 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)=j∣x(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=1∑mz(i)∑Qi(z(i))logQi(z(i))p(x(i),z(i);π,μ,σ)=i=1∑mj=1∑kQi(z(i)=j)logQi(z(i)=j)p(x(i)∣z(i)=j;μ,σ)p(z(i)=j)=i=1∑mj=1∑kγj(i)logγj(i)N(x(i)∣μj,σj)πj=i=1∑mj=1∑kγj(i)logγj(i)2πσj1exp(−2σj2(x(i)−μj)2)⋅πj=i=1∑mj=1∑kγj(i)(−log2π−logσj−2σj2(x(i)−μj)2+logπj−logγj(i))(1.6)
我们通过最大化 L L ( D ) LL(D) LL(D) 来求得 μ 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=1∑mj=1∑kγj(i)(−log2π−logσj−2σj2(x(i)−μj)2+logπj−logγj(i))=i=1∑mγj(i)(2σj22(x(i)−μj))=i=1∑mγ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=1∑mγj(i)(x(i)−μj)i=1∑mγj(i)x(i)=0=μji=1∑mγ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 πj≥0, ∑ 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πj−1) 关于 π 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=1∑mγ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=1∑mγj(i)(1.14)
高斯混合模型的参数学习算法流程如下:
随机初始化参数: π j \pi_j πj, μ j \mu_j μj 和 σ j \sigma_j σj, 1 ≤ j ≤ k 1 \leq j \leq k 1≤j≤k。
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 1≤i≤m, 1 ≤ j ≤ k 1 \leq j \leq k 1≤j≤k。
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 1≤j≤k。
重复第 2 步和第 3 步,直到收敛。
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] 一文详解高斯混合模型原理