0. 写在前面(学习过程总结)
我的数学基础不好,所以EM算法折腾了不少时间才真正理解。
我对EM算法的理解过程经历了如下几个阶段:
- 看《统计学习方法》上的第9章 EM算法及其推广,对EM算法需要解决的问题和原理有了一个初步的印象;
(这个时候其实并不是完全明白) - 根据 EM算法整理及其python实现 这篇博客,再梳理一遍原理,然后敲了一遍代码。
(这个时候已经对EM中 e-step 和 m-step 的原理和步骤有比较好的理解了,纸上得来终觉浅,绝知代码要手写) - 然后复习了HMM的原理,HMM的无监督学习方法就是类似EM算法的鲍姆-韦尔奇算法,这里其实主要目的是看HMM需要解决的问题,也就是对EM算法需要解决的问题能够有更深的理解,这样看公式的时候能够带入HMM的问题,公式就不会那么抽象了。
- 最后看了博客 EM算法原理总结-刘建平,重新梳理一遍原理,他的博客内容和《统计学习方法》内容差不多,可能更加简练一些,因为之前已经有了基础知识,再回过头来看公式就会觉得很容易理解了。
1. EM算法的原理
EM算法是一种迭代算法,它也称为期望最大化(Expectation-Maximum,简称EM)算法。
EM算法分为两步骤:
(1)E步:期望
(2)M步:求极大
然后不断重复1、2两步,直到参数收敛,就得到了需要的模型参数。
EM算法的求解过程其实就是先猜测一组模型参数(具体实现的时候可以都设为0或者随机初始化,看具体要求),然后基于猜测的模型参数和观测序列来极大化对数似然函数,求解模型参数。
2. EM算法的公式推导
EM算法的推导可以看下博客:EM算法原理总结-刘建平,写的非常精炼。
下面的内容基于这一篇博客来写的,加上了我自己对公式的理解和推导过程。
对于 m m m个样本观察数据 x = ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ) x=(x(1),x(2),...,x(m)) x=(x(1),x(2),...,x(m))中,找出样本的模型参数 θ \theta θ, 极大化模型分布的对数似然函数如下:
arg max θ L ( θ ) = arg max θ ∑ i = 1 m l o g P ( x ( i ) ; θ ) (1) \mathop {\arg \max_\theta }L(\theta)=\mathop {\arg \max_\theta }{\sum_{i=1}^m logP(x^{(i)};\theta)} \tag{1} argθmaxL(θ)=argθmaxi=1∑mlogP(x(i);θ)(1)
(备注:这里是对应刘建平老师博客的第一条公式,原博是 θ = \theta= θ=,我觉得这里不太好理解,应该是关于 θ \theta θ 的对数似然函数,因此做了修改)
如果观察数据 x x x序列,有对应的无法观察到的隐含数据 z = ( z ( 1 ) , z ( 2 ) , . . . , z ( m ) ) z=(z(1),z(2),...,z(m)) z=(z(1),z(2),...,z(m)),那么对数似然函数的公式中就要再加上一个变量,此时我们的极大化模型分布的对数似然函数如下:
arg max θ L ( θ ) = arg max θ ∑ i = 1 m l o g P ( x ( i ) ; θ ) = arg max θ ∑ i = 1 m l o g ∑ z ( i ) P ( x ( i ) , z ( i ) ; θ ) (2) \mathop {\arg \max_\theta } L(\theta)=\mathop {\arg \max_\theta }{\sum_{i=1}^m logP(x^{(i)};\theta)} \\ = \mathop {\arg \max_\theta }{\sum_{i=1}^m log {\sum_{z^{(i)}}} P(x^{(i)},z^{(i)};\theta)} \tag{2} argθmaxL(θ)=argθmaxi=1∑mlogP(x(i);θ)=argθmaxi=1∑mlogz(i)∑P(x(i),z(i);θ)(2)
这个公式也不难理解,以HMM做实体标注为例,观测序列是输出多个词,隐藏状态序列是每个词对应的label,那么这里的 z ( i ) z^{(i)} z(i) 就是隐藏状态label i 的概率。
所以公式里的 ∑ z ( i ) \sum z^{(i)} ∑z(i) 就是对于每一个观测序列,求它在 所有隐藏状态序列的概率和。
上面这个公式(2)是没有 办法直接求出 θ \theta θ的。因此需要一些特殊的技巧,我们首先对这个式子进行缩放如下:
∑ i = 1 m l o g ∑ z ( i ) P ( x ( i ) , z ( i ) ; θ ) = ∑ i = 1 m l o g ∑ z ( i ) Q i ( z ( i ) ) P ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) ) (3) {\sum_{i=1}^m log {\sum_{z^{(i)}}} P(x^{(i)},z^{(i)};\theta)} = {\sum_{i=1}^m log {\sum_{z^{(i)}}} Q_i(z^{(i)}) \frac{P(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}} \tag{3} i=1∑mlogz(i)∑P(x(i),z(i);θ)=