您的位置:首页 > 其它

【机器学习系列】三硬币问题——一个EM算法和Gibbs Sampling的例子

2014-02-26 18:10 309 查看


三硬币问题——一个EM算法和Gibbs Sampling的例子

/*
转载自:http://www.crescentmoon.info/?p=573
说明:复制过来后,文中公式出现错误,请参考本文原始链接(即上面链接)。
*/

讲一个EM算法和Gibbs 抽样的小例子,用于加深理解。

题目:假设有3枚硬币,分别记做A,B,C。这些硬币正面出现的概率分别是π,p和q。进行如下掷硬币实验:先掷硬币A,根据其结果选出硬币B或C,正面选B,反面选硬币C;然后投掷选重中的硬币,出现正面记作1,反面记作0;独立地重复n次(n=10),结果为

1111110000

我们只能观察投掷硬币的结果,而不知其过程,估计这三个参数π,p和q。


EM算法

可以看到投掷硬币时到底选择了B或者C是未知的。我们设隐藏变量Z 来指示来自于哪个硬币,Z={z1,z2,…,zn},令θ={π,p,q},观察数据X={x1,x2,…,xn}。

写出生成一个硬币时的概率:

P(x|θ)=∑zP(x,z|θ)=∑zP(z|π)P(x|z,θ)=πpx(1−p)1−x+(1−π)qx(1−q)1−x

有了一个硬币的概率,我们就可以写出所有观察数据的log似然函数:

L(θ|X)=logP(X|θ)=∑j=1nlog[πpxj(1−p)1−xj+(1−π)qxj(1−q)1−xj]

然后求极大似然

θ^=argmaxL(θ|X)

其中L(θ|X)=logP(X|θ)=log∑ZP(X,Z|θ)。因为log里面带着加和所以这个极大似然是求不出解析解的。

如果我们知道隐藏变量Z的话,求以下的似然会容易很多:

L(θ|X,Z)=logP(X,Z|θ)

但是隐藏变量Z的值谁也不知道,所以我们转用EM算法求它的后验概率期望EZ|X,θ(L(θ|X,Z))的最大值。

E步:假设当前模型的参数为π,p,q时,隐含变量来自于硬币B的后验概率

μ=P(Z|X,θ)=πpxi(1−p)1−xiπpxi(1−p)1−xi+(1−π)qxi(1−q)1−xi

那么隐含变量来自于硬币C的后验概率自然为1−μ。

M步:

先写出似然关于后验概率的期望,它是似然期望下界函数的最大值,

EZ|X,θ(L(θ|X,Z))=∑j=1n[μlogπpxi(1−p)1−xiμ+(1−μ)log(1−π)qxi(1−q)1−xi1−μ]

要注意这里把μ看做固定值。然后我们分别求偏导,获得参数π,p,q的新估计值

π=1n∑j=1nμjp=∑nj=1μjxj∑nj=1μjq=∑nj=1(1−μj)xj∑nj=1(1−μj)

算法首先选取参数初始值θ(0)=π(0),p(0),q(0),然后迭代到收敛为止。


Gibbs Sampling

其实这道题用EM做就可以了,因为最近看了Gibbs Sampling,所以套一下看看,如果有错敬请指出~(虽然我知道这个博客没人看,其实我玩的是单机版-
-)

先给出Gibbs sampling的抽象的应用步骤(来自参考3),由于目标是对latent varibles逐一sample得到complete data再算充分统计量。所以关键是求 P(Zi|Z−i,O,α):

根据Markov bucket性质写出latent variable与对应observed variable的joint分布: P(Z,O|α)=f(Z,O,θ,α)

根据样本对立性和参数条件独立性对joint distribution进行分解

积分参数θ,得到仅包含超参和充分统计量的joint分布表达式:P(Z,O|α)=f(Z,O,α)

对单个latent variable, 计算full conditional概率,用来采样: P(Zi|Z−i,O,α)


建模过程

首先我们确定建模过程,画出概率图:





可以看到硬币B还是硬币C的类标签服从贝努利分布

Zj∼Bernoulli(π)

然后硬币正反面的出现也服从贝努利分布

Wj∼Bernoulli(θZj)

其中θ={p,q}。需要注意这里参数都变成了随机变量,都有先验分布。为了简单和无偏倚起见,Beta分布的先验参数均设为1, rπ=<1,1>,rθ=<1,1>,在实际运算中就不考虑了。


确定联合分布

然后写出联合分布来应该是(要注意这里的联合分布应该是似然P(X,Z|θ)与先验p(θ)的乘积,因为p(θ)=1所以省略了后项)

P(C,Z,π,p,q)=p(W|Z,Θ)p(Θ|γθ)p(Z|π)p(π|γπ)=∏i=1Nπzi(1−π)1−zipWzi0(1−p)Wzi1qW(1−zi)0(1−q)W(1−zi)1=πC0(1−π)C1pNC0(0)(1−p)NC0(1)qNC1(0)(1−q)NC1(1)

其中Wij是观察到的每一枚硬币正反结果,正面为1,反面为0
,C0是所有结果中选中硬币B的次数,C1是选中硬币C的次数,NC0(0)是选B
的硬币中正面的硬币个数,NC0(1) 是选B的硬币中反面的硬币个数,NC1(0)是选C的硬币中正面的硬币个数,NC1(1)是选C的硬币中反面的硬币个数。


Standard Gibbs Sampling


对类标签Z采样

然后根据Gibbs Sampling对隐藏变量Z采样的公式为:

