你有多随机?
文章摘要
这是开发者 Shaun Pedicini(HN 账号 vunderba,X 账号 @wunderbaba)在个人实验站 “Shaun’s Lab” 上做的一个小游戏,以 Show HN 形式发布,项目路径叫 rigged-draw(“做了手脚的摇奖”)。它想检验一件人人都以为自己能做到的事:随口说出一串真正随机的数字。
玩法。 页面包装成一档电视摇奖节目,标题是“每日开奖”,副标题是“今晚的摇奖机就是你”。你要做的是尽可能随机地大声说出数字,一个接一个,不要停;说得越多,结果越准。在你说出每个数字之前,“庄家”会先把它的猜测封进一个信封,你说出数字后信封打开,翻牌板显示庄家领先随机水平多少。默认范围是 1 到 9,前 10 个数字是热身,庄家借此认识你,不计分。结束时你会拿到一张“官方开奖结果”彩票,告诉你庄家猜中了多少、盲猜平均能中多少(1 到 9 的情况下是九分之一,约 11%),并把你和一项心理学研究里的 206 名参与者(模型训练用了 418 人的数据)做比较。
为什么要大声说。 你也可以用数字键盘输入,但页面会提醒这是更弱的测试:说出一个数字意味着你必须先“想出”它,而在键盘上很容易不经选择地乱按,所以用键盘的结果会在彩票上标注为“键入”。语音识别完全在浏览器内进行,需要一次性下载约 31MB 的语音包并缓存在本机,音频不会离开页面。
庄家怎么猜。 页面的说明部分写道,庄家同时运行十个小预测器,并信任最近表现最好的那个:有的统计哪个数字后面常跟哪个数字,有的追踪你上下跳动的步长,有一个会寻找你上次说出同样几个连续数字之后接了什么,还有一个专门留意你有一阵子没说过的数字。最后这个贡献最大,因为人们总会不自觉地去补那些被冷落的数字,而在真正的随机序列里,每个数字都和之前的无关。模型先用 Angelike 和 Musch 2024 年一项研究的数据做“预热”:参与者在 3×3 网格上各点击 200 次 1 到 9 的数字,然后再随着你的输入逐步适应你。
防作弊与统计。 为了证明庄家没有事后改猜测,每个猜测都只根据你之前的数字生成,并在你说出下一个数字之前用加盐的 SHA-256 哈希封存,结果文件里列出盐值和猜测,任何人都可以验证。结果页里“每 N 次中才出现一次”的数字来自 e 值(e-value),它给每一次预测打分,不只看猜中与否:对你说出的每个数字,比较庄家给这个数字的概率与盲猜概率,押对高赔率得分,自信地猜错则扣分,累计值用信息论中衡量“意外程度”的比特来表示。若你的数字真是独立均匀随机的,这个累计值无论玩多久、何时停止,达到当前高度的概率都不超过 1/N,所以它可能和命中率不一致:短局里几次侥幸命中几乎推不动它。彩票上还会附带描述性的“习惯报告”,比如你有没有连续说同一个数、多少次只走一步(如 4 后面接 5)、偏爱哪些数字、冷落了哪些数字、反复出现的三数字组合等,并注明这些只是描述,不是统计检验。
需要说明:该页面是客户端渲染的单页应用,HTML 只有骨架,以上内容是从页面的 JS 包中提取文案字符串整理而成;HN 帖子本身没有正文。
HN 评论精华
本帖 215 分、约 120 条评论。大量评论是网友晒自己的“彩票”成绩,此外讨论集中在 Aaronson 预言机、什么才算“随机”、以及各种击败庄家的招数。
Aaronson 预言机。 costco 指出这是“Aaronson 预言机”的一个漂亮变体,并引用 Scott Aaronson 的原话:他在伯克利上课时写过一个小程序,让人随意按 f 或 d,预测下一个键,很容易做到 70% 左右的准确率,因为大多数人不会随机打字,交替太多,模式到处都是;他自己知道原理也打不过自己的程序。只有一个学生被预测到恰好 50%,问他秘诀,他说“我只是用了我的自由意志”。cubefox 贴出了在线版 aaronsonoracle.com,不少人去试了,成绩从 38% 到 64% 不等。作者 vunderba 说他之前没听说过 Aaronson 预言机,做这个项目是看了《星际迷航:下一代》里 Data 把所有人锁在企业号外面的那一集之后一时兴起。
“随机”到底是什么。 tyre 讲了一个统计学教授的经典课堂实验:一组人真抛 50 次硬币,另一组人编造 50 次结果,教授回来一眼就能分辨,因为编造的那组交替太多。ShinyLeftPad 抓住“HHHHHH 和 HTHTHT 概率一样”这句话反复追问,认为把“人类觉得不随机的东西”定义为不随机是在偷换概念;dwattttt 和 svnt 解释说,单个序列确实等概率,但人类生成的样本整体分布不均匀,这是可以统计检测的。在关于技巧的讨论中,pcthrowaway 提醒有人把“不可预测”和“随机”混为一谈。
击败庄家的方法。 很多人选择“作弊”:shric、wren6991、kps 直接念圆周率的前 100 位,庄家几乎猜不中,wren6991 建议加一个“著名数学常数”预测器,iterance 调侃“我把圆周率的数字全输进这个网站,它判定是随机的,证毕”。patwolf 只记得几位 π,就改用心算斐波那契数列。steve_adams_86 干脆写了一段脚本用 Math.random 自动点按键,190 个数字庄家只猜中 18 个(9%),206 人里只有 1 人比它更随机,于是他很想知道是谁比随机数生成器还随机;cortesoft 说那人大概也是靠运气,总得有人赢。newsy-combi 提醒,0% 命中并不是目标,理想值应该是正好 11%:如果庄家总猜错,说明它能排除掉你不会选的数字,你反而更可预测了。也有人用对抗策略:alwa 发现自己的注意力从“生成数字”转向“盯着庄家的猜测躲开它”,体验了一把站在老虎机那一边的感觉;christophilus 总是跟着庄家上一次的猜测说,庄家一直没发现;Trusteando 提议先想两个数再取 (n1+n2) mod 9 + 1,被 kelseyfrog 反问“让输入变成确定性的怎么会更随机”。somenameforme 补充了冯·诺伊曼的技巧:即使硬币有偏,把 HT 记为 0、TH 记为 1、丢弃 HH 和 TT,也能得到完全均衡的随机比特。
作者答疑与修 bug。 vorticalbox 发现庄家在第 30 到 50 个数字之间一直猜 7,作者解释系统主要是实时为你的序列构建多个 n-gram 马尔可夫模型,外加几个非马尔可夫的简单启发式预测器,大概是“冷门数字”预测器权重过高导致卡住,已修复。nightpool 发现报告里出现自相矛盾的句子,作者承认是“填词模板”式文案的 bug,本意是演示小样本定律:短序列本来就容易出现分布不均。kykat 指出玩家能实时看到庄家的猜测,会影响结果,和原研究不可比;作者承认确实如此,原研究用 3×3 网格加节拍器,固定速度、全程无反馈,他考虑加一个“困难模式”。语音识别方面,作者用的是 Vosk,因为它很容易把词汇表限定为数字,在各种浏览器上表现都不错;有人推荐更准确的 yapsnap,作者顾虑其英文 ONNX 模型约 150MB,而 Vosk 只有约 30MB。
其他。 pavel_lishin 问有没有人第一反应是“你要拿我的声音训练模型吗”,引来一串玩笑。williamdclt 回忆了一篇关于石头剪刀布程序对战比赛的文章:一个巧妙策略是把“历史出招 + 三种可能的下一手”分别压缩,选压缩后最短的那个,因为那代表压缩算法找到了最强的模式。tibbar 分享了他多年前做的 humanrandomness.com,并说正是这个小项目帮他从南方老家失业的状态找到了旧金山的工作。yesitcan 则吐槽:看到 “sealed”(封存)这个词,就知道网站文案是 Claude 写的。