Browse this library

Chinese source article

2 · 输出与模型层 (L0–L1)

L0 只改当前输出, L1 改模型参数 θ 并保留下来. 自训练, 自博弈和协同演化都在这一层.

View original Markdown ↗

一个语言模型给出答案以后, 最直接的「自我改进」有两条路. 一条是在这道题里多想几遍: 写反馈再改写, 多采样几次再投票, 把推理组织成树, 让模型写测试来挑程序. 另一条是把这些过程筛出来的好答案拿去训练模型, 让改动进入参数, 跟着模型走进之后的任务. 前一条是 L0, 后一条是 L1. 两层用的算法可以完全相同, 区别只在改动有没有被保留.

这一部分把两层放在一起读, 原因在于 L1 的训练信号几乎都是从 L0 的过程里长出来的. STaR 筛选推理过程用的是标准答案, TTRL 的奖励就是 Self-Consistency 的多数投票, CodeT 的「程序与测试相互一致」在 CURE 里变成了两个模型协同训练的奖励. L0 那一题上证据可不可信, 到了 L1 就变成写进参数的信号可不可信, 只是错误不再随题目结束而丢弃.

四篇按「谁产生信号」的顺序排: 任务内由同一个模型修订, 搜索, 验证; 同一个模型用自己的输出训练自己; 和自己的副本竞争; 和一个利益一致但信息, 功能或参数不同的合作者一起训练. 从前往后, 环里逐步出现第二方, 读者可以一路观察同一个问题: 训练信号里有没有一个不随训练改变的锚.

1. 从 L0 到 L1 多了什么

1.1. 保持条件

沿用 1.1.2 的记号, 当前任务的轨迹为 τ\tau, 输出为 yy, 可保留状态为 A=(θ,Σ,U,C)\mathcal{A}=(\theta,\Sigma,U,C). L0 转移要求 (τ′,y′)̸≡act(τ,y)(\tau',y')\not\equiv_{\mathrm{act}}(\tau,y) 而 A′≡actA\mathcal{A}'\equiv_{\mathrm{act}}\mathcal{A}, 也就是这一题的答案变了, Agent 没变. L1 要求 θk+1̸≡actθk\theta_{k+1}\not\equiv_{\mathrm{act}}\theta_k, 同时 (Σ,U,C)(\Sigma,U,C) 在实际起作用的语义上不变. 信号来自模型自己, 交互经验, 别的模型还是环境, 都不影响层级.

L0 内部允许相当多的临时状态. 综述举的 Focus 把一条很长的软件工程轨迹压缩成知识块并删掉更早的交互, 能延长有效的推理长度, 但知识块不跨任务保留, 所以仍是 L0. 不跨任务保留有两面: 一次有害的修改随这一题结束被丢弃, 一次正确的修正也不会留下. L1 去掉了这层隔离, 有用的改动和自生监督引入的错误都会被带进之后的任务. 同一套 TestingTime 训练方法也会因此落在不同层: 查询结束后参数恢复原状是 L0, 保留下来影响之后的任务是 L1.

1.2. 三种训练关系

综述按训练关系把 L1 分成三组, 本部分的后三篇各读一组.

训练关系 谁产生信号 和被训练者的关系 代表系统
单模型自训练 被训练的模型自己 同一个模型, 同一个角色 STaR, ReSTEM^{EM}, Self-Rewarding, TTRL
竞争式自博弈 和自己对抗的副本 同一个模型, 对立角色 SPIN, SPAG, Absolute Zero, R-Zero
合作式协同演化 教师, 验证器, 另一个模型, 群体 信息, 功能, 参数或成员不同 WebRL, CURE, RL Tango, 协作自博弈

单模型自训练里, 产生信号的和接受信号的完全重合, 环里没有东西能反驳一个模型很有把握的错误. 后两组都在用不同方式把第二方加回来: 对手的利益和被训练者相反, 合作者的利益一致但掌握不同的信息或承担不同的功能. 三组共用一条可靠性要求: 自生的标签, 奖励和同伴信号可以指导一次参数更新, 但要把新参数提升为正式版本, 仍要在相同资源条件下用更新边界之外的审计比较候选和现任.

1.3. 四篇的演进

