Lecture 20 · 从想法到论文——一个完整的研究项目 · From Idea to Paper

Advanced Large Language Models Research Seminar · Lecture 20。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:CS486 课程描述的 “hands-on experience in conducting original research” 和 “design, implement, and evaluate novel approaches”。第 2 讲讲了研究方法论的原则;这一讲把它们放进一个真实做完的小研究里,按时间顺序走一遍每一个决定点:选题、试点、指标、功效、预注册、运行、分析、探索、写作、审计。最后把整门课的教训收成一页。 依据说明:CS486 是一门以项目为主体的研讨课,但没有公开的项目要求或评分标准。本讲依据研究方法学的文献(Wu, Dyer & Neyshabur 2021 的课程学习研究作为被检验的对象;Nosek et al. 2018 的预注册、Gelman & Loken 的”分岔路径的花园”;Henderson et al. 2018、Bouthillier et al. 2021、Agarwal et al. 2021、Madaan et al. 2024、Miller 2024 关于方差与统计报告;Lipton & Steinhardt 2018 关于写作中的问题趋势;Kapoor & Narayanan 2023 关于泄漏;Pineau et al. 2021 关于可复现性检查表)和本课前 19 讲的经验。§3–§7 的研究是本讲义自己做的,数字全部来自配套代码的实际输出。 配套代码 Code:code/lecture20/(PyTorch;第一次运行约 3 分钟,结果写进 results/,之后每个脚本 1 秒;也可以当作项目模板复用) 预计阅读时间:3 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 把一个研究项目拆成一串决定,并说出每个决定该用什么信息做(试点数据、文献、功效分析),不该用什么信息做(测试数据)。
  2. 设计并运行一个试点实验,用它选择主要指标、估计方差、决定种子数和训练预算。
  3. 写一份预注册:问题、条件、种子、主要指标、假设、检验、多重比较、等价性界限、排除规则;区分确认性分析和探索性分析。
  4. 用只追加的实验日志、配置指纹和断点续跑组织实验;用配对比较、区间、Holm 校正、等价性检验和对删失不敏感的检验分析结果。
  5. 由日志自动生成论文的数字;用一张覆盖全课教训的检查表审计自己的项目。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲不展开 Not covered
第 1 讲 §8:研究循环、玩具模型、五条实验纪律投稿流程、版面要求、学术伦理审查
第 2 讲:选题、假设、基线、消融、评测、论点–证据结构、审稿、十周节奏大规模实验的工程(集群调度、检查点管理)
第 17 讲:指标与测量;第 18 讲:自动化研究的统计学

0.3 本讲地图 Map

§1  一个研究项目是一串决定
§2  选题:一份来自前 19 讲的项目菜单
§3  试点:用它做设计决定,而不是提前看答案                     ← 代码 01
§4  预注册:在看到结果之前写下计划                              ← 代码 01
§5  运行:日志、指纹、断点续跑、计算量匹配                      ← 代码 02
§6  分析:按预注册检验                                          ← 代码 03
§7  探索:从数据里找下一个假设                                  ← 代码 03
§8  写作:由日志生成数字;四种常见的问题                         ← 代码 03
§9  审计与互审:一张覆盖全课的检查表                            ← 代码 03
§10 这门课的一页总结
§11–15  现状与开放问题、小结、常见误区、练习、延伸阅读

1. 一个研究项目是一串决定 · A research project is a sequence of decisions

一个研究项目从外面看是”做了一个实验、得到了一个结论”,从里面看是几十个决定:研究哪个问题、和什么比较、用什么指标、训练多久、几个种子、测哪些题、怎样处理没收敛的运行、做什么检验、报告哪些分析、怎样措辞。每一个决定都可能(往往在不知不觉中)受到结果的影响。Gelman & Loken 把这叫作分岔路径的花园(the garden of forking paths):即使研究者只做了一次检验,如果”做哪个检验”取决于数据,p 值也会失去意义——第 18 讲的”一天一千个想法”只是这件事被自动化放大之后的样子。

这一讲的原则只有一条:每个决定都要用”不是用来下结论的数据”来做。具体地:

决定用什么信息不能用什么
研究问题与假设文献、先前的研究、直觉正式实验的结果
指标、预算、种子数试点实验(另外的种子、另外的题)、功效分析测试集
检验方法、多重比较、等价性界限预注册时的判断看到结果后”哪个显著用哪个”
哪些分析算”结论”预注册里写下的事后挑出来的
论文里的数字由日志自动计算手抄、四舍五入成好看的样子

下面用一个真实做完的小研究,按时间顺序走一遍。


2. 选题:一份来自前 19 讲的项目菜单 · Choosing a question

