基础采样方法
在机器学习中,我们常常遇到这样的问题:设 为一随机变量,其 PDF 为 ;又设 为关于 的函数,考虑如下期望: 当 或 比较复杂时,上述积分往往是无法计算的。蒙特卡洛采样 的思想是用随机样本近似期望: 容易知道,该统计量是真实结果的无偏估计,即: 而估计方差为: 可见样本量 越大,方差越小,估计就越准确。直接使用蒙特卡洛方法要求我们能够从 中采样,下面介绍三种基础的采样方法——变量替换、拒绝采样和重要性采样。
变量替换 (change of variables)
定理 :设 为随机变量 的 PDF,单调函数 将 映射到 ,即 ,则: 对于多维变量有类似结论: 其中 表示 Jacobian 行列式。
例子:Box-Muller 方法 是从二维正态分布中采样的方法。首先生成 ,然后设: 那么可以证明 服从各分量独立的标准二维正态分布: 直观上看,可以认为 在采样向量的模长,而 在采样向量的幅角。
注:上述过程生成的是标准正态随机变量 ,若要获取 ,只需对 做 Cholesky 分解 ,然后做变换 即可。
例子:对于可写出 CDF 及其反函数的简单分布 ,有一种从均匀分布变换到该分布的方法,一些书籍称之为概率积分变换 。设 ,我们希望找到一个变换函数 使得 服从 . 假设 单调递增并且取值在 之间,则: 这说明我们要找的 就是随机变量 的 CDF 的逆 . 例如,对于指数分布: 其 CDF 为: 其逆为: 因此对于 ,只需要做变换 ,就有 .
该方法要求目标分布的 PDF 或 CDF 具有解析形式,因此只对比较简单的分布有效。
拒绝采样 (rejection sampling)
假设要采样的分布 在任意一点 处的值(在不考虑归一化常数下)是可计算的,即设: 其中 是已知的, 为未知的归一化常数,那么我们可以使用拒绝采样方法进行采样。
首先引入一个提议分布 (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 采样的算法流程如下:
参考资料