如果仍然使用分布,为什么要使用拒绝抽样?

机器算法验证 分布 拒绝抽样
2022-04-09 15:11:09

假设我们正在使用拒绝抽样,并且我们想从分布中抽样,比如为了计算接受概率,我们使用以下比率:p

Pr(u<p(x)Mq(x))
因此,对于随机生成的值x ,我们仍然使用p的分布。x

那么我们为什么要使用拒绝抽样呢?为什么我们不直接从p采样?换句话说,是什么让分布难以采样?

3个回答

因此,对于随机生成的值 x,我们仍然使用 p 的分布。

计算密度p与从分布中抽样随机变量不同,p是密度。

为什么我们不直接从 p 中采样?

我不确定您所说的“直接采样”是什么意思。一般来说,您如何建议直接从p中抽样?

考虑以下密度,例如:fX(x)=c.exp(1+x2) (我记得,c可以用贝塞尔函数计算,但它的值并不重要,对吧现在)。如果您足够聪明,也许您可​​以弄清楚如何从“直接”(无论您的意思是什么)中进行采样...但是就个人而言,我通常不是那么聪明-通常我只会使用 (类似的东西的拒绝抽样的变体。

[在这个例子中拒绝抽样的另一个好处是我什至不需要知道c来使用它;它影响拒绝率,但不影响算法的进度。有一些简单的提案密度可以很好地适用于这种情况。]

换句话说,是什么让分布难以采样?

这取决于你有什么工具来生成随机变量。如果你知道很多工具,一些发行版并不难。如果你只有几个工具,更多的东西变得难以采样。

(例如,如果您只知道如何使用概率积分变换生成随机数,那么任何其逆 cdf 难以评估的密度都将难以从中采样。任何其逆 cdf 评估成本高昂的分布都将是昂贵的从中取样。

例如,您可能想考虑的任何一个值进行少量观察)。它在 0 处有一些点质量,但可以处理。然而,至少可以说,连续部分的逆 cdf 是有问题的。甚至密度也涉及无限和(尽管如此,它可以被评估,尽管计算起来很昂贵)。拒绝抽样——通过一些调整将功能评估减少到最低限度——在这里是可能的。逆 cdf?我不知道它是否实用,即使它是可能的。如果你真的很聪明,你可能会想出一种使用逆 cdf 的方法——我认为这可能超出了我的范围,但即使你这样做了,也需要一段时间才能得到你的数字。)pp

拒绝抽样是该集合中非常重要的工具(或者更确切地说,拒绝抽样本身就是一类工具,因为这个想法有许多巧妙的变化),也许是最重要的工具之一。它的变体被广泛使用。

从分布中抽样意味着获得一个概率与该分布的 pdf 匹配的样本。在拒绝抽样中,我们抽取随机样本并选择这些样本的 pdf 不超过给定分布的 pdf。这是拒绝标准。这样我们就有了适当的样本,并且通过在这个标准下获得大量随机样本将代表分布的总体情况。

那么为什么我们要准确地使用拒绝抽样呢?

使用拒绝抽样有几个原因。从历史上看,计算是随机变量生成的瓶颈。计算 ) 等函数非常耗时。一些拒绝技术可以完全避免这些函数的计算。log()exp()sin(

目前(截至 2022 年),一个常见原因是从分布(例如 ( ) 本身进行采样很困难,而从中采样更容易。我们将中的采样称为逆 CDF 方法iCDF方法为简洁起见。这个原因可能不太可能随时间变化。p()q()p()

使用拒绝抽样的另一个原因是效率。例如,iCDF方法可以是,其中是分布的参数,而拒绝方法可能是,所以理论上无论如何- 在采样库中可以默认使用拒绝方法。我们将它用作默认值,因为您不会事先知道库的用户对于特定代码位需要在实践中,您通常会在中使用拒绝采样O(θ)θp()O(1)θθθ区域效率更高,而iCDF后者效率更高。

为什么我们不直接从采样?p()

有时可能无法使用iCDF方法直接采样(这就是我对“直接”一词的解释)。一个例子是 Kolmogorov-Smirnov 分布。据我所知,对这个分布进行抽样的唯一方法要么使用数值近似,要么使用一种称为系列方法的拒绝抽样的变体。这是一个无法直接采样的示例,除非您想接受数值权衡,这会增加库维护和实现开销。另请参阅我对第一个问题的回答中关于效率的评论,这也适用于这个问题,这是使用拒绝抽样的另一个原因。

此外,拒绝抽样还有许多变体,如 Vaduva 方法、系列方法和均匀比率方法。您可以在 Luc Devroye 的精彩著作Non-uniform Random Variate Generation 中了解它们中的每一个。

换句话说,是什么让分布难以采样?

这可能是一个太宽泛的问题,无法回答。套用托尔斯泰的话,

所有简单的发行版都是相似的,但每个困难的发行版都以自己的方式不愉快。

使分布易于采样的是轻尾和有限模式。轻尾和有限模式意味着拒绝抽样可以与适当的支配分布一起使用。识别简单的形式可能需要各种技巧和技术,但它们似乎都遵循这种模式。