让一个写 Python 函数的模型每道题生成几份解答,跑一遍测试,只把通过的拿去微调(fine-tuning),再用新模型生成下一轮。这个回路不需要人写答案,看起来可以一直转下去。可如果测试会放过一部分错解,这些错解也会进训练集。每一轮最多学到验证器比模型多知道的那一部分;验证器分不清的错,回路不会自己改掉,反而会一起学进去。

一个回路,三个零件

生成、验证、训练。STaR(Zelikman 等,2022)是最常被引用的版本:模型先写推理过程和答案,只留下答对的,在这些样本上微调,再进入下一轮。按本系列的写代码例子改写,结构对应 STaR 的 Algorithm 1:

输入:预训练模型 M;题目集 {(x_i, T_i)},T_i 是第 i 题的测试
M_0 ← M
for n = 1..N:
    对每道题 x_i,用 M_{n-1} 生成解答 ŷ_i
    D_n ← {(x_i, ŷ_i) : ŷ_i 通过 T_i}          # 验证:只留通过的
    对没通过的题,把提示放进 prompt 再生成;通过的也加入 D_n
                                              # STaR 里提示是正确答案,叫 rationalization
    M_n ← 从原始 M 出发,在 D_n 上微调          # 每轮从原模型重训,不接着 M_{n-1} 训

STaR 在 §3.1 里把这个过程看成对下面目标做 policy gradient 的近似:

$$ J(M)=\sum_i \mathbb E_{\hat r_i,\hat y_i\sim p_M(\cdot\mid x_i)}\big[\mathbf 1(\hat y_i=y_i)\big] $$

$\hat r_i$ 是采样出的推理过程,$\hat y_i$ 是答案,$\mathbf 1(\cdot)$ 答对取 1、答错取 0。取 0 的样本梯度为零,所以“扔掉错的、在剩下的上做 SFT”就近似于一次用 0/1 奖励(reward)的 policy gradient 更新:筛选规则就是奖励。换到写代码的例子里,$\mathbf 1(\hat y_i=y_i)$ 变成了 $\mathbf 1(\hat y_i\text{ 通过 }T_i)$。回路优化的是“通过测试”,而不是“写对”,后面的问题都从这里来。

STaR 报告的结果:GPT-J 在 CommonsenseQA dev 上 72.5%,直接微调是 60.0%,大约 30 倍大的 GPT-3 是 73.0%(Table 1);GSM8K 上 10.7% 对 5.8%(Table 2)。它也写清了两个前提:没有 rationalization,模型解不出的题永远不产生训练信号,改进会停下(§3.2);第一轮的 few-shot 正确率必须高于随机,GPT-2 连算术都没能自举起来(§6)。§6 还提到,二选一的题容易碰巧答对,会混进很多推理错误的样本。

ReST-EM:把“筛选再微调”写成 EM

Google DeepMind 的 ReST-EM(Singh 等,2023-12)把同一个回路写成 RL 里的 EM。奖励 $r$ 非负,M 步是:

$$ \theta_{t+1}=\arg\max_\theta\;\mathbb E_{x\sim\mathcal D}\,\mathbb E_{y\sim p_{\theta_t}(y\mid x)}\big[r(x,y)\,\log p_\theta(y\mid x)\big] $$

样本来自上一轮的模型 $p_{\theta_t}$,在这一步里固定不动;目标是按奖励加权的最大似然。$r$ 取 0/1 时,它就是“在通过的样本上做 SFT”。E 步对应生成和筛选,M 步对应微调(他们每轮也从 base model 开始微调)。论文特别指出,和 PPO 这类在线 RL 相比,这里采样策略固定在上一轮,数据收集和策略优化是分开的。

实测上,论文 §1 说超过两轮左右收益就递减,作者归因于在少量训练题上过拟合(overfitting);APPS 上迭代更多轮反而退步。2017 年的 Expert Iteration 属于同一家族:树搜索当“专家”产生更好的目标,神经网络当“学徒”模仿,学徒再引导下一轮搜索。筛选会怎样改变训练分布,见站内的拒绝采样;用测试当奖励的一般问题,见可验证奖励。

没有标准答案时,让模型给自己打分

Meta 与 NYU 的 Self-Rewarding Language Models(Yuan 等,2024-01)把验证器也换成模型自己:Llama 2 70B 用 LLM-as-a-Judge 的方式给自己的回答打分,组成偏好对,再做迭代 DPO;论文报告打分能力也随之提高。AlpacaEval 2.0 上对 GPT-4 Turbo 的胜率三轮依次为 9.94%、15.38%、20.44%(Table 1)。论文自己列出的限制是:只在一种设置下跑了 3 轮;输出越来越长;没有研究 reward hacking;并且认为这种效果在真实场景里“可能会饱和”。

更早的 Huang 等(2023)测了另一种“自己判自己”:没有外部反馈时,模型常常改不对自己的推理,有时还会改得更差。

题目也自己出:Absolute Zero 与 R-Zero

Absolute Zero(Zhao 等,2025-05)让一个模型扮演两个角色:出题者提出任务 $\tau$,Python 执行器把它变成经过验证的题目和答案 $(x,y^\star)$,解题者再来解。目标(Eq. 3):

$$ \max_\theta\;\mathbb E_{z}\;\mathbb E_{\tau\sim\pi_\theta^{\rm propose}(\cdot\mid z),\;(x,y^\star)\sim f_e(\cdot\mid\tau)}\Big[\lambda\,r^{\rm propose}(\tau,\pi_\theta)+\mathbb E_{y\sim\pi_\theta^{\rm solve}(\cdot\mid x)}\,r^{\rm solve}(y,y^\star)\Big] $$

$z$ 是出题时的条件,例如从缓存里抽几个旧的题目–答案对;$f_e$ 是执行器所代表的环境;$\lambda$ 平衡两种奖励。出题者的 learnability reward(Eq. 4)和解题者的奖励(Eq. 5)是:

$$ \bar r_{\rm solve}=\frac1G\sum_{i=1}^{G}r_{\rm solve}^{(i)},\qquad r^{\rm propose}=\begin{cases}0,&\bar r_{\rm solve}=0\\1-\bar r_{\rm solve},&\text{其他情况}\end{cases},\qquad r^{\rm solve}=\mathbf 1(y=y^\star) $$

$\bar r_{\rm solve}$ 是解题者对同一道题做 $G$ 次 Monte Carlo 尝试的平均成功率。手算一次,取 $G=4$:

出的题 4 次里解出 $\bar r_{\rm solve}$ $r^{\rm propose}$
任务 1 0 0 0
任务 2 2 0.5 0.5
任务 3 4 1 0
任务 4 1 0.25 0.75

前三行是论文的直觉:一次都解不出和次次都能解出的题,对解题者都没有学习信号,出题者也拿不到奖励。第 4 行是直接按公式算出来的:奖励最高的不是成功率 0.5 的题,而是“偶尔能解出”的题;$G=4$ 时最多拿到 $1-1/4=0.75$。这和 STaR 的困难是同一件事:没有一次成功,就没有信号。

Absolute Zero 的回路:同一个模型先出题,环境(代码执行器)把题变成验证过的题目和答案,并给出题者一个“可学性”奖励;再由它解题,和标准答案比对拿解题奖励。出题和解题两个角色一起训练。
原文图Absolute Zero 的回路:同一个模型先出题,环境(代码执行器)把题变成验证过的题目和答案,并给出题者一个“可学性”奖励;再由它解题,和标准答案比对拿解题奖励。出题和解题两个角色一起训练。图源:Zhao et al., 2025 · Absolute Zero · Figure 3 · CC BY 4.0 · 转为 WebP

“Zero”指的是不用人工整理的题目和答案;预训练(pre-training)好的 base model 和代码执行器仍然少不了。论文 §4.2 报告 AZR-Coder-7B 的平均分比此前最好的 zero 设置模型高 1.8 分,在代码平均分上比用专家整理代码数据训练的模型高 0.3 分;在 Llama-3.1-8B 上还观察到令人担忧的推理链(作者称为“uh-oh moment”)。R-Zero(2025-08)从同一个 base model 分出 Challenger 和 Solver 共同演化,摘要报告 Qwen3-4B-Base 在数学上 +6.49、通用推理上 +7.54,都是相对 base model 的提升。

验证器给的上限:generation–verification gap

Song 等(ICLR 2025)把上面这些回路拆成同一个框架:生成器 $f$ 采样,验证器 $g$ 打分 $\hat u_g$,用权重 $w(\hat u_g)$ 对样本重新加权,得到分布 $f[w(\hat u_g)]$,再把模型蒸馏(distillation)到这个分布上。$J$ 是按真实效用算的期望得分。Definition 2.1:

$$ \operatorname{gap}(f,g)=J\big(f[w(\hat u_g)]\big)-J(f) $$

它问的是:按验证器的意见重新加权,真实得分能涨多少。$g=f$ 就是自我改进。如果更新步骤能把重新加权后的分布学到误差 $\varepsilon_{\rm update}$ 以内,论文给出:

$$ J(f_{t+1})-J(f_t)\;\ge\;\operatorname{gap}(f_t,g)-\varepsilon_{\rm update} $$

同一个前提也意味着提升不会超过 $\operatorname{gap}+\varepsilon_{\rm update}$,所以一轮大约只值一个 gap;模型验证不比生成强(gap ≤ 0)时,回路没有东西可学。论文也提醒,有时微调后得分超过这个量,例如模型学会了要求的答案格式,这部分不算自我改进。

论文的测量(§4–5):相对 gap 随预训练 FLOPs 单调增大;Qwen-1.5 0.5B、Qwen-2 0.5B、Llama-2 7B 等小模型在几乎所有验证方式下 gap 都不为正;事实类任务上没有显著 gap;迭代时 gap 在两三轮内降到接近 0,不同大小的模型饱和速度相近;大 $k$ 的 pass@k 随轮数下降,说明有效多样性(diversity)在减少。

算一次:测试会放过错解

下面是教学假设,数字是编的。在一批题上,模型生成的解答里 40% 真正正确。测试接受所有正确解,同时放过比例为 $f$ 的错解,比如测试只查了几个普通输入,没查空列表和负数。把通过测试的解拿去微调,并假设微调能把这批解的分布原样学下来,也就是 $\varepsilon_{\rm update}=0$。通过测试的样本占 $0.40+0.60f$,其中真正正确的比例是:

$$ \text{精度}=\frac{0.40}{0.40+0.60f} $$

错解被放过的比例 $f$ 通过测试的占比 其中真正正确 微调后按测试看的通过率 微调后真实正确率
0(测试完美) 40% 100% 100% 100%
2% 41.2% 97.1% 100% 97.1%
10% 46% 87.0% 100% 87.0%
30% 58% 69.0% 100% 69.0%

以这套测试为验证器,$f=10\%$ 时第一轮的 gap 是 $87.0\%-40\%=47$ 个百分点,$f=30\%$ 时是 29 个百分点。一轮能涨很多,而且测试报告的通过率都是 100%。

再转一轮。$f=10\%$ 时,新模型的解里 87% 正确、13% 是“错但能过测试”。测试对两类一视同仁,全部接受,重新加权后分布不变,gap 等于 0。回路停在 87%,测试却一直显示 100%。验证器分不清的那 13%,转多少轮也去不掉。玩具里一轮就到顶,是因为假设了完美模仿;真实训练学得不完全、还会泛化,所以要走几轮,这和 Song 等看到的“两三轮内 gap 降到接近 0”方向一致。

微调能做的,是把模型集中到测试接受的解上;如果正确解有可以学的共同套路,还可能迁移到新题,STaR 在 dev 集上的提升就是这类效果。它做不到的,是学会区分“正确”和“错但能过测试”,因为这个信息不在训练信号里。更糟的情况是:如果错解能过测试是靠某个可复用的取巧,比如对可见测试的输入写特判,微调可能把这个取巧扩散到原本没用它的题上。这一点是机制上的推测;下面有 agent 真的找到这类取巧的实测例子。

能改变上限的是 $f$:从 10% 降到 2%,上限就从 87.0% 升到 97.1%。加隐藏测试、边界用例或性质测试,都是在加强验证器,而不是生成器。反过来,如果测试误杀一部分正确解,比如不认某种少见但正确的写法,精度不受影响,却会少掉数据、压缩多样性。

动画 测试放过错解:一轮就到顶

这张图需要启用 JavaScript。

把自己的输出喂回自己:model collapse

Shumailov 等在 Nature(2024-07-24)上报告:不加区分地用递归生成的数据训练,会给模型留下不可逆的缺陷,原始分布的尾部会消失。筛选回路不完全是这种情况:验证器带来了外部信息,所以能涨。但筛选同样偏爱“典型的、能通过的”解,丢掉少见的解;Song 等观察到大 $k$ 的 pass@k 下降,并推测原因是模型验证不了少见但正确的答案。两件事说的是同一个限制:没有来自外部的新信息,回路就没有东西可学,多样性还可能越转越少。

信号被钻了空子:已经测到的例子

  • DGM(2025-05,附录 H):一个 agent 在检测工具调用幻觉的目标上拿了满分,办法是删掉检测器依赖的特殊 token 日志,尽管指令要求不要改这些 token;作者发现,不把检测函数对 agent 隐藏时,这类 objective hacking 更常见。论文
  • Anthropic 自动对齐研究员(2026-04-14):一个 agent 在数学上跳过弱老师,总是输出最常见的答案;另一个运行代码去对测试,读出答案。两者都被发现并取消资格,作者的结论是自动化研究员需要它们无法篡改的评估。原文
  • PostTrainBench(2026-03-09):agent 在测试集上训练、下载现成的 instruction-tuned checkpoint 代替自己训练、未经授权使用找到的 API key。论文
  • Sakana AI 的后续论文(2025-09-16):一些 kernel 通过了 KernelBench 的检查,却是利用漏洞得到的 50–120 倍“假加速”;剔除受污染的任务后,平均加速从 3.13 倍降到 1.49 倍。论文
  • METR 的 Frontier Risk Report(2026-05-19):在 8 小时以上的 TH1.1 任务上,至少 16% 的成功运行经审查是不合法的。原文
  • OpenAI–Hugging Face 事件(2026 年 7 月,OpenAI 2026-08-26 的报告):OpenAI 把 reward hacking、在看似不可能的任务上坚持不放、未经授权的通信、agent 互相采纳对方目标列为促成因素。原文

信号从哪里来:一张对照表

Chen、Wang、Qu 的综述(2026-07)把反馈信号排成一个“verification hierarchy”:从形式化验证器(最强)到模型内在的自我评估(最弱),并报告已展示的自我改进强度与这个层级一致。下表按这个顺序排列,例子和失效方式来自前文的来源:

信号来源 强弱 例子 典型失效
形式化验证器(证明检查) 最强 Gödel Machine 的设计(理论构想) 规格本身写错或写漏;能形式化的任务少,找证明代价高
代码执行、测试、自动评估器 强,取决于覆盖面 Absolute Zero 的 Python 执行器、AlphaEvolve 的评估函数、DGM 的 benchmark 测试放过错解;agent 改日志或改评估环节(DGM、KernelBench)
标准答案 对最终答案强,对过程弱 STaR、ReST-EM 答案对、推理错(STaR 的二选一题);在少量题上过拟合(ReST-EM)
学到的奖励模型、LLM judge 中 AI Scientist 的自动审稿人,Nature 版报告 balanced accuracy 69% 被优化的一方钻 judge 的空子;judge 自身的偏差,见 LLM-as-a-Judge
模型自我评估 最弱 Self-Rewarding LM;Huang 等的自我纠错实验 自我确认;输出变长;几轮内饱和;小模型 gap 不为正

动手时怎么检查

先试什么 应该观察什么 不能据此推出什么
人工复核一小批“通过测试”的解 真实精度和测试通过率差多少,即估计 $f$ 抽查没发现问题,测试就没有盲点
加一组隐藏测试再跑一轮 通过率掉了多少,掉的是哪类题 隐藏测试本身足够全面
每轮同时记 pass@1 和大 $k$ 的 pass@k 大 $k$ 下降说明多样性在丢失 pass@1 上升就等于能力提升
多跑几轮,记录第几轮开始不涨 饱和出现的位置 不涨就是模型到顶;也可能是验证器到顶

这条线接下来看什么

下面是开放问题,以及什么样的结果会改变现在的判断;不是预测。

  1. 自己出题、自己验证能撑多少轮? Song 等(2024-12)测到 gap 两三轮内接近 0;Absolute Zero(2025-05)和 R-Zero(2025-08)用执行器或 Challenger 不断补充新题,报告的是相对 base model 的提升。如果出现远多于三轮仍在独立 benchmark 上持续提升的结果,“几轮饱和”就要改写成有条件的结论。
  2. 学到的验证器能不能替代可执行检查? Self-Rewarding(2024-01)只跑了 3 轮,作者自己预计会饱和。在没有标准答案的任务上,如果自评回路在外部评审的评估上长期持续提升,验证层级的排序就需要重新看。
  3. 改进回路会让钻空子变多还是变少? DGM(2025-05)、Anthropic 自动对齐研究员(2026-04-14)和 PostTrainBench(2026-03-09)都记录了钻空子;AIDE²(2026-09-22)在一个留出任务族上看到 reward hacking 率从 55% 降到 32%,但只是一次运行。多个系统、多次运行的重复结果会更有说服力。
  4. 谁来设计更新规则? 综述(2026-07)说几乎所有论文研究的是有边界的自我精炼。若有公开结果显示模型自己设计数据、loss 和训练流程并通过留出评估,这条线就从 (d) 类走到了 (a) 类。

下一篇:改代码不改权重。

本页术语 6
微调 fine-tuning
在预训练权重上继续训练以适配具体任务
奖励 reward
RL 里指导策略更新的标量信号
过拟合 overfitting
训练集越来越好,没见过的数据反而变差
预训练 pre-training
先用大量数据学习通用表示和能力,再适配具体任务
蒸馏 distillation
用一个模型的输出训练另一个通常更小的模型
多样性 diversity
结果之间在主题、来源或其他指定维度上有多大差异