高斯混合模型(GMM)与最大指望(EM)算法学习笔记

本文内容是我在学习过程当中的我的总结与笔记。引用内容写在灰色的引用框中。若有错误欢迎指正html

这篇文章的主题是高斯混合模型(GMM),GMM与最大指望(EM)方法有很大的联系,而在GMM的求解过程当中使用了极大似然估计法web


1、极大似然估计

咱们先来复习一下极大似然估计法是怎么进行的,来看一个经典实例算法

问题

设样本服从正态分布 N ( μ , σ 2 ) N(\mu,\sigma^2) ,则似然函数为 L ( μ , σ 2 ) = i = 1 N 1 2 π σ e ( x i μ ) 2 2 σ 2 L(\mu,\sigma^2)=\prod^{N}_{i=1}\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x_{i}-\mu)^2}{2\sigma^2}}
试估计参数 μ \mu σ 2 \sigma^2 的值
其中 x i x_{i} 是样本,也就是说这个函数 L ( μ , σ 2 ) L(\mu,\sigma^{2}) 是各个样本的几率的积。网络

分析

咱们须要作的是由似然函数估计出参数 μ \mu σ 2 \sigma^2 的值。之因此说是估计,是由于使用有限的样本不可能准确求出本来高斯分布的参数
那么怎么由似然函数求值呢?app

  1. 首先咱们要对似然函数求对数,这是由于似然函数是各个事件发生的几率的积,当不少几率乘在一块儿时,会致使这个似然函数的值很是小,计算机因为精度的缘由没法处理
  2. 对参数求导,再令导数为0。咱们知道,这样求出的点是似然函数的极值点,而咱们须要的是使得似然函数取得最大值时的参数值。这样这个极值点便极可能是咱们要求的参数值
  3. 求解上述似然方程

求解

对似然函数取对数获得
ln L ( μ , σ 2 ) = i = 1 N ln 1 2 π σ e ( x i μ ) 2 2 σ 2 \ln L(\mu,\sigma^2)=\sum_{i=1}^N \ln\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x_{i}-\mu)^2}{2\sigma^2}}
化简获得 ln L ( μ , σ 2 ) = n 2 ln ( 2 π ) n 2 ln ( σ 2 ) 1 2 σ 2 i = 1 n ( x i μ ) 2 \ln L(\mu,\sigma^2) = -\frac{n}{2}\ln(2\pi)-\frac{n}{2}\ln(\sigma^2)-\frac{1}{2\sigma^2}\sum_{i=1}^n(x_{i}-\mu)^2 机器学习

对参数求导
{ ln L ( μ , σ 2 ) μ = 1 σ 2 i = 1 n ( x i μ ) = 0 ln L ( μ , σ 2 ) σ = n 2 σ 2 + 1 2 σ 4 i = 1 n ( x i μ ) 2 \left \{ \begin{aligned} & \frac{\partial \ln L(\mu,\sigma^2)}{\partial\mu}=\frac{1}{\sigma^2}\sum_{i = 1}^{n}(x_i-\mu) =0\\ & \frac{\partial \ln L(\mu,\sigma^2)}{\partial\sigma}=-\frac{n}{2\sigma^2}+\frac{1}{2\sigma^4}\sum_{i=1}^n(x_i-\mu)^2 \end{aligned} \right.
联合求解
{ μ ^ = x = 1 n i = 1 N x i σ ^ 2 = 1 n i = 1 N ( x i x ) 2 \left \{ \begin{aligned} & \hat{\mu}=\overline x = \frac{1}{n}\sum_{i=1}^N x_i \\ & \hat\sigma^2=\frac{1}{n}\sum_{i=1}^N(x_i-\overline x)^2 \end{aligned} \right. ide


如今咱们来归纳一下,极大似然法分为以下几步svg

(1)写出似然函数;
(2)对似然函数取对数,并整理
(3)求导数;
(4)解似然方程。函数

最大似然估计的特色:
    1.比其余估计方法更加简单;
    2.收敛性:无偏或者渐近无偏,当样本数目增长时,收敛性质会更好;
    3.若是假设的类条件几率模型正确,则一般能得到较好的结果。但若是假设模型出现误差,将致使很是差的估计结果。

必定要注意一点,咱们在进行极大似然估计时,样本服从什么分布是咱们假定的。
另外,极大似然估计方法也能够用一个简单的式子来归纳:
θ = a r g max θ i log P ( x ( i ) ; θ ) θ=arg\max_θ∑_i \log P(x^{(i)};θ)
也即 θ \theta 为使得似然函数取最大值时对应的 θ \theta 学习

2、GMM原理

首先咱们来了解一下机器学习中的概括偏执(bias)

在机器学习中,一个学习算法也会有一个前提假设,这里被称做“概括偏执 (bias)”(bias 这个英文词在机器学习和统计里还有其余许多的意思)。例如线性回归,目的是要找一个函数尽量好地拟合给定的数据点,它的概括偏执就是“知足要求的函数必须是线性函数”。一个没有概括偏执的学习算法从某种意义上来讲毫无用处,就像一个彻底没有概括能力的人同样,在第一次看到鱼的时候有人告诉他那是鱼,下次看到另外一条鱼了,他并不知道那也是鱼,由于两条鱼总有一些地方不同的,或者就算是同一条鱼,在河里不一样的地方看到,或者只是看到的时间不同,也会被他认为是不一样的,由于他没法概括,没法提取主要矛盾、忽略次要因素,只好要求全部的条件都彻底同样──然而哲学家已经告诉过咱们了:世界上不会有任何样东西是彻底同样的,因此这我的即便是有无比强悍的记忆力,也绝学不到任何一点知识。
这个问题在机器学习中称做“过拟合 (Overfitting)”,例如前面的回归的问题,若是去掉“线性函数”这个概括偏执,由于对于 N 个点,咱们老是能够构造一个 N-1 次多项式函数,让它完美地穿过全部的这 N 个点,或者若是我用任何大于 N-1 次的多项式函数的话,我甚至能够构造出无穷多个知足条件的函数出来。若是假定特定领域里的问题所给定的数据个数老是有个上限的话,我能够取一个足够大的 N ,从而获得一个(或者无穷多个)“超级函数”,可以 fit 这个领域内全部的问题。然而这个(或者这无穷多个)“超级函数”有用吗?只要咱们注意到学习的目的(一般)不是解释现有的事物,而是从中概括出知识,并能应用到新的事物上,结果就显而易见了。
没有概括偏执或者概括偏执太宽泛会致使 Overfitting ,然而另外一个极端──限制过大的概括偏执也是有问题的:若是数据自己并非线性的,强行用线性函数去作回归一般并不能获得好结果。难点正在于在这之间寻找一个平衡点。不过人在这里相对于(如今的)机器来讲有一个很大的优点:人一般不会孤立地用某一个独立的系统和模型去处理问题,一我的天天都会从各个来源获取大量的信息,而且经过各类手段进行整合处理,概括所得的全部知识最终得以统一地存储起来,并能有机地组合起来去解决特定的问题。这里的“有机”这个词颇有意思,搞理论的人总能提出各类各样的模型,而且这些模型都有严格的理论基础保证能达到指望的目的,然而绝大多数模型都会有那么一些“参数”(例如 K-means 中的 k ),一般没有理论来讲明参数取哪一个值更好,而模型实际的效果却一般和参数是否取到最优值有很大的关系,我以为,在这里“有机”不妨看做是全部模型的参数已经自动地取到了最优值。另外,虽然进展不大,可是人们也一直都指望在计算机领域也创建起一个统一的知识系统(例如语意网就是这样一个尝试)。

GMM就是这样的一种概括偏执:咱们假定样本服从一种高斯分布,不过这种高斯分布与"单一的"高斯分布不同,它由若干个高斯分布混合起来而造成。

Gaussian Mixture Model (GMM)。
GMM 和 k-means 很像,不过 GMM 是学习出一些几率密度函数来(因此 GMM 除了用在 clustering 上以外,还常常被用于 density estimation ),简单地说,k-means 的结果是每一个数据点被 assign 到其中某一个 cluster 了,而 GMM 则给出这些数据点被 assign 到每一个 cluster 的几率,又称做 soft assignment 。

每一个 GMM 由 K 个 Gaussian 分布组成,每一个 Gaussian 称为一个“Component”,这些 Component 线性加成在一块儿就组成了 GMM 的几率密度函数:

p ( x ) = k = 1 K p ( k ) p ( x k ) = k = 1 K π k N ( x μ k , Σ k ) \displaystyle \begin{aligned} p(x) & = \sum_{k=1}^K p(k)p(x|k) \\ & = \sum_{k=1}^K \pi_k \mathcal{N}(x|\mu_k, \Sigma_k) \end{aligned}

根据上面的式子,若是咱们要从 GMM 的分布中随机地取一个点的话,实际上能够分为两步:首先随机地在这 K 个 Component 之中选一个,每一个 Component 被选中的几率实际上就是它的系数 \pi_k ,选中了 Component 以后,再单独地考虑从这个 Component 的分布中选取一个点就能够了──这里已经回到了普通的 Gaussian 分布,转化为了已知的问题。

高斯混合模型解决了一个这样的问题:若是一个样本集的分布有明显的聚类特征,那么咱们能够利用GMM来近似这种分布。利用GMM,不只完成了对样本集的分类,还获得了它的一个几率密度函数。
利用几率密度函数,咱们很容易就能够获得所谓似然函数,再对它进行求解,即可以获得高斯混合模型的参数
显然,它的似然函数是 L = i = 1 N k = 1 K π k N ( x ; μ k , Σ k ) L= \prod_{i=1}^N \sum_{k=1}^K \pi_k \mathcal{N}(x ; \mu_k, \Sigma_k)
log-likelihood function为:
L l o g = i = 1 N log { k = 1 K π k N ( x i ; μ k , Σ k ) } L_{log}=\displaystyle \sum_{i=1}^N \log \left\{\sum_{k=1}^K \pi_k \mathcal{N}(x_i ; \mu_k, \Sigma_k)\right\}
而后求解这个似然函数便可,求解过程是一个纯技术问题,咱们暂时把它忽略。
总之,求解的结果是一个 N × K N\times K 的矩阵,这个矩阵的每一行表明了样本属于各个component的几率,对于每个 x i x_i ,咱们只要取该矩阵第 i 行中最大的那个几率值所对应的那个 Component 为 x i x_i 所属的 cluster 就能够实现一个完整的聚类方法了。

从上面的分析中咱们能够看到 GMM 和 K-means 的迭代求解法其实很是类似,所以也有和 K-means 一样的问题──并不能保证老是能取到全局最优,若是运气比较差,取到很差的初始值,就有可能获得不好的结果。对于 K-means 的状况,咱们一般是重复必定次数而后取最好的结果,不过 GMM 每一次迭代的计算量比 K-means 要大许多,一个更流行的作法是先用 K-means (已经重复并取最优值了)获得一个粗略的结果,而后将其做为初值(只要将 K-means 所得的 centroids 传入 gmm 函数便可),再用 GMM 进行细致迭代。

如咱们最开始所讨论的,GMM 所得的结果(Px)不只仅是数据点的 label ,而包含了数据点标记为每一个 label 的几率,不少时候这其实是很是有用的信息

三丶EM算法

咱们能够看到,K-means与GMM其实是有几分类似的,而且它们均可以追溯到EM算法。
EM算法是一种利用似然函数来获取模型参数的算法。
首先咱们来复习两个概念

边缘分布

摘取百度百科对边缘分布的解释

边缘分布(Marginal Distribution)指在几率论和统计学的多维随机变量中,只包含其中部分变量的几率分布。

假设有一个和两个变量相关的几率分布:
P ( x y ) P(x|y)
关于其中一个特定变量的边缘分布则为给定其余变量的条件几率分布:(增长了一个y和求和符号)
P ( x ) = y P ( x , y ) = y P ( x y ) P ( y ) P(x)=\sum_{y}P(x,y)=\sum_yP(x|y)P(y)

在这个边缘分布中,咱们获得只关于一个变量的几率分布,而再也不考虑另外一变量的影响,实际上进行了降维操做。在实际应用中,例如人工神经网络的神经元互相关联,在计算它们各自的参数的时候,就会使用边缘分布计算获得某一特定神经元(变量)的值。

Jensen不等式

定理:X为一随机变量,若是 f f 是凸函数,那么有 E [ f ( X ) ] f [ E ( X ) ] E[f(X)]\ge f[E(X)]

推导

问题引入

如今咱们有一组观测样本 x = ( x 1 , x 2 . . . x m ) \vec x=(x_1,x_2...x_m)
在肯定了概括偏执以后,咱们但愿得到模型的参数,那么有
θ = a r g max θ log P ( x i ; θ ) θ=arg\max_θ∑\log P(x_i;θ)
可是很不幸,咱们的观测数据实际上还有隐藏的观测值数据
z = ( z 1 , z 2 , . . . z i ) \vec z=(z_1,z_2,...z_i)
那么咱们利用边缘分布的定义,极大化模型分布的对数似然函数以下:
θ = a r g max θ l o g P ( x i ; θ ) = a r g max θ l o g z i P ( x i z i ; θ ) θ=arg\max_θ∑logP(x_i;θ)=arg\max_θ∑log∑_{z_i}P(x_i,z_i;θ)
这个式子怎么求解呢?所须要用到的方法就是EM算法了

求解过程

归纳以下

EM是一个在已知部分相关变量的状况下,估计未知变量的迭代技术。EM的算法流程以下:
初始化分布参数
重复直到收敛:
E步骤:根据参数的假设值,给出未知变量的指望估计,应用于缺失值。
M步骤:根据未知变量的估计值,给出当前的参数的极大似然估计。

如今咱们总结下EM算法的流程。
    输入:观察数据x=(x(1),x(2),…x(m)),联合分布p(x,z;θ), 条件分布p(z|x;θ), 最大迭代次数J。
    1) 随机初始化模型参数θ的初值θ0。
    2) for j from 1 to J开始EM算法迭代:
      a) E步:计算联合分布的条件几率指望:
Q i ( z ( i ) ) = P ( z ( i ) x ( i ) θ j ) ) Qi(z(i))=P(z(i)|x(i),θj))
L ( θ , θ j ) = i = 1 m z i Q i ( z i ) l o g P ( x i z i ; θ ) L(θ,θ_j)=∑_{i=1}^m∑_{z_i}Q_i(z_i)logP(x_i,z_i;θ)
      b) M步:极大化L(θ,θj),获得θj+1:
θ j + 1 = a r g max θ L ( θ , θ j ) θ_{j+1}=arg\max_θL(θ,θ_j)
      c) 若是θj+1已收敛,则算法结束。不然继续回到步骤a)进行E步迭代。
    输出:模型参数θ。

证实

关于证实我就不ctrl+c/ctrl+v了,直接传送门~
传送门

参考资料