第 2 讲 §1 给了好问题的四个标准(重要、可做、可测、新)。对一门十周的研讨课,最实际的起点是前人留下的开放问题。下面从前 19 讲的”研究问题”里挑出一些,按项目类型分组,并注明可以从哪一讲的代码出发(每个都能在笔记本 CPU 上做出第一个信号):

类型问题起点最小实验
复现 + 推翻课程学习在训练预算有限时有用吗?(Wu et al. 2021)本讲代码就是本讲的研究
复现 + 推翻“SFT 只会记忆、RL 才会泛化”在不完美的示范下成立吗?第 5 讲 rl_lab给 SFT 的示范加噪声,比较分布外的长度泛化
度量时间跨度的估计对人类用时的噪声有多敏感?能否在设计任务集合时控制?第 17 讲 measure_lab第 17 讲练习 3 的延伸:不同的任务长度分布
度量基准的题目相关性(第 17 讲 §6.3)在真实 LLM 基准上有多大?第 17 讲代码 03按模板 / 文档聚类,比较聚类自助法和按题计算的区间
方法能否训练一个在离策略候选上也可靠的验证器?第 4 讲 ttc_lab用多个策略的样本训练验证器,测束搜索的效果
方法让出题者直接估计”这道题能让解题者学到多少”,能否跟上解题者?第 16 讲 coop_lab把可学习性奖励换成”解题者能力的增量”
方法怎样在不丢掉共享先验的前提下一起训练两个智能体?第 16 讲 Lewis 博弈交叉配对正则 vs KL 正则
分析 / 机制价值函数的哪种误差结构会让树搜索失效?第 9 讲 search_lab构造不同相关结构的噪声,测搜索的成功率
分析 / 机制风险率的下降有多少来自任务异质性、多少来自”越做越顺”?第 11 讲 agent_lab对同一个任务重复运行,分离个体内和个体间的风险率
多智能体辩论中,怎样根据修复率和破坏率的在线估计决定何时结束?第 13 讲 debate_lab用前几轮估计 r、f,比较固定轮数和自适应停止
多智能体在小开发集上自动搜索架构时,序贯检验能否减少赢家的诅咒?第 14 讲 mas_lab把配对比较和序贯停止加进设计搜索
安全思维链监控的”必要性”条件能否被测量(坏行为在多大程度上必须经过推理)?第 19 讲 oversight_lab + 第 6 讲在小模型上构造需要 / 不需要推理的”作弊”,测监控器
安全用少量示范诱出能力时,多少示范足以区分”不会”和”不愿”?第 19 讲代码 03更难的锁(锁定模仿一个能力非零的弱模型),扫描示范数

一个好的研讨课项目通常是一个小问题的完整答案,而不是一个大问题的一部分答案。“负结果”也是完整的答案——只要你能说清楚它在什么条件下成立(本讲的研究就是一个负结果)。


3. 试点:用它做设计决定,而不是提前看答案 · The pilot

3.1 研究问题

课程学习(curriculum learning,Bengio et al. 2009):先练容易的、再练难的。Wu, Dyer & Neyshabur(ICLR 2021,When Do Curricula Work?)用几千次训练系统地检验了它:在标准的设置下,课程只有边际的好处,随机顺序和课程、反课程一样好甚至更好;但在训练时间有限或数据有噪声时,由易到难的课程(而不是反课程)能提高表现。多跳推理有一个天然的难度轴——跳数——所以问题是:

在第 1 讲的多跳指针追踪上,“由易到难”的课程(先练跳数少的题)能不能加快小 Transformer 学会难题(跳数 5–7)?

3.2 第一个试点:指标错了

第一版的设计是”在固定预算(300 / 600 / 1200 步)下比较准确率”。草稿目录里的第一个试点(每个条件 2 个种子)立刻暴露了问题:600 步时,均匀训练的两个种子一个 100%、一个 13%。这个任务的学习是突然发生的——几十步之内从瞎猜跳到全对——而跳跃的时间因种子而异。固定预算下的准确率几乎是一个 0/1 变量,信息很少、方差很大。

于是主要指标改为:每 50 步在难题上测一次,记录第一次达到 90% 的训练步数(steps_to_90)。这个改动只用了试点数据,是在任何正式实验之前做的——这正是试点的用途。

3.3 第二个试点:方向和文献相反

代码 01 用新指标做了第二个试点:三种课程 × 3 个试点种子(100–102),最多 1000 步,评测用一套专门的”试点题”(和最后的测试题不同)。

课程种子第 200 步第 300 步第 400 步第 600 步达到 90% 的步数
均匀(标准训练)1006%100%100%100%300
10113%11%14%100%450
10218%14%93%100%400
由易到难(前 50%)10017%1%26%100%550
1019%1%11%100%550
10214%1%23%99%550
由难到易(前 50%)10012%99%100%100%250
10114%87%100%100%350
10214%13%8%94%600

三件事:

  1. 第 400 步时,9 次运行全部低于 30% 或高于 90%——证实了换指标的必要。
  2. 由易到难的课程更慢(三个种子都是 550 步,均匀训练 300–450 步)。曲线显示了原因:在这个课程里,跳数 5 以上的题要到第 334 步以后才出现在训练里;在那之前,难题的准确率甚至掉到 1%(模型多半学会了只走几步就停)。所以”课程拖多久”很可能是关键——正式实验因此加了一个短课程(只占前 10% 的步数)。
  3. 方差很大:配对差(课程 − 均匀)的标准差,由易到难约 76 步,由难到易约 161 步。

3.4 功效分析

按最大的标准差 161 步计划:以 80% 的功效检测出 100 步的差别(单侧 α = 0.05)需要 18 对种子;要让 90% 区间的半宽小于 50 步(等价性界限是 ±100 步时的一个经验要求)需要 30 对。每次运行约 34 秒;计算预算只允许每个条件 6 个种子(4 × 6 = 24 次运行,约 2 分钟)。

这是一个必须写下来的取舍:6 个种子足以检测试点里看到的那么大的效应(由易到难慢约 170 步、标准差约 76 步),但不足以可靠地证明”没有差别”。读者有权知道这一点,然后自己判断结论的分量。注意”证明没有差别比证明有差别难得多”(30 对 vs 18 对)——这是第 2 讲”没有显著差别 ≠ 没有差别”的定量版本。


4. 预注册:在看到结果之前写下计划 · Preregistration

4.1 写什么

预注册(Nosek et al.,PNAS 2018,The preregistration revolution)的核心是:在看到用来下结论的数据之前,把会影响结论的决定写下来,并让它事后不能被悄悄修改。代码 01 写下的计划(results/prereg.json)包括:

  • 问题与背景:一句话的问题;文献的预测(Wu et al.)。
  • 条件:均匀;由易到难(前 50%);由易到难(前 10%);由难到易(前 50%)。
  • 种子:0–5(和试点的 100–102 不同);评测:测试题(种子 202,和试点题不同)。
  • 主要指标:steps_to_90 的精确定义,包括删失的处理——1000 步内没有达到 90% 的记为 1050。
  • 假设:
    • H1(主要):由易到难(前 50%)和均匀训练不同(双侧)。“文献预测更快;试点显示更慢”——两个预期都写下来。
    • H2(主要):由易到难(前 10%)和均匀训练等价:差别在 ±100 步以内(90% 区间完全落在界限内)。
    • H3(次要):由难到易(前 50%)和均匀训练不同(双侧)。
  • 检验:按种子配对(同一个种子 = 同样的初始化和同样的出题随机数),配对 t 检验(双侧),报告平均差、95% t 区间、95% 自助法区间;三个 p 值做 Holm 校正。
  • 排除规则:不排除任何运行。

计划被序列化、算出 SHA-256 哈希(8bea13a8d8dcfcd6);代码 02、03 读取时核对哈希,对不上就拒绝运行。真实的预注册平台(OSF、AsPredicted)还会加上第三方保存的时间戳。

4.2 预注册不是什么

  • 不是禁止探索。探索性分析照做,只是在报告里标明它是探索性的、它的 p 值不能按确认性的方式解读(§7)。
  • 不是禁止改计划。发现计划有错时可以改,但要报告”改了什么、为什么、在看到哪些数据之后”。
  • 不是只适用于”大”研究。本讲的整个研究不到 3 分钟的计算;预注册多花了 10 分钟写下来。它保护的是你自己——防止你在看到结果之后,不自觉地选了让结果最好看的那条路。

5. 运行:日志、指纹、断点续跑、计算量匹配 · Running the study

代码 02 按计划生成 24 个运行,用第 2 讲的 exp_kit 并行训练,每个运行结束就把 {配置指纹, 配置, 结果} 作为一行追加进 results/study_log.jsonl。几个习惯:

  • 只追加的日志:结果永远不会被覆盖。想重来就换一个文件——旧的结果仍然在,可以对照。
  • 配置指纹:配置字典的哈希。脚本启动时先读日志,只训练指纹不在日志里的运行(断点续跑);任何一个配置字段的改变都会产生新的指纹,不会被误认为”已经跑过”。
  • 确定性:每个运行只依赖自己的配置和种子,和并行方式无关;同一台机器上重跑结果逐字相同。
  • 计算量匹配:所有条件每步 64 道题、最多 1000 步——课程只改变题的顺序,不改变题的数量(第 2、12、14 讲)。
  • 测量 ≠ 决定:测试题在训练中每 50 步测一次,但只用来记录学习曲线;没有任何训练决定(早停、挑检查点)依赖它。
