LDA学习笔记4-MCMC

来源:互联网 发布:linux中ln命令 编辑:程序博客网 时间:2024/05/06 21:50

之前提到的sampling方法存在各自的缺点,

如对函数的数学性质有一定要求,不适应高维场景等,因此有人提出了Markov Chain Monte Carlo (MCMC)方法

MCMC方法的基本思想就是构造一个markov链,使得其最终收敛到平稳的目标分布p(x)。则由任意点x0出发,依次生成x1,x2...,收敛后的样本点xi 符合目标分布

(reminding,对转移矩阵P,存在单个特征值=1,其他特征值绝对值均<1,则必收敛到)

MCMC的几个要点是

1. 构造合适的转移矩阵P,使得markov链收敛到目标p(x)

2.选取合适的点,需要注意两点:1.在收敛之前称为burn-in态,此时样本点不可用; 2.markov中,连续的两个样本点相关性很大,一般不直接用,而是隔多点抽取一个点

根据转移矩阵的构造算法不同,形成不同的MCMC算法。这些算法都需要保证1条件成立,

即满足两条特性:1.invariant /stationary 2. ergodic

1. invariant平稳性:即存在分布p,对转移矩阵T,使得 Tp=p, 则p为以T为转移矩阵的markov链的收敛目标概率


这条性质有很多充分必要条件,不同的MCMC算法利用了不同的条件

如细致平衡性(detailed balance)(也叫reversible):



2. ergodic:各态经历/不可约?

这个性质保证了无论初始p0是多少,在迭代到足够多步时,都能收敛到唯一的p*,通常只要任意Tij!=0即可保证


下面介绍两种常见的MCMC算法

1. Metropolis-Hastings算法

MH算法构造满足细致平衡性的转移概率来保证invariant,其转移概率T(x,x*)=q(x* | x)* min{1, p(x*) q(x|x*) /p(x) q(x*|x)}

p(x)*T(x,x*)= p(x)*q(x* | x)* min{1, p(x*) q(x|x*) /p(x) q(x*|x)}

p(x*) *T(x*,x) = p(x*)*q(x | x*)* min{1, p(x) q(x*|x) /p(x*) q(x|x*)}

其中q是任意一个概率

可以证明,上面两个式子相等,因此满足细致平衡性, MH算法构造出的markov稳定到概率p


2. Gibbs sampling

gibbs每个迭代步骤分成多个子步骤,每个子步骤选定(或依次)一个维度进行更新,详细算法为

这是MH算法的一个特例,对q进行如下定义,则MH -> Gibbs算法

设在第i个子步骤对x的第i个维度进行sampler时,

若x ->x* 仅有第i维可能不同,即x*_^i ==x_^i  ,定义q(x*|x)= p(xi* |  x_^i) (其中p为目标概率)

p(x*) q(x|x*)  = p(x*)* p(xi |  x_^i)=p(x_^i) *  p(xi* |  x_^i)* p(xi |  x_^i)=p(x)*p(x*|x)

A(x*|x)=min{1,p(x*) q(x|x*) /p(x) q(x*|x) }  =1

当x和x*有其他维度不同,定义q(x*|x)=0


当包含观察值w时,仅对未知变量进行sampling,

即以上的p(z)替换成p(z|w),每次抽样抽取p(zi| z-i, w).


3.Gibbs算法的几种变形

某位善于总结的人给出了区别,http://nlpers.blogspot.com/2007/07/collapsed-gibbs.html

设对p(a,b,c)联合概率进行抽样

标准gibbs sampling算法:

  1. Draw a conditioned on b,c

   2. Draw b conditioned on a,c  

   3. Draw c conditioned on a,b


简单变体:

   1. Draw a,b conditioned on c
   2. Draw c conditioned on a,b


当我们对其中某个变量b不感兴趣,可以把b积分掉,按p(a,c)以简化sampling形式,这就是collapsed Gibbs sampler

  1. Draw a conditioned on c
   2. Draw c conditioned on a

例如,当b为参数,且p(a,c)有更容易抽样的形式,我们可以如此做,获得关于a,c的MCMC,

然后,对a,c进行参数估计(MLC/MAP等),直接算出b,以简化算法


进一步的blocked Gibbs sampler.:分批算法,是说b可以在某一步被积分掉,但是又不是完全被积分掉,有时候按照p(a,b),有时候按照p(a,b,c)来计算,也就是说,在计算过程中,可以灵活的改变转移矩阵?只需要保证这些矩阵都能使得MCMC最终收敛到目标就可以了。

   1. Draw a conditioned on c
   2. Draw b conditioned on a,c
   3. Draw c conditioned on a,b




原创粉丝点击