P(Zj=0|Z−j,C−j,π,p,q)P(Zj=1|Z−j,C−j,π,p,q)=P(Z,C,π,p,q)P(Z−j,C−j,π,p,q)=πpWj0(1−p)Wj1=P(Z,C,π,p,q)P(Z−j,C−j,π,p,q)=(1−π)qWj0(1−q)Wj1

然后根据这两个概率对Z(t+1)j做贝努利实验,得到新采样的结果。


对剩下参数的采样

在对Z采样获得了所有硬币的正反面之后,我们接下来要估计π,p,q。

Gibbs Sampler的公式分别为:

P(π|Z,C,p,q)=πC0(1−π)C1P(p|Z,C,π,q)=pNC0(0)(1−p)NC0(1)P(q|Z,C,π,p)=qNC1(0)(1−q)NC1(1)

这里π,p,q均服从贝努利分布,根据Beta-Bernoulli共轭(之前先验分布为Beta(1,1)),我们可以把他们看成后验的Beta分布

π∼Beta(1+C0,1+C1)p∼Beta(1+NC0(0),1+NC0(1))q∼Beta(1+NC1(0),1+NC1(1))

然后从各自的Beta分布中采样出π,p,q的值,详见这里的求θ部分。


Collapsed Gibbs Sampling


对变量积分

根据《Gibbs Sampling for the UniniTiated》上所说,π可以被积分掉来简化联合分布,这种方法被称作“Collapsed
Gibbs Sampling",指通过积分避开了实际待估计的参数,转而对每个硬币的正反面z进行采样,一旦每个硬币的z确定下来,被积分的值可以在统计频次后计算出来。正巧这里θ={p,q}也只生成一个样本,可以被积分,就统统给积分好了。

P(C,Z)=∫∫∫P(C,Z,π,p,q)dπdpdq=∫∫∫πC0(1−π)C1pNC0(0)(1−p)NC0(1)qNC1(0)(1−q)NC1(1)dπdpdq=∫πC0(1−π)C1dπ∫pNC0(0)(1−p)NC0(1)dp∫qNC1(0)(1−q)NC1(1)=Γ(C0+1)Γ(C1+1)Γ(C0+C1+2)Γ(NC0(0)+1)Γ(NC0(1)+1)Γ(C0+2)Γ(NC1(0)+1)Γ(NC1(1)+1)Γ(C1+2)

最后一步是根据Beta分布的积分公式得出的。要注意这个式子里还是存在未知数的Z的,只不过被加和掩盖了而已。


对类标签Z采样

在这里采样公式就变成了

P(Zj=0|Z−j,C−j)=C0C0+C1+1NC0(0)C0+1NC1(0)C1+1P(Zj=1|Z−j,C−j)=C1C0+C1+1NC0(1)C0+1NC1(1)C1+1

根据这两个概率对Z(t+1)j做贝努利实验,得到新采样的结果。

在Z的一轮迭代结束后我们还要估计被积分了的变量的值,已知后验概率为

p(π|Z)=∏i=1np(z|π)p(π|rπ)=Beta(π|1+C0,1+C1)p(p|Z)=∏i=1np(z|p)p(p|rθ)=Beta(π|1+NC0(0),1+NC0(1))p(q|Z)=∏i=1np(z|q)p(q|rθ)=Beta(π|1+NC1(0),1+NC1(1))

根据贝叶斯推断的话,我们应该求整个参数分布上的期望,所以有

E(π)=∫π⋅πC0+1−1(1−π)C1+1−1dπ=C0+1C0+C1+2

这里还是利用Beta分布的积分公式,同理剩下的俩为

E(p)=NC0(0)+1C0+2E(q)=NC1(0)+1C1+2

这里可以看到先验知识(分子式上面的1和分母的2)和观察到的数据很好的结合了起来。


EM算法和Sampling算法(见参考2的11.1.6和参考3)


两者的联系

两者都常用来估计latent variable分布的参数。主要思想一致:先估计生成一些latent variable,然后看成complete data,算参数。

区别:

EM直接估计所有latent varibles的联合概率;

Gibbs估计单个单个latent variable的条件概率;

所以,EM类似梯度下降,而Gibbs类似于coordinate gradient decent(不是conjugate)。


Monte Carlo EM算法

EM算法中的E步估计所有latent varible的联合概率分布,可能很复杂。所以可以用抽样的方法来估计,以下是似然函数的期望表达式:

Q(θ,θold)=∫p(Z|X,θold)lnp(Z,X|θ)dZ

我们可以在后验概率p(Z|X,θold)的分布上进行有限次数的抽样来接近这个期望:

Q(θ,θold)≃1L∑l=1Llnp(Z(l),X|θ)

然后像往常一样在M步优化Q函数,这个方法叫做Monte Carlo EM算法。

而每次在E步只生成一个样本的方法叫做stochastic EM,是Monte Carlo EM 算法的一个特例。在E步,我们从后验概率p(Z|X,θold)中抽取一个样本,用来近似计算似然的期望,然后在M步更新模型参数的值。

刚才介绍的Collapsed Gibbs Sampling的方法就是stochastic EM的一个例子,只不过,M步骤的参数估计结果在E步骤中没有用到,所以不需要重复多余的M步骤,只需在最后进行一次M步骤,得到所需要的参数即可。

参考文献:

《统计学习方法》

《Pattern Recognition and Machine Learning》
http://xhyan.wordpress.com/2012/04/30/%E3%80%90todo%E3%80%91quick-derivation-in-gibbs-sampling/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