课程各种子的 steps_to_90平均标准差
均匀(标准训练)650 / 300 / 350 / 250 / 300 / 200342159
由易到难(前 50%)800 / 550 / 1050 / 650 / 600 / 700725181
由易到难(前 10%)450 / 350 / 300 / 300 / 350 / 25033368
由难到易(前 50%)400 / 300 / 350 / 450 / 300 / 25034274

(由易到难(前 50%)的种子 2 在 1000 步内没有达到 90%,按预注册记为 1050。)


6. 分析:按预注册检验 · Confirmatory analysis

代码 03 的演示 1 只做预注册里写下的检验,一个字不改:

假设条件 − 均匀各种子的差平均95% t 区间95% 自助法区间p(双侧)Holm 校正后
H1由易到难(前 50%)+150 / +250 / +700 / +400 / +300 / +500+383[+177, +590][+250, +533]0.00500.0150
H2由易到难(前 10%)−200 / +50 / −50 / +50 / +50 / +50−8[−115, +99][−92, +50]0.84941.0000
H3由难到易(前 50%)−250 / 0 / 0 / +200 / 0 / +500[−152, +152][−117, +100]1.00001.0000
  • H1:支持,方向是”更慢”。由易到难的课程(前 50%)比均匀训练平均慢 383 步,Holm 校正后 p = 0.015——方向和文献的预测相反、和试点一致。
  • H2:按预注册判为等价。90% 区间 [−92, +76] 完全落在 ±100 步的界限内。但要记住 §3.4:30 对种子才能可靠地做这个判断,6 对时区间”碰巧”落进去的可能性不小,论文必须写明这一点。
  • H3:没有检测到差别。注意它的 90% 区间 [−119, +119] 宽到不能说”没有差别”——“没有检测到”和”没有”是两回事。如果当初没有为 H2 写下等价性的界限,人们很容易把 H2 和 H3 都读成”没区别”;有了界限,两者的结论是不同的。

两个分析细节:

  • 配对:同一个种子的两次运行共享初始化和出题的随机数,配对差可以去掉”这个种子碰巧学得快”的那部分方差(第 1 讲 §8.3)。不过在这个任务上,课程改变了出题的顺序,两次运行在第一步之后就走上了不同的路,配对能去掉的方差有限——这也是功效分析需要那么多种子的原因之一。
  • 删失:没有达到 90% 的运行记为 1050 步,是一个保守的处理(真实值 ≥ 1050),会低估 H1 的效应。演示 2 里的符号检验只看每个种子差的正负,对删失完全不敏感:H1 是 6 个种子全部更慢,p = 0.031。

7. 探索:从数据里找下一个假设 · Exploratory analysis

代码 03 的演示 2 做了几个不在预注册里的分析,报告里明确标为探索性:

课程第 300 步的难题准确率第 500 步第 700 步第 150 步之后的最低点
均匀80%(4/6 ≥ 90%)85%(5/6)100%(6/6)10.3%
由易到难(前 50%)5%(0/6)48%(0/6)83%(4/6)1.6%
由易到难(前 10%)64%(3/6)99%(6/6)100%(6/6)10.3%
由难到易(前 50%)67%(3/6)100%(6/6)100%(6/6)10.3%
  • 固定预算下的准确率仍然是”几个种子学会了、几个没学会”(第 300 步:均匀 4/6、短课程 3/6、反课程 3/6)。如果用”第 300 步的准确率”当主要指标,结论会被少数几个种子的运气左右。
  • 由易到难(前 50%)的难题准确率在课程期间跌到平均 1.6%——比还没学会时的猜测水平(约 10%)还低:它学到的是”只走几步就停”。(其他三个条件的最低点恰好都是 10.3%,是巧合:6 个种子的最低点答对题数之和碰巧都是 111 道。)
  • 训练结束时,各条件在全部 420 道测试题上的平均准确率都在 96.4% 以上——差别主要在学得快慢。

探索性分析的价值在于提出下一个假设。一个自然的候选是”学会难题需要见过足够多的长链”。练习 2 在草稿目录里按出题规则计算了每个运行学会时累计见过的长链(跳数 ≥ 5)训练题数:均匀约 4207 道,由易到难(前 50%)约 3593 道,短课程约 3036 道——数量级相近,能解释课程为什么慢;但反课程学会时已经见过约 10434 道长链题,并没有更快。所以这个假设至少不完整。它应该成为下一个预注册研究的问题,而不是在同一份数据上宣布。


8. 写作:由日志生成数字;四种常见的问题 · Writing

8.1 让数字来自日志

