我的个人博客:https://huaxuan0720.github.io/ ,欢迎访问
前言
EM算法是一种可以求解含有隐变量的迭代算法,当我们在实际过程中收集数据的时候,并不一定会收集全部的有效信息。比如,当我们想统计全校学生的身高分布的时候,可以将全校学生的身高看作是一个正态分布,但是毕竟男生和女生之间身高的分布还是有些不同的,但是万一我们没有对性别信息进行统计,而只是统计了身高信息的话,求得的概率分布的参数肯定会有较大的误差,这个时候,我们就需要将每一个样本的性别分布也考虑进去,从而希望获得更准确的概率分布估计。
一、准备工作
1、极大似然估计
极大似然估计我们并不陌生,在逻辑回归的求解过程中,我们就是用了极大似然估计,现在还是简单说明一下。
假设我们现在有一个概率分布,不妨记作P(x;θ),其中,θ是未知参数,有可能是一个数值,也有可能是多个数值组成的参数向量,x表示输入样本。现在我们想通过抽样的方式对参数θ进行估计。假设我们一共采集了N组数据,为{x1,x2,⋯,xN}。那么样本的联合概率函数可以表示为关于θ的函数,即:
L(θ)=L(x1,x2,⋯,xN;θ)=i∏NP(xi;θ)
L(θ)是参数 θ 的函数,随着 θ 在参数变化,L函数也在变化。而极大似然估计目的就是在样本{x1,...,xN}固定的情况下,寻找最优的 θ 来极大化似然函数:
θ∗=argmaxθL(θ)
上式在数学领域,可以看作是对 θ∗求解,求L(θ) 函数的极值点,导数为0处,即为 θ∗ 的点。
又因为L(θ) 和 ln(θ) 在同一个 θ 处取得极值,我们可以对 L(θ) 取对数,将连乘转化为连加(方便求导),得到对数化似然函数:
θ∗=argmaxθlnL(θ)=argmaxθi∑lnP(xi;θ)
2、Jensen不等式
下图是一张描述Jensen不等式十分经典的图。

