本文首发于本人知乎学会EM算法,关注知乎第一时间畅享更多资讯。
EM算法,全称为Expectation Maximum Algorithm,是一个基础算法,是很多机器学习领域算法的基础(如HMM,LDA等)。EM算法是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐含变量。
它经过两个步骤交替进行计算:
- 计算期望(E步),基于现有的模型参数(或者随机初始化的模型)对隐含变量的值进行猜测(估计),利用隐含变量现有的估计值,计算其最大似然的估计值。
- 最大化(M步),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
EM解决的问题
我们经常会从样本观察数据中,找出样本的模型参数。其中最常用的就是最大似然估计。但是在一些情况下,我们观察得到的数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因此无法直接使用最大似然估计。
EM算法解决这个问题的思路是使用启发式的迭代方法。既然我们无法直接求出模型的参数,那么我们可以先猜想隐含数据——E步,接着基于观察数据和猜测的隐含数据一起来进行最大似然估计,进而求得我们模型分布的参数——M步。由于我们之前的隐藏数据是猜测的,所以此时得到的模型参数并不一定是最好的结果。因此,我们基于当前得到的模型参数来继续猜测隐含数据,然后进行最大似然估计求出模型分布参数。以此类推,不断迭代,直到模型分布参数基本不变化或变化很小,算法收敛停止。
一个最直观的EM算法是K-Means聚类算法。在K-Means聚类时,每个聚类的质心可以看成是隐含数据。我们会假设K个初始化质心,即EM算法的E步;然后计算每个样本和K个质心之间的距离,并把样本聚类到最近的那个质心类中,即EM算法的M步。重复这个E步和M步质心不在变化为止。
EM算法的数学基础
极大似然估计
似然函数
在数理统计学中,似然函数是一种关于统计模型中参数的函数,表示模型参数中的似然性(某种事件发生的可能性)。显然,极大似然就是最大可能性的意思。
多数情况下我们是根据已知条件来推算结果,而最大似然估计是已知结果来寻求使该结果出现的可能性最大的条件,以此作为估计值。
假定已知某个参数B时,推测事件A发生的概率为:
P(A∣B)=P(B)P(A,B)
由贝叶斯公式,可以得出:
P(B∣A)=P(A)P(B)⋅P(A∣B)
一般来说,事件A发生的概率与某一未知参数B有关,B的取值不同,则事件A发生的概率P(A∣B)也不同,当我们在一次试验中事件A发生了,则认为此时的B^值应该是B的所有取值中使得P(A∣B)达到最大的那一个,极大似然估计法就是要选取这样的B^值作为参数B的估计值,使选取的样本在被选的总体中出现的可能性为最大。
直观的例子: 设甲箱子中有99个白球,1个黑球;乙箱中有1个白球,99个黑球。现随机取出一箱,再从抽取的一箱中随机取出一球,结果是黑球,这一黑球从乙箱取出的概率比从甲箱取出的概率大的多,这时我们自然更多地相信这个黑球是取自乙箱的。
极大似然估计举例
假设我们要调查我们学校的男生和女生的身高分布。假设我们在校园里随机找了男女生分别100个,共200人。我们将他们按性别划分为两组,然后先统计抽样得到的100个男生的身高。假设身高都服从正态分布,但是分布的参数均值μ和方差σ2我们不知道。这也正是我们所要估计得参数,记为θ=[μ,σ2]T。问题相当于已知样本集X,求P(θ∣X)
**我们知道样本所服从的概率分布和模型的一些样本,需要求解该模型的参数。**如图:
下面我们通过使用最大似然估计来估计出我们模型的参数。
设样本集X=x1,x2,...xN,N=100,P(xi∣θ)为概率密度函数,表示抽到男生xi(身高)的概率。我们一般假设每个样本之间是独立同分布的,所以我同时抽到他们的概率就是他们各自概率的乘积,也就是样本集X中各个样本的联合概率:
L(θ)=L(x1,x2,....xN;θ)=i=1∏Np(xi∣θ)
通常情况下,因为这里的L(θ)是连乘的,所以我们一般取对数。
L(θ)=i=1∑Nlogp(xi∣θ)
似然函数L(θ)反映了在概率密度函数的参数是θ时,得到样本集X的概率。我们需要找到这样一个参数θ^,使抽到X这组样本的概率最大,也就是需要其对应的似然函数L(θ)最大。满足这样条件的θ^叫做θ的最大似然估计量,记为:
θ^=argθmaxL(θ)
极大似然估计步骤:
- 写出似然函数;
- 取对数得到对数似然函数并整理
- 求导数,令其导数为0得到似然方程
- 解似然方程,得到的参数即为所求
Jensen不等式
设f是定义域为实数的函数,如果对于所有的实数x,f(x)的二次导数大于等于0,那么f是凸函数。当x是向量时,如果Hessian矩阵H是半正定的(H>=0),那么f是凸函数。如果f′′(x)>0,H>0,那么是严格的凸函数。
Jensen不等式:如果f是凸函数,X是随机变量,那么有E[f(X)]>=f(E[X]),也就是函数的期望大于等于期望的函数。特别地,如果f是严格的凸函数,那么E[f(x)]=f(E[x])当且仅当P(X=E[X])=1时成立,也就是说X是常数。
对于凹函数,不等号方向反向 E[f(X)]<=f(E[X])。
如图:
图中实现f是凸函数,X是随机变量,有0.5的概率是a,有0.5的概率是b。X的期望值就是a和b的中值了,从上图中我们可以看到E[f(x)]>=f(E[x])成立。
EM算法
问题描述
极大似然估计用一句话概括就是:知道结果X,反推模型参数θ。
对于上面我们举的男女身高的例子,极大似然估计的目标就是根据男女分别100个身高样本,来分别估计男女生身高的正态分布的参数μ1,σ1,μ2,σ2。但是极大似然估计面临的概率分布只有一个或者知道结果是通过哪个概率分布实现的,只不过你不知道这个概率分布的参数。现在我们让情况更复杂一些:
我们挑选的这200人混在一起了,也就是说我们拥有200人的身高数据,但是我们不知道每个人是男生还是女生,此时的男女性别就像是一个隐变量(latent variable)。
通常来说,我们只有精确的知道了男女生身高的正态分布参数,才能更好的知道每一个人是男生和女生哪个概率更大一些。但是反过来,我们必须知道每个人是男生还是女生才能用最大似然估计尽可能准确地估计男女各自身高的正态分布参数。
EM算法就是为了解决这种问题而存在的。

EM算法中的隐变量
一般的用X表示观测到的随机变量的数据,Z表示隐随机变量的数据(因为我们观测不到结果是从哪个概率分布中得出的,所以将这个叫做隐变量,它一般是离散的)。X和Z连在一起称为完全数据,单独一个X我们称为观测数据。
其实我们可以发现,我们所面临的问题其实就是Z是未知的,如果隐变量Z已知,那么问题就可以用极大似然估计来求解了。因此,EM算法的基本思想就是:
- 先给模型参数θ一个随机初始化的初值θ0
- 根据模型参数θ和给定的观测数据,求未观测数据z的条件概率分布期望
- 利用上一步已经求出的z,进行极大似然估计,得到更优的θ′
- 不断进行2,3步的迭代,直到收敛
EM算法的另一个例子-抛硬币
如上图,现在我们抛两枚硬币A和B,如果知道每次抛的是A还是B,那么就直接可以估计每种硬币的参数θA,θB(正面朝上的概率)。如果我们只观测到5轮循环,每轮抛硬币10次,而并不知道每轮是抛的哪个硬币(这就是隐变量),那么我们就无法直接估计参数θA,θB。这时我们可以使用EM算法,先对参数θA,θB进行随机初始化,然后根据模型参数去计算隐变量的条件概率。比如对于第一组数据“HTTTHHTHTH”,为A的可能性为:0.65×(1−0.6)5,为B的可能性为:0.55×0.55,二者进行归一化得出隐变量有0.45的概率是硬币A,有0.55的概率是硬币B。得到隐变量z后我们可以去进行M步计算极大似然估计求得更好的θ′,..以此类推。
EM算法的推导
对m个样本观察数据x=(x(1),x(2),...x(m))中,找出样本的模型参数θ,最大化模型分布的对数似然函数如下:
θ=argθmaxi=1∑mlogP(x(i);θ)
如果我们得到的观察数据有未观察到的隐含数据z=(z(1),z(2),...z(m)),此时我们模型的最大化(极大化)模型分布的对数似然函数如下:
θ=argθmaxi=1∑mlogP(x(i);θ)=argθmaxi=1∑mlogz(i)∑P(x(i),z(i);θ)
对于参数估计,我们本质上还是想获得一个使似然函数最大化的那个参数θ,现在的上式与之前不同的是我们似然函数之中多了一个未知的变量z。也就是说我们的目标是找到合适的θ和z使得似然函数最大。那我们也许会想,仅仅是多了个未知变量而已,我们也可以分别对θ和z求偏导,再令其为0,求出对应的解即可。但是,这里我们看到上式包含了“和”的对数,求导之后的形式非常复杂,所以很难求出对应的解析解。因此EM算法采用了一些技巧,让我们接着往下看。
i=1∑mlogz(i)∑P(x(i),z(i);θ)=i=1∑mlogz(i)∑Qi(z(i))Qi(z(i))P(x(i),z(i);θ)≥i=1∑mz(i)∑Qi(z(i))logQi(z(i))P(x(i),z(i);θ)(1)
第一步我们引入了一个未知分布(隐变量z的概率分布)Qi(z(i)),其中∑z(i)Qi(z(i))=1。(这一步其实我们什么都没有做,只是对分子分母进行了缩放)。
第二步我们使用的是上面我们提到过的Jensen不等式。因为这里log函数是一个凹函数(二次导师为x2−1),所以根据Jensen不等式我们有E[f(x)]≤f(E[x])。至此,我们就将“和”的对数变为了对数的“和”,再求导就很容易了。
上式中的z(i)∑Qi(z(i))logQi(z(i))P(xi,z(i);θ),其实就是函数logQi(z(i))P(xi,z(i);θ)关于Qi(z(i))的期望。为什么?回想期望公式中的lazy Statistician规则如下:
设Y是随机变量X的函数Y=g(X)(g是连续函数),那么
- X是离散型随机变量,它的分布律为P(X=xk)=pk,k=1,2,…,
k=1∑∞g(xk)pk绝对收敛,则有E(Y)=E(g(X))=k=1∑∞g(xk)pk。
- X是连续型随机变量,它的概率密度为f(x),若∞∫∞g(x)f(x)dx绝对收敛,则有E(Y)=E(g(X))=∞∫∞g(x)f(x)dx.
考虑到E(X)=∑x⋅p(x),则有E(f(x))=∑f(x)⋅p(x),又因为有z(i)∑Qi(z(i))=1,所以我们可以使用Jensen不等式得到(1)式中的不等式:
f(EQi(z(i))[Qi(z(i))P(x(i),z(i);θ)])≥EQi(z(i))[f(Qi(z(i))P(x(i),z(i);θ))]
到这里我们就应该很清楚了,但是我们大家可能发现这里是一个不等号,而我们是想求得似然函数的最大值,那么应该怎么办呢?
其实上式(1)相当于对似然函数求了下界,因此我们可以通过调整使得下界不断的变大从而似然函数也不断的变大,以逼近真实值。那么什么时候调整好了呢?当不等式等于等式时说明二者已经等价了。如图:
我们先固定θ,调整Q(z)使得下界J(z,Q)上升至与L(θ)在此θ处相等(绿色曲线到蓝色曲线),然后固定Q(z),调整θ使当前的下界J(z,Q)达到最大值(θt到θt+1),然后再固定θt,调整Q(z)使下界和L(θ)相等,。。。直到收敛到似然函数L(θ)的最大值处θ′。
那么等式成立的条件是什么呢?
根据Jensen不等式中等式成立的条件X为常数,这里等式成立的条件为:
Qi(z(i))P(x(i),z(i);θ)=c,c为常数
由于Qi(z(i))是一个未知的分布且有z(i)∑Qi(z(i))=1,因此我们可以进行一个变换:
z(i)∑P(x(i),z(i);θ)=z(i)∑Qi(z(i))c
也就是 :
z(i)∑P(x(i),z(i);θ)=c
因此我们可以得到:
Qi(z(i))=cP(x(i),z(i);θ)=z(i)∑P(x(i),z(i);θ)P(x(i),z(i);θ)=P(x(i);θ)P(x(i),z(i);θ)=P(z(i)∣x(i);θ)
至此,我们推出了在固定θ之后,Qi(z(i))如何选择的问题——使下界拉升的Qi(z(i))的计算公式就是条件概率(后验概率)。这一步就是E步,固定θ,建立L(θ)的下界,并求得使L(θ)等于下界J(z,Q)时等号成立的Qi(z(i)).
接下来是M步,就是在E步求出Qi(z(i))后,固定Qi,调整 θ,去最大化下界J(z,Q),毕竟在固定Qi(z(i))后,下界还可以更大。
即在M步我们需要最大化下式:
argθmaxi=1∑mz(i)∑Qi(z(i))logQi(z(i))P(x(i),z(i);θ)
由于M步我们固定Qi,所以去掉上式中的常数部分,则我们需要极大化的对数似然下界为:
argθmaxi=1∑mz(i)∑Qi(z(i))logP(x(i),z(i);θ)
至此,我们应该理解了EM算法中E步和M步的具体含义。
EM算法的流程
输入:观察数据x=(x(1),x(2),...x(m)),联合分布p(x,z;θ),条件分布p(z∣x;θ),最大迭代次数J。
- 随机的初始化模型参数θ为θ0
- for j from 1 to J开始EM算法迭代:
a) E步: 计算联合分布的条件概率期望:
Qi(z(i))=P(z(i)∣x(i);θ)L(θ,θj)=i=1∑mz(i)∑Qi(z(i))logP(x(i),z(i);θ)
b) M步: 固定Qi,极大化L(θ,θj):
θj+1=argθmaxL(θ,θj)
c) 如果θj+1已收敛,则算法结束。否则继续回到步骤a)进行E步迭代。
输出:模型参数θ
EM算法收敛性的证明
关于EM算法收敛性的证明,我们觉得B站上shuhuai008给出的两种方法非常直观www.bilibili.com/video/av319…
www.bilibili.com/video/av319…
EM算法的流程并不复杂,但是还是有两个问题需要我们思考:
- EM算法能保证收敛吗?
- EM算法如果保证收敛,那么保证能收敛到全局最优解吗?
要证明EM算法的收敛性,我们要证明我们的对数似然函数的值在迭代过程中值在增大。 即:
i=1∑mlogP(x(i);θj+1)≥i=1∑mlogP(x(i);θj)
也就是说,如果最大似然函数的值一直在增加,那么最终我们会达到最大似然估计得最大值。
由于
L(θ,θj)=i=1∑mz(i)∑P(z(i)∣x(i);θj))logP(x(i),z(i);θ)
令:
H(θ,θj)=i=1∑mz(i)∑P(z(i)∣x(i);θj))logP(z(i)∣x(i);θ)
上面两式相减得到:
在上式中分别取θ为θj和θj+1并相减得到:
i=1∑mlogP(x(i);θj+1)−i=1∑mlogP(x(i);θj)=[L(θj+1,θj)−L(θj,θj)]−[H(θj+1,θj)−H(θj,θj)]
要证明EM算法的收敛性,我们只需要证明上式的右边是非负的即可。
由于θj+1使得L(θ,θj)极大,因此有:
L(θj+1,θj)−L(θj,θj)≥0
而对于第二部分,我们有:
H(θj+1,θj)−H(θj,θj)=i=1∑mz(i)∑P(z(i)∣x(i);θj)logP(z(i)∣x(i);θj)P(z(i)∣x(i);θj+1)≤i=1∑mlog(z(i)∑P(z(i)∣x(i);θj)P(z(i)∣x(i);θj)P(z(i)∣x(i);θj+1))=i=1∑mlog(z(i)∑P(z(i)∣x(i);θj+1))=0
其中第(4)式用到了Jensen不等式,只不过和第二节的使用相反而已,第(5)式用到了概率分布累积为1的性质。
至此,我们得到了:i=1∑mlogP(x(i);θj+1)−i=1∑mlogP(x(i);θj)≥0,证明了EM算法的收敛性。
从上面的推导可以看出,EM算法可以保证收敛到一个稳定点,d但是却不能保证收敛到全局极大值点,因此它是局部最优的算法。当然如果我们的优化目标L(θ,θj)是凸的,则EM算法可以保证收敛到全局最大值,这点和梯度下降法这样的迭代算法相同。
EM算法的另一种解释
如果我们定义:
J(Q,θ)=i∑z(i)∑Qi(z(i))logQi(z(i))P(x(i),z(i);θ)
从前面的推导我们知道L(θ)≥J(Q,θ),EM可以看作是坐标上升法,E步固定θ,优化Q;M步固定Q,优化θ。
坐标上升法(Coordinate ascent):
图中的直线式迭代优化的路径,可以看到每一步都会向最优值前进一步,而且前进路线是平行于坐标轴的,因为每一步只优化一个变量。
这犹如在x-y坐标系中找一个曲线的极值,然而曲线函数不能直接求导,因此什么梯度下降方法就不适用了。但固定一个变量后,另外一个可以通过求导得到,因此可以使用坐标上升法,一次固定一个变量,对另外的求极值,最后逐步逼近极值。
对应到EM上,就是:**E步:固定θ,优化Q;M步:固定Q,优化θ;交替将极值推向最大。 **
Reference