预告一下,这部分数学推导内容比较多。看这个系列的同学都知道,数学推导部分我是很少写的,主要是通过举例子和演示简单的实现代码,让大家加深对这个算法的理解。理解之后,学有余力的同学可以再深入。但EM算法很难达到这个效果,直接举例子,也很难理解背后的思想,所以会把推导部分一并提供。
EM算法的引入
引用Nature Biotech 的 EM tutorial的两硬币模型的例子,先直观感受下。由于解释这篇文章的太多了,我也不赘述了,大家可以看看下面的文章。
阿泽:【机器学习】EM——期望最大(非常详细)zhuanlan.zhihu.com
三硬币模型
这是书上的例子,也是上面两个硬币模型的一个扩展。
对每一次试验可以进行如下建模,
表示结果的观测变量,
表示模型参数就是我们要求的
,
就是隐变量,表示观测不到的变量,抛掷硬币A的结果:
这个式子的实在意义是什么?加号左边表示的是,抛掷硬币A为正面,我们得到
的概率,同样,右边式子同理。由于
的取值不是0就是1,这里把式子展开:
第一个式子表示A抛掷为正,B抛掷为正+A抛掷为反,C抛掷为正的概率。第二个式子就是A抛掷为正,B抛掷为反+A抛掷为反,C抛掷为反的概率。整合一下就是书中的9.1式子:
每一次抛掷已经建模结束,我们对整个实验进行建模。先定义两个变量,将观测数据表示为
,为观测数据表示为
,则:
通过极大似然估计求模型参数:
继续对
求导,很快就发现,我们是求不出解析解的。所以我们需要用一个迭代的方法求解,也就是接下来要讲的EM算法。
EM算法的导出
先要讲讲Jensen(琴生)不等式,Jensen 不等式是建立在凸函数上的不等关系。那么凸函数又是什么呢?通俗来讲,凸函数就是图像看起来向上鼓或者向下鼓的函数(向上鼓就是上凸,向下鼓就是下凸);从定义来讲,就是在函数图像上随便连一条线段,这条线段所在的区间上的函数取值要么都在直线上方(包含),要么都在直线下方(包含)。
下凸函数
若
是凸函数,则:
。这个式子显然是成立的,其实就是凸函数的定义。如上图,式子的左侧就是AB两点直接连接的直线(蓝色线),而右侧就是AB两点的函数连续(绿线)。将上式
推广到
个同样成立:
其中,
。在概率论中以下面的形式出现:
其中
是随机变量,
是凸函数,
当然就是
的期望了。基本的数学基础已经铺垫完了,下面就开始推导EM算法。我们要极大化的是下面的式子:
注意到这一极大化的主要困难是含有未观测数据Z并有包含和(Z为离散型时,如上式)或者积分(Z为连续型时)的对数。EM算法采用的是通过迭代逐步近似极大化
:假设在第i次迭代后
的估计值是
,我们希望新的估计值
能使
增大,即
,并逐步达到极大值。为此:
为啥要做这样的变换呢,当然是为了要凑Jensen不等式,大家观察减号左边的式子,不就是相当于
吗?也就是期望值。很自然就是:
到这里就化简不下去了。式子就是:
令:
则:
,注意:这里的
当然是未知的,但
是已知的,因为从
开始,我们会赋给它一个随机值(当然要有一定的合理性,比如两硬币模型的赋值),让它不断进行迭代。
函数
是
的一个下界,此时,若设
使得
达到极大,也就是:
,这里由于是极大,不是最大,所以式子里面的是
而不是
。同时算一下
也就是把
代到上式(1.1),得到结果为
。所以结果为:
因此,任何可以使
增大的
,可可以使得
增大,为了使
尽可能大的增长,求解能使得
达到极大的
:
这个就是EM算法的Q函数,使其最大。到这里已经完成了EM算法的一次迭代。求出的
作为下一次迭代的初始
。总结一下EM算法的E步和M步分别为:
E步:计算完全数据的对数似然函数
关于在给定观测数据
和当前参数
下对未观测数据
的条件概率分布
的期望。很拗口,
其实就是用这个缺失数据的期望值来代替缺失的数据,而这个缺失的数据期望值和它的概率分布有关。那么我们可以通过对似然函数关于缺失数据期望的最大化,来逼近原函数的极大值。EM算法本质就是含有
隐变量的概率模型参数的极大似然估计法。Q函数数学表达式:
这里我们把
看成随机变量
,
看成
各种取值的概率,这样就是
的期望。
M步:求使得Q函数达到极大的
,并作为下一次迭代的初始化。
这就是EM 算法的核心思想分步:Expection-Step 和 Maximization-Step。由于算法会保证在每次迭代之后似然函数都会增加,所以函数最终会收敛(收敛性这里不讲了),得到我们想要的解。
EM算法的解释
书中有这个算法的图解过程:
这个图已经基本画的很清楚了,就是一个逐步的逼近极大值的过程。如果还是不太清楚的话,可以看看这个:怎么通俗易懂地解释EM算法并且举个例子?
EM算法求解例子
用EM算法求解三硬币模型的思路:E步,求出Q函数,M步,求出使得Q函数达到极大的
。
下面求Q函数:
单独考察第一项,继续展开可得结果:
代回到Q函数,最终得到:
到此化简结束,下面代入具体参数,导出具体Q函数。
由于
的取值不是0就是1,可得:
上面就是书中的9.5式。代入Q函数:
下面就是M步了:
这就是书中的9.6,以此类推求
。参考书中的9.7和9.8。
先写到这里吧,EM算法其实就是一个迭代方法,在很多地方我们应该还能看到它的身影,到时候再学习,慢慢加深理解。
顺便提一句,在了解EM的过程,我一直在想,有的地方为什么不用梯度下降法呢?后来理解了本质上并无太大差异,梯度下降每一个循环仅仅更新模型参数就可以了,EM算法每一个循环既需要更新隐含参数和也需要更新模型参数。
这些链接也解了我的一些疑惑,有兴趣的同学可以看看。
如何正确理解EM算法?
梯度下降和EM算法:系出同源,一脉相承