拒绝采样是获得真正均匀的随机数分布的唯一方法吗?


21

假设我们有一个随机发生器,在输出范围数[0..R1]与均匀分布,我们需要的范围内生成随机数[0..N1] 与均匀分布。

假设N<R并且N不能均匀地除以R ; 为了获得真正均匀的分布,我们可以使用 拒绝采样方法:

  • 如果k是最大整数,则kN<R
  • [ 0 .. R 1 ]中选择一个随机数r[0..R1]
  • 如果r<kN则输出,否则继续尝试其他随机数r',r“,...直到满足条件rmodN
拒绝采样是获得真正均匀的离散分布的唯一方法吗?

如果答案是肯定的,为什么?

注意:如果N>R则想法是相同的:在[0..R ^ m-1]中生成随机数r' ,R ^ m> = N,例如r'= R(... R(R r_1 + r_2)...)+ r_m,其中r_i[0..R-1]范围内的随机数r[0..Rm1],Rm>=Nr=R(...R(Rr1+r2)...)+rmri[0..R1]


Answers:


13

是和否,这取决于您所说的“唯一方法”。是的,因为没有一种方法可以保证终止,所以最好的方法(对于和通用值)是一种以概率1终止的算法。随你便。NR

为什么总的来说不可能保证终止

假设您具有确定性的计算引擎(图灵机或使您的船漂浮的任何东西),加上一个生成元素集随机元素的。您的目标是生成元素集元素。引擎的输出仅取决于oracle返回的值序列;它是该潜在无限序列的函数。R[0..R1]N[0,N1]f(r0,r1,r2,)

假设您的引擎最多调用次oracle 。可能有痕迹的oracle被调用少于次;如果是这样,则额外地调用oracle以使它始终被精确地调用次不会更改输出。因此,在不失一般性的前提下,我们假设oracle被精确地调用了次。然后,结果的概率是序列数,使得。由于oracle是一个统一的随机生成器,因此每个序列都是等概率的,并且具有的概率。因此,每个结果的概率形式为mmmmx(r0,,rm1)f(r0,,rm1)=x1/RmA/Rm其中是到之间的整数。A0Rm

如果划分一些,则可以生成一个均匀分布通过调用随机发生器元件倍(这是留给读者作为练习到读取器)。否则,这是不可能的:无法以概率获得结果。请注意,该条件等同于说的所有素数也是因数(这比您在问题中所写的要宽容;例如,您可以从4个随机元素中选择一个6面公平即使4不除以6)也会死亡。NRmmNm1/NNR

减少浪费

在您的策略中,当,您不必立即重新绘制。直观地讲,中还剩下一些熵,您可以将其保留在混合中。rkN[kN..R1]

假设有一瞬间,您实际上将永远生成低于随机数,并通过绘制一次生成其中的。如果您对该分组生成的代数进行直接拒绝采样,则抽奖上的浪费为,即剩余的除以平局次数。可以少至。当和为互质时,可以通过选择足够大的任意减小废物。对于和一般值NuddRdkNudRdmodNugcd(R,N)RNdRN,计算会更复杂,因为您需要分别考虑和,但是同样可以通过足够大的组来任意减小浪费。gcd(R,N)N/gcd(R,N)

实际上,即使随机数相对无效(例如在密码学中),除非简单地拒绝采样,否则除非很小,否则几乎不值得做任何事情。例如,在密码术中,通常是2的幂,而通常是数百或数千位,通常通过在所需范围内进行直接拒绝采样来进行均匀的随机数生成。NRN


第一个证明是有缺陷的:的存在太强。我们可以有一台机器,它消耗任意多个元素,但是总是终止。基本上,我们要排除一个序列(永不终止的序列),但要排除几乎所有的序列。m
拉斐尔

@Raphael我不确定我明白你的意思。能举个这样的例子吗?
吉尔(Gilles)'所以

啊,我的担心太笼统了。在这里(由于没有输入),您是对的。如果所有计算都终止,则有限地有很多(无输入,每步决策数有限,因此要生成一棵有限树),因此最长的结果为。m
拉斐尔

@Raphael您的评论使我想到了一个更适合TCS受众的演示文稿:将RNG用作TM的输入,而不是Oracle的输入。我们假定TM终止(否则算法不正确)。如果存在一个,无论输入是什么,TM最多查看输入像元,那么<等等,被整除不能得到概率结果>。否则,对于所有,至少需要进行抽奖的概率至少为。mmRmNmmRm
吉尔(Gilles)'所以

1
@Raphael:柯尼格的引理表明,如果机器总是终止,那么实际上它的运行时间就有一个上限。只要RNG的输出集是有限的,它就可以工作(否则,它是微不足道的)。
Yuval Filmus 2012年

6

香农的源编码定理表明,从某种意义上讲,您需要样本(平均),类型为以生成类型为。更准确地,香农给出了一个(低效)算法,鉴于第一类型的样本,输出第二类型的样品,具有较高的可能性。他还表明,不可能以高概率输出样本。logN/logR[0,,R1][0,,N1]mm(logN/logRϵ)m(logN/logR+ϵ)

香农定理也适用于偏斜的输入分布(也可能偏斜的输出分布)的更一般情况。在这种情况下,您需要用熵替换对数。虽然由定理给出的算法是随机定义的,但在某些情况下可以将其去随机化(以性能稍差的代价)。


5

实际上,不,拒绝采样远非唯一的方法。不幸的是,考虑到计算机将所有信息存储为位,因此只能操作信息的随机位,因此,如果的二进制基数是无限的,则绘制范围的统一随机变量的任何算法都是无限的。NN

这个定理是Knuth和Yao(1976)的经典结果,他们开发了DDG-trees(离散分布生成树)的框架。

吉尔斯(Gilles)公开的方法是减轻不良品浪费的一种典型方法,但是当然,如​​果一个人可以跟随克努斯(Knuth)和姚树(Yao's)生成树木,则效率要高得多-平均96%的随机位被保存。

在下面的CStheory帖子中,我已经提供了更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.