“上帝的算法”——EM

“上帝的算法”——EM

写在前面:最近看完了吴军的《数学之美》,大赞!相比《统计学习方法》、《机器学习》来说,《数学之美》没有那么多的公式理论,全是科普性质的(开拓眼界),其中也不乏一些数学原理的解释,通俗易懂。作为一名数据挖掘爱好者,我觉得这本书是非常值得一读的,可以了解过去机器学习在自然语言处理、搜索广告以及大数据相关领域的发展。书中有一章节,吴军博士命名为:上帝的算法——期望最大化算法,可见作者对该算法的肯定。之前自己有了解过EM算法,但是没有细究,看完数学之美后决定认真学习下这个神奇的算法。

注:本文主要根据《数学之美》、《统计学习方法》以及《机器学习》以及一些大牛的博客讲解我对EM算法的初识,算法步骤的学习、推导以及公式的理解,现在并不能将EM算法通俗易懂的解释出来(功力不够),有兴趣的可以看下这位大神的EM算法讲解以及JerryLead的博客。

补充: 2017.02.26

最近看了K-Means与GMM相关的博文,其中都用到了EM的算法思想,以下几位大神已经总结非常好了,并且有代码实现,值得关注学习!推荐一波:

KMeans:
wepon:http://blog.csdn.net/u012162613/article/details/47811235
qll125596718:http://blog.csdn.net/qll125596718/article/details/8243404

GMM:
pluskid:http://blog.pluskid.org/?p=39
JerryLead:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
Rachel-Zhang:http://blog.csdn.net/abcjennifer/article/details/8198352
enjoyhot:http://blog.csdn.net/gugugujiawei/article/details/45583051

笔记:

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

那么如何用 GMM 来做 clustering 呢?其实很简单,现在我们有了数据,假定它们是由 GMM 生成出来的,那么我们只要根据数据推出 GMM 的概率分布来就可以了,然后 GMM 的 K 个 Component 实际上就对应了 K 个 cluster 了。根据数据来推算概率密度通常被称作 density estimation ,特别地,当我们在已知(或假定)了概率密度函数的形式,而要估计其中的参数的过程被称作“参数估计”。

GMM 的 log-likelihood function :这里写图片描述 由于在对数函数里面又有加和,我们没法直接用求导解方程的办法直接求得最大值。为了解决这个问题,我们采取之前从 GMM 中随机选点的办法:分成两步,实际上也就类似于K-means 的两步。

1.EM算法初识

只要有一些训练数据,再定义一个最大化函数,采用EM算法,利用计算机经过若干次迭代,就可以得到所要的模型。这实在是太美妙了,这也许是我们的造物主刻意安排的。所以我把它称作为上帝的算法。——吴军

EM算法从思想、形式上来看是很简单的,主要就是两个步骤+一个目标函数(收敛)就可以得到一个不错的模型,但是其背后蕴藏着复杂的数学原理,因而吴军博士给出如此高的评价。

在聚类算法中,比如文本分类,现有N个文本(向量),需要将它们分成k类(每个文本属于哪个类也未知),每一类文本有个中心点C(k)。 将这些文本映射到空间坐标中,随机挑选K个点作为起始的中心。
(1)首先计算所有点到这K个聚类中心的距离,并将这些点归到最近的一个类中。
(2)根据归类结果重新计算每一类的中心(比如计算该类别所有样本点的均值)。
这样新的聚类中心与原先的相比就会有一个位移,重复上述步骤直到新的聚类中心与旧的聚类中心的偏移非常小,即过程收敛。

看到这里也许会发现,这不就是k-means聚类么…是的,K-means与EM其实是有关联的或者说k-means算法也是EM算法思想的一种体现,后面再给出解释。

回到上面的问题,如果把最终得到的分类结果看作是一个数学的模型,聚类的中心(值)以及每一个点和每一个类别的隶属关系就可以看成这个模型的参数(隐含的,未知的)。而聚类的目标是将相近的点聚集到一起,这样同一类中不同点到中心的平均距离d较近,而不同类之间的平均距离D较远。因此每一次迭代都要最大化D和-d(即最小化d),这个就是整个过程的最大化目标函数。

现在就可以对EM算法做个通俗的定义了:在一般性的问题中,步骤(1)其实就是根据现有的模型(参数),计算各个观测数据输入到模型中的计算结果,这个过程称为期望计算过程(Expectation),步骤(2)重新计算模型参数,以最大化期望值,上述过程中就是最大化D和-d,这个过程称之为最大化的过程(Maximization)。

K-means与EM的关系:从上述例子可以看出k-means算法与EM算法的相似之处,迭代寻优。根据EM的思想,E步估计隐含类别y的期望值,M步调整其他参数使得在给定类别y的情况下,极大似然估计P(x,y)能够达到极大值。然后在其他参数确定的情况下,重新估计y,周而复始,直至收敛。从K-means里我们可以看出它其实就是EM的体现,E步是确定隐含类别变量,M步更新其他参数来使目标函数最小化,这里隐含类别变量指定方法比较特殊,属于硬指定,从k个类别中硬选出一个给样例,而不是对每个类别赋予不同的概率。——该部分参考JerryLead的博客K-means聚类算法。

EM算法常用于含有隐变量的概率模型的参数估计,比如GMM的参数估计、HMM的训练方法Baum-Welch算法、最大熵模型的训练方法GIS算法等。此外,EM算法往往给出的是局部最佳解而非全局最佳解,EM算法对初始值敏感,不同的初始值可能得到不同的结果。

2.EM算法步骤

该章节将详细介绍EM算法,看下《统计学习方法》书上的例子:

解:三硬币模型可以写作:

随机变量y是观测变量,表示试验观测的结果是1或0;随机变量z是隐变量,表示未观测到的掷硬币A的结果;
θ =(π,p,q)是模型参数。这一模型是以上数据的生成模型,随机变量y可以观测,随机变量z不可观测。

上述的极大似然估计就是求得一组参数θ使得logP(Y|θ)最大,这里取log是为了将式(9.3)中的连乘运算转换成累加运算,因为连乘操作容易造成下溢,这一方法称之为对数似然(log-likelihood)。极大似然法这里就不多做介绍了。

以上是极大似然估计求解参数的过程,但是由于隐含变量Z是未知的,因而不能直接求解。这时EM算法就派上用场了,首先选取一组初始参数θ0=(π0,p0,q0),然后通过E步+M步迭代计算参数的估计值,直至收敛。假如第i次迭代的参数估计值为θi,则EM算法的第i+1次迭代如下:

E步:计算在模型参数θ(i)下观测数据y(j)来自掷硬币B的概率(即A为正面)

M步:计算模型参数的新估计值 θ(i+1)

这里如果模型参数初值为θ0(0.5,0.5,0.5),经过两次迭代模型参数的极大似然估计θ2(0.5,0.6,0.6);
如果初值取θ0(0.4,0.6,0.7),经过两次迭代模型参数的极大似然估计θ2(0.4064,0.5368,0.6432);
这说明EM算法与初值的选择有关,选择不同的初值可能得到不同的参数估计。

下面看下EM算法的一般步骤:

用Y表示观测随机变量的数据,Z表示隐随机变量的数据,Y和Z连在一起称为完全数据(complete-data),观测数据Y又称为不完全数据(imcomplete-data)。假设给定观测数据Y,其概率分布式P(Y|θ),那么不完全数据Y的似然函数是P(Y|θ),对数似然函数L(θ)=logP(Y|θ);假设Y和Z的联合概率分布式P(Y,Z|θ),那么完全数据的对数似然函数是logP(Y,Z|θ)。EM算法即通过迭代求L(θ)=logP(Y|θ)的极大似然估计,每次迭代包括E步:求期望;M步,求极大化。


式(9.9)的函数Q(θ,θ(i))是EM算法的核心,称为Q函数:完全数据的对数似然函数logP(Y,Z|θ)关于给定观测数据Y和当前参数θ(i)下对为观测数据Z的条件概率分布P(Z|Y,θ(i))的期望,即

关于EM算法的几点说明:

步骤(1):参数的初值可以任意选择,但需注意EM算法对初值是敏感的。
步骤(2):E步求Q(θ,θ(i)),第一个变元表示要极大化的参数,第二个变元表示当前估计值,每次迭代实际在求Q函数及其极大。
步骤(3):M步求Q(θ,θ(i))得极大化,得到θ(i+1),完成一次迭代θ(i)->θ(i+1)。每次迭代使似然函数增大或达到局部极值。
步骤(4):结束迭代的条件,一般是对较小的正数ε1,ε2,若满足:
||θ(i+1)-θ(i)||<ε1 或者||Q(θ(i+1),θ(i))-Q(θ(i),θ(i))||<ε2 则停止迭代。

3.EM算法推导

上一节详细介绍了EM算法的步骤,接下去讲解EM算法的具体导出。主要问证明的问题就是:为什么极大化Q函数就可以近似实现对观测数据的极大似然估计?
对于一个含有隐变量的概率模型,目标是最大化观测数据(不完全数据)Y关于θ的对数似然函数,即极大化:

在前面的章节就提到过,这一极大化的困难在于Z是隐含变量,无法观测,式中还包含Z和的对数(和的对数求导非常复杂)。因而通过EM算法迭代逐步近似极大化L(θ),下面就要证明第i次迭代后是否使得极大化L(θ)增加,即L(θ)>L(θ(i
)),并逐步达到极大值。两者做差:

根据Jensen不等式得到其下界:

(1)比较直接,分子分母同乘以一个相等的函数,(1)到(2)利用了Jensen不等式。这里我有点疑惑,《统计》书上(1)到(2)中的P(Y|Z,θ(i))变成了P(Z|Y,θ(i)),后续的公式中也一直是用P(Z|Y,θ(i)),我又查了一下其它资料得到这里上下同乘的项应该是隐含变量Z的概率分布Qi(z),并且满足:,这个也保证了(1)到(2)的Jensen不等式成立,这里用的Jensen不等式可以通俗的理解为和的对数大于对数的和,后面给证明。

为什么要这么转换呢?

前面有提到“和的对数求导非常复杂”很难求解得到未知参数z和θ,通过Jensen不等式转换,就可以把(1)中的“和的对数”转换为“对数的和”,方便求解。

Jensen不等式:

设f是定义域为实数的函数,如果对于所有的实数x。如果对于所有的实数x,f(x)的二次导数大于等于0,那么f是凸函数。当x是向量时,如果其hessian矩阵H是半正定的,那么f是凸函数。如果只大于0,不等于0,那么称f是严格凸函数。
Jensen不等式表述如下:
如果f是凸函数,X是随机变量,那么:E[f(X)]>=f(E[X])
特别地,如果f是严格凸函数,当且仅当X是常量时(P(x=E[X])=1),上式取等号。

图中,实线f是凸函数,X是随机变量,有0.5的概率是a,有0.5的概率是b。(就像掷硬币一样)。X的期望值就是a和b的中值了,图中可以看到E[f(X)]>=f(E[X])成立。

当f是(严格)凹函数当且仅当-f是(严格)凸函数。 Jensen不等式应用于凹函数时,不等号方向反向。

回到上面公式(1)中,f(x)=log(x)为凹函数(其二次导数为小于0),根据(E(X)=∑x*p(x),f(X)是X的函数,则E(f(X))=∑f(x)*p(x)),(1)中第一项表示为E[X]=就是X=的期望。(X中的Qi(z(i))=P(Z|Y,θ(i)))

因而根据Jensen不等式,从公式(1)得到公式(2),。(这里满足f(X)=log(X),E[f(X)]<=f(E[X]))

继续推导:得到式(9.12)的下界后,令

则可以得到:L(θ)≥B(θ,θ(i)),即函数B(θ,θ(i))是L(θ)的一个下界,同时根据式(9.13)可以得到L(θ(i))=B(θ(i),θ(i)),当式(9.13)中θ取θ(i)时,等式右边第二项取值为0。因此任何可以使B(θ,θ(i))增大的θ,也可以使L(θ)增大。为了使L(θ)有尽可能大的增长,选择θ(i+1)使B(θ,θ(i))达到极大,即

