EM算法

简介

EM算法也就是期望最大化算法,主要用来解决含有隐变量的参数估计问题。本文令 X 表示已观测变量数据集,Z表示隐含标量数据集。对不含隐变量的参数估计问题,如最大化 LL(θ)=logP(X;θ) ,只需要令 P(X;θ) 对参数 θ 求偏导。而对于含有隐含变量的,如 P(X,Z;θ) 并没有办法得到隐含变量的具体值,所以直接求解的方式就行不通了,EM算法就是用于解决此类问题的。

思想与算法步骤

先从最基本的说起,在已观测样本集 X 的基础上,使用极大释然估计。写出log释然函数如下

LL(θ|X)=logP(X;θ)=logZP(X,Z;θ)

公式最右边是已观测数据的边际释然,如果可以得到隐含变量 Z ,则可以直接写出释然函数LL(θ|X,Z)=logP(X,Z;θ),但是我们无法得到隐含变量 Z ,这个时候就需要EM算法了,EM算法如何用于求LL(θ|X,Z)的最大化呢?

先介绍一下基本思想,如果有办法求出释然函数 LL(θ) 的一个下界函数,假设叫 G(θ) 吧,使得对所有参数 θ 都有 LL(θ)G(θ) 。而 G(θ) 中又不包含隐变量 Z ,那么我们就可以用迭代的办法,先用θt得到 G(θ) ,然后最大化 G(θ) 得到参数 θt+1 ,再令 θt=θt+1 ,一直到收敛,就近似的求出了 LL(θ) 的最大化了。这就是EM算法的基本思想。

回到具体的参数估计问题,EM算法分为两个步骤,E步(Expectation)求期望,M步(Maximization)最大化。E步的期望,就是给定 θt 时对数释然函数 LL(θ|X,Z) 的下界函数。这个期望是对数似然函数 LL(θ|X,Z) 关于隐变量 Z 的期望,因为我们无法求出Z的具体值,但是可以得到它在参数 θt 时的概率分布 P(Z|X;θt) ,因此期望可以写为

EZ|X;θt[LL(θ|X,Z)]=EZ|X;θt[logP(X,Z;θ)]=ZP(Z|X;θt)logP(X,Z;θ)(1)

算法的步骤如下
- 首先随机初始化参数 θ=θ0
- 迭代直至收敛 {
1. E步:
根据 θt 计算 P(Z|X;θt) ,求期望

EZ|X;θt[LL(θ|X,Z)]=EZ|X;θ[logP(X,Z;θ)]=ZP(Z|X;θt)logP(X,Z;θ)

2. M步:
E步之后会得到一个只包含 θ 的函数,M步就是最大化这个函数,得到新的参数 θ

θt+1=argmaxθEZ|X;θt[logP(X,Z;θ)]

}

原理

在上一部分已经介绍了EM算法的思想与步骤,但是还有一点没有说明白,那就是为什么对数似然函数 LL(θ|X,Z) 关于 Z 的期望会是它自己的一个下界函数呢?首先引入Jensen不等式。

Jensen不等式

Jensen不等式对于凸函数f

E(f(X))f(E(X))

也就是随机变量 X 函数值的期望大于等于随机变量期望的函数值。对于凹函数则相反。

在知道了Jensen不等式后,从最基本的情况进行推导

LL(θ|X)=logP(X;θ)=logZP(X,Z;θ)

对上式的最右边用一个数学trick,同时乘和除得到隐变量 Z 在参数θt下的概率分布,得到

LL(θ|X)=logZP(X,Z;θ)=logZP(Z|X;θt)P(X,Z;θ)P(Z|X;θt)

这样就得到了期望 EZ ,有

logEZ[P(X,Z;θ)P(Z|X;θt)]

又因为log函数是凹函数,所以利用Jensen不等式可以得到 随机变量期望的函数值大于等于函数值的期望,也就是
logEZ[P(X,Z;θ)P(Z|X;θt)]EZ[logP(X,Z;θ)P(Z|X;θt)]

这样也就找到了 LL(θ|X) 的下界函数。再把它展开得到

EZ[logP(X,Z;θ)P(Z|X;θt)]=ZP(Z|X;θt)logP(X,Z;θ)P(Z|X;θt)=ZP(Z|X;θt)[logP(X,Z;θ)logP(Z|X;θt)]

又因为 P(Z|X;θt) 与参数 θ 无关,在最大化的时候不会影响结果,因此舍去。那么就可以得到

zP(Z|X;θt)logP(X,Z;θ)

也就是EM算法中E步的期望 EZ|X;θt[LL(θ|X,Z)] 了(参见公式1)。

小结

EM算法和其他一些可以直接编程,然后给定input就可以得到output的算法不太一样,它本身更可以理解为一种方法或者思想。因为 P(Z|X;θt) logP(X,Z;θ) 都只是理论推导过程中的公式,具体的可计算公式还要根据具体的应用来给定,比如pLSA(probability latent semantic analysis)中参数的求解就需要用到EM算法,在这个情形下就可以编程实现来验证EM算法的效果了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值