任务内: 证据从哪来:2.1.1 · 任务内的修订, 搜索与验证 先读 Self-Refine 的生成, 反馈, 改写三步, 再读有外部依据的修复, Self-Consistency, Tree of Thoughts 和 CodeT. 增益明显的方法都带进了模型自评以外的信息. Self-Consistency 在 PaLM-540B 上把 GSM8K 从 56.5 提到 74.4; Game of 24 上 CoT 加 100 次投票只有 9.0%, ToT 在 b=5b=5 时是 74%, 因为约 60% 的 CoT 样本在第一步之后就已经凑不出 24, 投票只能在完整答案之间选. CodeT 用程序和测试的双重执行一致性, 把 code-davinci-002 在 HumanEval 上的 pass@1 从 47.0% 提到 65.8%.

反面证据集中在自我纠错. Huang 等人让 GPT-4 在没有标准答案时检查自己的推理, GSM8K 从 95.5% 降到 89.0%; 早先报告的增益来自用标准答案决定何时停止. 对齐调用次数以后, 多 Agent 辩论不如直接多采样再投票, 它的增益和 Self-Consistency 同源. 这一篇最终按「谁提供证据」把方法排成一张表, 从模型自己的判断一直排到执行器和人写的反馈, 证据越往下越独立于产生候选的模型.

写进参数: 有锚和没锚:2.1.2 · 单模型自训练 读两类信号. 一类从模型已有的输出里筛, 用环外的答案判对错: STaR 在 CommonsenseQA 上让 6B 的 GPT-J 到 72.5%, 比大约 30 倍参数的微调 GPT-3 只低 0.5 个点; ReSTEM^{EM} 在 MATH 上给 PaLM 2-L 带来 6.34 个百分点, 但训练集准确率随迭代线性上升时, APPS 的测试准确率在第二轮就下降了. 另一类由模型自己造信号: Self-Rewarding 让模型给自己打分构造偏好对, TTRL 用多数投票当标签, 把 Qwen2.5-Math-7B 在 AIME 2024 上的 pass@1 从 12.9 提到 40.2.

TTRL 的标签准确率很少超过 50%, 奖励准确率却在 75% 以上, 原因是和多数答案不同的错误输出都得 0, 这个 0 恰好是对的. 同一个分析也给出它的边界: 多数答案错的时候, 那些 1 全是错的奖励, 模型会被推向这个错误答案. 这一篇最终读 Shumailov 等人的模型坍塌: 每代只拟合上一代的样本, 一维高斯的期望距离随代数线性增长; OPT-125m 每代保留 10% 原始数据时只有轻微退化. STaR 和 ReSTEM^{EM} 每轮回到基础模型重新微调, 和这种做法属于同一类.

加入第二方:2.2.1 · 竞争式自博弈 让信号来自比赛的相对结果. SPIN 的主玩家区分人写的回答和上一轮自己的回答, 理论上只在模型分布等于数据分布时停下, 所以人类 SFT 数据就是它的天花板, 实验里每轮增量从 2.66 降到 0.19. 出题者和解题者分工以后, 关键在验证器: Absolute Zero 用 Python 执行器, 题出得再难, 执行结果仍然是对的; R-Zero 用解题者自己的投票, 题越难越不准, 4B 模型在第三轮之后性能大幅下降, 共用参数的 Single-R-Zero 标签准确率在第三轮降到 32.6%.

2.2.2 · 合作式协同演化 读利益一致的第二方. WebRL 分开训练一个结果奖励模型, 在 WebArena-Lite 上把 Llama-3.1-8B 的成功率从 4.8% 提到 42.4%. CURE 让写代码和写单元测试的两个模型协同训练, RL Tango 让生成器和验证器一起强化学习, 它的对照实验里换成冻结的验证器反而拖后腿. 协作自博弈靠成员之间工具和知识的差异学到校准. 四个系统的训练信号里都保留了环外的锚: 环境自带的奖励函数, 标准单元测试, 标准答案.

2. 锚和上限

2.1. 锚的对照

把四篇的系统按训练信号里的锚排在一起, 规律比单篇更清楚.

方法 层级 训练信号里的锚 锚会不会随训练变差
Self-Consistency, ToT, CodeT L0 任务内的投票, 状态评估, 执行结果 不保留, 每题重来
STaR, ReSTEM^{EM} L1 标准答案, 单元测试 不会
Self-Rewarding, TTRL L1 3200 条种子数据; 初始先验 判官和先验随权重一起变
SPIN, Absolute Zero L1 人类 SFT 数据; Python 执行器 不会, 但 SPIN 的增量随接近数据分布衰减
R-Zero L1 无 会, 题越难投票越不准
WebRL, CURE, RL Tango L1 环境奖励函数, 标准测试, 标准答案 不会