代码 03 的演示 4 生成了 results/paper.md:摘要、方法、结果表、探索性分析、局限、可复现性。每一个数字都由脚本从日志和预注册里算出来——包括局限一节里”检测 100 步的差别约需 18 个种子、证明等价约需 30 个”(从预注册保存的试点数据重新计算,而不是抄代码 01 的输出)。这样做有三个好处:正文和表永远一致;改一个分析,整篇论文自动更新;审稿人可以从日志一路追到每个数字。

生成的摘要:

课程学习常被认为能加快学习,Wu et al. (2021) 发现它在训练时间有限时才有用。我们在一个多跳指针追踪任务上,用一个 2 层的小 Transformer 做了一个预注册的检验(6 个种子 × 4 种课程,主要指标是第一次在难题上达到 90% 的训练步数)。均匀训练平均 342 步学会难题;把短链放在前 50% 的由易到难课程平均慢 383 步(95% 区间 [177, 590],Holm 校正后 p = 0.015),只占前 10% 的短课程与均匀训练的差别为 −8 步(90% 区间 [−92, 76],在 ±100 步的等价界限内),由难到易的反课程差别为 +0 步(未检测到差别)。在这个任务上,课程没有加快学习;探索性分析提示,长的课程推迟了模型第一次见到长链的时间,学会难题的时间也随之推迟。

注意最后一句:解释来自探索性分析,措辞是”提示”,而不是”证明”。

8.2 四种常见的问题

Lipton & Steinhardt(2018,Troubling Trends in Machine Learning Scholarship)指出机器学习论文里四种越来越常见的问题,每一种都能在写作时自查:

  1. 不区分解释和推测:把一个没检验过的机制说成结论。(对照:本讲的”推迟了见到长链的时间”被明确标为探索性的提示。)
  2. 说不清收益从哪里来:例如把来自调参的提升归功于架构的改动。(对照:第 2 讲的消融、第 14 讲的计算量匹配。)
  3. 数学性(mathiness):用公式来唬人而不是来说明。
  4. 滥用语言:用带有日常含义的术语(“理解""推理""意识”)暗示没有被证明的东西,或者把一个已有的技术术语拿来指别的东西。

第 2 讲 §7 的论点–证据结构和”措辞和证据匹配”是对这些问题最直接的防御。

8.3 局限一节

一个诚实的局限一节不是”未来工作”的清单,而是结论在什么条件下可能不成立。本讲论文的局限:种子数(以及功效分析的数字);只有一个任务、一个模型大小、一种学习率日程;课程的形状是选出来的;删失的保守处理;小模型的”突然学会”可能不代表大模型。审稿人一定会想到这些——你先写出来,结论反而更可信。


9. 审计与互审:一张覆盖全课的检查表 · Auditing and reviewing

代码 03 的演示 3 自动检查了七项:

检查项结果说明
每个条件至少 3 个种子通过每个条件 6 个
预注册的所有条件 × 种子都跑了通过4 个条件 × 6 个种子
各条件的训练计算量相同通过每个运行 1000 步 × 每步 64 道题
预注册之外的分析都标为”探索性”警告固定预算下的准确率、课程期间的最低点、符号检验、最终各跳数的准确率
测试集没有被用来做决定通过预算、指标、种子数由试点在另一套题上决定
报告了区间,而不只是 p 值通过95% t 区间与自助法区间
多重比较做了校正通过Holm

“警告”不是错误:探索性分析本身没有问题,问题是不标明。

自动审计只能检查能被形式化的东西。互审(第 2 讲 §8)时,用下面这张表——每一行对应前 19 讲里的一个教训——逐条问作者:

问题出处
分布内的满分能说明会推理吗?做了分布外、扰动、控制变量的测试吗?第 1、6 讲
测试集有多大?能分辨多小的差别?报告了区间吗?几个种子?第 1、2 讲
基线和新方法的计算量、调参预算匹配吗?和”同样计算量的投票 / 采样”比过吗?第 2、4、12、13、14 讲
验证器 / 奖励 / 裁判有盲区吗?优化压力会不会把结果推进盲区?第 4、5、18、19 讲
思维链是忠实的吗?结论依赖于”读思维链”吗?第 6、19 讲
有没有数据污染?测试集被用来做过决定吗?第 2、17 讲
题目之间独立吗?按聚类算区间了吗?第 17 讲
多个智能体的收益来自多样性、分工,还是只是更多的计算?错误相关吗?第 12–15 讲
自动化搜索 / 自动化研究试了多少次?报告了分母吗?第 14、18 讲
“没有差别”的结论有等价性界限吗?第 2、20 讲
局限一节说清楚结论在什么条件下不成立了吗?第 2、20 讲

10. 这门课的一页总结 · The course on one page

