UTF8gbsn
今天我们讲一个算法, 这个算法就是EM(Expectation Maximization
Algorithm)算法. 这个算法是为了估计概率模型参数
θ
\theta
θ的.
到这里大家肯定想到了如果我们知道观察值
X
X
X.
就可以使用MLE(最大似然估计)来估计参数
θ
\theta
θ了啊. 为什么还需要EM算法呢?
的确如果问题是已知观察值
X
X
X, 求
θ
\theta
θ,那么我们的确只需要MLE就可以了.
θ = arg max θ L ( θ ; X ) \theta=\arg\max_{\theta}L(\theta;X) θ=argθmaxL(θ;X)
那么EM的存在是为了什么呢? 其实这是为了解决隐变量问题.
我们先来提出一个问题. 如果我们有A,B,C三个硬币, 我们先投掷A, 并观察A的值,
如果正面,则选择投掷B, 并纪录输出到最终观察序列里面,
如果A是反面,则投掷C,并纪录观察值到最终输出序列里面.
我们把A的输出记做随机变量Z, 而最后来自B或C的输出, 也就是我们的观察只为X.
可以得到类似于下面的这样一张表.
A(Z) | 1 | 0 | 1 | 0 |
---|---|---|---|---|
B | 1 | - | 0 | - |
C | - | 0 | - | 1 |
X | 1 | 0 | 0 | 1 |
由此可见, Z的值,我们是观测不到的, 但是我们能够观测到X. 所以在这种情况下,
我们需要去估计参数
θ
\theta
θ. 这个时候就该EM算法登场了. 那么问题又来了,
这里为什么就不能使用MLE呢? 答案是肯定可以的, 只是你的估计会有偏差,
这里即然我们知道的整个数据产生的过程中有隐变量. 这本身就是一种信息,
如果你不好好利用好这个信息设置更为符合实际的参数
θ
\theta
θ,
那么估计出来的实际概率模型出现大的偏差就不奇怪了.
利用好信息
我们很直观的想法是使用全概率公式来求 θ \theta θ.
L ( θ ; X ) = p ( X ∣ θ ) = ∫ p ( X , Z ∣ θ ) d Z L(\theta;X)=p(X|\theta)=\int{p(X,Z|\theta)dZ} L(θ;X)=p(X∣θ)=∫p(X,Z∣θ)dZ
可是, 这个公式有一个缺点, 就是在实际计算过程中基本不可能.
因为要想求出所有
Z
,
X
Z, X
Z,X的组合在序列数据里面非常庞大.我们无法穷举所有的组合结果.于是这个式子变得无法求解.
这样就有了EM的用武之地. 我们来看看EM的具体步骤.
-
随机初始化参数 θ 0 \theta^{0} θ0
-
E步:计算函数
Q ( θ ∣ θ t ) = E Z ∼ X , θ t [ L ( θ ; X , Z ) ] Q(\theta|\theta^t)=E_{Z\sim X, \theta^t}[L(\theta; X, Z)] Q(θ∣θt)=EZ∼X,θt[L(θ;X,Z)] -
M步:求 θ t + 1 \theta^{t+1} θt+1
θ t + 1 = arg max θ Q ( θ ∣ θ t ) \theta^{t+1}=\arg\max_{\theta}Q(\theta|\theta^t) θt+1=argθmaxQ(θ∣θt) -
算法收敛, 得 θ \theta θ
以上, 就是EM算法的标准流程. 那么EM算法为什么可以求
θ
\theta
θ,
而且是否收敛. 这两个问题暂时不讲. 后面专门写文章来讲这个两个问题.
我们先来看看前面介绍的投掷硬币的列子.
例子
我们现在假设A,B,C硬币的参数位
π
,
p
,
q
\pi, p, q
π,p,q. 按照EM算法的第一步,
先设置
π
=
0.5
,
p
=
0.5
,
q
=
0.5
\pi=0.5, p=0.5, q=0.5
π=0.5,p=0.5,q=0.5. 然后进行E步
-
E step: 假设我们有了 θ t , x i \theta^t, x_i θt,xi,
我们要计算它来自于B的概率 p ( z = 1 ∣ x i , θ t ) p(z=1|x_i, \theta^{t}) p(z=1∣xi,θt). P ( z = 1 ∣ x i , θ t ) = π t ( p t ) x i ( 1 − p t ) 1 − x i π t ( p t ) x i ( 1 − p t ) 1 − x i + ( 1 − π ) t ( q t ) x i ( 1 − q t ) 1 − x i P ( z = 0 ∣ x i , θ t ) = 1 − p ( z = 1 ∣ x i , θ t ) \left. \begin{aligned} P(z=1|x_i,\theta^t)&=\frac{\pi^t(p^{t})^{x_i}(1-p^t)^{1-x_i}}{\pi^t(p^{t})^{x_i}(1-p^t)^{1-x_i}+(1-\pi)^t(q^{t})^{x_i}(1-q^t)^{1-x_i}}\\ P(z=0|x_i, \theta^t)&=1-p(z=1|x_i,\theta^t)\\ \end{aligned} \right. P(z=1∣xi,θt)P(z=0∣xi,θt)=πt(pt)xi(1−pt)1−xi+(1−π)t(qt)xi(1−qt)1−xiπt(pt)xi(1−pt)1−xi=1−p(z=1∣xi,θt) 注意这上面的公式在已知 X X X, 和 θ t \theta^t θt的情况下,
都是可以计算的. 计算结果就是一个确定的数值.另外,我们先来看看, P ( x i ∣ θ ) P(x_i|\theta) P(xi∣θ)的公式 p ( x i ∣ θ ) = π p x i ( 1 − p ) 1 − x i + ( 1 − π ) q x i ( 1 − q ) 1 − x i p ( x i , z i ∣ θ ) = π z i ( 1 − π ) 1 − z i p z i x i ( 1 − p ) z i ( 1 − x i ) q ( 1 − z i ) x i ( 1 − q ) ( 1 − z i ) ( 1 − x i ) \left. \begin{aligned} p(x_i|\theta)&=\pi p^{x_i}(1-p)^{1-x_i}+(1-\pi)q^{x_i}(1-q)^{1-x_i}\\ p(x_i,z_i|\theta)&=\pi^{z_i}(1-\pi)^{1-z_i}p^{z_ix_i}(1-p)^{z_i(1-x_i)}q^{(1-z_i)x_i}(1-q)^{(1-z_i)(1-x_i)} \end{aligned} \right. p(xi∣θ)p(xi,zi∣θ)=πpxi(1−p)1−xi+(1−π)qxi(1−q)1−xi=πzi(1−π)1−zipzixi(1−p)zi(1−xi)q(1−zi)xi(1−q)(1−zi)(1−xi) 有了这两个东西, 我们在看如何计算 Q ( θ ∣ θ t ) Q(\theta|\theta^t) Q(θ∣θt)
Q ( θ ∣ θ t ) = E Z ∼ X , θ t [ L ( θ ; X , Z ) ] = ∑ Z l n ( X , Z i ∣ θ ) P ( Z i ∣ X , θ t ) = ∑ Z ∑ X l n P ( x i , z i ∣ θ ) P ( z i ∣ x i , θ t ) = ∑ Z ∑ X p ( z i ∣ x i , θ t ) [ z i l n π + ( 1 − z i ) l n ( 1 − π ) + z i x i l n p + z i ( 1 − x i ) l n ( 1 − p ) + ( 1 − z i ) x i l n q + ( 1 − z i ) ( 1 − x i ) l n ( 1 − q ) ] \left. \begin{aligned} Q(\theta|\theta^t)&=E_{Z\sim X, \theta^t}[L(\theta; X, Z)]\\ &=\sum_{Z}ln(X,Z_i|\theta)P(Z_i|X, \theta^{t})\\ &=\sum_{Z}\sum_{X}lnP(x_i,z_i|\theta)P(z_i|x_i,\theta^{t})\\ &=\sum_{Z}\sum_{X}p(z_i|x_i,\theta^t)[z_iln\pi+(1-z_i)ln(1-\pi)+z_ix_ilnp+z_i(1-x_i)ln(1-p)+(1-z_i)x_ilnq+(1-z_i)(1-x_i)ln(1-q)]\\ \end{aligned} \right. Q(θ∣θt)=EZ∼X,θt[L(θ;X,Z)]=Z∑ln(X,Zi∣θ)P(Zi∣X,θt)=Z∑X∑lnP(xi,zi∣θ)P(zi∣xi,θt)=Z∑X∑p(zi∣xi,θt)[zilnπ+(1−zi)ln(1−π)+zixilnp+zi(1−xi)ln(1−p)+(1−zi)xilnq+(1−zi)(1−xi)ln(1−q)]首先对上面最后一个式子对 π \pi π求导可得
∑ Z ∑ X p ( z i ∣ x i , θ t ) [ z i 1 π − ( 1 − z i ) 1 1 − π ] = 0 \sum_{Z}\sum_{X}p(z_i|x_i,\theta^t)[z_i \frac{1}{\pi}-(1-z_i)\frac{1}{1-\pi}]=0 Z∑X∑p(zi∣xi,θt)[ziπ1−(1−zi)1−π1]=0
求出 π \pi π可得
π t + 1 = 1 N ∑ i = 1 N p ( z = 1 ∣ x i , θ t ) \pi^{t+1}=\frac{1}{N}\sum_{i=1}^{N}p(z=1|x_i,\theta^t) πt+1=N1i=1∑Np(z=1∣xi,θt) 设,
p ( z = 1 ∣ x i , θ t ) = μ i p(z=1|x_i,\theta^t)=\mu_i p(z=1∣xi,θt)=μi -
同理可以计算
p ( t + 1 ) = ∑ j = 1 n μ j ( t + 1 ) x j ∑ j = 1 n μ j ( t + 1 ) p^{(t+1)}=\frac{\sum_{j=1}^{n} \mu_{j}^{(t+1)} x_{j}}{\sum_{j=1}^{n} \mu_{j}^{(t+1)}} p(t+1)=∑j=1nμj(t+1)∑j=1nμj(t+1)xj
q ( t + 1 ) = ∑ j = 1 n ( 1 − μ j ( t + 1 ) ) x j ∑ j = 1 n ( 1 − μ j ( t + 1 ) ) q^{(t+1)}=\frac{\sum_{j=1}^{n}\left(1-\mu_{j}^{(t+1)}\right) x_{j}}{\sum_{j=1}^{n}\left(1-\mu_{j}^{(t+1)}\right)} q(t+1)=∑j=1n(1−μj(t+1))∑j=1n(1−μj(t+1))xj
剩下的就是一个简单的迭代了. 至此我们就初步的讲完了EM算法,
以及它的一个例子了. 注意EM算法只是一个指导性的算法.具体到某个具体问题,
还需要不同的推导来求概率模型参数. 通过上面的例子可见,
模型的推导有点儿繁琐, 所以请各位注意反复咀嚼这个例子. 未来有时间,
我们会写一个EM算法的另外一个例子,
高斯混合模型.它也是通过EM算法来求模型参数的.高斯混合模型的通用性要就要高很多.