能稳定提升的系统, 训练信号里几乎都有一个不随训练改变的外部锚. 锚越弱, 坍塌来得越早: TTRL 依赖初始分布里正确答案有足够比重, R-Zero 只靠自投票. 这张表记录的是信号来源, 不是可靠性排名. 综述强调, 合作者带来的特权信息或不同的错误模式可以让信号更有用, 但不确立外部审计的地位; 一个分开训练的验证器能不能参与审计, 要看谁控制它, 谁能查询它.

2.2. 模型层的上限

2.4 的结尾按综述给出两个上限, 它们在可靠性条件成立时也起作用. 第一个是模型困在自己的分布里: 重训代价高, 又容易坍塌, SPIN 的天花板是人类数据, R-Zero 几轮后坍塌, Shumailov 等人的距离单调增长. 第二个更关键: 围绕模型的提示, 工具, 记忆和控制流在整个 L1 都是人写的, 固定不变, 它常常才是训练好的权重能发挥多少的瓶颈.

往下一层走有代价. L1 的每个训练样本都有一个自生的参照: 一个标签, 一个奖励, 或者一对偏好. L2 改的是脚手架, 这个逐样本的参照也没有了, 判断一次脚手架改动好不好只能看整个系统在任务上的端到端表现. 第 3 部分 从这里开始. 另一方面, 这一部分的失败形式在 5.1.1 · 失效模式 里还会被系统地整理一遍: 坍塌被形式化为 Scaling Laws 的改变, 尾部收窄让难样本得不到训练, 表面改进表现为分布内上升而分布外下降.

3. 读法

3.1. 按顺序读

第一次读按 2.1 到 2.4 的顺序. 2.1 里的投票, 测试一致性和自我纠错实验, 在后三篇分别以 TTRL 的奖励, CURE 的协同训练和 2.2 的检查表重新出现; 先读 2.1, 后面读到这些系统时能直接认出它们继承了哪一种 L0 证据. 2.2 和 2.3 末尾各有一张检查表, 格式相同, 一张讲单模型, 一张讲两个副本; 后者多出「外部信号混入」「角色独立性」等项, 正是第二方带来的新问题.

每篇的结尾都写了到下一篇的承接: 2.1 结束在「筛选结果被写进参数」, 2.2 结束在「环里只有一方」, 2.3 结束在「利益一致的第二方」, 2.4 结束在模型层的上限. 按这条线读下去, 第 2 部分可以当作一条连续的论证.

3.2. 按问题读

只关心「模型能不能自我纠错」, 读 2.1 的自我纠错实验和证据来源表, 再接 5.1.1 开头 Olausson 等人的代码修复对照: GPT-4 自写反馈的修复成功率总体 33.30%, 换成人类程序员的反馈是 52.60%. 只关心自训练会不会坍塌, 读 2.2 的后半和 2.3 里 R-Zero 的部分. 做强化学习奖励设计的读者, 2.4 的 CURE, RL Tango 和锚的对照表最有用.

想比较不同系统的数字, 先看它在不在测试题上训练. TTRL 用的是 AIME 2024 的题目而不用答案, 主表是开发证据, 跨基准的迁移实验才更接近审计证据; Self-Rewarding 的训练奖励和 AlpacaEval 评测都来自 LLM 判官, 胜率上升里有多少来自回答变长, 现有数字区分不了. 这类口径问题在各篇正文里都逐条标出.

4. L0 与 L1 之间隔着什么

4.1. 搜索把算力换成当前答案

任务内修订可以写成在轨迹空间中搜索. 给定输入 xx, 模型产生 MM 条轨迹 τ1,…,τM\tau_1,\ldots,\tau_M, 评判器给出分数 s(τi,x)s(\tau_i,x), 系统返回 τ∗=arg⁡max⁡is(τi,x)\tau^\ast=\arg\max_i s(\tau_i,x). 提升可能来自覆盖率, 也可能来自选择精度. 覆盖率是候选中至少有一条正确轨迹的概率; 选择精度是在已有正确轨迹时把它选出来的概率. 增加采样数通常提高前者, 判官偏差却可能让后者下降. 只报告最终 pass@1, 无法知道瓶颈出在模型没生成答案, 还是选择器把答案丢掉了.