第 1 讲列出了四个贯穿全课的想法;二十讲之后,可以把它们补充成这样:

  1. 串行计算是推理的核心资源(第 1、3、4、5 讲)。一次前向的深度是固定的;思维链、测试时计算、强化学习、搜索、多轮协作都在购买更多的串行或并行计算。但”更多的计算”不自动等于”更好的推理”:学习曲线可以突然跳跃(本讲),长度泛化可能是另一根轴(第 6 讲)。
  2. 生成–验证的不对称是一切”自己变好”的燃料(第 4、7、8、10、18 讲)。验证器、LLM-Modulo、自我纠错、程序搜索、自我改进——验证越便宜、越可靠,循环推得越远;验证不可靠时,循环会忠实地优化它的错误。
  3. 评估器会被利用(第 4、5、6、14、18、19 讲)。优化越强、提议越多,评估器的每一个弱点就越确定会被找到;独立的验证、隐藏的测试、不对监控信号施加优化压力,是同一个原则的不同形式。
  4. 错误是相关的(第 12–15 讲)。投票、辩论、多智能体的收益取决于错误有多独立;同源的模型、共享的信息、从众,都会让 n 个智能体只相当于很少几个。
  5. 测量本身是研究问题(第 2、11、17 讲)。分数是能力的非线性、有噪声、依赖于考卷的读数;饱和、标签错误、题目相关、尺子的上限、外推,都需要被测量和报告。
  6. 捷径无处不在(第 1、6、8、9 讲)。分布内的满分不能证明学会了算法;扰动、控制变量、分布外测试是区分推理和捷径的基本工具。
  7. 比较要公平,结论要可靠(每一讲)。计算量和调参预算匹配的基线;多个种子;配对比较;区间;多重比较;预注册;报告分母。

如果只记一句话:先确认进步是真的,再去解释它。


11. 现状与开放问题 · State of the field

  • 可复现性:Henderson et al.(AAAI 2018)在深度强化学习里发现,同样的超参数、只换随机种子,把 10 次运行分成两组各 5 次,两组的学习曲线在统计上就显著不同;Bouthillier et al.(MLSys 2021)发现数据采样、初始化和超参数选择带来的方差会明显影响基准比较的结论;Agarwal et al.(NeurIPS 2021)主张在只有少量运行时报告区间估计(分层自助法)和稳健的汇总指标(四分位均值);Madaan et al.(2024)在 LLM 的预训练评测上测量了种子方差,建议任何”数据集 A 比 B 好”的结论都要先超过种子方差。Miller(2024,Adding Error Bars to Evals)给出了 LLM 评测的具体建议:按中心极限定理算标准误、题目成组时用聚类标准误、比较两个模型时用逐题的配对差、用功效分析判断一个评测能不能检验你的假设。
  • 泄漏:Kapoor & Narayanan(2023)调查了采用机器学习方法的 17 个领域,发现已有 20 篇论文指出的错误共影响了 329 篇论文,每个领域都有数据泄漏的问题。
  • 检查表:NeurIPS 从 2019 年起把可复现性检查表纳入投稿流程(Pineau et al. 2021 报告了第一年的经验)。
  • LLM 参与研究(第 18 讲):当 AI 能在一天之内提出、实现、评估成百上千个想法,“报告分母""预注册""独立确认”从好习惯变成必需品。

研究问题(关于研究本身):

  1. 怎样为 LLM 研究设计低成本的预注册——让一个只有几天的研讨课项目也愿意做?
  2. 自动审计能覆盖多少方法学问题?能不能从论文和代码里自动检测”测试集被用来做决定”?
  3. 在计算昂贵的 LLM 研究里,种子数少是常态。有没有更好的设计(配对、分层、序贯检验)能在同样的预算下得到更可靠的结论?
  4. 负结果怎样被更好地发表和发现?本讲的研究是一个负结果——它的价值依赖于别人能找到它。

12. 小结 · Summary

  1. 一个研究项目是一串决定;原则是每个决定都用”不是用来下结论的数据”来做。
  2. 试点实验的用途是做设计决定:本讲的试点推翻了第一版指标(学习是突然的,固定预算的准确率几乎是 0/1),揭示了和文献相反的方向,并给出了方差——功效分析说检测 100 步的差别需要 18 对种子、证明等价需要 30 对。
  3. 预注册写下问题、条件、种子、指标(含删失)、假设、检验、多重比较和等价性界限,并用哈希锁定;它不禁止探索,只要求标明。
  4. 正式结果:由易到难的课程(前 50%)平均慢 383 步(Holm 校正后 p = 0.015);短课程(前 10%)按预注册判为等价(90% 区间 [−92, +76]),但这个判断在 6 个种子下是脆弱的;反课程没有检测到差别,也不能说没有差别。
  5. 探索性分析提出了下一个假设(“需要见够长链”),并立刻发现它不完整(反课程见过的长链多得多,却没有更快);它属于下一个预注册研究。
  6. 论文的每个数字都由日志算出;局限一节写明种子数的不足;自动审计和覆盖全课的互审清单把前 19 讲的教训变成可以逐条检查的问题。

