Monte-Carlo Sampling

基础采样方法

在机器学习中,我们常常遇到这样的问题:设 X 为一随机变量,其 PDF 为 p(x);又设 f 为关于 X 的函数,考虑如下期望: E[f(X)]=f(x)p(x)dxp(x)f(x) 比较复杂时,上述积分往往是无法计算的。蒙特卡洛采样的思想是用随机样本近似期望: f^(X(1),,X(n))=1Nn=1Nf(X(n)),where X(n)p(x) 容易知道,该统计量是真实结果的无偏估计,即: E[f^]=E[1Nn=1Nf(X(n))]=E[f(X)] 而估计方差为: var(f^)=var(1Nn=1Nf(X(n)))=1Nvar(f(X)) 可见样本量 N 越大,方差越小,估计就越准确。直接使用蒙特卡洛方法要求我们能够从 p(x) 中采样,下面介绍三种基础的采样方法——变量替换、拒绝采样和重要性采样。

变量替换 (change of variables)

定理:设 pX(x) 为随机变量 X 的 PDF,单调函数 fX 映射到 Y,即 Y=f(X),则: pY(y)=pX(x)|dxdy| 对于多维变量有类似结论: pY(y1,,yM)=pX(x1,,xM)|(x1,,xM)(y1,,yM)| 其中 (x1,,xM)(y1,,yM)​ 表示 Jacobian 行列式。

例子:Box-Muller 方法是从二维正态分布中采样的方法。首先生成 x1,x2U(0,1),然后设: y1=2lnx1cos(2πx2),y2=2lnx1sin(2πx2) 那么可以证明 (y1,y2) 服从各分量独立的标准二维正态分布: pY(y1,y2)=pX(x1,x2)|(x1,x2)(y1,y2)|=|(y1,y2)(x1,x2)|1=|det(cos(2πx2)x12lnx12π2lnx1sin(2πx2)sin(2πx1)x12lnx12π2lnx1cos(2πx2))|1=|2πx1cos2(2πx2)2πx1sin2(2πx2)|1=x12π=12πexp(y12+y222)=[12πexp(y12/2)][12πexp(y22/2)] 直观上看,可以认为 2lnx1 在采样向量的模长,而 2πx2 在采样向量的幅角。

注:上述过程生成的是标准正态随机变量 yN(0,I),若要获取 N(μ,Σ),只需对 Σ 做 Cholesky 分解 Σ=LLT,然后做变换 y=μ+Ly 即可。

例子:对于可写出 CDF 及其反函数的简单分布 pY(y),有一种从均匀分布变换到该分布的方法,一些书籍称之为概率积分变换。设 xU(0,1),我们希望找到一个变换函数 f 使得 y=f(x) 服从 pY(y). 假设 f 单调递增并且取值在 (0,1) 之间,则: FY(y)=P(Yy)=P(f(X)y)=P(Xf1(y))=f1(y)f(y)=FY1(y) 这说明我们要找的 f 就是随机变量 Y 的 CDF 的逆 FY1. 例如,对于指数分布: pY(y)=λexp(λy) 其 CDF 为: FY(y)=0yλexp(λt)dt=1exp(λy) 其逆为: FY1(y)=1λln(1y) 因此对于 xU(0,1),只需要做变换 y=1λln(1x),就有 ypY(y).

该方法要求目标分布的 PDF 或 CDF 具有解析形式,因此只对比较简单的分布有效。

拒绝采样 (rejection sampling)

假设要采样的分布 p(x) 在任意一点 x 处的值(在不考虑归一化常数下)是可计算的,即设: p(x)=p~(x)/Zp 其中 p~(x) 是已知的,Zp 为未知的归一化常数,那么我们可以使用拒绝采样方法进行采样。

首先引入一个提议分布 (proposal distribution) ,满足该提议分布是容易采样的,并且存在常数 使得 ,如图所示:

拒绝采样方法先从 中采样一个 ,然后以 的概率接受该采样结果。直观来看,就是拒绝掉上图中的灰色区域。如此, 最终被采出来的概率就是: 这验证了拒绝采样的正确性。容易知道,拒绝采样的总接受率为: 因此 越小,总接受率越大,算法效率越高。然而, 小也意味着 本身就要与 比较相似,对于复杂的 而言寻找到一个合适的 非常困难的。

重要性采样 (importance sampling)

重要性采样不从 中采样出样本,而是直接近似 . 假设 在任意一点 处的值都是可计算的,仍然引入一个提议分布 ,满足该提议分布是容易采样的。重要性采样的思路是将对 的采样转化为对 的采样。具体而言,有:

于是只需要从 中采样即可近似上式: 其中系数 ​​ 称作重要性权重 (importance weights)

进一步地,假设 且我们只能计算 而归一化系数未知,类似地假设 并且只能计算 而归一化系数未知,那么: 其中系数 可以通过同一套样本估计: 代入得: 与拒绝采样一样,重要性采样的效果与提议分布 的接近程度紧密相关。当 比较复杂时,选择合适的 是非常困难的。

马尔可夫链蒙特卡洛 (MCMC)

在高维场景下,通常难以为拒绝采样和重要性采样找到合适的提议分布,导致采样效率低下。此时我们可以考虑马尔可夫链蒙特卡洛 (MCMC) 方法。顾名思义,MCMC 指基于马尔可夫链的随机采样方法,主要包括 Metropolis-Hastings 采样和 Gibbs 采样。

马尔可夫链

首先回顾一下有关马尔可夫链的基本知识。

马尔可夫链:若离散随机变量序列 满足如下条件(马尔可夫性质): 其中 为随机变量的状态空间,称 为马尔可夫链。

一步转移概率 时刻从状态 转移到状态 的概率: 齐次马尔可夫链:若一步转移概率与时刻 无关,则称该马尔可夫链为齐次马尔可夫链: 一步转移矩阵:齐次马尔可夫链的一步转移概率构成矩阵: 转移矩阵的每一行之和为 1.

平稳分布:若状态空间上的分布 满足方程: 则称 为马尔可夫链的平稳分布(不变分布)。值得注意的是,平稳分布不一定存在,存在也不一定唯一。下面给出平稳分布存在的一个充分条件。

细致平衡 (detailed balance) 条件:若分布 满足如下条件,则 是该马尔可夫链的平稳分布: 证明很简单: 称满足细致平衡条件的马尔可夫链为可逆的 (reversible) 马尔可夫链。

极限分布:若 对任意状态 都存在,则称 为马尔可夫链的极限分布。极限分布如果存在,则是唯一的,且与初始分布无关。

平稳分布与极限分布的关系:一般情形下二者没有必然的联系;但在一些约束条件(两两联通、非周期、正常返)下,齐次马尔可夫链存在极限分布,且该极限分布就是平稳分布。

MCMC 基本思想

MCMC 方法的基本思想是:构建一个马尔可夫链,使其极限分布就是要采样的分布。这样,只需要从任一初始分布出发,采样 ,然后采样 ……当迭代次数足够多时, 开始服从极限分布,那么 就是从极限分布中采样出来的样本了。不过需要注意的是,相邻两次采样得到的 显然并不独立,如果有独立性要求,可以在两次采样之间间隔一定的步数。

现在,问题的关键是如何构建这样的马尔可夫链,也就是设计转移矩阵 使其极限分布为给定的分布。在极限分布就是平稳分布的假设下,我们只需要让 满足细致平衡条件即可,但这依旧不是一件容易的事。受到拒绝采样的启发,Metropolis-Hastings 采样通过引入一个提议转移矩阵 和接受率 解决该问题。

Metropolis-Hastings 采样

如上一节所说,现在我们的目标是找到一个满足细致平稳条件的转移矩阵 . 为此,首先随机找一个转移矩阵 ,那么对不相同的两个状态 ,它大概率并不满足细致平稳条件: 注: 时等式恒成立,因此这里只考虑 .

为了让细致平稳条件成立,引入接受率 ,容易验证: 因此只需要令: 就找到了要求的 . 等价地,这样的一步转移相当于先按照 转移到 ,如果 ,则以 的概率接受转移,否则不转移。

不过上述方法有一个问题:接受率 可能会很小,影响算法效率。注意到等比放大 并不影响细致平稳条件的成立,因此做出如下改进: 简单来说,就是等比放大 ​ 直到其中一个变成 1 为止,这样任意两个状态之间至少有一个方向是始终能转移成功的。

综上,M-H 采样的算法伪代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
def MHSampling(p, Q):
// p is the target distribution
// Q is the proposal transfer matrix
sample s from any distribution
while True:
sample t from Q[s,t]
sample u from U(0,1)
alpha = min((p[t]*Q[t,s]) / (p[s]*Q[s,t]), 1)
if u <= alpha:
s = t
if sufficiently large time:
yield s
PSEUDOCODE

Gibbs 采样

Gibbs 采样可以视为 M-H 采样的一种特殊形式。在 M-H 采样中,如果每个状态都是高维向量,那么状态数量十分巨大,选择合适的状态转移矩阵或状态转移概率 比较困难。为了解决这个问题,Gibbs 采样限制每次转移时只改动一个维度。假设当前状态为: 转移时只改动第 ​ 维,转移到新的状态: 其中 表示 ,即除了第 维以外的其他维度。Gibbs 采样用目标分布的条件概率来定义这个转移概率 如此接受率为: 我们发现 Gibbs 采样的接受率为 1,因此在实际应用中有着较高的效率,是最广为使用的 MCMC 方法之一。

Gibbs 采样每次转移只改动一个维度,所以使用时需要指定维度顺序,具体顺序与具体问题相关,一般依次选择即可。

综上,Gibbs 采样的算法流程如下:

参考资料

  1. Bishop, Christopher. Pattern recognition and machine learning. ↩︎
  2. 刘建平Pinard. MCMC(一)蒙特卡罗方法. http://www.cnblogs.com/pinard/p/6625739.html ↩︎
  3. 刘建平Pinard. MCMC(二)马尔科夫链. http://www.cnblogs.com/pinard/p/6632399.html ↩︎
  4. 刘建平Pinard. MCMC(三)MCMC采样和M-H采样. https://www.cnblogs.com/pinard/p/6638955.html ↩︎
  5. 刘建平Pinard. MCMC(四)Gibbs采样. http://www.cnblogs.com/pinard/p/6645766.html ↩︎
  6. 机器学习-白板推导系列(十三)-MCMC(Markov Chain Monte Carlo). https://www.bilibili.com/video/BV1dW411z7qs ↩︎

Monte-Carlo Sampling
https://xyfjason.github.io/blog-main/2024/03/21/Monte-Carlo-Sampling/
作者
xyfJASON
发布于
2024年3月21日
许可协议