本文来自微信公众号:果壳 (ID:Guokr42),作者:ttt,编辑:翁垟、biu,原文标题:《别小看《宇宙探索编辑部》主角随身带着的小匣子,它的妙用你想象不到》,题图来源:视觉中国
你去看《宇宙探索编辑部》了么?怎么样,精神还正常么?
除了主演们,影片中存在感最强的“配角”就是那个主角不离身的“盖革计数器”了。可你知道么?除了“寻找外星人痕迹”,它还和我们享受的诸多现代技术生活关系紧密。
【资料图】
故事要从“随机数”和“掷骰子”讲起。
亚马逊什么奇怪的东西都卖,包括让一本正文没有一个词的书成为畅销书。
《百万随机数》,正如书名,全部内容就是100万个随机生成的数字。这本书诞生于1955年,价格为 73 美金(约合人民币501元),至今已经再版三次,在亚马逊上有700多个评论,评分高达4颗星。
很难想象有谁会需要一本全是数字的书,以致于它的评论区成了一道互联网奇观,许多买家开始一本正经地胡说八道。
“一本引人入胜的书,从头至尾你都猜不到剧情。”
“一部天才之作,可能是用来传递政府关于全球变暖谎言……我发现,数字23一直出现在书中,众所周知,这意味着新世界秩序与这本书有关。”
抛开这些调侃,《百万随机数》其实是一本相当严肃的书,甚至可以称作随机性领域的一部著作——这是人类历史上第一次生产出数量如此庞大又高质量的随机数。
一、随机有什么难的? 多掷几次骰子不就行了
数字还分质量高低么?这里更准确的说法可能是,随机性更强或更弱的数字。
骰子算是人类最早的随机数生成器,但掷骰子的结果看似随机,却可能暗含规律。比如,如果一颗骰子的质量分布并不均匀,某个面比其他面轻微地更重,就会导致某个结果出现的频率略高于其他面。
假设一群人正围绕这颗骰子开赌局,知晓这个秘密的人胜算就会更大一些。
古罗马12毫米骰子,公元1年到410年。图/大英博物馆
而就算存在一颗完全平衡的完美骰子,要达到真正随机,投掷时涉及的其他因素也需全部随机才行,手部姿势、抛出力量、表面摩擦力……这是一个几乎不可能完成的任务。
量子力学的信徒们认为:任何通过经典力学产生的随机本质上是一种伪随机,是确定性事件的概率组合。他们把这种随机称为“表面随机性”。
这就让骰子成为了一个看似真随机,实则伪随机的数字生成器。抽签、洗牌就更不用提。
如今,我们生活中接触到最多的伪随机其实来自于计算机,只不过通常他们不会明说。
图/ChatGPT
如ChatGPT所言,看起来它只是“随便”给了一个数字,背后实则遵循着一整套算法和公式,导致这个结果不仅有规律也是可预测的。
在这个基础上人们付出了许多努力,希望生成的结果能够无限接近“真随机”。
1951年,“计算机之父”阿兰·图灵在Ferranti Mark 1计算机中首次内置了随机数生成器。他的方式是将现实中的物理事件引入到计算机的计算过程中,以带来一个随机的结果。
相比于掷骰子,现实中存在一些被视为真正随机的事件,比如电子的热运动、光的反射与透射,以及核衰变等。图灵利用的是导体中电子热震荡产生的热噪声,这个过程可以一次生成20个随机比特。
这些比特是质量极高的随机数,被作为生成最终随机数的“种子”。“种子”的质量直接决定了最终随机数的质量。
图灵的思路给后世带来诸多启发。比如今天的Linux 系统中就存在一个名为熵池的东西。平时,它被私密地保存在内存中,需要的时候就会生成随机数。
为了让熵池的熵不减少,系统一直暗中收集着各种物理随机源,比如用户点击鼠标,使用键盘时记录下的时间戳——这些都被视为随机性较强的行为。
但这个过程不可避免地限制了生成速度,导致效率很低,无法广泛运用;同时,这种随机生成指令对干扰极其敏感,计算机还要消耗大量功率来避免其受到外界的污染。
于是,另一位“计算机之父”约翰·冯·诺伊曼创造出了另一种随机数生成器。他采用的是数学方法:对一个初始值进行平方,取中间数,再对其取平方并取中间数。重复这个过程,就会得到一个具有统计意义属性的随机数序列。
例如初始种子是233,平方之后得到54289,其中间值是428。428就是我们的第一个随机数。
这种做法的好处显而易见,生产随机数的速度大大提升了。但显然,这种随机数并不是真正的随机,只要种子不变,随机数也不会变化。
至此,随机数生成器有了真伪之分:借助物理现象产生随机数的真随机数(TRNG),例如上述提到的热噪声、核衰变等;以及冯·诺伊曼创造出的第一个伪随机数生成器(PRNG),其本质是确定性的算法,生成的随机数之间并不是相互独立的。
二、好累,为什么要追求真随机?
日常中我们很少会需要这么高的随机性,用骰子求考试答案时不断跳出的C,也权当命运的冥冥指引。
直到1940年代,对大量高质量随机数的需求才显现出来,这直接推动了《百万随机数》这本书的诞生。其背后的主要驱动力是核裂变过程中的数学描述方法,换句话说,也就是美苏的核军备竞赛。
设计核反应堆时最关键的一步就是预测中子的分布,但运用公式来推导这个过程实在太复杂了。最终,一个著名的统计学方法,蒙特卡洛方法,解决了这个问题。简单来说,人们不知道中子在裂变过程中的速率和方法,通过蒙特卡洛方法随机抽样之后,就能模拟中子的行为,从而得到中子传输的范围。
由于蒙特卡洛方法基于随机采样,它的运作需要大量随机数来支撑。随机数表格一时间成为学术界的“热门产品”,以致于为美国军方服务的RAND公司开始生产这种“商品”。1955年,RAND公司公开发行了第一版《百万随机数》。
就像考0分并不比考100分更容易,《百万随机数》的紧俏来源于一个事实——大规模地生产高质量的随机数其实是一件相当困难的事。RAND公司为此付出诸多努力,方法大致分为三步:
使用一个每秒产生10万个脉冲的随机频率脉冲源,将其连接到一个五位的二进制计数器上,输出相当于转动32格轮盘的结果。
将32位中的20位转换为十进制(舍弃剩余的12位),最终保留得到的两位数的第二位,并输入到 IBM 打孔机中。
重复以上过程,直到产生100万个随机数。
1949 年用于创建偏差数字表的打孔卡。图/RAND网站
RAND公司没有透露随机脉冲的来源,但有人推测随机脉冲来自于盖格计数器测量的铀矿衰变。
盖格计数器是一种用来探测辐射强度的仪器。铀在衰变过程中会释放出粒子,且两次衰变的间隔是随机的,因此,盖格计数器接收到的信号便也是随机的。
如今有兴趣,你甚至可以自己重现这个过程。GitHub上有一个完整的教程(https://github.com/nategri/chernobyl_dice),只需六颗铀玻璃球、盖革计数板、几个辉光管、几片拉丝金属面板,你就可以打造一台属于自己的真·随机数生成器。
它还被取了个没品的名字:切尔诺贝利骰子。
极具冷战年代风格的工具见证了人类如何追求随机性的极致,也为此后的技术发展留下丰富的遗产。如今,高质量的随机数生成器在许多行业都有应用,包括密码学、博彩业、统计抽样、药物实验和计算机模拟。
对网络安全的关注也激发了这种需求。密码学上,伪随机数的确定性是黑客眼中的大破绽。麻省理工学院的计算机教授史蒂夫·沃德曾提到:“如果你去一个在线扑克网站,你知道算法和种子,你就可以编写一个程序来预测将要发牌的牌。”
关于这一点,发明“伪随机数生成法”的冯·诺伊曼本人倒也心知肚明:“任何想用数学方法生成随机数的想法,都是有罪的。”
三、还没完,量子力学有话说
那么,借助物理现象产生的随机数,就一定是真随机么?
以掷骰子为例,一旦明确知道骰子抛出时的角度、速度、在空中运动时的风向、阻力、桌面的粗燥程度等一切影响因素,那么理论上,骰子落地时的数值完全可以推导出来。人们之所以认为它像是“真随机”,是因为物理环境涉及的变量太多,以致于推导过于复杂。
量子力学是否也只是由于我们无法观测而被视为具备随机性呢?
晚年的爱因斯坦以“仇恨”量子力学而出名,他质疑量子力学并未完整地描述物理系统的状态。那句著名的调侃“我相信上帝不掷骰子”,就是在这个时候诞生的——他不相信世界上存在真正的随机。他的理论被总结为“隐变量理论”,认为在量子力学背后,可能隐藏了一个尚未发现的理论,可以完整解释量子力学的不确定性。
事实证明,爱因斯坦错了,1964年的贝尔不等式证明了定域性隐变量并不存在。不过,科学本来就是通过经验实证方法,对现象归因的学科。物理理论是对现实的建模,并不等同于现实。换句话,量子力学可以产生真随机,是因为在现有条件下,我们并不掌握准确观测的方法。
所以,最严谨的表述是:以目前的科学水平来说,我们认为,量子力学可以产生真随机。
一些数字
20000:RAND公司使用的IBM打孔卡数量
23383506944:1998-2001年麦兹·哈尔产生的随机比特数。他运营了random.org这个网站,提供基于无线电静电产生的随机数
10231:20000次硬币投掷中正面向上的次数,来自一位加州大学伯克利分校的学生
10014:20000次硬币投掷中反面向上的次数,来自另一位加州大学伯克利分校的学生
23:英国国家乐透在头20年出现最多的中奖数字,266次
参考文献:
[1] https://www.rand.org/pubs/monograph_reports/MR1418.html
[2] Timothy Sauer.《数值分析》.吴兆金、王国英、范红军译.人民邮电出版社.2010
[3] https://igaojin.me/2018/11/23/此地无人生还:区块链随机数的原罪与救赎/
[4] https://min.news/en/tech/a3af91fde51e0d335bec92830b9d4237.html
[5] https://www.zhihu.com/question/576761456
[6] https://www.cnblogs.com/sumingk/articles/10092452.html
[7] https://zhuanlan.zhihu.com/p/557583762
[8] https://tashian.com/articles/a-brief-history-of-random-numbers/
[9] https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/#:~:text=On%20Linux%2C%20the%20root%20of%20all%20randomness%20is,can%20contain%20up%20to%204%2C096%20bits%20of%20entropy.
本文来自微信公众号:果壳 (ID:Guokr42),作者:ttt,编辑:翁垟、biu
关键词: