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
- LDA学习笔记4-MCMC
- LDA学习笔记
- LDA论文学习笔记
- LDA模型学习笔记
- LDA学习笔记5-LDA模型
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA-math-MCMC 和 Gibbs Sampling
- LDA学习笔记1-参数估计
- LDA入门级学习笔记
- 在VIM中添加一键编译和一键运行
- C#中SQL语句的参数写法
- Spark简介及其在ubuntu下的安装使用
- [leetcode刷题系列]Symmetric Tree
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- LDA学习笔记4-MCMC
- J2EE面试题
- vim中taglist使用
- 初级篇---实现篇---WebService---CXF---Spring V0.0.1
- Vim中Ctag安装和使用
- nfc 标签调度和ndef数据处理
- POJ 3436 ACM Computer Factory
- c++ 管理指针成员
- 黑马程序员—Java基础加强(注解)