← 返回资料站  /  Recursive Self-Improvement
论文 自举训练 ★ 必读

STaR: Bootstrapping Reasoning With Reasoning

STaR:用模型自己的推理链自举推理能力
一句话让 GPT-J 6B 自己生成 CoT、按最终答案对错筛选、再拿筛出的推理链微调自己,循环往复:CommonsenseQA 从直接微调的 60.0% 提到 72.5%(逼近 30 倍大的 GPT-3 finetuned 的 73.0%),GSM8K 从 5.8% 提到 10.7%——'模型自己造训练数据提升自己'这条路线的奠基之作。

这是什么

2022 年初的背景:chain-of-thought 提示已被证明能显著提升推理表现,但要让模型稳定生成推理链,要么人工标注海量 rationale 数据集(贵到不现实),要么只靠 few-shot 提示(精度打折)。STaR 提出第三条路:只需要少量(约 10 个)带推理链的 few-shot 示例 + 一大堆只有'问题-答案'对的数据,让模型自己把中间推理链'补'出来。

核心循环极其简单:用 few-shot 提示让模型对训练集里每道题生成 rationale + 答案;只保留最终答案正确的那些 (question, rationale, answer) 三元组;拿这批数据微调基座模型;用微调后的模型重新生成,重复直到性能饱和。对模型做错的题,额外引入'rationalization':把正确答案作为提示塞进 prompt 让模型倒推出一条通向正确答案的推理链,收进训练集时再把提示删掉。

论文在 NeurIPS 2022 发表,作者是 Stanford 的 Eric Zelikman、Noah Goodman 等(Yuhuai Wu 后去了 xAI)。它的历史地位大于当时的绝对数字:'采样-按正确性筛选-再训练'这个循环就是后来 rejection sampling fine-tuning、ReST/ReST-EM、乃至 o1/R1 类 outcome-reward RL 的原型,论文自己就把 STaR 解释成 policy gradient 的一个近似。

STaR 全流程示意:模型对问题生成 rationale+答案,答对的直接进微调集(外圈绿勾);答错的把正确答案作为 hint 让模型倒推 rationalization,倒推成功的同样进微调集(收录时删掉 hint);微调后的模型再进入下一轮生成。整篇论文就是这一张图。
STaR 全流程示意:模型对问题生成 rationale+答案,答对的直接进微调集(外圈绿勾);答错的把正确答案作为 hint 让模型倒推 rationalization,倒推成功的同样进微调集(收录时删掉 hint);微调后的模型再进入下一轮生成。整篇论文就是这一张图。

机制与做法

外循环:生成 → 按答案筛选 → 从头微调

给定预训练模型 M 和数据集 D={(x,y)}(只有问题和答案,无推理链),每轮:用带 rationale 的 few-shot prompt 让当前模型对每道题贪心解码出推理链 r^ 和答案 y^;假设'导出正确答案的推理链质量更高',只保留 y^=y 的样本;在筛出的数据上微调。关键工程细节:每一轮都是从原始预训练模型 M 重新微调,而不是在上一轮 checkpoint 上继续训,作者说这是为了避免过拟合(实际上也避免了迭代自训练常见的 drift/collapse)。

训练调度也很谨慎:第一轮只训 40 步,之后每轮步数增加 20%,作者发现'开头训慢一点'对最终性能有利。采样用低温贪心解码;他们专门试过用高温多采样来替代 rationalization 扩充数据,结论是适得其反——高温会大幅增加'推理错误但答案撞对'的样本,训进去以后模型的 scratchpad 会退化成无意义文本。

不带 rationalization 的 STaR 在 n 位加法上的迭代曲线(每条线是 n=1..5)。典型的阶梯式:必须先把 n-1 位学到接近 100%,n 位才开始起飞,5 位数要到第 24 轮以后才动。
不带 rationalization 的 STaR 在 n 位加法上的迭代曲线(每条线是 n=1..5)。典型的阶梯式:必须先把 n-1 位学到接近 100%,n 位才开始起飞,5 位数要到第 24 轮以后才动。

Rationalization:把答案当提示倒推推理链

