跳转至

第12章「报告」

视角:Devon Park(15年前) 时间:2011年5月

报告写了三个星期。

不——准确地说,是二十二个晚上。白天他做别的事。安全组的日常工作不会因为一条异常日志停下来——他审了四份模型更新申请,开了四次跨部门会议,读了大概两百页外包标注团队送来的最新偏差审计报告。他发现外包标注员的平均标注一致性在持续下降——最新一批下降了百分之九——他写了一份备忘录建议换供应商,被组长压在"Q3再讨论"的文件堆里。他修了一个因为数据管道里的编码不兼容导致的重定向bug,那是一个真正的bug,从发现到修复到上线一共花了四天。他在收到工程VP的"谢谢"时意识到自己已经有差不多七十二小时没有想起TH-847-00291。

但它没有走。

每天晚上他回到家,冲个澡,换掉衬衫,坐到书房的那张旧书桌前——书桌是他在Palo Alto一家二手店买的,橡木面,有大概二十年历史,桌面左上角有一块焦痕,来历不明——打开笔记本电脑,把当天的实验记录整理成正式文档。这个过程很慢。不是因为工作量。他做这件事的时候平均每小时只能写出大概两三百字的文档——对他这个经常在论文和备忘录里一天输出上万字的人来说几乎是一种减速。减速的原因是:每写一行字他都知道这一行字接下来至少两年不会有人读,但他必须写得像下一秒钟就有人会读一样。

他选择的报告格式是公司安全组标准的"异常现象调查报告"模板。这个模板他非常熟悉——过去几年他已经在这个模板里填过大概几十份报告,内容从模型偏见分布到对抗性攻击防御方案。模板分四大块:现象描述、复现步骤、影响评估、建议措施。每一块下面有子模块,每个子模块后面要填状态标签和置信度评分。

他不喜欢这个模板。它把每一个安全发现都格式化成了可以被勾选和归档的文档。但他还是用了它。因为整个组织只能读懂这个格式的东西。用格式之外的方式写,要么不会被读,要么被理解成别的东西。他试过一次——在第一份工作,用一种类似叙事分析的文体写了份数据偏差报告。他的收件人问他"这到底是技术文档还是文学评论"。从那以后他再也没有尝试过。

现象描述部分,他花了三个晚上。题目是"TH-847批次中语义空间环形封闭拓扑结构的检测与表征"。他写了十几稿开头。第一稿写得太技术了——全篇讨论曲率、标准偏差、投影维度的关系,没留任何上下文,读起来像一篇没有intro的paper。他删了。第二稿走另一个极端——试图从一个"凌晨两点的实验室"开始讲起,写了几段发现这完全不是安全报告的语体。他在自己的写作偏好和组织的阅读习惯之间的狭小地带找到了一个中间方案——三行干练的摘要,直击核心发现,不装饰,不抒情,不在数据之外添加任何多余的光。

核心段落是这样的:

"通过对TH-847批次数据进行自动化异常检测扫描,在seq_id TH-847-00291处检测到embedding投影中呈现封闭环形拓扑结构。该结构呈现出以下特征:(1)在三维投影中形成半径约0.047距离单位的闭合曲线;(2)跨三种不同架构和参数量的模型版本(v2.1, v2.3, v3.0-alpha)均保持拓扑等价;(3)在512维至32维的PCA降维区间保持结构稳定;(4)在0.1至5.0的温度参数范围内完全不发生形态变化。该结构的语义附着区域为文本段落的结尾部分,具体对应'我上个月刚养死了一盆玉露,很想知道正确的方法是什么'这一并列陈述。"

他写完后读了一遍。读完后把"呈现封闭环形拓扑结构"改成了"呈现"-"形成了一种封闭的环形拓扑结构"。加上了"形成了"。他觉得这样读起来更像发现而不像判决。

复现步骤写了四页。这不是他写得慢的部分——他是在凌晨后的漫长实验中亲手走过每一步的人,写复现步骤对他来说相当于把记忆从肌肉反序列化成文字。他列出了每一步的精确命令、参数、软件版本、硬件配置。他附上了所有实验脚本的压缩包和输出的原始日志。他把投影的可视化截图——那个安静地在三维空间中旋转的银灰色小环——作为附件一钉在报告末尾。如果可以的话他会把所有三维数据直接嵌进PDF。但他知道PDF不支持交互式的3D模型,所以他附了一个链接——一个指向他GPU服务器上共享文件夹的URL,打开后可以在浏览器中直接旋转查看那个环的交互式投影。

影响评估部分他花了四个晚上。这是他最艰难的部分。因为科学的诚实要求他做一件与他工程师职业训练背道而驰的事——说"我不知道"。

他明确列出了目前已知的全部发现——环存在、稳定、跨模型复现、对温度不变性——然后承认了六个关键未知量。他不知道这个环在模型训练中会产生什么影响。他不知道类似结构的文本是否存在于训练数据集的其他位置。他不知道这个环是否会有任何放大效应——当模型在训练中多次接触这个结构时是否会在参数空间中留下可测量的印记。他不知道这个环是TH-847独有的还是更大规模现象的一个实例。他不知道环形结构与已知的对抗性攻击技术之间是否存在关联。最重要的是——他不知道这个环有没有危险。