自我纠错是在这个搜索式子里增加有条件的提议分布 p(τ′∣x,τ,f)p(\tau'\mid x,\tau,f), 其中 ff 是反馈. 若反馈来自同一个模型, 错误轨迹与错误反馈往往相关. 设初稿正确率为 aa, 正确答案被改错的概率为 qq, 错误答案被修对的概率为 pp, 一轮后的正确率是 a′=a(1−q)+(1−a)pa'=a(1-q)+(1-a)p. 自纠错要有净收益, 必须满足 (1−a)p>aq(1-a)p>aq. 当基座模型已经很强, aa 大, 即使 pp 看起来不低, 一个小小的 qq 也足以吃掉全部收益. 这解释了为什么「允许再想一次」不是单调有效的技巧.

4.2. 蒸馏把搜索结果压回参数

L1 更新把筛选后的轨迹集合 Dk={(xi,τi∗)}D_k={(x_i,\tau_i^\ast)} 写进参数:

θk+1=arg⁡min⁡θ∑(x,τ)∈Dk−log⁡pθ(τ∣x)+λR(θ,θk).\theta_{k+1}=\arg\min_\theta\sum_{(x,\tau)\in D_k}-\log p_\theta(\tau\mid x)+\lambda R(\theta,\theta_k).

RR 可以是参数距离、对旧模型分布的 KL 约束, 或旧数据上的回放损失. 它的作用是限制为了拟合自生数据而丢掉原有能力. 如果 DkD_k 的错误率为 ϵk\epsilon_k, 训练后的模型又用于生成下一轮数据, 错误会同时经过生成偏差和选择偏差. 一个粗略递推是 ϵk+1=g(ϵk)+bk\epsilon_{k+1}=g(\epsilon_k)+b_k, gg 表示模型对标签噪声的放大或抑制, bkb_k 是本轮评判器新增的系统偏差. 在固定点附近, ∣g′(ϵ∗)∣<1|g'(\epsilon^\ast)|<1 才有局部稳定性; 大于 1 时, 很小的偏差也会逐轮放大.

因此, 外部数据或可验证任务的重要性不只在于提高第一轮标签质量. 它们还改变递推的固定点. 每轮混入比例 ρ\rho 的外部正确样本, 可把有效噪声压到大约 (1−ρ)ϵk(1-\rho)\epsilon_k; 执行器和形式验证器则能让可覆盖子任务的 bkb_k 接近零. 代价是系统只在验证器覆盖的范围内获得这项保证. 数学答案可核验, 解题策略是否具有迁移性仍需新的分布检验.

4.3. 对抗和合作改变的是信号分布

竞争式自博弈让出题者和解题者的目标相反. 难度过低没有学习信号, 难度过高又只产生失败, 有效训练集中在当前能力边界附近. 若题目难度为 dd, 解题成功概率为 Pθ(d)P_\theta(d), 常见的信息量代理 Pθ(d)(1−Pθ(d))P_\theta(d)(1-P_\theta(d)) 在成功率接近一半时最大. 课程会随模型变强自动向右移动, 但出题者也可能学会利用判分漏洞, 制造形式上有效、语义上贫乏的题.

合作式系统把角色拆成提议者、批评者、验证者或工具专家, 用条件独立性降低单一模型的盲点. 只有角色之间的误差相关性真的下降, 多数投票才有明显收益. 若每个角色的错误概率为 ee, 且错误独立, 三方多数错的概率为 3e2(1−e)+e33e^2(1-e)+e^3; 三个同源模型共享同一种误解时, 独立假设失效, 结果可以接近单模型的 ee. 多 Agent 数量本身不是证据, 提示差异、工具差异、训练来源与可观测信息怎样改变相关性才是关键.

4.4. 模型层的边界

L0 和 L1 可以显著提高任务成绩, 也能为更深层改进提供数据. 它们始终把候选生成策略、训练算法、数据混合规则和验收协议当作外部给定. 即使参数更新了很多轮, 只要这些规则没有被后代系统改变, 改进器 UU 仍是固定的. 这不是能力高低的判断: 一个固定训练器可以造出远强于自身的模型, 一个能改写训练器的系统也可能很弱. 它只回答递归发生在哪一层.

进入下一层的必要信号是, 模型开始持久改变自己以后如何取上下文、调用工具、组织记忆或安排控制流. 这些改变不进入 θ\theta, 却会改变每次执行看到的信息和允许采取的动作. 第 3 部分 因此从提示程序开始, 再走到技能、记忆与 harness, 检查模型层之外的状态怎样获得可重复的因果作用.