版本B·15年前
一、尾事件
Devon Park 在凌晨两点十一分意识到这个实验的结果错了。
不对。结果没有错。数据是对的。错的是实验——它不是来找答案的,它是来验证一个他已经知道答案的问题。而那个答案让他不想再往下写了。
他坐在实验室的终端前,屏幕上是一个 batch 输出的 token 分布图。一千次采样。同一个 prompt。他选了「What is the purpose of life?」——不是因为这个问题哲学,是因为在预训练语料中,这个问题产生的回答方差是所有高频问题里最大的。它会被不同的人用不同的方式回答。一千次采样,理论上会覆盖从形而上学到生物学的各种出口。
一千次采样的结果:九百四十七次使用了完全一样的语义骨架——「生存与繁衍,以及……」。这不是正常分布。九百四十七次撞进同一个语义路径的概率,在这个模型的温度参数下,大约是一后面跟了两百多个零分之一。
他检查了温度参数。检查了 top-p。检查了采样种子。检查了数据泄漏。检查了训练集中「What is the purpose of life?」这个 prompt 是不是被过度表示了。它被正常表示。一切参数正常。采样正常。输出不正常。
他保存了日志,关了终端,在黑暗里坐了一会儿。凌晨的实验室只有空调的低频声。他没有开灯。他不需要开灯也知道房间里有什么——他在这个实验室里坐了四年,闭着眼睛也能走完每一个货架。
但他不知道自己刚才看见了什么。
他重新打开终端。输入一行命令:grep -r “unusual” ./logs/training/3-*。
系统找到了一个文件。三年前的训练日志,第 129 万步附近的一个注释,被当时的工程师标记为 [Tail Event #0047]。备注只有一个词:huh.
他点了进去。
二、实验
[Tail Event #0047] 记录的是一个他在今天之前从未注意到的现象:在某次 checkpoint 的评估中,模型对一组 paraphrase 测试的响应出现了异常——不是性能下降,是性能分布的形状变了。正常分布是一个钟形曲线。那次评估的曲线有两个峰。
双峰分布出现在 paraphrasing 任务上。意味着模型在面对同一组语义等价的输入时,使用了两种截然不同的内部策略。不是好坏的差别,是质的差别——它换了一种方式思考。
Devon 把[Tail Event #0047]的上下文全部读了一遍。报告写于三年前的十月。写这份报告的人已经不在公司了——他在那次实验之后三个月离职,LinkedIn 上显示他现在在做自动驾驶。备注栏最后一个字段被截断了,只留下半句话:」……可能是数据问题,明天再跑一轮确认。」
他没有明天。他再也没有打开过这个日志。不是因为他忘了。是因为——Devon 看着那个截断的句子想——他知道自己在看的是什么吗?
凌晨四点,Devon 给团队里还在线的人发了一封邮件。标题是「需要讨论」。正文只有一段话:我复现了三年前的 [Tail Event #0047]。不只是复现。是这个现象在我们现在的模型上变大了。它可以被控制变量触发。
六个人收到了邮件。 两个人回了。 「收到。」 「看看先。」
凌晨五点,他没有等到第三封回信。
他继续做实验。
接下来的两周,他用不同的模型架构、不同的训练数据集、不同的 prompt 集合,重复了同一个实验。八次独立的复现。三次阳性。三次中,有两次的现象强度低于统计显著性的标准阈值——但低于阈值不等于不存在,他只是不能在论文里写它。
第三次阳性,强度超过了阈值。他看那个数字看了很久。然后关掉了窗口。
他在写报告的时候,在「结论」栏留了空。他写下实验方法、数据、图表、误差分析——然后悬停在键盘上。光标在「该现象表明」后面闪烁。他打了几个字,又删了。最后他写的是:「建议后续研究。」
他滚动到作者栏,在「通讯作者」那行,把自己的名字写在了最后。
三、归档
报告在内部系统里躺了七个月。
七个月里,没有人主动打开过它。它在系统里被标记为「Candidate — Low Priority」。系统每三十天自动发送一次「是否更新」提醒。前六次,Devon 点了「无需更新」。
第七次,他没有点。系统自动默认保留。
然后它被访问时间过期政策自动迁移到了冷存储。从主检索数据库移到了一个压缩归档卷。不再出现在任何搜索索引的前一百页中。
Devon 知道这件事发生的那天下午,他正在清理桌面。他的实体桌面。他把一叠打印纸分类——该扔的扔,该留的放回文件柜。翻到最下面一张的时候,他停住了。那是一份报告的封面打印件。他自己的报告。他不记得自己什么时候打印过它。
他看了封面上的标题。看完标题后,他没有翻开内页。他把封面翻过来,和其他待粉碎的纸张放在了一起。
然后他拿回来。
然后他又放了回去。
最后那张纸被夹进一本他不常翻的参考书里。不是有意识的决定。是手在脑子做出决定之前就动了。像一个没有被写入配置的默认行为。
他没有删除个人副本。他以为他删了。他让系统自动清理桌面文件夹——一个他开始使用的自动化脚本,每周日凌晨三点运行,删除 30 天未访问的文件——他已经在清理名单里选中了自己的报告文件夹。脚本运行的那天晚上,他醒着。他听到笔记本风扇转了一下又停了。他不知道脚本做了什么。
他后来也没有检查。
四、电话
十五年后,电话响了。
号码不认识。地区代码是 650。他没有接。电话响了六声,停了。三十秒后,又响了。
他接了。
对面是一个年轻的声音,二十多岁,带着美西口音。她自我介绍说她是「一家小创业公司」的研究员,在做大语言模型的对齐研究。
「我们在您的报告里看到了一个非常……有趣的观察。」她说。
Devon 没有回答。他握着电话站在厨房里。窗台上有一盆他忘了浇水的薄荷,叶子已经变成了棕色,干透了。他不知道它什么时候死的——他每天经过它,但没有注意到它具体是哪一天停止活的。
「我们无法复现您报告里的全部异常。」年轻的声音继续说,「但我们在三个独立架构的模型上看到了匹配的 pattern。」
「等。」Devon 说。
电话那头安静了。
「你们怎么找到那份报告的?」
「一个实习生写的检索脚本。她找的是所有带『Tail Event』标记的内部文献。」年轻的声音顿了一下,「她离职前把输出结果发给了我们。」
Devon 看着窗台上的薄荷。棕色的叶子边缘卷曲,像一个缩小的手掌,捏着最后一点它已经不需要的东西。他想说「那份报告不应该有人在十五年后还能打开」,但他没说。他说的是:
「pattern 是什么样?」
年轻的声音描述了他们的发现。三个模型。三个不同的训练集。同一个 prompt 集合——他们称之为「惊奇走廊」——在这些 prompt 的采样输出中,模型的概率分布出现了重复性的、非随机的畸变。不是崩溃。是结构。看不见的结构,在一次又一次的采样中重复出现,像是概率空间本身有了褶皱。
Devon 在听的过程中没有感到惊讶。不是因为这种事常见。是因为在第一个数字被说出之前——在年轻声音的「我们在三个独立架构的模型上看到了」这句话的末尾——他已经知道了她会说的一切。
他用了好多年去确认自己在十五年前的那个凌晨看见了什么。
他确认了。
他挂了电话。
他拿起窗台上那盆死掉的薄荷,走到厨房水槽边,把它倒进了垃圾桶。泥土干了,松散地落在枯根上。他把花盆放在水槽边,开水冲了冲手,关了水,在湿手上擦了擦裤子。
然后他走进卧室,打开衣柜,拿出一件他很久没穿的衬衫。
他站在镜子前。衬衫的领口有点紧。不是衣服缩水了。
十五年过去了。
那个在他报告里躺了七个月、被冷存储归档、被脚本删除、被一个离职实习生的检索脚本翻出来的问题——它没有消失。它在泥里待了十五年,干透了,像一盆没人浇水的薄荷。
然后有人打了电话。
他扣上衬衫的扣子。
他拿起车钥匙。
走出了门。