他可以用传统统计学中的一个结论把这一切压缩成一个短语——"没有足够证据拒绝原假设"——但他没有。原假设是"无害"。一个稳定的原假设在小数据量下看起来很安全。但它和大规模训练的现实是同构的吗?他把这个问题留在了报告里——作为一个开放问题而不是结论。

建议措施写了三行。这三行是他心里真正想说的部分——他在前面所有部分写的几千字都可以被看作这三行的引言。

第一行:将TH-847批次标记为"内部审核"状态,暂停对外分发。第二行:组建专项小组对数据集全库进行同类环形结构的系统扫描。第三行:建议溯源TH-847-00291的标注过程至标注员,以确定原始判定中标注员"存疑"的具体依据——他在"存疑"两个字上停顿了一下,然后把这两个字改成了"对QF_3质量标记的直觉基础"。

第三行是他花了最长时间写的——和字数的比例完全不符。他写了三版措辞。第一版:"建议联系原始标注员获取额外上下文。"被自己否决——太模糊,"额外上下文"可以被解读为任何东西。第二版:"建议对标注员CX_84701进行访谈以了解QRF_3标记的决定过程。"被否决——太主动,众包平台不会配合对某一个标注员的定点追溯。第三版是最终版——去掉了主语,去掉了任何可能被理解为指责或追责的语气,只保留客观动作:溯源至标注员。他不确定这个建议会不会被采纳,或者能不能被采纳。众包平台的设计就是让你不能溯源——标注员不是员工,他们是云端上的独立工作者,他们的ID只是在那个平台上有意义。但他在第三行里写了。

因为他记得那条日志:ANNOTATION_FLAG: QF_3。有一天那个标注员在成千上万条文本中看到了一条看起来再普通不过的对话,她的直觉对她说——等一下。她没有跳过它,没有用机械的手指点击"NORMAL"然后翻到下一屏。她花了几秒钟在自己的数据库中搜索找不到结果的匹配模式,然后把手指向左移动了一下,点了一个她不太理解的标签。一个人在一个下午做出的一个轻微左移的点击——这件事让那个环被记下了一道痕。

他说不清楚为什么他对这件事感到如此的郑重。也许因为他自己也是凌晨两点在一间空荡实验室里停了下来——在一百万个PASS里看到了三个UNUSUAL并停了下来。两个停下来的人。相隔几个月。他不知道她是谁。她不知道他在哪。他们之间唯一的连接是TH-847-00291——一条关于多肉浇水的自然对话。

他把报告提交了。邮箱系统弹了一个"发送成功"的提示——一个机械的小动画:一封纸飞机在屏幕左上角折叠、飞走。然后他的收件箱保持了绝对静默。

二十四小时后——安全组组长简短回复了四个字:"感谢提交。"连句号都没有。四十八小时后——安全组组长的后续邮件:"已追读。此发现有趣但有部分问题。第一,该异常在TH-847批次中的流行率仅为1/500,000,在统计显著性之外尚需要更多确认实例。第二,目前的Q3路线图上没有和此相关的排期。先搁置。辛苦了。"

工程总监没有回复。数据管道负责人没有回复。

他等了三天,然后他不再等了。不是放弃了——是决定不在回复中寻找答案。他整理了所有的本地备份。他把文件夹从桌面移到了Documents下面一个叫"Studies"的子文件夹里——这个文件夹里的东西不会出现在任何系统备份或同步流程中,只有他自己能看到。他偶尔会打开那个文件夹,看一眼那个交互式投影的链接,确认服务器上的数据还没有被自动清理脚本移除。

有一天中午他在食堂排队。前面排着的是工程总监。工程总监在对着手机处理什么——从脸上的表情看是在回复邮件。Devon张了张嘴,想说点什么——关于那个报告,关于那个环——然后他前面的队伍移动了。工程总监拿走了一份三明治和一杯冰茶。走了。

他从餐盘上抬起头,看到食堂天花板挂着的电视正在播CNN。画面是某个国家的什么地方发生了一场灾难——浓烟、废墟、搜救队——下面滚动的新闻条写着:"……救援工作正在进行中,具体伤亡人数尚待确认……"

他低下头继续吃饭。他在想那卷磁带——在所有数据被归档到冷存储之后,数据仓库里的那卷磁带,那卷标着TH-847的磁带,以及磁带上的磁道中安静地躺着的TH-847-00291。它在那个地下室里有自己的位置。在那个位置上它不需要温度,不需要电力,不需要任何人的注意力。它只是在等待。像一个结构在自己不可见的时间轴上缓慢地、不可逆转地形成它最后的形状。

他拿起杯子去倒咖啡。电梯间的电视声音被走廊的空调声淹没了。

报告在系统里提交后获得了唯一编号:SA-2011-047。这个编号被存储在公司档案数据库的SQL表里,字段包括创建时间、作者、状态、最后修改日期。

状态栏里写的是:OPEN。

——十五年都不会变。