如果一个函数f(x)在其定义域内是一个连续函数,且其二阶导数恒小于等于0,我们称该函数在其定义域上是凹函数,反之,如果二阶导数恒大于等于0,我们称该函数在其定义域上是凸函数。
如果f(x)是一个凸函数,那么在其定义域上我们有:
E(f(X))≥f(E(X))
反之,如果f(x)是一个凹函数,在其定义域上我们有:
E(f(X))≤f(E(X))
其中,E表示对变量取期望。上面两个不等式当且仅当X是一个常量时可以取等号。
3、边缘分布
假设我们有两个随机变量,那么我们通过抽样,就会获得一个二维的联合概率分布P(X=xi,Y=yj)。
对每一个X=xi,对其所有的Y进行求和操作,我们有:
yj∑P(X=xi,Y=yj)=P(X=xi)
将上面的式子称之为X=xi的边际分布(边缘分布)。
有了以上的一些基础准备,我们就可以来推导EM算法了。
二、EM算法
假设我们的数据集为:
D={x(1),x(2),⋯,x(N)}
其中 x(i) 是每一个具体的输出实例,表示每一次独立实验的结果,N表示独立实验的次数。
我们设样本的概率分布函数为P(x(i);θ),其中θ是模型中的待估参数,可以是一个变量,也可以是多个变量所组成的参数向量。
根据极大似然估计,我们有:
L(θ)=i∏P(x(i);θ)1≤i≤N(1)
两边同时取对数:
lnL(θ)=i∑lnP(x(i);θ)1≤i≤N(2)
此时,我们可以将 P(x(i);θ)看作是关于隐变量的一个边缘分布,即(我们假设隐变量为Z):
lnL(θ)=i∑lnz(i)∑P(x(i),z(i);θ)1≤i≤N(3)
这里我们利用了边缘分布的相关等式,即:
P(x(i);θ)=z(i)∑P(x(i),z(i);θ)
在上面的式子中,z是一个隐藏变量,必然也会满足一个特定的概率分布,我们不妨把这个分布记作Qi(z(i)),显然,我们有∑z(i)Qi(z(i))=1。这里的下标和上标i表示的是第i个样本。故我们将上式改写成:
lnL(θ)=i∑lnz(i)∑P(x(i),z(i);θ)=i∑lnz(i)∑Qi(z(i))⋅Qi(z(i))P(x(i),z(i);θ)(4)
现在,我们把如下的部分单独拿出来:
Qi(z(i))=p(z(i))Qi(z(i))P(x(i),z(i);θ)=f(z(i))
很显然,我们有∑z(i)Qi(z(i))=∑ip(z(i))=1,所以,我们可以将上式写成:
lnL(θ)=i∑lnz(i)∑p(z(i))f(z(i))(5)
可以看出,我们的∑z(i)p(z(i))f(z(i))实际上实在对f(z(i))计算期望,其中p(z(i))是函数f(z(i))的概率分布函数,于是,我们可以把上面的式子记作:
E[f(z(i))]=z(i)∑Qi(z(i))⋅Qi(z(i))P(x(i),z(i);θ)(6)
于是,我们的似然函数就变成了:
lnL(θ)=i∑ln(E[f(z(i))])=i∑ln(E[Qi(z(i))P(x(i),z(i);θ)])(7)
这个时候就是Jensen不等式出场的时候了。
我们观察到函数g(x)=ln(x),它的一阶导数是g′(x)=x1,二阶导数是g′′(x)=−x21恒小于0,因此g(x)=ln(x)是一个凹函数,此时,我们利用Jensen不等式处理lnL(θ),有:
lnL(θ)=i∑ln(E[f(x(i))])≥i∑E[ln(f(xP(i)))]=i∑E[ln(Qi(z(i))P(x(i),z(i);θ))]=i∑z(i)∑Qi(z(i))⋅ln(Qi(z(i))P(x(i),z(i);θ)))(8)
故:我们根据Jensen不等式,有了以下的一个重要的不等式关系:
lnL(θ)≥i∑z(i)∑Qi(z(i))⋅ln(Qi(z(i))P(x(i),z(i);θ)))(9)
需要注意的是,我们使用Jensen不等式的时候,是对z(i)的分布使用的,而∑i∑z(i)Qi(z(i))⋅ln(Qi(z(i))P(x(i),z(i);θ)))是函数lnL(θ)的一个下界,所以实际上,lnL(θ)包含了两个参数变量,一个是θ, 一个是隐藏变量z(i),所以我们需要弄清楚调整θ和z(i)的区别。
由于Jensen不等式处理的是z(i),因此当我们调整z(i)的时候,我们实际上实在调整似然函数lnL(θ)的下界,使得似然函数lnL(θ)的下界一点一点上升,最终于此时的似然函数lnL(θ)的值相等。
然后,固定z(i)的数值,调整θ的时候,就可以将z(i)看作是一个已知变量,这个时候就可以利用极大似然估计的方法对θ参数的值进行计算,此时会得到一个新的θ的值,不妨记作θ′。我们这个时候再根据这个新的θ′的值,重新调整z(i),使得函数的下界一点一点上升,达到和lnL(θ)相同之后,再固定z(i),更新θ的值。一直重复以上过程,直到似然函数收敛到某一个极大值θ∗处。
下图是一个很经典的关于EM算法的迭代过程示意图。(图片来自网络)

