为什么Mersenne Twister被认为是很好的?


38

Mersenne Twister被广泛认为是很好的。哎呀,CPython消息人士说,它“是现有的经过最广泛测试的生成器之一”。但是,这是什么意思?当被要求列出该生成器的属性时,我所能提供的大多数内容都是不好的:

  • 它是庞大而僵化的(例如,无搜索或多个流),
  • 尽管状态规模庞大,但它未能通过标准的统计测试,
  • 它在0左右有严重问题,表明它对自己的随机性很差,
  • 不太快

等等。与诸如XorShift *的简单RNG相比,它也无可避免地变得复杂。

因此,我寻找一些信息,以了解为什么有人认为这很好。原始论文对“超天文学”时期和623维均匀分布发表了很多评论,他说

在许多已知的测量方法中,基于较高尺寸均匀性的测试(如下面所述的光谱测试(参见Knuth [1981])和k分布测试)被认为是最强的。

但是,对于此属性,发电机会被足够长的计数器打败!这没有评论本地分布,这是您实际上在生成器中关心的(尽管“本地”可能意味着各种事情)。甚至CSPRNG都不在意这么长时间,因为这并不重要。

论文中有很多数学,但据我所知,这实际上与随机性无关。几乎所有对此的提及都会迅速跳回这些原始的,基本上无用的主张。

似乎人们以牺牲较旧,更可靠的技术为代价而跳上了潮流。例如,如果您将LCG中的单词数增加到3(比Mersenne Twister的“仅624”少得多)并在每次通过时输出最高单词,则它会通过BigCrush(TestU01测试套件的更难部分)),尽管Twister失败了(PCG纸,图2)。鉴于此,以及证据不足,我能够在支持梅森倍捻机的发现,是什么的原因关注过其他的选择青睐呢?

这也不是纯粹的历史。有人告诉我,Mersenne Twister在实践中至少比PCG random更为有效。但是用例是否如此清晰,以至于它们可以比我们的测试组合做得更好?一些谷歌搜索暗示他们可能不是。

简而言之,我想知道Mersenne Twister在其历史背景或其他方面如何获得广泛的正面声誉。一方面,我显然对它的质量表示怀疑,但另一方面,很难想象它是完全随机发生的。


2
我想你是正确的。Mersenne Twister没什么特别的。它只是众所周知的(许多其他知名的PRNG碰巧更糟)。还有其他PRNG也很不错。为了获得更好的PRNG,可以使用加密的PRNG。除了“您的推理没有错”之外,我不确定会给出什么样的答案。
DW

1
我认为您应该问的问题不是MT是否好(因为从许多指标来看它是好的),而是为什么它比PCG或XorShift之类的替代品更常用。答案可能是它存在了很长时间,并且是很长一段时间(在Internet年中)的最佳合理默认值。
化名

1
@vzn“另一个考虑因素是生成时间; PRNG的“质量”是以运行时间为代价的。”→除了Mersenne Twister 比合理的大型LCG 速度慢且效果差之外。参见PCG论文中的图16。(关于我是否已经阅读过该论文:我已经详细阅读了梅森·Twister论文的大部分非数学部分以及所有PCG随机论文。不过,我大部分还是
略读

1
您是在谈论XorShift还是KISS算法?
gnasher729,2015年

1
@ gnasher729我提到了XorShift *,但是我并不是真正针对特定的替代方案。我不知道FWIW的KISS。
Veedrac

Answers:


15

MT多年来一直被认为是好的,直到被更高级的TestU01 BigCrush测试和更好的PRNG发现是相当糟糕的。

例如,pcg-random.org上的表格很好地概述了一些最常用的PRNG的功能,其中Mersenne Twister唯一的“良好”功能是巨大的句点,并且可以使用种子(可重现的结果),它通过了简单快速的TestU01 SmallCrush测试,但未通过某些较新的统计质量测试,尤其是。TestU01的LinearComp测试以及TestU01的Crush和BigCrush电池。2219937

此页面详细列出了Mersenne-Twister功能:

积极品质

  • 产生32位或64位数字(因此可用作随机位的源)
  • 通过大多数统计测试

中性品质

  • 巨大时期22199371
  • 623维均匀分布
  • 期间可以分区以模拟多个流

负面品质

  • 某些统计测试失败,只有45,000个数字。
  • 可预测的-在624个输出之后,我们可以完全预测其输出。
  • 生成器状态占用2504字节的RAM —相比之下,一个极其有用的生成器具有比任何人都可以使用的周期大的周期,可以容纳8个字节的RAM。
  • 并不是特别快。
  • 空间效率不是特别高。生成器使用20000位存储其内部状态(在64位计算机上为20032位),但是其周期仅为,比相同大小的理想生成器少263(或295)倍。2219937
  • 产出不均;发电机可能会陷入恢复缓慢的“不良状态”。
  • 仅有一点点差异的种子需要很长时间才能彼此分开。播种必须仔细进行,以免发生不良状态。
  • 尽管可以提前跳转,但这样做的算法计算速度较慢(即需要几秒钟),并且很少由实现方式提供。

摘要:Mersenne Twister不再足够好,但是大多数应用程序和库都还不存在。


6
谢谢你的总结!但是,我担心您的帖子的唯一明显来源是一个网站,该网站实际上是尚未经过同行评审的另一个随机数发生器系列的广告。该网站本身不提供任何条目参考,但建议的文章似乎包含许多内容。因此,我认为您可以通过提供有关各个要点的参考文献来改善对此处上下文(对MT的批评)的答案。
拉斐尔

9
他们在认真地挑刺儿的周期仅为,而不是,并说长期是一个PRNG的“中性”的属性后? 295 × 2 2199372 2199452219937295×22199372219945
David Richerby '16

1
“可预测”-MT并非旨在用作加密PRNG,因此请编辑您的答案。
杰森·S

8

我是1998年接受ACM TOMS MT论文的编辑,也是TestU01的设计师。我不使用MT,但主要使用MRG32k3a,MRG31k3p和LRSR113。要了解有关MT,MT以及其他内容的更多信息,可以查看以下论文:

F.Panneton,P.L'Ecuyer和M.Matsumoto,``基于线性递归模2的改进的长周期生成器'',《数学软件的ACM交易》,32,1(2006),1-16。

P.L'Ecuyer,``随机数生成'',《计算统计手册》第3章,JE Gentle,W.Haerdle和Y.Mori编辑,第二版,Springer-Verlag,2012年,第35-71页。 https://link.springer.com/chapter/10.1007/978-3-642-21551-3_3

P.L'Ecuyer,D.Munger,B.Oreshkin和R.Simard,``并行计算机的随机数:要求和方法'',《模拟中的数学和计算机》,135,(2017),3-17。 http://www.sciencedirect.com/science/article/pii/S0378475416300829?via%3Dihub

P.L'Ecuyer,``用于顺序和并行计算机的具有多个流的随机数生成'',受邀参加高级教程,2015年冬季模拟会议论文集,IEEE出版社,2015年,第31-44页。


3
感谢您的回答!您介意为问题添加一些内容吗?1)为什么您认为MT很好(或者至少值得发布)?2)为什么您认为使用起来不够好?
拉斐尔