纯筛选循环有个死穴:模型永远从做对的题里学习,做不对的题提供不了任何梯度信号,性能会在'当前能力边界'上停滞。Rationalization 的做法是对做错的题把正确答案作为 hint 加进 prompt(例如在选择题里标注哪个选项 CORRECT),让模型在已知答案的条件下反向生成一条合理化的推理链;若这条链能导出正确答案就收入训练集,并且删掉 hint,伪装成模型自己想出来的。

作者从分布角度解释:rationale generation 是从 p(r|x) 采样,rationalization 是从 p(r|x,y) 采样,后者是更好的搜索空间,相当于对 RL 目标做 off-policy 估计。实际效果是双重的:让模型接触到它本来解不了的难题(数据分布覆盖更广),同时把数据量做大——CQA 上 rationale generation 覆盖训练集 78.2%,rationalization 再补 8.5%。

带 rationalization 的同一实验:各位数几乎同时开始上升,约 5 轮后全部位数超过 55%,16 轮达到总体 89.5%。与 fig02 对比是 rationalization 价值的最直接证据——hint 反推让模型能从做不出的难题里获得训练信号。
带 rationalization 的同一实验:各位数几乎同时开始上升,约 5 轮后全部位数超过 55%,16 轮达到总体 89.5%。与 fig02 对比是 rationalization 价值的最直接证据——hint 反推让模型能从做不出的难题里获得训练信号。

RL 视角:policy gradient 的低方差近似

论文 Method 一节给出一个重要的理论定位:把 rationale 看成离散隐变量,reward 取指示函数 1(y^=y),那么 STaR 的'按答案筛选'恰好等价于 policy gradient 中把错误样本的梯度置零;贪心解码对应降方差(代价是探索有偏),对同一批数据训多步类似 PPO 式的多次梯度更新。换句话说 STaR ≈ 用标准 SFT 流水线实现的 expert iteration / rejection-sampling RL。这段两页的推导是这篇论文被 o1 时代反复引用的原因——它把'self-training on correctness'和 RL 目标正式接上了。

GSM8K 案例:左边是数据集人写的 7 步标准解,右边是 STaR 训练后模型的解——它识别出题目中 40/80 瓶的拆分是冗余信息,一步 180/2=90 直接得出正确答案。展示了自举出的推理并非模仿人类解法,偶尔更简洁。
GSM8K 案例:左边是数据集人写的 7 步标准解,右边是 STaR 训练后模型的解——它识别出题目中 40/80 瓶的拆分是冗余信息,一步 180/2=90 直接得出正确答案。展示了自举出的推理并非模仿人类解法,偶尔更简洁。

实验设置:GPT-J 6B 上的三个任务

基座选 GPT-J 6B,理由很实在:权重和微调代码公开、且刚好大到能生成'值得自举'的 rationale(作者试过 GPT-2,连算术都无法启动自举)。三个任务:n 位数加法(scratchpad 格式,5 万道生成题,每轮采 1 万)、CommonsenseQA(9,741 道训练题,5 选 1)、GSM8K(7,473 道训练题)。CQA 的 few-shot prompt 沿用 Wei et al. CoT 论文的 10 个例子(修了一处错误答案)。训练在 TPU v3 上用 mesh-transformer-jax 完成。

关键结果

实证核查

扎实代码、prompt、超参全部开源且与论文对应;数字温和、限制自己写透;更重要的是核心机制随后被 Google/DeepMind 等在更大模型上独立复现并规模化(ReST-EM、RFT 等),成为 o1 路线的公认源头。主要保留意见是原始代码绑定 TPU 生态、几乎无人直接复跑,以及 rationalization 在高随机基线任务上会引入假阳性推理链——这点论文自己承认了。
论文声称方法可复现,实验基于公开的 GPT-J 与开源微调代码。
github.com/ezelikman/STaR(Apache-2.0,231 stars)确实包含完整流水线:iteration_train.py 包装 device_train.py / device_inference.py / create_finetune_tfrecords.py,仓库里有 arithmetic/、commonsenseqa/、gsm/ 三个任务目录,与论文三组实验一一对应,prompt 也在附录全文给出。但代码是 mesh-transformer-jax 的 fork,强绑定 TPU v3-8 + jax==0.2.12,GPU 用户基本没法原样复跑;repo 自 2023-02 起停更,issue 历史总共只有 1 条(#1 问如何换 LLaMA/Vicuna,无维护者回复),没有直接复跑论文数字的公开记录。
'STaR 让 6B 模型达到接近 30 倍大模型(GPT-3 finetuned 73.0%)的 CQA 性能'。
72.5% vs 73.0% 属实,但对比对象是 Xu et al. 2021 论文里报告的数字而非同框架复测,且 CQA 是 5 选 1、随机也有 20% 正确率——按答案筛选必然混入'推理烂但猜对了'的假阳性训练样本。论文在 Experiments 和 Conclusion 里自己点破了这一点(高 chance 任务会产生大量 poor rationales,'如何过滤坏推理'留为 open problem),没有藏。GSM8K 上绝对值只有 10.7%,也如实报告。
'用自己生成的推理自我提升'是通用方法,可作为更复杂技术的基础。
这条 claim 后来被第三方大规模验证:DeepMind 的 ReST-EM(Singh et al., arXiv:2312.06585,被引 300+)明确以 STaR 为前身,在 PaLM-2-L 上用同类'采样-按正确性筛选-微调'循环使 MATH/HumanEval 超过人类数据微调;V-STaR(Hosseini et al., arXiv:2402.06457,被引 280+)、Quiet-STaR、AdaSTaR 等一整族后续工作以它为基线。S2 引用数 1040(arXiv 页面显示 Cited by 2046),OpenAI o1 发布后社区普遍将 STaR 列为该路线的思想起点。
论文声称的适用边界。
Conclusion 明确写了两条硬限制且经得起后续检验:(1) 初始 few-shot 表现必须高于 chance,GPT-2 在算术上就无法启动自举——即方法只能放大已有能力,不能无中生有;(2) rationalization 依赖'把答案塞进 prompt'这个操作,在答案不可验证或高随机基线的域上不可靠。后续工作(如 V-STaR 指出丢弃全部错误解浪费信号)正是围绕这些原文承认的缺口展开的,说明论文对自身边界的刻画是诚实的。

与我们方向的关系

对本组 RSI(recursive self-improvement)方向,这是必须精读的源头论文:它给出了'模型自己造训练数据提升自己'的最小可行闭环,并证明了三件事——(1) 按 outcome 正确性筛选自生成数据足以驱动多轮真实提升;(2) 每轮从原始模型重训、控制训练步数增长,是避免自训练崩塌的关键稳定器;(3) 这个循环形式上就是 policy gradient 的近似,所以从 STaR 走到 outcome-reward RL(o1/R1)只差把'筛选后 SFT'换成 RL 更新。做 self-improvement 实验时,STaR 循环仍是最便宜的 baseline。

可直接借鉴的坑与技巧:高温采样扩数据会引入假阳性推理导致退化(要扩覆盖面应该用 rationalization/hint 式反推而非拉高温度);高 chance 任务(选择题、二分类)的 outcome 筛选信号很脏,需要 verifier 或 process 信号补充(V-STaR 就是这么来的);few-shot prompt 保留在训练样本里能抑制风格漂移。这些结论在 2024-2025 的 self-training 文献里被反复重新发现。

阅读笔记

读代码注意:repo 是 mesh-transformer-jax 的 fork,README 大部分是 GPT-J 原文,STaR 相关只有开头一段和 iteration_train.py 等几个文件;想在现代栈上复现,直接看 ReST-EM 或任一 HuggingFace 上的 STaR 复刻更省事。论文附录里有全部 few-shot prompt(含修改过的 CQA prompt)和错误模式分析,值得翻。'rationalization 训练时删掉 hint'这个细节容易漏——它本质是教模型把 p(r|x,y) 的样本当成 p(r|x) 的来学,这也是后来大家担心 false-positive rationale 的根源。

材料清单

TeX 源码
已存档:Raw/star/source/
代码仓库github.com/ezelikman/STaR
231★ · 最近推送 2023-02-21
OpenReviewopenreview.net/forum?id=_3ELRdg2sgI
NeurIPS 2022 正式版与评审意见
后续:ReST-EMarxiv.org/abs/2312.06585
DeepMind 在 PaLM-2 上规模化验证 STaR 式自训练循环(Beyond Human Data)
后续:V-STaRarxiv.org/abs/2402.06457
指出 STaR 丢弃错误解浪费信号,用 DPO 把错误解训成 verifier
后续:Quiet-STaRarxiv.org/abs/2403.09629
同一作者 2024 年续作,把 rationale 生成内化到每个 token 之间

同类条目