第十七章 蒙特卡罗方法
2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性)
2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要采样–采样数量一定,提高准确度,减少方差)
2020-4-5 深度学习笔记17 - 蒙特卡罗方法 3 ( 马尔可夫链蒙特卡罗方法MCMC-先验分布/后验分布/似然估计,马尔可夫性质)
Gibbs采样
上一节(MCMC方法)中我们了解了如何通过反复更新 x ← x ’ ∼ T ( x ′ ∣ x ) x \xleftarrow{} x’\sim T(x'\mid x) xx’∼T(x′∣x)从一个分布 q ( x ) q(x) q(x)中采样。
注:马尔可夫链由一个随机状态 x x x 和一个转移分布 T ( x ′ ∣ x ) T(x'\mid x) T(x′∣x) 定义而成, T ( x ′ ∣ x ) T(x'\mid x) T(x′∣x)是一个概率分布,说明了给定状态 x x x 的情况下随机地转移到 x ′ x' x′ 的概率。运行一个马尔可夫链意味着根据转移分布 T ( x ′ ∣ x ) T(x'\mid x) T(x′∣x) 采出的值 x ′ x' x′ 来更新状态 x x x。
那么如何确定
q
(
x
)
q(x)
q(x)是否是一个有效的分布?有2种方法
方法1:从已经学习到的分布
p
model
p_{\text{model}}
pmodel中推导出
T
T
T
方法2:直接用参数描述
T
T
T ,然后学习这些参数,其平稳分布隐式地定义了我们所感兴趣的模型
p
model
p_{\text{model}}
pmodel
在深度学习中,我们通常使用马尔可夫链从定义为基于能量的模型的分布 p model ( x ) p_{\text{model}}(x) pmodel(x)中采样。 在这种情况下,我们希望马尔可夫链的 q ( x ) q(x) q(x)分布就是 p model ( x ) p_{\text{model}}(x) pmodel(x)。 为了得到所期望的 q ( x ) q(x) q(x)分布,我们必须选取合适的 T ( x ′ ∣ x ) T(x'\mid x) T(x′∣x)(即上述方法1)。
Gibbs采样
是一种概念简单而又有效的方法。
它构造一个从 p model ( x ) p_{\text{model}}(x) pmodel(x)中采样的马尔可夫链,其中在基于能量的模型中从 T ( x ’ ∣ x ) T(x’\mid x) T(x’∣x)采样是通过选择一个变量 x i x_i xi,然后从 p model p_{\text{model}} pmodel中该点关于在无向图 G G G(定义了基于能量的模型结构)中邻接点的条件分布中采样。
只要一些变量在给定相邻变量时是条件独立的,那么这些变量就可以被同时采样。以这种方式同时更新许多变量的Gibbs采样通常被称为块吉布斯采样
(block Gibbs Sampling)。
设计从
p
model
p_{\text{model}}
pmodel中采样的马尔可夫链还存在其他备选方法。
比如说,Metropolis-Hastings算法在其他领域中广泛使用。 不过在深度学习的无向模型中,我们主要使用,Gibbs采样,很少使用其他方法。 改进采样技巧也是一个潜在的研究热点。
【补充–含随机模拟归类】
转自https://blog.51cto.com/34526667/1893785
随机模拟采样算法(近似求解的方法)的核心是对一个分布进行抽样,常用的采样算法包括:
- 接受-拒绝采样Acceptance-Rejection sampling)
- 重要性采样
- MCMC(马尔科夫链蒙特卡洛方法)方法
- metropolis-hasting算法,Metropolis的算法由Hastings改进,合称为MH算法。
- Gibbs采样
- Gibbs采样是MH算法的一种特例(α==1),因此可以保证Gibbs抽取的样本,也构成一个非周期不可约稳定收敛的马氏链;
- Gibbs采样适用于样本是两维或以上的情况,一维概率分布的采样是没法用Gibbs采样的,这时MH采样仍然成立。。
由于Gibbs采样在高维特征时的优势,目前我们通常意义上的MCMC采样都是用的Gibbs采样。
Gibbs算法,就是用条件分布的采样来替代全概率分布的采样。
例如,
X
=
x
1
,
x
2
,
.
.
.
x
n
X={x1,x2,...xn}
X=x1,x2,...xn满足分布p(X),如何对p(X)进行采样呢?
如果我们知道它的条件分布
p
(
x
1
∣
X
−
1
)
,
.
.
.
,
p
(
x
i
∣
X
−
i
)
,
.
.
.
.
,
p(x1|X_{-1}),...,p(xi|X_{-i}),....,
p(x1∣X−1),...,p(xi∣X−i),....,其中
X
−
i
X_{-i}
X−i表示除了
x
i
xi
xi 之外
X
X
X的所有变量。如果这些条件分布都是很容易采样的,那么我们就可以通过对条件分布的采样来对全概率分布
p
(
X
)
p(X)
p(X) 进行采样。
Gibbs采样算法的步骤:
1 . 给定一个初始样本X0={x10,x20,…,xn0}
2 . 已知一个样本Xi={x1i,x2i,…,xni},对于x1_{i+1}进行采样,x1_{i+1} ~ p(x1|Xi_{-1})
3 . 对于x2_{i+1}进行采样,x2_{i+1} ~ p(x2|x1_{i+1}, x3i,…xni)
4 . 对于xn_{i+1}进行采样,xn_{i+1} ~ p(xn|x1_{i+1}, x2_{i+1},…x_{n-1}_{i+1})
5 . 步骤2-4可以得到X的一个样本,然后重复步骤2~4可以不断地得到X的样本。
当然无论是MH算法还是gibbs算法,都有一个burn in(磨合)的过程(上一节中已经提到过)。
所谓burn in的过程就是因为这个两个算法本身都是markov chain的算法,要达到稳定状态需要一定的步骤才能达到,所以需要一个burn in过程。只有在达到平衡状态时候得到的样本才能是平衡状态时候的目标分布的样本。因此,在burn in过程中产生的样本都需要被舍弃。
如何判断一个磨合过程是否达到了平衡状态还没有一个成熟的方法来解决,目前常见的方法是看是否状态已经平稳(例如画一个图,如果在较长的过程中,变化已经不大,说明很有可能已经平衡)。当然这个方法并不能肯定一个状态是否平衡,你可以举出反例,但是却是实际中没有办法的办法。
Gibbs采样的目的是获得一个样本,不是计算概率,但可以通过其他方法来统计概率。