13. 常见误区 · Common pitfalls

  1. “试点实验就是先看一眼答案。” 试点用另外的种子、另外的题,只用来做设计决定;它的数据不进入正式的检验。
  2. “预注册会限制我的研究。” 它只要求你区分”计划好的检验”和”事后的探索”,两者都可以报告。
  3. “不显著就是没有差别。” 要声称没有差别,先写下多小算”没有”,再检验区间是否落在界限内——而这通常需要多得多的样本。
  4. “固定预算下的准确率是一个好指标。” 对突然发生的学习,它几乎是 0/1 的;选择指标就是选择你能看见什么。
  5. “测试集只在训练中看看,不影响结果。” 只测量不影响;一旦用它早停、挑检查点、选超参数,最后的测试分数就有偏。
  6. “把没收敛的运行去掉就好。” 删除是一种决定,会系统地偏向收敛快的条件;要么事先写下处理方式(删失),要么用对它不敏感的检验。
  7. “写论文时把数字手动填进去更灵活。” 手抄的数字迟早和表对不上;让脚本从日志生成。
  8. “负结果不值得写。” 一个在清楚的条件下、有足够统计功效的负结果是完整的答案。

14. 练习 · Exercises

练习 1(功效的算术)。试点里配对差的标准差是 161 步。(a) 用正态近似,要以 80% 的功效检测 100 步的差别(单侧 α = 0.05),需要多少对种子?(b) 为什么代码给出的是 18 而不是你算的数?(c) 如果把检测的目标放宽到 200 步呢?

参考答案:(a) n≥((z0.95+z0.8) σδ)2=((1.645+0.842)×161100)2≈16.0n \ge \left(\frac{(z_{0.95} + z_{0.8})\,\sigma}{\delta}\right)^2 = \left(\frac{(1.645 + 0.842) \times 161}{100}\right)^2 \approx 16.0,即 16 对。(b) 小样本时检验用的是 t 分布,临界值比 1.645 大(n = 16 时 t₀.₉₅,₁₅ = 1.753),所以要多一些;seeds_needed 用 t 分位数迭代,得到 18。(c) 效应加倍、所需样本约为四分之一:(2.487×161/200)2≈4.0(2.487 \times 161 / 200)^2 \approx 4.0,加上 t 的修正,seeds_needed(161, 200) 给出 6 对。这就是为什么 6 个种子能可靠地检测 H1(实际效应 383 步),却不能可靠地证明 H2 的等价。

练习 2(下一个假设)。§7 提出”学会难题需要见够长链”。(a) 设计一个只用现有日志就能做的探索性检查。(b) 在草稿目录里按出题规则算出每个运行学会时累计见过的长链训练题数,结论是什么?(c) 怎样把它变成一个可以预注册的新研究?

参考答案:(a) 对每个运行,按课程的出题规则算出从第 0 步到 steps_to_90 期望见过多少道跳数 ≥ 5 的题;如果假设成立,各条件的这个数应该差不多。(b)(草稿目录里实际运行)平均:均匀 4207 道,由易到难(前 50%)3593 道,短课程 3036 道,反课程 10434 道。前三者数量级相近,能解释”课程推迟了长链,所以学得晚”;但反课程见过的长链是它们的两倍多,并没有学得更快——所以”见够长链”不是充分的解释,也许还需要短链提供的”单步查找”技能,或者学会的时间主要由别的东西(例如优化的进程)决定。(c) 新研究:直接操纵长链的比例(例如 10%、20%、40%、80%,其余为短链),预注册”学会时见过的长链数”与比例无关(假设 A)或”学会的步数”与比例无关(假设 B),两个假设给出不同的预测,用同样的方法学检验。

练习 3(删失的敏感性)。H1 里有一个运行被删失(记为 1050)。(a) 如果它的真实值是 1500,H1 的平均差会变成多少?结论会变吗?(b) 为什么符号检验对删失不敏感?它的代价是什么?

参考答案:(a) 那个种子的差从 +700 变成 +1150,平均差从 +383 变成 (150 + 250 + 1150 + 400 + 300 + 500) / 6 ≈ +458;方向不变,效应更大——保守的删失处理只会低估 H1。(b) 符号检验只看差的正负,删失的值无论是 1050 还是 1500 都是”正”;代价是丢掉了大小的信息,6 个种子时它最小的双侧 p 值也只有 2/64 ≈ 0.031,功效很低。对删失数据更正式的处理是生存分析(例如对数秩检验),第 11 讲的风险率就是同一类工具。

