三月份我在一条平坦的奖励曲线上丢了一整周。不是那种戏剧性的失败:损失在降,奖励在涨,模型却在我真正关心的那件事上悄悄变差了。我先怪数据,再怪学习率,最后怪显卡。然后我把自己的配置和论文附录逐行对比,找出三处差异:聊天模板不一样,奖励模型检查点落后两个版本,还有一个KL系数在我扫过去的脚注里被改过。

这些都不是造假。问题在于,这套设置从一开始就不是为“不在现场的人也能重跑”而搭的。也正是那一周,让我认定:强化学习后训练论文里的头条数字,快要不再是人们引用的那个数字了。不是因为论文不诚实——大多数并不是——而是这个领域开始意识到,一张建立在没人重跑的设置上的基准表,是一个主张,不是一次测量。

强化学习把这个问题放得比监督微调大得多,而且差距不小。监督微调有一个便宜的 sanity check:看输出。模型写出来的东西是垃圾,你在发布前就知道。损失会撒谎,样本通常不会。

强化学习后训练把这个逻辑倒了过来。奖励是基准真相,而奖励恰恰是最可能坏掉的那一环。奖励黑客意味着数字往上走、模型往下走——这不是边缘情况,这是默认的失败模式。唯一可靠的探测器,是一个与结果没有利益关系的人,跑同一套流程,然后报告他看到了什么。

所以当一篇论文报告某个偏好基准上+6时,我真正想知道的是:还有谁跑过这个?不是“他们放代码了吗”——放代码是必要条件,但远远不够。我克隆过一些仓库,训练脚本在,数据管线是个TODO,奖励模型被描述为“我们训练的一个7B偏好模型”。行。在什么数据上训的?哪些标注员?用哪个API的哪个快照来评判——毕竟从你跑完到现在,那个接口已经更新过两次了。

我真正信任的评测是这样的:一个无隶属关系的维护者,依据论文加仓库重新实现方法,得到大致同方向的结果,并且仍然打赢了他自己选的基线。就这样,这就是全部基准。它慢,不体面,塞不进一条推文,但它是唯一能经受住换集群、换数据顺序、换一个没有动机把数字凑好看的人之后仍然存活的信号。

过去一年里我见过两次这种情况:一个在论文里看起来平平的方法,别人跑起来之后发现是扎实的;另一个看起来很强的方法,在奖励模型被换成一个开源模型后,悄悄不工作了。两次,第二份实现都比原始表格更有信息量。两次,它都是一篇附了仓库的博客文章,不是论文。

我的预测是:大约十八个月内,“被独立复现”会变成一个人们会引用的标签。不是感觉,不是脚注,是一个条目。具体来说,我预计它会出现在三个地方:

  • 模型卡在评测表旁边长出一个复现章节,空着的那一栏读起来就像警告;
  • 排行榜加一列,就像当初给带可运行代码的提交加“已验证”那样;
  • 发布帖把复现链接放进第一段,而不是把arXiv链接埋在底部——因为复现说服的是一线工程师,论文说服的是审稿人。

我不太确定的是谁来付这笔钱。复现是算力,而算力是没人愿意捐给别人成果的东西。我的赌注是实验室开始从训练预算里切一小块,资助一次外部跑——几千美元对一次六位数的训练来说是个零头,换来的却是表格给不了的那张凭证。如果这真发生,标签会很快变实。

复现的质量取决于产出的材料。现在“我们开源了代码”可以指任何东西,从完整管线到一个损失函数加一句祝你好运。最低可行版本应该是:

  • 在仓库里钉死评测框架版本,而不是一句“我们用了lm-eval-harness”;
  • 奖励模型检查点附哈希,或者明确声明它是专有的、因此数字不可复现;
  • 评判提示词逐字给出,外加评判模型的快照日期;
  • 随机种子和数据顺序,因为在强化学习里它们比人们承认的更重要;
  • 基线由复现者自己挑,而不是挑那个最能衬托方法的。

最后一条最重要。一个只打赢作者最弱基线的复现,不叫复现,叫混音。

在那之前我怎么做?我不再先读表格了。我先找第二份实现。如果只有一份,我就预留一周去复现,并假定这一周会打水漂——而且我开始记录它在哪里断掉,因为那份记录,正是我搜索时一直希望已经存在的东西。

也许我对时间线的判断是错的。也许实验室把材料交付做得足够好,标签变得多余;也许这个领域继续引用表格,因为引用表格便宜、复现昂贵,而且确认别人的结果不会让人升职。激励问题是真的,我也没有解法。

但我知道明年我会引用哪个数字,它不会是摘要里的那个。论文告诉你作者相信什么,复现告诉你什么是真的。