EM算法

引入

在我们的概率模型中,有时观察及所要,但很多时候模型中还隐含了很多的潜在变量。对于这一类情况,我们就不能简单的直接使用极大似然等估计方法,而EM算法就是适用于含有隐变量问题的极大似然估计法。

我们以掷硬币问题为例,假设现在有两枚硬币记为 AABB ,两枚硬币正面朝上的概率分别记为 θA,θB\theta_A, \theta_B 。现在我们要这两个参数的值,显然我们需要进行掷硬币实验,如果我们对于两枚硬币各进行 nn 轮掷硬币实验,每轮实验进行 kk 次,A硬币第 ii 轮实验结果记为 {ai(1),ai(2),,ai(n)}\{a_i^{(1)}, a_i^{(2)}, \cdots, a_i^{(n)}\} ,通过极大似然估计法,可以很容易得到:

θA=i=1nj=1kI(ai(k)=1)nk\theta_A = \frac{\sum_{i = 1}^n\sum_{j = 1}^kI(a_i^{(k)} = 1)}{nk}

但是考虑这样一种情况,将两枚硬币的实验混在一起,共进行 kknn 轮掷硬币实验, 得到 {xi(1),xi(2),,xi(n)}\{x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(n)}\} 这样我们就不能直接使用极大似然法进行估计了。这里我们就要引入一个隐变量 ZZ ,代表了所使用的硬币序列 {z1,z2,,zk}\{z_1, z_2, \cdots, z_k\} ,其中使用A硬币时 Z=1Z = 1 ,否则 Z=0Z = 0

为了解决这一个问题,我们考虑一个地带的方法来进行求解,首先我们为两个参数假定一个初值 θA1,θB1\theta_A^1, \theta_B^1 ,这样我们就可以得出在这样的初值假设下两枚硬币被使用的概率

PA1=(θA1)Ni(1θA1)Ni(θA1)Ni(1θA1)Ni+(θB1)Ni(1θB1)NiPB1=(θB1)Ni(1θB1)Ni(θA1)Ni(1θA1)Ni+(θB1)Ni(1θB1)Ni\begin{split} P_A^1 = \frac{(\theta_A^1)^{N_i} (1 - \theta_A^1)^{N_i}}{(\theta_A^1)^{N_i} (1 - \theta_A^1)^{N_i} + (\theta_B^1)^{N_i} (1 - \theta_B^1)^{N_i}}\\ P_B^1 = \frac{(\theta_B^1)^{N_i} (1 - \theta_B^1)^{N_i}}{(\theta_A^1)^{N_i} (1 - \theta_A^1)^{N_i} + (\theta_B^1)^{N_i} (1 - \theta_B^1)^{N_i}} \end{split}

其中 NiN_i 表示第 ii 轮实验中硬币正面朝上的次数。,对于 kk 个概率值求均值,得到了这个概率之后,我们可以进一步用这个概率,估计得到新的参数值,重复这个过程直到参数收敛。

通过这个例子,我们来总结EM算法的过程:

对于观测变量 YY ,隐变量 ZZ 联合分布 P(Y,Zθ)P(Y , Z|\theta) ,条件分布 P(ZY,θ)P(Z|Y, \theta)

  • 选择参数的初值 θ(0)\theta^{(0)}
  • E步:记 θ(i)\theta^{(i)} 为第 ii 次迭代的估计值, 在第 i+1i + 1 次迭代的E步计算:
Q(θ,θ(i))=EZ[logP(Y,Zθ)Y,θ(i)]=ZlogP(Y,Zθ)P(ZY,θ(i))\begin{split} Q(\theta, \theta^{(i)}) & = E_Z[\log P(Y, Z |\theta)|Y, \theta^{(i)}]\\ & = \sum_Z \log P(Y, Z|\theta)P(Z|Y, \theta^{(i)}) \end{split}
  • M步:求使 Q(θ,θ(i))Q(\theta, \theta^{(i)}) 极大化的 θ\theta ,则:
θ(i+1)=argmaxθQ(θ,θ(i))\theta^{(i + 1)} = \arg\max_\theta Q(\theta, \theta^{(i)})
  • 重复这两步直到结果收敛。

请注意,对于任意的初值,EM算法都可以得到收敛的结果,但是算法是对于初值是敏感的,因为EM算法的优化对象不是凸函数,会收敛到局部极值点。

算法推导

对于一个含有隐变量的概率模型,我们要通过极大化对数似然函数的方式来得到参数的估计值,即:

θ=argmaxθL(θ)=argmaxθlogP(Yθ)=argmaxθlogZP(Y,Zθ)=argmaxθlogZP(YZ,θ)P(Zθ)\begin{split} \theta^* & = \arg \max_\theta L(\theta)\\ & =\arg \max_\theta \log P(Y | \theta)\\ & = \arg\max_\theta \log\sum_Z P(Y, Z|\theta)\\ & = \arg\max_\theta \log\sum_Z P(Y | Z, \theta) P(Z|\theta) \end{split}

这个优化问题的难点就在于 ZZ 的分布是完全未知且要求一个和的对数。前面通过迭代的方式来求这个极大值,现在我们来说明迭代的方法是有效的。

假设第 ii 次迭代得到的结果是 θ(i)\theta^{(i)} ,那么:

L(θ)L(θ(i))=log(ZP(YZ,θ)P(Zθ))logP(Yθ(i))L(\theta) - L(\theta^{(i)}) = \log \left(\sum_Z P(Y|Z, \theta)P(Z|\theta)\right) - \log P(Y|\theta^{(i)})

利用凹函数的Jensen不等式放缩得到:

L(θ)L(θ(i))=log(ZP(ZY,θ(i))P(YZ,θ)P(Zθ)P(ZY,θ(i)))logP(Yθ(i))ZP(ZY,θ(i))log(P(YZ,θ)P(Zθ)P(ZY,θ(i)))logP(Yθ(i))=ZP(ZY,θ(i))log(P(YZ,θ)P(Zθ)P(ZY,θ(i))P(Yθ(i)))\begin{split} L(\theta) - L(\theta^{(i)}) & = \log \left(\sum_ZP(Z|Y, \theta^{(i)})\frac{ P(Y|Z, \theta)P(Z|\theta)}{P(Z|Y, \theta^{(i)})}\right) - \log P(Y|\theta^{(i)})\\ & \geq \sum_ZP(Z|Y, \theta^{(i)})\log \left(\frac{ P(Y|Z, \theta)P(Z|\theta)}{P(Z|Y, \theta^{(i)})}\right) - \log P(Y|\theta^{(i)})\\ & = \sum_ZP(Z|Y, \theta^{(i)})\log \left(\frac{ P(Y|Z, \theta)P(Z|\theta)}{P(Z|Y, \theta^{(i)}) P(Y|\theta^{(i)})}\right) \end{split}

B(θ,θ(i))=L(θ(i))+ZP(ZY,θ(i))log(P(YZ,θ)P(Zθ)P(ZY,θ(i))P(Yθ(i)))B(\theta, \theta^{(i)}) = L(\theta^{(i)}) + \sum_ZP(Z|Y, \theta^{(i)})\log \left(\frac{ P(Y|Z, \theta)P(Z|\theta)}{P(Z|Y, \theta^{(i)}) P(Y|\theta^{(i)})}\right) ,则 B(θ(i),θ)B(\theta^{(i)}, \theta) 是对数似然函数的下界。为了实现对数似然函数的最大化,可以等价的转化为 B(θ,θ(i))B(\theta, \theta^{(i)}) 的最大化,即:

θ(i+1)=argmaxθB(θ,θ(i))=argmaxθ[L(θ(i))+ZP(ZY,θ(i))log(P(YZ,θ)P(Zθ)P(ZY,θ(i))P(Yθ(i)))]=argmaxθZP(ZY,θ(i))log(P(YZ,θ)P(Zθ))=argmaxθZP(ZY,θ(i))logP(Y,Zθ)=argmaxθQ(θ,θ(i))\begin{split} \theta^{(i+1)} & = \arg\max_\theta B(\theta, \theta^{(i)})\\ & = \arg\max_\theta \left[L(\theta^{(i)}) + \sum_ZP(Z|Y, \theta^{(i)})\log \left(\frac{ P(Y|Z, \theta)P(Z|\theta)}{P(Z|Y, \theta^{(i)}) P(Y|\theta^{(i)})}\right) \right]\\ & = \arg\max_\theta \sum_ZP(Z|Y,\theta^{(i)})\log\left(P(Y|Z, \theta) P(Z|\theta)\right)\\ & = \arg\max_\theta \sum_Z P(Z|Y, \theta^{(i)})\log P(Y,Z|\theta)\\ & = \arg\max_\theta Q(\theta, \theta^{(i)}) \end{split}

不再详细对于算法的收敛性进行证明,通过前人的探索,可以知道的是,对于任意的参数初值,算法最终一定会收敛,但是EM算法仍然是初值敏感的,对于不同的初值会得到不同的收敛结果。为了得到更好的估计结果,通常可以对于初值进行随机采样,从所有的结果中选择最优项。