验证、复现与评审
第 33 课:验证、复现与评审
前面几课把"选题、规划、长时程执行"都串起来了,但有一条底线还没立住:代码跑通不等于结论成立。这一课回答三件事——怎么承认"能跑≠对"并揪出静默错误,怎么让结果可复现(种子 / 环境 / 数据版本),以及谁来独立判断"这个结论能不能接受"。最后用一组真实投稿数据说明"过评审"到底有多难,并给出"接受之前"的五维评估门禁。
silent error(静默错误)为什么最危险,并用"静默失败率"这类读数把它量化② 用复现三要素(随机种子 / 环境 / 数据版本)与泄漏检查堵住它,并算出"三要素同时可靠"的概率
③ 算出一个结论"过评审"的真实概率,并用五维评估(novelty / validity / impact / reliability / provenance)把它拦在"接受"之前
silent error 能跑出物理上不可能的结果。能跑不等于对。held-out(留出集)挡住泄漏。揪错要靠可复现。silent error,指程序正常运行、输出看似合理,但物理含义已被悄悄改坏,见 Paimon,arXiv:2606.09422)。它比崩溃更危险,因为没有任何报错提醒你。定量证据来自 Judge Agent(arXiv:2603.25780,2026-03):LLM 生成的仿真代码若不做数学校验(适定性 / 收敛 / 误差界),静默失败率高达 42%;同一批代码加上自动校验后降到 1.5%。该文还引 SciCode:前沿模型解不出半数研究级计算问题。第五部分走到这里,选题、规划、长时程执行都讲过了,但有一条底线必须先立住:代码跑通了,结论就成立吗?
因为"跑通"只证明脚本没在运行时崩掉,不证明它算的是你要的东西。论文里的每个结论,最终都只是写进文档的一串 tokens——而 tokens 本身不会告诉你它错没错。就像电子秤没坏、数字也在跳,只是单位被人从克偷偷换成了磅,你看不出任何异样。silent error(静默错误)就是这类失败:正常结束、结果看着合理,物理意义却已经错了。所以先把"能跑≠对"这条底线讲透。
| 类型 | 现象 | 能不能一眼看出 |
|---|---|---|
| 跑不起来 | 编译 / 导入失败 | 能(最安全) |
| 运行中崩 | 抛异常退出 | 能 |
| 静默错误 | 正常结束、结果似乎合理 | 不能(最危险) |
| 条件 | 静默失败率 |
|---|---|
| 无验证的 AI 生成仿真代码(134 个测试用例、12 个领域) | 42% |
| 加入 Judge Agent(自动数学校验) | 1.5% |
| 下降倍数 | 42 ÷ 1.5 = 28× |
| 对象 | "结果与工件不符"的论文占比 | 117 篇中约几篇 |
|---|---|---|
| Codex(GPT-5.4) | 5% | 117 × 0.05 ≈ 5.85 ≈ 6 篇 |
| Claude Code(Opus 4.6) | 31% | 117 × 0.31 ≈ 36.3 ≈ 36 篇 |
| Kimi Code(K2.5) | 77% | 117 × 0.77 ≈ 90.1 ≈ 90 篇 |
有验证 → 静默失败率从 42% 降到 1.5%;没有 → 近一半错误会溜过去。判据是:先承认"能跑≠对",再问一句"这个数字能不能被独立复算或审计确认"。验证的第 0 步不是加测试,是承认测试可能测不到。
reproducibility,指别人按你记录的条件能重跑出同样的结论)研究的一条通用做法是复现三要素:随机种子(seed)、运行环境(environment)、数据版本(data version)。复现基准 PaperBench(OpenAI,arXiv:2504.01848,2025-04)把这套标准做成可打分任务:给定一篇论文 PDF,agent 必须从零复现其关键结果,20 篇 ICML 2024 Spotlight / Oral 论文被拆成 8,316 个可独立判分的叶子项,分三类——写对代码(Code Development)、真的跑过(Execution)、结果对得上(Result Match),且禁止使用作者原代码。上一张卡片说明"能跑≠对"。可复现只说明"能重跑",所以下一步是把"对"变成可检查的:怎么让结果可复现?
因为影响结果的变量不止代码本身:随机种子不同、库版本不同、数据切片不同,都会让同一份脚本给出不同的数。要复现,就得把这三样钉住,并把它们记在 context 之外的文件里(承第 32 课的"状态落在上下文之外")。这里的 held-out(留出集)指训练 / 调参时故意不看的样本——它是判断"真会做还是背下来"的尺子,一旦被搜到,尺子就作废。就像考试先把答案锁进保险箱,考前谁都不能碰。所以可复现 = 钉住三要素 + 挡住泄漏。
| 要素 | 钉住什么 | 不钉会怎样 |
|---|---|---|
| 随机种子 seed | 数据打乱 / 初始化 / 采样 | 每次结果不同 |
| 运行环境 environment | 依赖库版本、CUDA、硬件 | 换机器就变数 |
| 数据版本 data version | 数据集快照与划分 | 训练 / 测试边界漂移 |
| 单要素可靠度 | 三项同时可靠 ≈ p³ |
|---|---|
| 0.90 | 0.90³ = 0.729 |
| 0.99 | 0.99³ ≈ 0.970 |
| 项 | 数值 |
|---|---|
| PaperBench 论文数 | 20 篇(ICML 2024) |
| 可独立判分叶子项 | 8,316 个 |
| 平均每篇 | 8,316 ÷ 20 ≈ 416 个 |
| 三类项 | Code Development / Execution / Result Match |
可复现 = 钉住种子 / 环境 / 数据版本(记在 context 之外)+ 用 held-out 挡住泄漏。判据是:换一个人、换一台机器,能不能重跑出同一个数;做不到,后面所有"验证"都失去地基。
evidence-based review before accepting:结论必须由独立证据支撑,且由不参与生产的人来判断)。独立评估者 Beel 等(arXiv:2502.14297,2025)实测 Sakana 的 AI Scientist 后指出:12 个提议实验中 5 个(42%)因编码错误失败,生成稿件的质量"像一篇赶出来的本科生论文"。另一面,AI Scientist v1(arXiv:2408.06292)报告其自动评审器用 5 轮自我反思 + 5 份集成评审 达到约 70% 的判断准确率。上一张卡片把结果变得可复现。但可复现只说明"能重跑",不说明"值得信"——谁来判断这个结论能不能接受?
因为生产结论的人天然有确认偏误:自己写的代码、自己跑的数、自己下的判断,很容易只看到支持结论的那部分。评审要读的是由 tokens 构成的完整证据链(数据、日志、代码、复现清单),而不是结论那一句话。就像比赛不能既当运动员又当裁判——同一双手既跑又判,规则就失效了。所以接受之前必须有独立评审,而且要看多个评审的一致性。
| 评审方式 | 问题 |
|---|---|
| 自己评审自己 | 确认偏误,只会看到支持结论的证据 |
| 只看结论一句话 | 漏掉过程违规 / 数据不符 |
| 独立证据评审 | 回查数据、日志、代码与复现清单 |
| 情形 | 概率 |
|---|---|
| 两名各 70% 准的评审恰好一致 | 0.7² + 0.3² = 0.58 |
| 三名各 70% 准的评审多数表决正确 | 3 × 0.7² × 0.3 + 0.7³ = 0.784 |
| 项 | 数值 / 做法 |
|---|---|
| AI Scientist 自动评审构成 | 5 轮反思 + 5 份集成 |
| 其报告准确率 | 约 70% |
| 独立实测反例 | 12 个实验中 5 个(42%)编码失败 |
接受之前的判断必须独立且看证据:多评审 + 回查工件(数据 / 日志 / 代码 / 复现清单),而不是信"结论一句话"。判据是:换一个不参与生产的人,能否仅凭你留下的证据复现同一判断。
上一张卡片说要独立评审。那 AI 自己写的论文,真的过得了评审吗——AI 写的论文能过评审吗?
因为"能过"这件事不能靠宣传,要看真实投稿数据:投了几篇、中了几篇、评审给了多少分、和人类投稿比在什么位置。同时要警惕:评审若只读 context 里的"看起来对",就可能漏掉可信性缺陷——独立复评(Beel 等,arXiv:2502.14297)评测的是 AI Scientist v1 系统(并非本文这篇 v2 投稿),发现该系统生成稿件含幻觉数值、且常把已有工作误判为新颖。就像闭卷批改只看卷面整洁,不看答案对不对。所以要同时看"分数"和"独立复评"两件事。
| 项 | 数值 |
|---|---|
| 投稿篇数 | 3 |
| 通过篇数 | 1 |
| 评审给分 | 6、7、6 → 均分 6.33/10 |
| 相对位置 | 约 top 45% |
| 情形(示意) | 通过率 |
|---|---|
| 投 3 篇、录 1 篇(本次实测) | 1 ÷ 3 ≈ 33.3% |
| 投 43 篇、录 3 篇(示意) | 3 ÷ 43 ≈ 6.98% |
| 视角 | 发现 |
|---|---|
| workshop 评审 | 均分 6.33,通过 |
| 外部复评(针对 AI Scientist) | 幻觉数值 / 新颖性被高估 |
| 含义 | 评审看的是"呈现",复评看的是"证据" |
"过评审"要看真实投稿数据 + 独立复评两件事:3 投 1 录、均分 6.33 是真的,但那是 workshop 口径,且独立复评揭示了幻觉数值、新颖性高估等可信性缺陷。判据是:把分母写清楚,再把"评审通过"和"证据成立"分开看。
上一张卡片看到真实投稿数据。但就算论文能过评审,结论也可能复现不了——复现失败要付出什么代价?
因为复现不是"再看一眼",而是"从零重跑一遍":再花一份算力、再烧一份 tokens、再等一轮时间。若第一次没能把三要素钉死(承上一张卡片),就得多次重跑,成本按次数线性放大。就像退货重发——东西没发对,运费得自己再掏一次,掏几次取决于错了几次。所以要先把复现成本算成"单次 × 次数"。
| 项 | 数值 |
|---|---|
| AI Scientist-v2 单篇 | 约 $15(另有 $25 报道口径) |
| AI Scientist-v1 单篇 | 不足 $15(v1 原文口径) |
| 人类参与 | 约 3.5 小时 |
| 重复次数 N(单次示意 C = $15) | 总成本 = C × N |
|---|---|
| 1 | 15 × 1 = $15 |
| 3 | 15 × 3 = $45 |
| 5 | 15 × 5 = $75 |
| 单次复现成功率 | 连续 3 次都成功 ≈ p³ |
|---|---|
| 0.80 | 0.80³ = 0.512 |
| 0.90 | 0.90³ = 0.729 |
复现的代价 = 单次成本 × 重复次数,而重复次数又受失败率支配(单次 80% → 3 次全中仅约 51%)。判据是:与其事后反复重跑,不如事前把三要素钉死。
novelty(新颖性)、validity(有效性)、impact(影响)、reliability(可靠性)、provenance(出处可追溯),主张把注意力从"任务是否完成"移到"工作流级输出是否科学可信"。其中 provenance(出处 / 溯源)指每条断言都能追到它的来源与生成过程(用了哪些数据、哪个工具、哪一步决策),是审计与复现的前提。上一张卡片算了复现的代价。最后一步,是把前面所有检查固化成一道门——怎么给"验证"设门禁?
因为单个指标都能被"借光":一个系统在某维表现好,宣传稿就会顺势暗示其余几维也好。门禁要的是五个维度一起过,且每条断言都能回到它的 context 与出处(provenance)。就像飞机起飞前的检查单——不是不信任飞行员,而是用固定清单把"偶发疏忽"变成"每次都被拦住"。所以用五维评估 + 否决线,把"接受"变成一个可执行判定。
| 维度 | 看什么 |
|---|---|
| novelty 新颖性 | 是否真的新,而非改名的旧工作 |
| validity 有效性 | 方法与结论是否成立 |
| impact 影响 | 对领域是否有实际推动 |
| reliability 可靠性 | 换条件重跑是否仍成立 |
| provenance 出处 | 每条断言能否追溯到来源 |
| 项 | 数值 |
|---|---|
| 每维满分 | 20 |
| 五维合计 | 20 × 5 = 100 |
| 示例得分之和 | 16 + 18 + 12 + 17 + 15 = 78 |
| 否决线 | 任一维 < 10 即否决 |
| 检查 | 通过条件 |
|---|---|
| 每条断言有出处 | 能点开来源 / 指回日志 |
| 失败可定位 | 能说清错在数据 / 工具 / 编排 |
| 可回滚 | 能退回上一个已知良好状态 |
验证门禁 = 五维评估(novelty / validity / impact / reliability / provenance)一起过 + 否决线 + 每条断言的出处。判据是:把"接受"写成可执行的检查单,而不是凭一句"应该没问题"。这正是本部分从"能跑"走到"可信"的最后一站。