博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EM算法(Expectation Maximization Algorithm)
阅读量:6575 次
发布时间:2019-06-24

本文共 4440 字,大约阅读时间需要 14 分钟。

1. 前言

  这是本人写的第一篇博客(2013年4月5日发在cnblogs上,现在迁移过来),是学习李航老师的《统计学习方法》书以及斯坦福机器学习课Andrew Ng的EM算法课后,对EM算法学习的介绍性笔记,如有写得不恰当或错误的地方,请指出,并多多包涵,谢谢。另外本人数学功底不是很好,有些数学公式我会说明的仔细点的,如果数学基础好,可直接略过。

2.基础数学知识

  在正式介绍EM算法之前,先介绍推导EM算法用到的数学基础知识,包括凸函数,Jensen不等式。

2.1.凸函数

  对于凸函数,凹函数,如果大家学过高等数学,都应该知道,需要注意的是国内教材如同济大学的《高等数学》的这两个概念跟国外刚好相反,为了能更好的区别,本文章把凹凸函数称之为上凸函数,下凸函数,具体定义如下:

上凸函数:函数 f(x) 满足对定义域上任意两个数 a , b 都有 f[(a+b)/2][f(a)+f(b)]/2

下凸函数:函数 f(x) 满足对定义域上任意两个数 a , b 都有 f[(a+b)/2][f(a)+f(b)]/2

  更直观的可以看图2.1和2.2:

图2.1. 上凸函数 图2.2. 下凸函数

  可以清楚地看到图2.1上凸函数中,f[(a+b)/2][f(a)+f(b)]/2,而且不难发现,如果f(x)是上凸函数,那么 f(x) 是下凸函数。

  当 ab 时,f[(a+b)/2]>[f(a)+f(b)]/2 成立,那么称 f(x) 为严格的上凸函数,等号成立的条件当且仅当 a=b,下凸函数与其类似。

2.2.Jensen不等式

  有了上述凸函数的定义后,我们就能很清楚的Jensen不等式的含义,它的定义如下:

如果f是上凸函数,X 是随机变量,那么 f(E[X])E[f(X)] 

特别地,如果f是严格上凸函数,那么 E[f(X)]=f(E[X]) 当且仅当 p(X=E[X])=1,也就是说 X 是常量。

  那么很明显 logx 函数是上凸函数,可以利用这个性质。

  有了上述的数学基础知识后,我们就可以看具体的EM算法了。

3.EM算法所解决问题的例子

  在推导EM算法之前,先引用《统计学习方法》中EM算法的例子:

例1. (三硬币模型)假设有3枚硬币,分别记作 A,B,C 。这些硬币正面出现的概率分别为 πp 和 q。投币实验如下,先投 A,如果 A 是正面,即 A=1,那么选择投 BA=0,投 C。最后,如果 B 或者 C 是正面,那么 y=1;是反面,那么 y=0;独立重复 n 次试验 (n=10),观测结果如下: 1,1,0,1,0,0,1,0,1,1 假设只能观测到投掷硬币的结果,不能观测投掷硬币的过程。问如何估计三硬币正面出现的概率,即 πp 和 q 的值。

:设随机变量 y 是观测变量,则投掷一次的概率模型为:

P(y|θ)=πpy(1p)1y+(1π)qy(1q)1y
有 
n 次观测数据 Y,那么观测数据 Y 的似然函数为:
P(Y|θ)=nj=1[πpyj(1p)1yj+(1π)qyj(1q)1yj]
那么利用最大似然估计求解模型解,即
θˆ=argmaxθlogP(Y|θ)=argmaxθj=110logP(yj|θ)=argmaxθj=110log[πpyj(1p)1yj+(1π)qyj(1q)1yj](1)(2)(3)
这里将概率模型公式和似然函数代入  式中,可以很轻松地推出 ,然后选取 θ(π,p,q),使得  式值最大,即最大似然。然后,我们会发现因为  中右边多项式 + 符号的存在,使得  直接求偏导等于 θ 或者用梯度下降法都很难求得 θ值。
这部分的难点是因为  多项式中 + 符号的存在,而这是因为这个三硬币模型中,我们无法得知最后得结果是硬币 B 还是硬币 C抛出的这个隐藏参数。那么我们把这个latent 随机变量加入到 log-likelihood 函数中,得
l(θ)=j=110logi=12P(yj,ziθ)=j=110logi=12Qj(zi)P(yj,ziθ)Qj(zi)j=110i=12Qj(zi)logP(yj,ziθ)Qj(zi)(4)(5)(6)
略看一下,好像很复杂,其实很简单,首先是公式 ,这里将 zi 做为隐藏变量,当 z1 为结果由硬币 B 抛出,z2 为结果由硬币C抛出,不难发现:
i=12P(yj,ziθ)=P(yjθ)=πpyj(1p)1yj+πqyj(1q)1yj
  接下来公式说明  (其中  中 Q(z) 表示的是关于 z 的某种分布,iQj(zi)=1,很直接,在 P 的分子分母同乘以 Q(zi)。最后是 ,到了这里终于用到了第二节介绍的Jensen不等式,数学好的人可以很快发现,2i=1Qj(zi)P(yj,zi|θ)Qj(zi) 就是 [P(yj,zi|θ)Qj(zi)] 的期望值(如果不懂,可google期望公式并理解),且log是上凸函数,所以就可以利用Jensen不等式得出这个结论。因为我们要让log似然函数 l(θ)最大,那么这里就要使等号成立。根据Jensen不等式可得,要使等号成立,则要使 P(yj,zi|θ)Qj(zi)=c 成立。
  再因为iQj(zi)=1,所以得iP(yj,zi|θ)=cc 为常数,那么(这里感谢网友@无影随想指出错误)
Q(zi)=P(yj,ziθ)/iP(yj,ziθ)=P(yj,zi)/P(yjθ)=P(ziyj,θ)
这里可以发现
Qj(z1)=πpyj(1p)1yjπpyj(1p)1yj+(1π)qyj(1q)1yjQj(z2)=(1π)qyj(1q)1yjπpyj(1p)1yj+(1π)qyj(1q)1yj
  OK,到这里,可以发现公式  中右边多项式已经不含有“+”符号了,如果知道 Q(z) 的所有值,那么可以容易地进行最大似然估计计算,但是 Q 的计算需要知道 θ 的值。这样的话,我们是不是可以先对θ进行人为的初始化 θ0,然后计算出 Q 的所有值 Q1(在 θ0 固定的情况下,可在 Q1 取到公式  的极大值),然后在对公式  最大似然估计,得出新的 θ1 值(在固定Q1的情况下,取到公式  的极大值),这样又可以计算新的 Q 值 Q1,然后依次迭代下去。答案当然是可以。因为 Q1 是在 θ0 的情况下产生的,可以调节公式  中 θ 值,使公式  的值再次变大,而 θ 值变了之后有需要调节 Q 使  等号成立,结果又变大,直到收敛(单调有界必收敛),如果到现在还不是很清楚,具体清晰更广义的证明可以见下部分EM算法说明。
  另外对公式  进行求偏导等于 θ,求最大值,大家可以自己练习试试,应该很简单的,这里不做过多陈述。
  在《统计学习方法》书中,进行两组具体值的计算

 

  • π0=0.5, p0=0.5, q0=0.5,迭代结果为 π=0.5, p=0.6, q=0.5
  • π0=0.4, p0=0.6, q0=0.7,迭代结果为 π=0.4064, p=0.5368, q=0.6432

两组值的最后结果不相同,这说明EM算法对初始值敏感,选择不同的初值可能会有不同的结果,只能保证参数估计收敛到稳定点。因此实际应用中常用的办法就是选取多组初始值进行迭代计算,然后取结果最好的值。

  在进行下部分内容之前,还需说明下一个东西。在上面的举例说明后,其实可以发现上述的解决方法跟一个简单的聚类方法很像,没错,它就是。K-means算法先假定k个中心,然后进行最短距离聚类,之后根据聚类结果重新计算各个聚类的中心点,一次迭代,是不是很像,而且K-means也是初始值敏感,因此其实K-means算法也包含了EM算法思想,只是这边EM算法中用P概率计算,而K-means直接用最短距离计算。所以EM算法可以用于无监督学习。在下一篇文章,我准备写下典型的用EM算法的例子,

4.EM算法

4.1.模型说明

  考虑一个参数估计问题,现有 y1,y2,,yn 共 n 个训练样本,需有多个参数 π 去拟合数据,那么这个 log 似然函数是:

l(θ)=j=1nlogP(yj|θ)

  可能因为 θ 中多个参数的某种关系(如上述例子中以及高斯混合模型中的3类参数),导致上面的 log 似然函数无法直接或者用梯度下降法求出最大值时的 θ 值,那么这时我们需要加入一个隐藏变量 z,以达到简化 l(θ),迭代求解 l(θ) 极大似然估计的目的。

 

4.2.EM算法推导

  这小节会对EM算法进行具体推导,许多跟上面例子的解法推导是相同的,如果已经懂了,可以加速阅读。首先跟“三硬币模型”一样,加入隐变量 z 后,假设 Q(z) 是关于隐变量 z 的某种分布,那么有如下公式:

l(θ)=j=1nlogi=1P(yj,ziθ)=j=1nlogi=1Q(zi)P(yj,ziθ)Q(zi)j=1ni=1Q(zi)logP(yj,ziθ)Q(zi)(7)(8)(9)

  公式  是加入隐变量, 是在基础上分子分母同乘以, 用到Jensen不等式(跟“三硬币模型”一样),等号成立的条件是,c 是常数。再因为,则有如下 Q 的推导:

iP(yj,ziθ)/c=1iP(yj,ziθ)=cQj(zi)=P(yj,ziθ)/iP(yj,ziθ)=P(yj,ziθ)/P(yjθ)=P(ziyj,θ)

  再一次重复说明,要使  等式成立,则 Qj(zi) 为 yj, z的后验概率。算出 Qj(zi) 后对  就可以进行求偏导,以剃度下降法求得 θ 值,那么又可以计算新 Qj(zi) 的值,依次迭代,EM算法就实现了。

 

EM 算法(1)

选取初始值 θ0 初始化 θt=0
Repeat {
  E步:

Qtj(zi)=P(yj,ziθt)/iP(yj,ziθt)=P(yj,ziθt)/P(yjθt)=P(ziyj,θt)
  M步:
θt+1t=argmaxθj=1niQtj(zi)logP(yj,ziθ)Qtj(zi)=t+1
}直到收敛

 

4.3.EM算法收敛性证明

  当 θ 取到 θt 值时,求得

θt+1=argmaxθj=1niQtj(zi)logP(yj,ziθ)Qtj(zi)

那么可得如下不等式:

l(θt+1)=j=1nlogiQtj(zi)P(yj,ziθt+1)Qtj(zi)j=1niQtj(zi)logP(yj,ziθt+1)Qtj(zi)j=1niQtj(zi)logP(yj,ziθt)Qtj(z

转载地址:http://zerjo.baihongyu.com/

你可能感兴趣的文章
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
下拉菜单
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
【MVC+EasyUI实例】对数据网格的增删改查(上)
查看>>
第三章:如何建模服务
查看>>
Project Euler 345: Matrix Sum
查看>>
你可能不知道的技术细节:存储过程参数传递的影响
查看>>
POJ1703 Find them, Catch them
查看>>
HTML转义字符大全(转)
查看>>
[摘录]调动员工积极性的七个关键
查看>>
Linux getcwd()的实现【转】
查看>>
Backup Volume 操作 - 每天5分钟玩转 OpenStack(59)
查看>>
.htaccess 基础教程(四)Apache RewriteCond 规则参数
查看>>
转: maven进阶:一个多模块项目
查看>>
Android控件之HorizontalScrollView 去掉滚动条
查看>>
UVM中的class--2
查看>>
任务调度器配置文件
查看>>
ORACLE 存储过程异常捕获并抛出
查看>>