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

三硬币问题——一个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(1p)1x+(1π)qx(1q)1x


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

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


然后求极大似然

θ^=argmaxL(θ|X)


其中 L(θ|X)=logP(X|θ)=logZP(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(1p)1xiπpxi(1p)1xi+(1π)qxi(1q)1xi


      那么隐含变量来自于硬币C的后验概率自然为 1μ
    • M步:
      先写出似然关于后验概率的期望,它是似然期望下界函数的最大值,

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


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

      π=1nj=1nμjp=nj=1μjxjnj=1μjq=nj=1(1μj)xjnj=1(1μj)

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

Gibbs Sampling

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

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

  1. 根据Markov bucket性质写出latent variable与对应observed variable的joint分布:  P(Z,O|α)=f(Z,O,θ,α)
  2. 根据样本对立性和参数条件独立性对joint distribution进行分解
  3. 积分参数 θ ,得到仅包含超参和充分统计量的joint分布表达式: P(Z,O|α)=f(Z,O,α)
  4. 对单个latent variable, 计算full conditional概率,用来采样:  P(Zi|Zi,O,α)

建模过程

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

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

ZjBernoulli(π)


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

WjBernoulli(θ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π)1zipWzi0(1p)Wzi1qW(1zi)0(1q)W(1zi)1=πC0(1π)C1pNC0(0)(1p)NC0(1)qNC1(0)(1q)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|Zj,Cj,π,p,q)P(Zj=1|Zj,Cj,π,p,q)=P(Z,C,π,p,q)P(Zj,Cj,π,p,q)=πpWj0(1p)Wj1=P(Z,C,π,p,q)P(Zj,Cj,π,p,q)=(1π)qWj0(1q)Wj1

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

对剩下参数的采样

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

Gibbs Sampler的公式分别为:

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


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

πBeta(1+C0,1+C1)pBeta(1+NC0(0),1+NC0(1))qBeta(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)(1p)NC0(1)qNC1(0)(1q)NC1(1)dπdpdq=πC0(1π)C1dπpNC0(0)(1p)NC0(1)dpqNC1(0)(1q)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|Zj,Cj)=C0C0+C1+1NC0(0)C0+1NC1(0)C1+1P(Zj=1|Zj,Cj)=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+11(1π)C1+11dπ=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)1Ll=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步骤,得到所需要的参数即可。
参考文献:

    1. 《统计学习方法》
    2. 《Pattern Recognition and Machine Learning》
    3. http://xhyan.wordpress.com/2012/04/30/%E3%80%90todo%E3%80%91quick-derivation-in-gibbs-sampling/

你可能感兴趣的:(机器学习,em,sampling,Gibbs)