背景

在基于求逆分布的采样方法中,不免遇到不能求逆的复杂累计分布函数,此时可以借助于拒绝采样方法采样。

原理

拒绝采样的介绍通常从π\pi的计算或者圆的面积的计算开始。这里我们求面积为例。
已知:边长为11的矩形,在不知道π\pi的值的情况下,求其内切圆面积。
采样方法求解:记n=0n=0; 在该矩形内均匀采样(x,y)(x,y)数据对,如果x2+y21x^2+y^2\le1, 则n=n+1n=n+1. 采样MM次后,面积SS计算:
S=n/MS=n/M.
采样方法之拒绝采样
对于不能求逆的概率分布的采样,我们采用类似的思路。
假设待采样的分布为p(z)p(z), 甚至可以可以有更复杂的情况,我们仅仅知道分布p(z)p(z)的未归一化版本p~(z)\widetilde{p}(z):
p(z)=p~(z)Zpp(z)=\frac{\widetilde{p}(z)}{Z_p}, ZpZ_p 为归一化系数,很难计算,未知。(实际上,在统计学习中,经常遇到将一些函数f(z)f(z)归一化,当成概率对待,但是由于种种原因,不能得到归一化系数。)
在当前情况下,我们采样符合p~(z)\widetilde p(z)的样本集合。
此时需要选择一个容易采样的分布q(z)q(z),或者直接采样,或者需要求逆采样方法。q(z)q(z) 通常被称为proposal distribution。最好q(z)q(z)p~(z)\widetilde p(z)有相似的形状。然后选择合适kk,使得kq(z)p~(z)kq(z)\ge \widetilde{p}(z)对任意的zz 成立。为了提高采样效率,kq(z)kq(z) 最好刚好覆盖 p~(z)\widetilde{p}(z)就好,如下图:
采样方法之拒绝采样
然后我们可以采样过程:

  1. q(z)q(z)中采样z0z_0(实际是先在横轴定义域均匀分布中采样z0z'_0,进过变换得到符合分布q(z)q(z)z0z_0);
  2. 从均匀分布[0,kq(z0)][0, kq(z_0)] 中采样u0u_0;
  3. 如果u0<p~(z)u_0<\widetilde {p}(z)接受样本z0z_0, 否则拒绝。
    这样经过mm次采样后得到的样本集{zi}i=1n\{z_i\}_{i=1}^{n}符合分布p~(z)\widetilde {p}(z).
    并且:
    红色曲线下面积等于:nm\frac{n}{m}
    任意一次采样的接受概率计算如下(也就是两步采样值落入红线与x轴之间区域面积与蓝线和x轴之间的面积的比值):
    对所有可能被接受的zz的概率积分(加权求和):
    p(accept)=P(zq(z)u0<p~(z))p(accept)=P(z\in q(z) 且 u_0<\widetilde {p}(z))
    p(accept)=p~(z)kq(z)q(z)dz=1kp~(z)dzp(accept)=\int \frac{\widetilde{p}(z)}{kq(z)}q(z)dz=\frac{1}{k}\int\widetilde{p}(z)dz
    kq(z)dz=k\int kq(z)dz=k 为蓝线和x轴之间的面积;
    p~(z)dz\int\widetilde{p}(z)dz 红线与x轴之间区域面积;

在高维的情况下,接受-拒绝采样会出现两个问题,第一是合适的q(x)q(x)分布比较难以找到,第二是很难确定一个合理的 k 值。这两个问题会导致拒绝率很高,无用计算增加。

[1]https://blog.csdn.net/jteng/article/details/54344766
[2]https://blog.csdn.net/u010159842/article/details/78959515

相关文章: