8.5.2的EM算法的描述比较晦涩,这里总结一下EM算法的general形式。EM算法主要用于最大化似然函数。某些似然函数要最大化可能比较困难,但如果可以引入某些隐变量(latent data),那么这个最大化问题可能会变得简单一些。在The Element of Statistical Learning这本书里面这叫做data augmentation。需要注意的是,一般机器学习里面(尤其深度学习)说的data augmentation指的是对原来的数据进行一定的变换(比如计算机视觉里面把图片旋转拉伸放缩)再加入到原始数据里面,这样数据量大了,一定程度上面可以减少泛化误差,或者增加训练样本的量。可以参见巨著Deep Learning里面7.4节。还要注意,EM算法本质上是一个优化算法。从机器学习算法的三大构成(模型,目标函数,优化方法)来看,假定的数据分布是模型,最大似然是目标函数,而EM算法是用以优化出结果的方法。用形式化的方法来说,如果假定的数据分布的具有参数
θ
,拟合的数据是
xi
,那么似然函数则为
很多人可能对于那个分号有点懵逼,其实就是表示给定参数 θ 下 xi 的概率。
8.5.2对EM算法通用形式的描述有点不太好懂,先从吴恩达的比较好懂的版本开始说起。理解EM算法需要一个数据工具,Jensen不等式。
Theorem 如果
f
是一个凸函数,
如果 f 是严格凸的,那么仅当
证明这个不等式也不难,需要用到凸函数的性质。如果
x,c
在
f
的定义域上,那么
即 f(x)−f(c)−f′(c)(x−c)≥0 。假设 c=EX ,那么等式两边对 X 的密度函数
因为 c=EX ,第三项消掉。继续代入,就可以证明出Jensen不等式了。因为凸函数和凹函数是对称的,因此如果 f 是一个凹函数,那么
回到最大似然的问题,假设我们额外增加的latant variable隐变量是
z
,对于混合高斯模型来说,这个隐变量就是指定某个
最后一行用了Jensen不等式,
logEzi∼Qip(xi,zi;θ)Qi(zi)≥Ezi∼Qilogp(xi,zi;θ)Qi(zi)
。我们把最后一行的公式写成
J(Q,θ)
,那么这就是原来似然函数的一个下界lower bound。如果给定
θ0
,存在
Q
使得
根据Jensen不等式,如果
J(Q,θ)=l(θ)
成立,那么
p(xi,zi;θ)Qi(zi)=c
是一个常数,但是
Qi(zi)
是一个概率分布,因此
因此
因此,当 Qi(zi) 是给定 xi 的后验概率, J(Q,θ)=l(θ) 。接下来只要最大化 J(Q,θ) ,那么就可以迭代新的 θ′ 使得 l(θ)≤l(θ′) 。计算 Qi(zi)=p(zi∣xi;θ) 就是EM的E-step,之后最大化 J(Q,θ) 就是EM的M-step。所以本来只是最大化 l(θ) 的问题变成了 J(Q,θ) 的坐标上升方法。可能有人会发现 Qi(zi)=p(zi∣xi;θ) ,此处的 θ 是前一次迭代得到的 θ ,而后面优化 J(Q,θ) 得到的 θ 是本次迭代得到的 θ 。这个在下面的版本中会体现得更好。
接下来是ESL上面8.5.2的版本,稍微不一样的使得问题复杂的就是一开始上述的
Qi
就固定了。为了化简符号,我们以
X
代表要拟合的数据,
因此
取对数,那么就是
如果对于上式取对 P(Z∣X;θ) 的期望,因为左边不涉及 Z ,那么可以得到
这个已经很像是上面的 J(Q,θ) 了。但是这边一开始就用 P(X;θ)=P(Z,X;θ)P(Z∣X;θ) 构造了 l(θ)=J(Q,θ) 的情形。
然而只有两式相等的情形是不够的,需要知道如何迭代使得
l(θ)
不断上升。 接下来,假设我们已经知道了在第t次迭代
θt
的值,对于上面取期望的操作,我们取的是
P(Z∣X;θt)
的期望,因此
接下来是证明只需要优化 J1(θt,θ) 当中的 θ 就相当于优化了 l(θ) 。原因是 J2(θt,θ)≥J2(θt,θt) 。证明这个也是用Jensen不等式。
因此对于任意 θ 必有 J2(θt,θ)≥J2(θt,θt) 。因此如果 θ′ 最大化了 J1(θt,θ) ,那么可以令 θt+1=θ′ 使得 l(θt)≤l(θt+1) 。因此在ESL的书上算法8.2,E-step是计算 P(Z∣X;θt) 形成 J1(θt,θ) 的确切形式,M-step是优化 J1(θt,θ) 。而且这里可以看到最大化 J1(θt,θ) 是不必要的,只需要升高一点就可以了。
以上两个版本是对EM的不同解读。共同之处都是需要额外的隐变量使得问题简化。第一个版本是用Jensen不等式求出一个过当前解的下界函数,通过优化这个相对简单的函数来迭代解。而第二个版本则是直接把似然函数变成两个部分来看,第二部分必然减少但是因为负号而增加,因而只需要优化第一部分。相对来说第二版本,即ESL书上的版本,相对比较晦涩。
可能有人会发现在这个版本里面,在对数log里面分母的一项是
θ
,是参与M-step优化的,而第一个版本里面的是
θt
,是不参与M-step优化的。然而因为第二个版本只需要优化
J1(θt,θ)
,即log里面分子的一项,所以和第一个版本殊途同归。
ESL上面8.5.3节的本质和第一个版本是一回事。这里也间接解决了课本习题8.1和8.2。吴恩达版本也是习题8.7的一个说明。
熟悉非负矩阵分解算法的人可能一下子就觉得很熟悉,其实NMF的paper里面也说到用了EM-like的方法。而且NMF里面也是通过不断放缩找到过当前解的一个上界函数来优化以迭代,思路本质上是一样的。