感谢您添加宝贵的历史背景。当您接受论文时,我也对Raphael的问题和您的个人想法感到好奇。
Veedrac '17

5

在这方面有点像排序算法,没有“一刀切”的PRNG。不同的用途有不同的用途,并且设计标准和用途广泛。可能会误用PRNG,例如使用一种不适合的PRNG。Wikipedia在Mersenne Twister上的条目还提到,它不是为“需要独立随机数生成器的蒙特卡罗模拟”设计的。

如Wikipedia所述,此PRNG确实已在许多编程语言和应用程序中使用,甚至已作为默认PRNG使用。需要进行近乎社会学的分析来解释为什么偏爱一种PRNG。可能对此PRNG起作用的一些可能因素:

  • 作者在该领域具有良好/强大的科学经验,并且在PRNG中工作了数十年。

  • 经过专门设计,它当时优于其他方法。

  • 作者致力于实现并跟踪它们,也为它们做出了贡献。一些PRNG更理论化,作者并不总是关心实际的实现。

  • 该系统在网页上得到很好的支持/更新。

  • 已经开发了PRNG的新版本以解决弱点。没有一个单一的Mersenne Twister算法,它更像是不同的版本和一系列可以满足不同需求的变体。

  • 它已通过标准随机性分析软件进行了广泛的分析/测试,并获得了独立机构的通过。

  • 对于Web站点和许多其他情况(例如可以衡量的称为“优先附件”的科学引文),存在一种可以衡量的已知效果。基本上,这是由来已久的历史资源在进一步使用的地方。这样的效果可以解释PRNG随时间的选择。

换句话说,您要问的是一种“流行”现象,这种现象与人类的选择相关联并相互关联,并不严格地与特定的质量联系在一起,而是一种复杂/紧急的特性,并且是不同算法,用户和环境之间的相互作用。 /使用上下文。

这是对算法Mersenne Twister(一个伪随机数发生器及其 Jagannatam(15p)的变体)的一种独立分析。最后一段基本上是对您问题的回答。仅引用一句:

理论上证明Mersenne Twister是良好的PRNG,具有较长的周期和较高的平均分布。它广泛用于仿真和调制领域。用户发现的缺陷已由发明人纠正。MT已升级,使用并与CPU的最新技术兼容,例如其SFMT版本中的SIMD和并行管道。


2
谢谢。但是,您所说的某些内容听起来很含糊,例如“它是专门为优于当时的其他方法而设计的。” “它已经通过标准随机性分析软件进行了广泛的分析/测试,并得到了独立机构的通过。”这正是我所怀疑的说法。不过,我将深入研究本文,看看是否可以解决问题。
Veedrac

要考虑的另一件事是科学的可重复性。许多在蒙特卡洛仿真领域工作的科学家都陷入麻烦,要确保整个程序在给定相同种子的情况下都能产生相同的输出,而与线程数无关。他们中的许多人都需要与PRNG的参考实现兼容。
别名2015年

2
您还会说:“已经开发了PRNG的新版本来解决弱点。”,但是考虑到大多数实现都是沼泽标准的第一个版本,这听起来更像是对我的批评。我还对“该系统在网页上得到很好的支持/更新”感到有些惊讶。-LCG真正需要多少支持!?
Veedrac

@Pseudonym我不太喜欢。为什么要排除使用其他发电机的原因?显然,重新运行测试时必须使用相同的生成器,但是为什么要进行新测试?
Veedrac

在原始论文和后续论文中,对所有科学分析似乎没有多大含糊,并且以这种方式“填充”了原始问题(使用了许多分析/支持较少的PRNG)。关于假名,afaik 可以使用相同的起始种子来重现所有 PRNG ,而仅基于硬件的生成器则不是(并且它们不再是真正的PRNG,而是“实际的物理噪声/随机性”)。不知道使用多线程如何很难保证这一点(不知道为什么单独的线程不能使用具有不同种子的相同算法)
vzn 2015年
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.