如何选择拒绝抽样的常数

机器算法验证 蒙特卡洛 拒绝抽样
2022-04-18 04:14:44

当使用非马尔可夫蒙特卡罗抽样方法时,例如接受-拒绝抽样,我们选择一个密度 h(x)和一个已知常数 c这样 ch(x)充当我们目标分布的覆盖函数π(x).

由于我们只能访问未知归一化常数的目标分布,因此我们并不真正知道归一化目标分布是什么样的。那么如何定义一个覆盖所有值的覆盖函数呢?到目前为止,我看到的唯一例子是基本模拟,其中的分析形式π(x)已经知道了。

3个回答

π(x)=Mf(x), 在哪里M是归一化常数。在很多情况下,只有f(x)已知并且M是未知的。

要实施拒绝抽样,您需要c这样,对于所有人x,

π(x)h(x)c.

那么对于所有人x,

f(x)h(x)cM:=c.

你不知道c或者M,但你应该能够找到c, 如果你可以玩f/h. (对于更高维度的分布,这更难做到)

算法接受时π(x)/ch(x)大于来自均匀随机变量的实现,这与f(x)/ch(x)大于实现。因此,该算法可以实现,即使M不知道。

举个例子,考虑密度与e(1+x4)14,<x<.

我目前不知道该密度的归一化常数是多少。(嗯,我可以说它不会离 1 太远,所以我有一些概念,但是能够在一个数量级内猜测它并没有多大帮助)

不难看出(1+x4)14>x为了x0(如果不明显,看两边的四次方,从中肯定是清楚的),所以通过对称性(1+x4)14>|x|无处不在,因此很明显e|x|>e(1+x4)14在实线上。

因此,我可以使用放大 2 倍的标准拉普拉斯分布作为主要函数。(有一些更有效的选择,但使用这个简单的情况就足够了。请注意,我们现在确定未缩放密度的积分必须小于 2。)

我仍然不太清楚有问题的密度集成到什么程度,但我可以从中模拟。

事实上,这是一个(刚刚超过)一百万个值的直方图:

在此处输入图像描述

(并且刚刚运行代码来模拟这些值,我现在知道归一化常数是什么,因为您可以从接受率中得出一个近似值。未缩放密度的积分约为 1.397 - 用R中的积分函数,它给出1.396785,绝对误差<0.00011——所以归一化常数大约是它的倒数。)

更一般的选择原则M

infθΘsupxRf(x)gθ(x)

其中是归一化目标,是提议密度。fgθ

例如,对于f(x)=(2π)12ex2/2g(x)=θ1eθ|x|

我们将有supxf(x)/gθ(x)=θ(2π)12eθ2/2infθθ(2π)12eθ2/2=(2π)12e12

但是,如果您的目标未标准化,那么您只能靠运气尝试。(如果我错了请纠正我)