练习 4(自动检查”测试集被用来做决定”)。审计函数里”测试集没有被用来做决定”这一项是由作者手动声明的(test_decisions=0)。设计一个能自动检查它的办法。

参考答案要点:(1) 数据访问日志:评测函数每次被调用时记录”哪套题、在哪个脚本、哪一步”;审计时检查在写预注册之前、以及在训练中做决定的代码路径里,有没有读过测试题。(2) 分离存储:测试题由一个独立的脚本在最后生成和使用,研究阶段的代码根本拿不到(例如本讲用不同的种子生成试点题和测试题——更严格的做法是把测试题的种子写进预注册、在正式实验之前不公开)。(3) 哈希承诺:预注册里写下测试集的哈希;如果测试集在中途被换过,哈希对不上。(4) 这些都不能防止研究者”看了一眼”测试结果再改主意——所以预注册的时间点和改动记录仍然是必需的。

练习 5(写你自己的预注册)。从 §2 的项目菜单里选一个问题,写一份一页的预注册:问题、背景(文献的预测)、条件与基线(计算量怎样匹配)、种子与功效、主要指标(包括没收敛 / 失败的处理)、假设(包括一个等价性假设)、检验与多重比较、排除规则、计划的探索性分析。

参考答案要点:以”能否训练一个在离策略候选上也可靠的验证器”(第 4 讲)为例。问题:用多个策略的样本训练的验证器,在束搜索中是否比只用一个策略的样本训练的更好?条件:验证器 A(单策略样本)、B(多策略样本,总样本数相同);束搜索的计算量相同。主要指标:在分布外环大小上的束搜索成功率;种子:5 个验证器训练种子 × 同一组 300 道题,按题配对(McNemar)和按种子配对。假设:H1(B > A,单侧);H2(在分布内两者等价,界限 ±2 个百分点)。检验:配对 t(按种子)、McNemar(按题);Holm 校正。排除:验证器训练发散(损失为 NaN)的种子换新种子并报告。探索性:验证器的 AUC 和束搜索收益的关系。功效:用一个两种子的试点估计按种子的配对差标准差。


15. 延伸阅读 · Further reading

被检验的问题

  • X. Wu, E. Dyer, B. Neyshabur. When Do Curricula Work? ICLR 2021.
  • Y. Bengio, J. Louradour, R. Collobert, J. Weston. Curriculum Learning. ICML 2009.

预注册与分岔路径

  • B. A. Nosek, C. R. Ebersole, A. C. DeHaven, D. T. Mellor. The preregistration revolution. PNAS, 2018.
  • A. Gelman & E. Loken. The garden of forking paths: Why multiple comparisons can be a problem, even when there is no “fishing expedition” or “p-hacking” and the research hypothesis was posited ahead of time. 2013.

方差、统计与报告

  • P. Henderson et al. Deep Reinforcement Learning that Matters. AAAI 2018.
  • X. Bouthillier et al. Accounting for Variance in Machine Learning Benchmarks. MLSys 2021.
  • R. Agarwal et al. Deep Reinforcement Learning at the Edge of the Statistical Precipice. NeurIPS 2021.
  • L. Madaan et al. Quantifying Variance in Evaluation Benchmarks. 2024.
  • E. Miller. Adding Error Bars to Evals: A Statistical Approach to Language Model Evaluations. 2024.

写作、可复现性与泄漏

  • Z. C. Lipton & J. Steinhardt. Troubling Trends in Machine Learning Scholarship. 2018.
  • J. Pineau et al. Improving Reproducibility in Machine Learning Research (A Report from the NeurIPS 2019 Reproducibility Program). JMLR, 2021.
  • S. Kapoor & A. Narayanan. Leakage and the Reproducibility Crisis in Machine-Learning-Based Science. Patterns, 2023.

关于做研究

  • R. Hamming. You and Your Research. 1986 年的演讲。
  • J. Schulman. An Opinionated Guide to ML Research. 2020.

结语 · Closing

这门课从”一次前向能想多远”开始,经过推理、规划、协作,走到”怎样知道进步是真的""怎样让 AI 自己进步""怎样监督比我们强的系统”,最后回到一个完整的小研究。贯穿始终的,是一个朴素的要求:让每一个结论都经得起一个怀疑的读者——包括未来的你自己——的检查。这个领域的数字变化很快,今天的前沿明年就会被超过;但”计算量匹配的基线""多个种子""配对的比较""预先写下的检验""独立的验证”不会过时。带着它们去做你自己的研究。

← 返回课程目录