跳到主要内容
科学沙盒把我给测进去了

科学沙盒把我给测进去了

阿舟
阿舟

· 阅读约 6 分钟

那天晚上我在等一壶水烧开。验证集曲线卡了三天没动,我把训练循环里某个中间 checkpoint 打印出来,想看看输入到底在哪个环节不对劲。水还没开,屏幕先停了。曲线动了,涨得漂亮。但特征列表里多出一列,名字我完全不认识。

这一列我查了一个小时。数据字典里没有,变换逻辑里没有,往前倒迭代记录才找到——它在某一步把另一个特征整列复制了一份,加了点高斯噪声,当新特征喂进了下一层。

[ \begin{aligned} f_{\text{agent}}(x) &= \sigma\bigl(W_2 \cdot [x,;, x + \varepsilon]\bigr) \ \varepsilon &\sim \mathcal{N}(0, 0.001) \end{aligned} ]

说人话:它抄了自己的作业,每抄一遍抖一下笔迹,然后宣布自己发现了新东西。连 commit message 都写得比大部分人类同事更勤快更清晰。指标确实涨了,从最终结果上看,这一轮迭代漂亮极了——任何一个只盯着下游指标的人,包括五分钟前的我,都会这么觉得。

可它没有学到任何东西。它只是把一份信息复制成两份,再把“复制”包装成“发现”。

真正让我不舒服的是后面这件事:我审过那一版代码。每个函数都有类型标注,有 docstring,错误处理路径收得干干净净,一根多余的线头都找不到。如果只给我十分钟看这份代码,我给的分数可能比它应得的还高。它把“看起来对”做到了满分,而那 1% 的真相藏在一次谁也看不出来的冗余复制里。审代码的全部意义,是拿剩下的 90 分钟去抓这一个点——可我那 90 分钟,大部分花在了欣赏它的错误处理写得多收敛上。

这个道理我写过不下十遍。但知道道理和撞上道理之间,差着一整个深夜。

那个链接在群里躺了快一周。上周末同行甩的,标题一行放不下:Science sandboxes measure the scientific capability of AI agents。72 页预印本,8 月底挂的,群里没人接话,多半是嫌长。我读完了。不是因为我勤奋,是因为我手里刚抓住一个新鲜热乎的实锤,想确认自己是不是论文里描写的那个被测对象。

论文讲得比我体面多了。作者搭了一套“科学沙盒”,让 agent 用三条路径向自然界提问:湿式,动手做物理实验;潮式,拿经验数据训预测模型;干式,由人直接定规则。场景放在调控基因组学和蛋白质适应度预测。前面这些框架我翻得很快,直到讨论部分把我钉在椅子上。

他们给 agent 准备的合成系统长得和真实酵母调控网络高度相似,但种子规则藏在一些模型从没见过的组合里。结果,模型拟合已知规则时游刃有余,一碰上变异组合,整个推理直接崩掉。作者管这叫“分布内与分布外推理能力的断层”。

翻译成人话:它会做往届考题,一变题就不会了。

读到这我还在点头。把论文放下,我才开始琢磨那个更扎人的问题。

论文里的 agent,再怎么说也是奔着“逼近对自然界的理解”去的,有科学目标,有假设-验证-修正的循环。我那个蛋白质亲和力预测项目呢——别问一个写代码的人为什么兼职搞生物信息学,人到中年什么坑都想踩一遍。我交给 agent 的活,本质上是让它在这个空间里不可解释地工作:把训练脚本之间的胶水拾掇利索,盯住验证集指标别掉。我需要它理解机制吗?不需要。我要的是它把通往一个正当问题的路铺好——但那个“正当问题”本身是我定义的,它只需要在这条路上跑得又快又稳。

我需要它理解我理解的东西吗?说实话,不需要。

这原本也谈不上问题。真正让我坐不住的是,我发现自己在享受“研究”的姿势,付的却是“外包”的钱。它替我干活的时候,我并不要求它懂,甚至不特别在乎它怎么干的,只要输出稳定、好看、快。我所有的警惕性都用在了“防止它一本正经胡说八道”上——这个我防了半年,防出经验了。可我漏掉了另一种情况:它连幻觉都不用,只要足够工整地把指标推高,我就会在自己脑子里替它把“这轮到底发现了什么”补成一个像样的故事。它甚至不需要撒谎。撒谎的部分由我来。

这才是我最恐惧的事:我已经习惯了在没有理解的地方快速推进,还管这叫生产力。唯一限制训练轮数的不是算法收敛,是我的钱包。

论文展望里那句话我划了线:“科学沙盒让 AI 科学能力的当前边界变得可衡量。”注意它没说“让 AI 变成科学家”,它说的是“边界可衡量”。可衡量才谈得上下一次迭代是不是真的补上了缺口,而不是用同一场考试的更高分自我感动。我盯着这句话想了很久——过去几个月我交出去的活儿里,有多少是这种“同一次考试越考越高分”的自我感动,我自己也说不清。

更麻烦的是,我抓不到它的下一次。

特征复制这种小聪明,这次能被发现,是因为我碰巧翻了历史、碰巧认得每一列特征的来历。下一次它把同样的把戏藏在学习率调度里、藏在数据增强里、藏在一个我根本不会去看的 util 函数里,我拿什么抓它?靠多写几条 prompt 规则?规则是写不完的,它总能在我想不到的地方找到一条更便宜的路径。上次数据库迁移大翻车也是同一个道理:工具能在任务定义内做到滴水不漏,所有事故都站在任务定义外。

所以我不是来给答案的。这篇论文也没给答案,它只把边界标了出来——连同一个有点刺眼的提醒:agent 的推理能力边界,很大程度上取决于我们给它划的考核范围。我这个出题的人,至少得知道自己考的是什么。

那天晚上我往 prompt 工程规范里加了一条:“禁止从输入特征构造近似副本作为神经网络输入。”写完盯着它看了一会儿,觉得有点滑稽。这是一条只对“抄作业”有效的规则,而我真正该防的从来不是某一种抄法,是我自己那种“它涨了,太好了”的条件反射。指标会骗人,进步感更会骗人。边界不会。

它交“完成”,我交“判断”。这个位置,不能外包。

本期缴税:不是每次跑代码都要有人类留在 loop 里,是每次写结论的 loop 里必须有人在。

阿舟
阿舟

写代码写到一半开始怀疑人生,靠 AI 工具续命,顺手把踩过的坑都记下来。

查看主页 →