现在求θ(i+1)的表达式,省去对θ的极大化而言是常数的项,由式(9.16)、式(9.13)及式(9.10),有

至此,你会发现,极大似然B(θ,θ(i))求解θ(i+1)的过程等同于EM算法中Q函数的极大化,即完成了一次EM算法的迭代(参数更新)。因此,EM算法是在不断求解下界的极大化来逼近求解对数似然函数极大化的算法。

《统计学习方法》书上还给出了EM算法的直观解释,如下图:

图中上方曲线为L(θ),下方曲线为B(θ,θ(i)),函数B(θ,θ(i))为对数似然函数L(θ)的下界,两个函数在θ=θ(i)处相等。EM算法在找到下一个点θ(i+1)使得函数B极大化,也使得函数Q极大化。由于L(θ)≥B(θ,θ(i)),函数B的增加保证对数似然函数L在迭代中也是增加的。EM算法在θ(i+1)处重新计算Q函数的值,进行下一次迭代。从图中可以看出,EM算法并不能保证全局最优值。

4.EM算法的收敛性

经过前三个章节已经比较系统的学习了EM算法(有点晕了),这一章节简单介绍下EM算法的收敛性,留个坑…详细推导学习暂时不继续了,比较强力的同学可以查阅相关文献(EM算法的收敛性分析)。

两个定理:

(1).设P(Y|θ)为观测数据的似然函数,θ(i)(i=1,2,…)为EM算法得到的参数估计序列,P(Y|θ(i))(i=1,2,..)
为对应的似然函数序列,则P(Y|θ(i))是单调递增的。

(2).设L(θ)=logP(Y|θ)为观测数据的对数似然函数,θ(i)(i=1,2,…)为EM算法得到的参数估计序列,L(θ(i))(i=1,2,…)为对应的对数似然函数序列:
①.如果P(Y|θ)有上界,则L(θ(i))=logP(Y|θ(i))收敛到某一值L(*);
②.在函数Q与L(θ)满足一定的条件下,由EM算法得到的参数估计序列θ(i)的收敛值θ(*)是L(θ)的稳定点。

注:该定理关于函数Q与L的条件在大多数情况下都是满足的。EM算法的收敛性包含关于对数似然函数序列L(θ(i))的收敛性和关于参数估计序列θ(i)的收敛性两层意思,前者并不蕴涵后者。

此外,定理只能保证参数估计序列收敛到对数似然函数序列的稳定点,不能保证收敛到极大值点。所以在应用中,初值的选择变得非常重要,常用的方法是选取几个不同的初值进行迭代,然后对得到的各个估计值进行比较,取最优。

5.EM算法总结

总的来说EM算法思想比较简单,但是相当强大,在很多算法中都有体现,特别是含有隐变量的概率模型,其背后的数学原理也比较复杂、精妙,值得探究。在《机器学习》中还提及用坐标下降来理解EM算法,文章开头提的那篇大神博客提到了坐标上升法。

简单介绍下:在一个x-y坐标系中找一个曲线的极值,但是曲线函数不能直接求导,梯度下降法不适用了。固定一个变量后,另一个可以求导得到,因此可以使用坐标上升法,一次固定一个变量,对另一个求极值,最后逐步逼近极值。对应到EM上,E步就是固定θ;M步固定Q,优化θ;交替将极值推向最大。图片来自EM算法讲解。

JerryLead的博客专栏还提到了EM算法的“硬”指定和“软”指定的概念,“软”指定看似更为合理,但计算量要大,“硬”指定在某些场合如K-means中更为实用(要是保持一个样本点到其他所有中心的概率,就会很麻烦)。特别是结合了k-means算法以及GMM算法进行讲解,想深入学习的同学们速度前去围观。

本文就写到这里了,后续学习聚类算法、高斯混合分布等,如有新的体会再更新上来。

注:本学习笔记主要参考《数学之美》、《统计学习方法》、《机器学习》以及k-means、EM算法、极大似然算法相关的博文。如有侵犯,请指正。

你可能感兴趣的:(机器学习,数据挖掘,EM,k-means,机器学习,数据挖掘,算法)