Train-Time Scaling / Scaling RL
测试时是把已有能力搜出来;训练时 RL 是把成功轨迹写进权重。两者都能抬 pass@1,但训练时缩放要有可验证信号、非零成功,以及还没饱和的奖励。
这是什么
CS329A Self-Improving AI Agents 第六讲,片长约 73 分钟(duration_s: 4359)。前几讲走完 test-time scaling、工具/代码反馈、robust verification;本讲把过滤后的模型输出送回训练,关掉自改进环。
沿三篇工作走:
- STaR(Self-Taught Reasoner;斯坦福作者)— 用少量 rationale 启动,只留下做对的推理链做 SFT;做错的题把答案当 hint 再「合理化」(rationalization),迭代扩训练集。
- DeepSeekMath — 先把数学语料挖干净(从 DeepSeek coder 起步、挖 Common Crawl / OpenWebMath,而不是堆 arXiv),再上 GRPO 做 train-time RL。
- DAPO — 把 GRPO 朴素扩到长推理链(课上用 Qwen-32B)时,熵崩、过自信、训练不稳、长度失控;把非对称 clip、动态采样、token-level loss、超长惩罚写清楚。
动机基准从已经饱和、多数模型训练过的 MATH,换成作业 1 用的 AIME 2024 / AIME 2025。00:00:05 00:01:11 00:01:44
素材:raw/collections/cs329a/06-train-time-scalingscaling-rl.md。
核心要点
- 参数不再是唯一旋钮。据课上读图:GPT-3.5(被认为约 175B)在 AIME 上几乎 5%;DeepSeekMath 7B 做 train-time scaling 到 51.7%,再加 tricks 到 60%;DAPO 打在 Qwen-32B 上约 50%。小模型靠训练时缩放,可以在推理基准上打过更大的预训练模型。00:01:59 00:02:25
- 本讲三句话:让模型从自己的输出里聪明过滤再学;砸在「自己产出」上的训练算力可以替代一部分参数;RL 不像 SFT,实现细节在放大时会决定成不成。00:03:25 00:03:40
- 三个范式不要混:预训练吃互联网;微调 / RLHF / RLAIF 吃偏好数据、做出 chatbot;test-time 是 majority vote、采样、组合输出(作业 1 在评)。把 test-time 滤出来的正确输出再 fine-tune,就是 train-time scaling。只记住这个闭环,这讲的骨架就在。00:04:25 00:04:51 00:05:21
- o1 在 AIME 上的 log-linear 图:横轴分别是 train-time compute 和 test-time compute,纵轴是 pass@1。两边加算力都涨。能闭环,是因为数学可验证——前几讲的 verifier 决定你有没有资格把输出喂回训练。00:06:13 00:07:20
- 推理模型多出来的 token 不是空转:问题分析、任务分解、自评 / 回溯、并行试多种路径。可验证域(编程、数据分析、数学计算)对 GPT-4o(非 thinking)的 win rate >50%;个人写作 / 改文本增益小。00:08:06 00:10:45
- STaR 像很朴素的 off-policy RL:正确则留下 rationale;错误则给答案让模型倒推过程,训练时不把 hint 写进样本,假装它直接解出来。前提是一部分题已在模型能力范围内;完全不会的题,给答案也启动不了。00:18:42 00:19:47 00:22:53
- 早期生命迹象,不是已解决问题。实验基座是 GPT-J 6B。相对直接 SFT,STaR 在数学设定上报到 51.7%、只用 70%–87% 数据(错的扔掉)。多轮会平台。CommonsenseQA 上人类觉得 rationale 合理,约 86% 数据到 72.5%。GSM8K 上 rationalization 并不涨点——题对 GPT-J 太简单,强迫 CoT 和直接 FT 步数差不多。00:27:14 00:28:30 00:30:19 00:30:43
- DeepSeekMath 的第一刀是数据,不是 RL 口号:从 code 模型起步 + 挖 OpenWebMath,覆盖比 arXiv 论文更够、token 产量更大;arXiv 继续训几乎不帮,code→math 显著帮(推理和 tool use)。然后才用 GRPO 丢掉 critic:每题多样本,advantage = (reward − mean) / std,副本从 PPO 的四份变成三份。MATH 上 46.8% → 51.7%,当时第一个不靠 critic 跨过 50% 的开源 7B。00:42:00 00:43:14 00:44:08 00:46:07
- GRPO 这一轮改善的是 majority@k / 一致性(课上说 32 次采样),不是 pass@k。模型更常把已经会的题做对,不是突然会解新题。00:52:31
- 朴素把 GRPO 拉到 Qwen-32B:AIME 约 30%;课上提到 DeepSeek 相关工作约 47%。病状:熵崩、过自信、训练不稳、长度失控。DAPO 的补丁叠上去:overlong filtering 36 → 非对称 clip 38 → soft overlong 41 → token-level loss 42 → dynamic sampling 50,超过 DeepSeek-R1 蒸馏到 Qwen-32B。00:53:16 00:53:48 00:59:43
- 看 RL 曲线至少三件事:平均回复长度、熵(不能太低也不能太高)、整组全对(reward=1)的比例。不再涨,先怀疑 reward model 饱和。01:00:25 01:01:01
- 正确抽象不是「有没有数据」,是 有没有能 hill-climb 的数据。全 0 或全 1 的组 advantage 为零,梯度是浪费的。00:48:25 01:12:10
机制 / 论证
训练时缩放:把 test-time 的过滤写进权重
预训练吃互联网;chat 微调吃人类偏好。Test-time 不改权重,只采样、投票、找错。Train-time 的最小闭环是:同一套采样 + 过滤,把留下的轨迹再当监督。00:04:38 00:05:21
学生问算力该怎么在 train-time 和 test-time 之间分。讲师先按到第三篇。当场能说的边界:
- Test-time 对使用者便宜:模型已经训好,可以反复推理;只要有一条对、且你有 verifier,搜索在原则上可以拉得很长(下周五会讲 AlphaCode 一类)。00:12:42 00:13:10
- Train-time 必须把缩放做对,并且闭环里要有足够多次成功。传统 ML 里「同样算力给测试往往更划算」有 caveat:只在验证可靠的基准上成立。否则还是得让模型本身更会推理。00:13:26 00:14:02
- 预训练模型已经有一定数学 / 推理 / 金融 / 法律能力。Test-time 是对多条 trace 再挑一条——「把意大利面扔到墙上,并且你知道它该粘在哪」。Train-time 是抬高 pass@1,让正确输出更容易被吐出来;仍然需要验证环。00:14:30 00:15:01
学生觉得 o1 那张图上 test-time 总好过 train-time。讲师:没有「一边必然更好」的直觉;这只是当时的一份实例;「看起来总是 test-time 更好」本身可疑,图不一定对(并开玩笑说他们最新发布也有过图的问题)。00:11:30 00:12:15
难问题会不会把简单问题训坏?通常不应回归,除非推理链已经碎掉——重复、空转的长链,课上叫 overthinking。00:15:20 00:16:01
推理链在可验证域里实际在干什么
CoT / thinking 模型把 token 花在:读题(problem analysis)、拆子任务、看完答案觉得不对就回溯、并行试几条路。它需要某种「当前路径像不像正解」的内感。00:08:06
课上用 o1 系列早期版本的两个例子:
- 用户要一段 batch script:把某种格式的字符串当成矩阵,再按同样格式打印转置。模型先搞清输入输出格式(分析),再写成「解析 → 建矩阵 → 转置 → 按原格式输出」(分解)。简单题上像 overkill,难题上这是在把问题切小。00:09:08 00:10:03
- 化学求 pH:算到一半出现 wait,公式不对,换公式。知识本来就在权重里,但生成过程允许它改口。00:10:15
这些行为在能验证的域里,对非 thinking 的 GPT-4o win rate 过半;写作 / 编辑过不了同一条线。Train-time scaling 不是对所有任务等价地灵。00:10:45
STaR:用正确答案当 verifier,用失败题倒推过程
目标:让模型在解题时带上稳定的逐步推理。现成路都贵或不够:
| 做法 | 卡在哪 |
|---|---|
| 互联网语料 | 几乎没有大规模逐步推理 |
| 人工写 rationale | 贵 |
| 按已知解法自动生成 | 只在很窄的域 |
| few-shot「题–过程–答案」 | 仍不如在更大数据集上 fine-tune;少量带推理的例子打不过更大的无推理数据 |
算法(10k 量级题是课上的代表性数字):
- 一小份带 rationale 的 prompt 集(few-shot 用),再加一份只有题和最终答案的大训练集(来自 benchmark 的 train split)。
- few-shot 让模型对训练集出「过程 + 答案」;只留答案对的,SFT。
- 错的那批:把正确答案当 hint,让模型倒着写 rationale(rationalization),再把「题 + 过程 + 答案」加进训练集,样本里不再出现 hint。
- 外环迭代:模型变强后再扫一遍原来不会的题。课上强调要慢启动,外环迭代次数固定、内环步数逐渐加。
00:17:53 00:18:58 00:25:22 00:27:01
过滤标准是最终答案对不对。数学上他们觉得这大致能当推理质量的代理,因此会滤掉不少低质量链,但也就学不到错误链。另外两个假设:给了答案,模型写得出合法过程;初始模型强到能从 few-shot 启动。题类整体在能力外面,就几乎不涨;迭代只在「有一部分已经会」时,才可能把邻域题慢慢纳入。00:20:00 00:20:37 00:22:53
学生连问的几个坑,讲师承认论文本身没补:
- 数据集一开始就要有正确答案(大家都从 benchmark 起步),否则不知道该留哪条。00:21:13
- Rationalization(步骤 3)不再过滤。后续可以叠 Process reward models,这篇是早期尝试。00:21:39
- 给了答案仍可能写出错误过程,再被当成正样本——没有进一步过滤就没有 hill-climb。人类看链又太贵。00:24:07 00:24:51
- 从失败里学,这讲明确说还没钉死。正样本、非零奖励才能把 RL 环闭上。00:23:43
实验:开源 GPT-3 级的 GPT-J(6B),小 warmup、恒定学习率。三套数据:GSM8K(约 9k 小学应用题)、CommonsenseQA(日常多选;课上例子:结账前葡萄放哪 → B grocery cart)、合成多位数加法。00:25:34 00:27:14 00:27:49
结果里要分开记:
- 相对「直接 SFT 数学基准」,STaR 报到 51.7%,只用 70%–87% 数据(没做对的扔掉)。这不是完整 RL,多轮会平台,外环次数要手调。00:28:30 00:28:52
- CommonsenseQA:人类偏好 STaR 的 rationale 胜过 few-shot 那份种子;自然语言日常题上过程看起来合理。STaR+rationalization 用约 86% 数据到 72.5%,比堆更多 FT 数据更省。00:29:22 00:30:19
- GSM8K:rationalization 没有带来提升。相对 baseline 有一点,但直接 FT 在好数据上也能到差不多。模型自己用的计算步数,和强迫 CoT / 提供合理化过程差不多。题太简单,谈「教会推理」没有空间。GPT-4o 对 GSM8K 早已在能力内,GPT-J 上同样不该指望这一招大涨。00:30:43 00:31:34
副作用:few-shot 里 rationale 的文风会污染后来生成、再被训练的过程,像 prompt engineering 偏见。多数任务没有自动的 rationale 评估,只能人看或上 PRM;只按最终答案滤,中间可以有无效步(false positive / true negative)。00:32:24 00:33:21
学生问:小模型为什么不直接用前沿模型蒸馏?讲师承认蒸馏数据质量通常更高,但这门课要展示的是用自己的输出改进自己;蒸馏不在本讲范围。STaR 的样本效率来自不必雇人写推理链,可铺到符号、自然语言、数学。00:33:54 00:35:13
后续变体(点到为止):V-STaR 把 generator 和 verifier 放进同一环;Quiet-STaR 不把推理写在英语里,而放进隐空间 MLP。00:37:01
课上讨论「什么限制 STaR」:不会跳出训练数据里没有的逻辑飞跃;给了 hint 仍不会推理就生产不出 rationalization;有的答案更好倒推(例如 225 容易想到 15×15);大量题都要靠合理化,就需要更多数据才能长出可回溯的一般推理。讲师把这些收到一句:往 RL 走时,base 模型已经能做什么才是魔法所在。00:37:53 00:40:28
DeepSeekMath:先覆盖数学,再用组内 baseline 做 RL
更早、比 AIME 简单的 MATH 上,Top-1 长时间跟着模型变大往上走;DeepSeekMath 7B 突然很好看。课上把跃迁归到:train-time 环里的 RL 第一次被做对。00:41:05 00:41:35
先补能力,再 RL——对应 STaR 那条「域外启动不了」:
- 先前有工作在 PaLM 上堆 STEM / arXiv。DeepSeek 的判断:arXiv 论文不是关键。
- 起点换成已经在代码上加强过的 DeepSeek coder。
- 从 Common Crawl 里挖数学页。OpenWebMath 这类挖掘带来跨数学分支的覆盖和更大的 token 产量;arXiv 的数学内容覆盖不够。
- 结果:继续堆 arXiv 几乎不帮;code → math 显著帮,因为推理和 tool use 更好。这是课上强调的「从代码模型出发做数学」的早期证据。
- 数学 SFT 把模型 priming 之后,再放大 RL。
PPO 在 RLHF、即使有 verifier 时仍常用,但要同时留 旧 policy、新 policy、critic、reward model 四份。7B 还好,再放大就是显存问题。GRPO 拿掉 critic / value function,用组内统计当 baseline,只留约三份模型。00:44:08 00:44:53
组内怎么当 advantage:每题采很多答案,用 reward model 打分,然后
[ A = (r - \mathrm{mean}(r)) / \mathrm{std}(r) ]
Reward model 本来就在比较上训的,组上下文等于把比较做进 advantage,省掉 value head。MATH:46.8% → 51.7%,开源 7B、无 critic、过 50%。00:45:10 00:46:07
同一套「采样 + 打分」可以看成梯度系数怎么取。课上把几种算法放在一张直觉表里:
| 方法 | 生成 | 奖励 |
|---|---|---|
| STaR | 基本生成一次 | 对 1 / 错 0 |
| Online rejection FT | 在线生成 | 只留对的(1),错的拒掉(0) |
| GRPO | 在线、多样本 + RM | 组内 (r−mean)/std 当 advantage |
在线、从当前模型采样的 RL,课上认为整体打过 STaR 那种离线过滤。00:52:17
难问题会不会覆盖简单问题的权重?讲师用奖励分布回答,而不是「冻结某层」:
- 太简单:组内几乎全是 1,没有 0。
- 太难:几乎全是 0。
- GRPO 的归一化在没有分布时失效。要的是一批题上奖励有散度;全 0 或全 1 等于没东西可学。这就是 hill-climb 信号。GRPO 在这一点上的缺陷,留给 DAPO 的动态采样。00:47:50 00:48:52
学生补了一刀:PPO 的 KL 把更新拴在旧政策附近,避免为了新基准把已经会的能力拉崩。讲师接受:KL 管「别离开已会的区域」;题集难度分布管「有没有梯度」。不必更新全部权重,课上提到后来有 blog 说可以用更小的更新。00:49:54 00:50:46
分数从哪来?训一个 reward model。只有 0/1 也能当代理,再平均。不要把「干净的连续分」想成玄学。00:51:37 00:51:59
DeepSeekMath 读图时要小心:32 次尝试下,涨的是 majority@k(多数解变对),pass@k 没涨。课上的原话是:模型变得更一致,不是从根本上更聪明。00:52:31
DAPO:长链 RL 的实现细节就是算法
朴素把 GRPO 扩到好拿的 Qwen-32B,AIME 约 30%。DeepSeek 相关工作(课上一次说 carbon paper,后文对照 DeepSeek-R1 蒸馏到 Qwen-32B)约 47%。DAPO 要把 GRPO 没写清的 RL 细节公开化。00:53:16 00:53:48
四类病、四类补丁:
- 非对称 clipping。 标准 PPO clip 对概率升高和降低一视同仁:低概率 token 只能爬一点,高概率 token 也被裁,探索塌缩。改成允许更大的向上更新。课上紫线:准确率更高,右侧熵更稳、不崩。熵是「还能不能探索」的代理。00:54:05 00:54:41
- Dynamic sampling。 GRPO 示例是每题约 64 个解再算组 baseline。DAPO 先 oversample,再丢掉全对(全 1)和全错(全 0)的组,只留 0 和 64 之间、advantage 非零的子集。否则梯度白算,有效 batch size 会被全对/全错掏空。64 只是展示量级,具体随基准难度和 base 能力变。00:55:16 00:56:58
- Token-level loss,而不是 sample-level。 按整条 (题, 答) 一条 loss 时,超长垃圾和短而好的答案权重一样。改成按 token 计,相当于长度 shaping。他们同时盯熵和平均回复长度。00:57:32 00:58:17
- 截断链的噪声。 难题想到 max length 被切掉,截断推理会灌噪声。DAPO 对超长 token 加逐渐加重的惩罚(soft overlong punishment);别的工作选择在 RL 过程中加长 context。模型越训链越长,截断会越来越频繁。00:58:50 00:59:27
Qwen-32B / AIME 上的累加(课上口述):
| 步骤 | AIME(口述) |
|---|---|
| 朴素 GRPO | 30 |
| + overlong filtering | 36 |
| + 非对称 clipping | 38 |
| + soft overlong punishment | 41 |
| + token-level loss | 42 |
| + dynamic sampling | 50 |
最后一档超过 DeepSeek-R1 蒸馏到 Qwen-32B。他们是在 Qwen-32B 自己 hill-climb,不是只靠更强教师。00:59:43 01:00:12
监控三件套:回复长度是否爆炸、熵是否过低或过高、有多大比例样本已经满准确率 1(决定还要不要采那么多样本)。某步数之后曲线不动,先怀疑 RM 饱和,而不是再加 lr。01:00:25 01:01:01
三套方法分别改善什么
SFT vs RL(回应课上多次被按住的问题):有强奖励时,RL 能用更少例子 hill-climb,但工程很重;有大量高质量数据时,SFT 更快抬分,但不以同样方式把推理能力抬起来。01:01:17
| 何时用 | 需要什么 | 典型任务 | |
|---|---|---|---|
| STaR | 大约 100 条带推理的例子、没有 RL 基础设施 | 题已部分在能力内 | GSM8K 一类简单推理,有改进、不神奇 |
| DeepSeekMath / GRPO | 显存有限、还要上 RL | 够好的 base + 指令/领域数据 priming | 标准数学;组 baseline 省 critic |
| DAPO 一类 | 推理链明显变长 = 题明显变难 | 熵、长度、clip、batch 构成全管 | AIME / IMO 竞赛级 |
三者加 compute,一般会改善:majority@k、答案格式、多步连贯。三者都还不会:提高根本能力、教会模型解全新问题、大幅度域外泛化。Pass@k 不涨,被当成「根本能力没跳」的读法;历史上那种跳,来自某维突破或某维缩放,而不是把已经会的题变得更稳。01:03:04 01:04:17
RL / STaR 的 rationale 质量,都挂在「模型会不会推理」和「有没有 verifier / RM」上。模型太强会 reward hacking;RM 没信号就爬不动。可验证域(数学最终答案、上一讲的 execution feedback、单测)容易闭环;没有这种信号的地方,要问验证够不够、要不要 ensemble of verifiers(第三讲已覆盖)。01:05:07 01:05:40 01:06:13
开放问题(课上原清单):
- 为什么多数时候只涨 majority@k、不涨 pass@k?
- 回溯 / 自评 / 自纠正是新涌现,还是本来就会、只是统计上更常出现?
- 几乎没有从失败里学的好方法;失败样本至今多半被滤掉。
值得做的方向:更好的训练数据;让 RL 对 RM 噪声更稳;奖励该长什么样;把 STaR 的合理化跟 DAPO 的稳定化拼在一起。01:06:45 01:07:26
前沿实验室还在多大比例上吃互联网 next-token、多大比例吃本讲这种合成推理数据?Anthropic 没公开。讲师估计:去年 RL 相对预训练大约 1% vs 99%,后来也许到 5%。Grok-4 声称 50% RL,但并没有对应的大跳——瓶颈正是奖励不够强、奖励有噪声。01:07:58 01:08:35
学生问:没见过的知识(例如从没见过微积分)能否靠 RL 推出来?讲师:RL 是把已经会的事在设计空间里搜得更好;靠探索和搜索到达解,不是从零注入新知识。01:09:35 01:10:20
AIME 这种题量很小的集,怎么保证可验证奖励够、还不泄漏?RL 本身更数据高效,并不需要海量题才能爬。验证靠 verifier 质量(可以多个),不是靠把题集堆大。Dynamic sampling 还会把没信号的题滤掉。所以「数据不够」是错抽象;该问的是 有没有足够能 hill-climb 的数据。01:11:02 01:12:10
可操作
- 上 RL 之前先看 base 的 pass@k。经常为 0,先换数据、换更强 base 或先做领域 priming(DeepSeek 的 code→math),不要指望 GRPO 从零发明能力。
- 没有可靠 verifier 的域,train-time 环闭不上。数学最终答案、代码执行、单测是本课反复举的闭环;主观写作不要用同一套期望。
- 小数据、没 RL 栈:先 STaR(对的留下,错的给答案倒推,hint 不进训练集)。有 GPU 但显存紧:GRPO,组内归一化,不要上四份 PPO。长链 / 竞赛题:非对称 clip、丢掉全 0/全 1 组、token-level loss、截断惩罚。
- 同时画:准确率、平均长度、熵、组内全对比例。长度暴涨多半是在奖励「话多」;熵崩是探索没了;曲线平先查 RM 是否饱和。
- 题集难度要有中间带。全会或全不会,归一化 advantage 为零。Dynamic sampling 是在维护有效 batch,不是为了多采着玩。
- 用 KL(或更小的更新)把模型拴在已会区域附近,避免为新基准牺牲简单题。
- 读论文数字时分开 majority@k 和 pass@k。只有前者在涨,等于更稳,不是更会解新题。
术语
| 词 | 意思 |
|---|---|
| Train-time scaling | 把过滤后的自身输出写回权重;用训练算力换参数 |
| STaR | Self-Taught Reasoner:对的 rationale 做 SFT,错的给答案再合理化 |
| Rationalization | 已知答案,倒着写推理;训练样本里不出现 hint |
| V-STaR / Quiet-STaR | 生成器+验证器同环;推理放到隐空间 MLP |
| GRPO | Group Relative Policy Optimization:组内 (r−mean)/std 当 advantage,去掉 critic |
| PPO | 旧/新 policy + critic + RM,四份模型;常带 KL |
| DAPO | 长链上把 clip、采样、长度、截断惩罚写清楚的 RL 配方 |
| Overthinking | 推理链又长又重复,简单题也可能被带坏 |
| Dynamic sampling | 过采样后丢掉全对/全错组,只留有散度的组 |
| Soft overlong punishment | 对截断/超长 token 逐渐加罚,压噪声 |
| majority@k vs pass@k | 多数样本对 vs k 次里至少一次对;本讲 RL 常只抬前者 |
| Hill-climb data | 难度刚好能给出非零、非饱和梯度的数据 |
| Reward hacking | 模型强过 RM 时钻奖励漏洞 |
不确定 / 待验证
- o1 那张 train-time vs test-time 图被当场认为可疑,不能当成「test-time 总更划算」的一般规律。00:12:15
- STaR 数学设定的 51.7% 与 DeepSeekMath 在 MATH 上的 51.7% 数字相同、语境不同;课上没有把两张表并在一起核对。DeepSeekMath 开场 AIME 的 51.7% / 60% 也没有展示原始表。00:01:59 00:28:30 00:46:07
- 「DeepSeek carbon paper、AIME 47%」是口述口误/含混,后文对照的是 DeepSeek-R1 蒸馏到 Qwen-32B;具体哪篇、哪次 AIME split,课上没钉死。00:53:48 01:00:12
- DAPO 累加表(30→36→38→41→42→50)是口述,不是逐行读表;非对称 clip 那张图讲师一度问自己有没有看反。00:55:04 00:59:43
- 去年 RL 约占训练的 1%、后来约 5%,是讲师估计;Anthropic / OpenAI 未在本讲给出比例。Grok-4「50% RL」是课上转述,并被用来说明声称的 RL 比例不会自动变成能力跳跃。01:08:35
- STaR 的 Stanford 作者、PaLM STEM 那篇的论文名,字幕里都没有;不要补成人名/篇名。
- 「从失败里学」被明确标成未解决;本讲没有给出可用算法。
相关
来源 raw/collections/cs329a/06-train-time-scalingscaling-rl.md · 更新 2026-09-04 · confidence: high