在上面的求解过程中,只有当此时的函数下界等于当前θ的对数似然函数时,才能保证当我们优化了这个下界的时候,才真正优化了目标似然函数。
lnL(θ)≥i∑z(i)∑Qi(z(i))⋅ln(Qi(z(i))P(x(i),z(i);θ)))(10)
在优化迭代的过程中,我们通过固定θ并调整z(i)的可能分布,使得等式成立,即达到lnL(θ)的下界。根据Jensen不等式的条件,当f(x)是一个凹函数的时候,有f(E[X])≥E[f(X)],欲使等号成立,X需要是一个常量。那么,在上面的式子中,我们有X=Qi(z(i))P(x(i),z(i);θ),故此时我们需要将Qi(z(i))P(x(i),z(i);θ))看作一个常数,不妨我们设这个常数为C,于是我们有:
Qi(z(i))P(x(i),z(i);θ))=C(11)
P(x(i),z(i);θ)=CQi(z(i))
z(i)∑P(x(i),z(i);θ)=Cz(i)∑Qi(z(i))(12)
考虑到Qi(z(i))实际上是隐变量z(i)的一个概率分布,满足:
z(i)∑Qi(z(i))=1,Qi(z(i))≥0
于是,我们将∑z(i)Qi(z(i))=1代入到上面的式子(12)中,有:
z(i)∑P(x(i),z(i);θ)=C(11)
再将C带入到公式(11)中,我们有:
Qi(z(i))P(x(i),z(i);θ)=C=z(i)∑P(x(i),z(i);θ)
Qi(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);θ)(12)
即我们可以得到Qi(z(i))的值,也即我们得到P(z(i)∣x(i);θ)的值,表示在当前的模型参数θ为定值时,在给定的x(i)的条件下,得到z(i)的概率大小。
至此,我们的EM算法的大部分情况进行了说明。首先,我们会对模型的参数θ 进行随机初始化,不妨记作θ0。然后会在每一次的迭代循环中计算z(i)的条件概率期望,这就是EM算法中的”E步“。最后再根据计算得到的概率分布,根据极大似然的方法计算在当前隐藏变量分布下的使得似然函数取得极大的θ的值,并进行更新,这就是EM算法中的”M步“。
观察到在”M步“中,我们有:
lnL(θ)=i∑z(i)∑Qi(z(i))⋅ln(Qi(z(i))P(x(i),z(i);θ)))
θ(j+1)=argmaxθi∑z(i)∑Qi(z(i))ln(P(x(i),z(i);θ))−i∑z(i)∑Qi(z(i))ln(Qi(z(i)))
观察到在上面的式子中,∑i∑z(i)Qi(z(i))ln(Qi(z(i)))对于整个优化的过程来说相当于是一个常数项,因此可以省略,于是,上式可以简写成:
θ(j+1)=argmaxθi∑z(i)∑Qi(z(i))ln(P(x(i),z(i);θ))=argmaxθi∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))(13)
公式(13)内部的∑i∑z(i)P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))就是EM算法的核心,我们一般将其称之为Q函数,通常记为:Q(θ,θ(j))。
所以,我们的EM算法可以总结如下:
-
数据集为D={x(1),x(2),⋯,x(N)} ,随机初始化模型参数θ,记作θ(0)。
-
对每一次迭代循环,j=0,1,2,3,⋯,M,我们有:
-
E步(E-Step):在当前的模型参数θ(j)的条件下,计算联合分布的条件概率期望:
Qi(z(i))=P(z(i)∣x(i);θ(j))
-
M步(M-Step):在计算出条件概率分布的期望的基础上,极大化似然函数,得到新的模型参数的值θ(j+1):
θ(j+1)=argmaxθi∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))
-
如果θ(j+1)已经收敛,则跳出循环结束:
-
输出最后模型参数θ的值。
三、EM算法解决三硬币模型
三硬币模型是EM算法的一个简单使用,问题请参考《统计学习方法》一书。
假设有三枚质量分布不均匀的硬币A、B、C,这些硬币正面出现的概率分别是π、p、q。进行如下掷硬币试验: 先掷A,如果A是正面则再掷B,如果A是反面则再掷C。对于B或C的结果,如果是正面则记为1,如果是反面则记为0。进行N次独立重复实验,得到结果。现在只能观测到结果,不能观测到掷硬币的过程,估计模型参数θ=(π,p,q)。
由于实验一共进行了N次,每一次都是独立重复实验,那么我们可以将实验结果记录如下,其中每一次的实验结果是已知的:
X={x(1),x(2),⋯,x(N)}x(i)∈{0,1}
每次独立实验都会产生一个隐藏变量z(i),这个隐藏变量是无法被观测到的,我们可以将其记录如下,这个隐藏变量的记录结果是未知的:
Z={z(1),z(2),⋯,z(N)}z(i)∈{0,1}
对于第i次的独立重复实验,我们有:
P(x(i)=0;θ)=π(1−p)1−x(i)+(1−π)(1−q)1−x(i)
P(x(i)=1;θ)=πpx(i)+(1−π)q1−x(i)
故,综合起来看,我们有:
P(x(i);θ)=πpx(i)(1−p)1−x(i)+(1−π)qx(i)(1−q)1−x(i)
构造极大似然函数
我们可以构造我们的极大似然函数如下:
L(θ)=i∏P(x(i);θ)=i∏[πpx(i)(1−p)1−x(i)+(1−π)qx(i)(1−q)1−x(i)]
两边同时取对数,有:
lnL(θ)=i∑ln[πpx(i)(1−p)1−x(i)+(1−π)qx(i)(1−q)1−x(i)]
构造我们的Q函数
在没有说明的情况下,我们使用下标表示第几次迭代过程,用上标表示第几个样本,θ(j)的上标表示第j次迭代。
对于三硬币问题,我们的Q函数可以构造如下:
Q(θ,θ(j))=i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))=i∑{P(z(i)=1∣x(i);θ(j))⋅lnP(x(i),z(i)=1;θ)+P(z(i)=0∣x(i);θ(j))⋅lnP(x(i),z(i)=0;θ)}
故,我们需要求解P(z(i)=1∣x(i);θ(j)),P(x(i),z(i)=1;θ),P(z(i)=0∣x(i);θ(j)),P(x(i),z(i)=0;θ)这四个概率值。
求解极大值
P(z(i)=1∣x(i);θ(j))=P(x(i));θ(j))P(x(i),z(i)=1;θ(j))=πj⋅pjx(i)⋅(1−pj(1−x(i)))+(1−πj)⋅qjx(i)⋅(1−qj)1−x(i)πj⋅pjx(i)⋅(1−pj(1−x(i)))=μj(i)
上式对于迭代过程来说是一个定值,我们使用符号μj(i)来表示,上标(i)表示的是第i个样本,下标j表示的是第j次迭代过程。
那么很明显,我们有:
P(z(i)=0∣x(i);θ(j))=P(x(i));θ(j))P(x(i),z(i)=0;θ(j))=πj⋅pjx(i)⋅(1−pj(1−x(i)))+(1−πj)⋅qjx(i)⋅(1−qj)1−x(i)(1−πj)⋅qjx(i)⋅(1−qj)1−x(j)=1−μj(i)
接着,我们计算P(x(i),z(i)=1;θ),P(x(i),z(i)=0;θ):
P(x(i),z(i)=1;θ)=π⋅px(i)⋅(1−p)1−x(i)
P(x(i),z(i)=0;θ)=(1−π)⋅q(i)⋅(1−q)1−x(i)
我们将上面的计算结果都带入到Q函数中,有:
Q(θ,θ(j))=i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))=i∑{P(z(i)=1∣x(i);θ(j))⋅lnP(x(i),z(i)=1;θ)+P(z(i)=0∣x(i);θ(j))⋅lnP(x(i),z(i)=0;θ)}=i∑{μj(i)⋅ln[π⋅px(i)⋅(1−p)1−x(i)]+(1−μj(i))⋅ln[(1−π)⋅q(i)⋅(1−q)1−x(i)]}
下一步就是对我们需要求解的变量进行求偏导数的操作,如下:
∂π∂Q=i∑{μj(i)⋅π⋅px(i)⋅(1−p)1−x(i)px(i)⋅(1−p)1−x(i)+(1−μj(i))⋅(1−π)⋅q(i)⋅(1−q)1−x(i)−1⋅q(i)⋅(1−q)1−x(i)}=i∑{μj(i)⋅π1+(μj(i)−1)⋅1−π1}=i∑{μj(i)(π1+1−π1)−1−π1}=i∑{μj(i)⋅π(1−π)1}−π(1−π)Nπ=π(1−π)1{i∑μj(i)−Nπ}
令上式为0,我们有:
i∑μj(i)−Nπ=0
即:
π=N1i∑μj(i)
同样的道理,我们可以计算出Q函数相对于p的偏导数,如下:
∂p∂Q=i∑μj(i)px(i)⋅(1−p)1−x(i)x(i)⋅px(i)−1⋅(1−p)1−x(i)+px(i)⋅(1−x(i))⋅(1−p)−x(i)⋅(−1)+0=i∑μj(i)px(i)⋅(1−p)1−x(i)px(i)⋅px(i)⋅(1−p)1−x(i)+px(i)⋅(1−p)1−x(i)⋅1−p1⋅(1−x(i))⋅(−1)=i∑μj(i){px(i)+p−11−x(i)}=i∑μj(i)⋅p(p−1)(p−1)⋅x(i)+p(1−x(i))=p(p−1)1i∑μj(i){p−x(i)}=p(p−1)1{p⋅i∑μj(i)−i∑μj(i)⋅x(i)}
令上式等于0,我们可以得到:
p⋅i∑μj(i)−i∑μj(i)⋅x(i)=0
即:
p=∑iμj(i)∑iμj(i)⋅x(i)
同理,我们对q求偏导数,有:
∂q∂Q=i∑(1−μj(i))(qx(i)+p−11−x(i))=i∑(1−μj(i))q(q−1)q−x(i)=q(q−1)1{q⋅i∑(1−μj(i))−i∑(1−μj(i))x(i)}
令上式等于0,我们有:
q⋅i∑(1−μj(i))−i∑(1−μj(i))x(i)=0
即:
q=∑i(1−μj(i))∑i(1−μj(i))x(i)
所以,以上就是我们解决三硬币模型的迭代公式的求解过程,公式汇总如下,这里加入了下标,表示新的一轮迭代变量:
μj(i)=πj⋅pjx(i)⋅(1−pj(1−x(i)))+(1−πj)⋅qjx(i)⋅(1−qj)1−x(i)πj⋅pjx(i)⋅(1−pj(1−x(i)))
πj+1=N1i∑μj(i)
pj+1=∑iμj(i)∑iμj(i)⋅x(i)
qj+1=∑i(1−μj(i))∑i(1−μj(i))x(i)
四、EM算法的收敛性
在之前的过程中,我们都是默认EM算法可以收敛到某一极大值附近,但是并没有给出十分严格的证明,所以,我们需要对EM的收敛性进行一定的验证。
由于我们是利用极大似然估计来估计参数的值,那么,我们只需要保证在每一次的迭代过程中,似然函数的数值都在上升即可,即下面的不等式成立:
lnL(θ(j+1))≥lnL(θ(j))
由于:
P(x(i);θ)=P(z(i)∣x(i);θ)P(x(i),z(i);θ)
因此,两边取对数,我们有:
lnP(x(i);θ)=lnP(x(i),z(i);θ)−lnP(z(i)∣x(i);θ)
对每一个样本进行累加,我们有:
i∑lnP(x(i);θ)=i∑(lnP(x(i),z(i);θ)−lnP(z(i)∣x(i);θ))
根据我们构造的Q函数,我们有:
Q(θ,θ(j))=i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))
另,我们可以构造如下的一个函数,记作H(θ,θ(j)),如下:
H(θ,θ(j))=i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(z(i)∣x(i);θ))
我们将上面的两个函数相减,有:
Q(θ,θ(j))−H(θ,θ(j))=i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(x(i),z(i);θ))−i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(z(i)∣x(i);θ))=i∑z(i)∑P(z(i)∣x(i);θ(j))(lnP(x(i),z(i);θ)−lnP(z(i)∣x(i);θ))=i∑z(i)∑P(z(i)∣x(i);θ(j))lnP(z(i)∣x(i);θ)P(x(i),z(i);θ)=i∑z(i)∑P(z(i)∣x(i);θ(j))lnP(x(i);θ)=i∑lnP(x(i);θ)(z(i)∑P(z(i)∣x(i);θ(j)))=i∑lnP(x(i);θ)=lnL(θ)
在上面的式子中,第三行是利用了条件概率的公式,第五行则是利用了∑z(i)P(z(i)∣x(i);θ(j))=1的条件。
所以,我们构造出的两个式子,相减之后正好是我们的极大似然函数的对数。
于是,我们将lnL(θ(j+1))和lnL(θ(j))相减,我们有:
lnL(θ(j+1))−lnL(θ(j))=(Q(θ(j+1),θ(j))−H(θ(j+1),θ(j)))−(Q(θ(j),θ(j))−H(θ(j),θ(j)))=(Q(θ(j+1),θ(j))−Q(θ(j),θ(j)))−(H(θ(j+1),θ(j))−H(θ(j),θ(j)))
对于第一个括号内部的Q(θ(j+1),θ(j))−Q(θ(j),θ(j)),由于我们是通过极大化Q函数来更新参数的数值,所以Q(θ(j+1),θ(j))≥Q(θ(j),θ(j)),故这一部分一定会大于等于0,即:
Q(θ(j+1),θ(j))−Q(θ(j),θ(j))≥0
对于第二个括号内部的数值,我们有:
H(θ(j+1),θ(j))−H(θ(j),θ(j))=i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(z(i)∣x(i);θ(j+1)))−i∑z(i)∑P(z(i)∣x(i);θ(j))ln(P(z(i)∣x(i);θ(j)))=i∑z(i)∑P(z(i)∣x(i);θ(j))lnP(z(i)∣x(i);θ(j))P(z(i)∣x(i);θ(j+1))≤i∑ln(z(i)∑P(z(i)∣x(i);θ(j))P(z(i)∣x(i);θ(j+1))P(z(i)∣x(i);θ(j)))=i∑ln(z(i)∑P(z(i)∣x(i);θ(j+1)))=i∑ln(1)=0
在上面的第三步中,我们使用了Jensen不等式,在第五步中,我们使用了∑z(i)P(z(i)∣x(i);θ(j+1))=1这一条件。
于是,我们可以有:
Q(θ(j+1),θ(j))−Q(θ(j),θ(j))≥0
H(θ(j+1),θ(j))−H(θ(j),θ(j))≤0
故:
(Q(θ(j+1),θ(j))−Q(θ(j),θ(j)))−(H(θ(j+1),θ(j))−H(θ(j),θ(j)))≥0
即:
lnL(θ(j+1))−lnL(θ(j))≥0
所以EM算法是可以逐步收敛到某一极大值附近的。证毕。
五、EM算法的缺陷
EM算法是处理含有隐藏变量模型的重要算法,但是EM算法也有其缺陷,首先,EM算法对初始值敏感,不同的初始值可能会导致不同的结果,这是由于似然函数的性质决定的,如果一个似然函数是凹函数,那么最后会收敛到极大值附近,也就是最大值附近,但是如果函数存在多个极大值,那么算法的初始值就会影响最后的结果。