从0训练LLM · 现代大模型体系 导读 8 课 + 1 条岔路 + 1 节实验课 ≈ 6 小时 页内实验 ×4
C12 后训练:从续写到听话、推理、做事 章导读

后训练:从续写到听话、推理、做事

预训练出来的模型只会接着往下写。这一章从「原样把问题交给它」出发,一路被真数字逼到 SFT、奖励模型与 PPO、DPO、GRPO、可验证奖励、思考模型、蒸馏,最后在环境里做多轮 RL,把模型交给 Agent 课。每一步都在回答两个独立的问题:梯度怎么算,奖励从哪来。

主线定位

后训练流水线 · 从续写到做事 点已学的站看数据、损失与模型数

本章问题链

每一课只回答一个问题;上一课的失败,逼出下一课的问题。

课这一课的问题朴素方案在哪个真数字上失败一句话
第 1 课预训练模型只会续写,怎么让它回答问题?我们的小模型 SFT 前 64 token 内停下的比例 0%;整段都算 loss 时,86 个预测目标里 63 个在背模板和用户的话SFT 用的还是「预测下一个 token」,只是换了数据、只在回答上算 loss
第 2 课好回答写不出来,但能比较:怎么把「比较」变成训练信号?只示范 A 时,SFT 对好回答 B 和拒答 F 的概率永远逐位相同把「更好」拟合成打分,用 RL 往高分推,KL 拴住
第 3 课能不能不训奖励模型?RLHF 显存里 4 个模型(Qwen3.8 规模约 1,000 GB)DPO 只看对数比之差;第一步 loss 恰为 ln 2
第 4 课PPO 的 value model 能不能去掉?critic 与策略一样大;λ = 0.95 时 PPO 明显差于 GRPO组内互为基线;全组一样就没有信号
第 5 课学出来的奖励会被骗,有没有骗不了的?用奖励模型做 RL,50 步内正确率 0.40 → 0.055能核对就给对 / 错;RLVR 是奖励来源,不是优化器
岔路RL 扩展了能力,还是只把会的排到前面?—小 k 看效率、大 k 看边界
第 6 课怎么让模型想得更久,又能控制?思维链提示对约 100B 以下的模型没有正向收益思考是被 RL 训出来的 token;力度与预算决定想多久
第 7 课小模型怎么继承大模型?Qwen2.5-32B 自己做 RL:AIME 47.0;蒸馏:72.6学老师的整个分布,在自己的路上学
第 8 课从答题到做事,怎么训?SFT 模仿修 bug 轨迹:格式 96.2%,修对 29.6%只训模型写的 token,奖励来自环境
实验课在我们自己的模型上做一次 SFT—格式 50 步就学会,代价是预训练 loss 涨 0.27

演进地图

八代做法按「问题链」排,每一代写清它解决了什么、卡在哪个真数字上;下面第二张图把优化器和信号来源画成两条独立的轴——旧版课程把「PPO → GRPO → RLVR」讲成一条砍法线,那是错的。每一课都会再出现这张图,高亮那一课的位置。

演进图 · 每一代都是被上一代的失败逼出来的
  1. 解决了学会了「预测下一个 token」:贯穿提问在 Qwen3.8 词表里是 13 个 token,模型看到的只是一段要接着写的文字。
    卡在FLAN 原文:不做指令微调的 GPT-3 175B 零样本,25 个数据集里有 20 个输给 137B 的指令微调模型。
  2. 第一代 SFT:用示范教格式 FLAN 2021 · LIMA 2023
    解决了同一个交叉熵,只在回答 token 上算:Qwen3.8 模板里一条 87 token 的样本只有 24 个算 loss;LIMA 只用 1,000 条示范。
    卡在只有正例:教学世界里只示范 A,SFT 对另一个好回答 B 和拒答 F 的梯度逐位相同,两者概率永远相等(第 2 课浏览器实算)。
  3. 第二代 RLHF:奖励模型 + PPO Christiano 2017 → Ziegler 2019 → InstructGPT 2022
    解决了人只需比较两个回答;InstructGPT 的 1.3B 模型胜过 175B GPT-3,175B 版对 GPT-3 的胜率 85 ± 3%。
    卡在显存里同时放 4 个模型:按 Qwen3.8-27B 规模,policy 与 value 各 444.5 GB、RM 与参考模型各 55.6 GB,合计1000.1 GB。
  4. 第三代 · 离线 DPO:不训奖励模型 Rafailov et al. 2023(Stanford)
    解决了闭式解把 RLHF 折成分类损失,第一步 loss 恰为 ln 2 = 0.6931;不采样、不训 RM。
    卡在只看成对之差:教学世界里 A 在 3 对偏好里是被选中的一方,概率却从 0.30 掉到0.002(第 3 课浏览器实算)。
  5. 第三代 · 在线 GRPO 系:去掉 value model DeepSeekMath 2024-02 → DAPO / Dr. GRPO / GSPO 2025
    解决了同一题采一组回答,组内标准化当优势;按 Qwen3.8 规模省掉 444.5 GB 的 value 模型。
    卡在全对或全错的组优势恰为 0:正确率 0.9、每组 8 个时,43.0% 的组白算;错的长回答每个 token 被罚得更轻(第 4 课)。
  6. 奖励来源 RLVR:可验证的奖励 Tülu 3 2024-11 命名 · DeepSeek-R1 2025-01 规模化
    解决了R1-Zero 纯 RL:AIME 2024 pass@1 从 15.6% 升到 71.0%(v1)/ 77.9%(v2)。
    卡在学出来的奖励会被钻空子:教学世界里用 RM 做 RL,50 步内真实正确率从 0.40 掉到0.055(第 5 课浏览器实算)。
  7. 岔路 RL 扩展了能力,还是重排? Yue 2025 vs ProRL 2025
    解决了pass@k 无偏估计:10 次里对 3 次,pass@1 = 0.30,pass@5 = 0.917——k 决定结论。
    卡在Qwen3 表 21:RL 把 pass@1 从 55.0 提到 67.6,pass@64 90.0 → 90.0 不变。
  8. 第四代 思考模型:想更久,也能控 o1 2024-09 · R1 2025-01 · Qwen3 2025-05
    解决了Qwen3-235B 推理 RL:3,995 个 query-verifier 对,AIME’24 170 步内 70.1 → 85.1;同一个模型能想能不想。
    卡在小模型自己做 RL:Qwen2.5-32B 直接做 R1-Zero 式 RL,AIME 2024 只有 47.0。
  9. 第五代 蒸馏:小模型直接继承 Hinton 2015 → GKD 2023 → Qwen3 2025
    解决了同一个 32B 底座蒸馏 R1 的 80 万条数据:72.6;Qwen3 on-policy 蒸馏只用 RL 的 1/10 GPU 时。
    卡在会答题不等于会做事:一条两轮修 bug 轨迹 443 个 token,工具返回的 42 个不是模型写的,不能照单全训。
  10. 第六代 Agentic RL:在环境里做事 SWE-RL 2025-02 · Kimi K2 · GLM-4.5 slime · DeepSeek-V3.2
    解决了奖励来自环境本身(测试过没过);Llama3-SWE-RL-70B 在 SWE-bench Verified 上 41.0%。
    卡在→ 交接 Agent 课:模型吐出一段「调用工具」的文字,然后呢?
两条轴 · 优化器 × 信号来源(不是一条「砍法线」)
信号来源 ↓ / 优化器 →模仿交叉熵(SFT、拒绝采样 SFT)PPOcritic + GAE + clip离线偏好损失DPO 系,不采样组内基线GRPO / DAPO / GSPO蒸馏对老师分布的 KL
人写的示范
FLAN · LIMA2021 · 2023 显存里 1 个模型
人类偏好(学出的 RM)
Ziegler 20192019 显存里 4 个模型
InstructGPT2022 显存里 4 个模型
Llama 3 · Tülu 3 偏好阶段2024 显存里 2 个模型
DeepSeekMath2024-02 显存里 3 个模型
可验证规则
Tülu 3 RLVR2024-11 显存里 3 个模型
DeepSeek-R1-Zero2025-01 显存里 2 个模型
DAPO2025-03 显存里 1 个模型
SWE-RL2025-02 显存里 2 个模型
GLM-5 推理 RL2026-02 显存里 1 个模型
环境反馈
GLM-5.2 / 5.3 SAO2026-07 模型数:未全部披露
DeepSeek-V3.2 agent RL2025-12 模型数:未全部披露
老师模型的分布
Qwen3 strong-to-weak2025-05 显存里 2 个模型
V4 OPD · K3 MOPD2026 模型数:未全部披露

橙框两格是旧课讲错的地方:Tülu 3 的 RLVR 用的是 PPO,DeepSeekMath 的 GRPO 用的是学出来的奖励模型。「RLVR」说的是奖励从哪来,「GRPO」说的是梯度怎么算,两件事可以任意组合。悬停格子里的系统看出处要点。

自己组合:显存里要放几个模型?(Qwen3.8-27B 规模,27,781,427,952 个参数)

三层交互

层本章里的组件在哪一课
概念动画后训练流水线七站;PPO 数据流环路逐步走(rollout → RM → KL → 奖励 → value → GAE → clip)每课开头、第 2 课
算法模拟器(真算法、小数据)教学世界(6 个回答的玩具策略):SFT 梯度、Bradley-Terry 奖励模型、DPO 与闭式解、PPO 多轮更新的 clip、GRPO 真训练与零方差组、三种奖励下的过优化;lm_head 漂移;pass@k 估计与交叉;多数投票二项式;K3 预算规则;温度与正向 / 反向 KL 拟合第 1–7 课、岔路
真模型 / 真数据Qwen3.8-27B 真 tokenizer + 官方聊天模板的逐 token 渲染与两种 loss 掩码(含 transformers 与 TRL 的真实行为);我们自己的 3.7M 模型的 SFT 真实日志;Agent 课项目的真实修 bug 运行(轨迹、组内优势、rollout 长尾);R1、Qwen3、SWE-RL、InstructGPT 的原文数字第 1、6、8 课与实验课

项目推进:把我们的模型微调成会回答的样子

对应 04-实践项目/MILESTONES.md 的「C12 后训练(SFT)」。分工照旧:代码 AI 来写,决策你来做。minillm/sft.py 与 experiments/exp_c12_posttrain.py 已经写好:从语料里抽「某某曰:「……」」构造问答对,只在回答上算 loss,从预训练 checkpoint 出发训 300 步。

🧭

你要拍板的三件事

  1. 模板长什么样,结束符用哪个?用分词器自带、预训练里没出现过的 <|endoftext|>(不扩词表),还是新增专门的特殊 token(要扩 embedding、改 vocab_size)?(第 1 课、实验课)
  2. loss 要不要屏蔽提示部分?本项目的提示比回答长得多、样本只有 6,750 条——正是 Shi et al. 2024 说「对指令也算 loss」可能更好的条件。先写下预测,再跑对照。(第 1 课误解一、实验课)
  3. 学习率与步数怎么定?格式在前 50 步就学会了,之后每一步都在涨预训练 loss。(实验课)

验收标准(全部可测):

项目实测 · 验收用的基线表(c12-posttrain.json)

进阶(选做,对应旧版 M5 的项目步骤):偏好对齐与 RL 在 3.7M 的模型上做不出有意义的结果;想动手,用第 2–5 课的教学世界组件,或者在一个 0.5B 左右的开源模型上用 TRL 的 DPOTrainer / GRPOTrainer 跑一遍——注意第 1 课讲的聊天模板与掩码坑。

坑与带走

坑症状后果怎么办
用错聊天模板不报错,回答质量莫名变差模型在没见过的边界 token 上工作,静默变笨用模型配套的模板(第 1 课)
base 模型没对齐结束符生成停不下来回答顶满长度上限结束符进 loss;我们的项目结束符 loss 16.84 → 0.37(第 1 课、实验课)
信任官方模板的助手掩码transformers 只打一行日志Qwen3.8 这条样本 0 / 87 个 token 被训练用带 {% generation %} 的训练版模板(TRL main 会自动换并在全 0 时报错)(第 1 课)
整段都算 lossloss 看着正常大部分梯度花在背模板和猜用户的话只算助手 token;指令很长、样本很少时可以做对照(第 1 课)
以为 SFT 在灌知识拼命堆数据量数据多、效果不涨,遗忘更多知识在预训练;SFT 重质不重量(第 1 课)
LoRA 只用在注意力层效果明显不如全量微调结论被错误配置拖累LoRA 用在所有权重矩阵上,学习率调高(第 1 课)
SFT 多轮次猛训训练 loss 很低过拟合、遗忘看留出集与预训练 loss,不要只看训练 loss(第 1 课、实验课)
让人给回答打绝对分标注者之间尺度不一奖励信号噪声大用成对比较 chosen / rejected(第 2 课)
RL 不加 KL奖励一路涨策略跑到奖励模型没见过的地方加 KL 锚点,或者换可验证奖励(第 2、5 课)
以为 clip 是概率上限ratio 超过 1.2 以为是 bug误读训练日志clip 只去掉继续推的激励(第 2 课)
DPO 只看 lossloss 降了,chosen 的概率也在降模型塌到少数回答上同时盯 chosen / rejected 的对数概率(第 3 课)
GRPO 不写标准差口径复现时数字对不上结论无法比较写明总体还是样本标准差(第 4 课)
题目太难或太容易大量组全对或全错采样算力白花动态采样、按难度筛题(第 4、8 课)
按回答长度平均损失回答越来越长错的回答尤其长token 级损失或 Dr. GRPO(第 4 课)
盲信奖励模型奖励一路涨、真实效果先升后降reward hacking能核对就用规则;不能就加长度控制与 KL(第 5 课)
验证器写得太松奖励很高,人看了不对模型学会两头下注严格抽取答案、跑完整测试(第 5 课)
只看 pass@1 就说能力提升—误判 RL 的作用同时报告大 k 的 pass@k(岔路)
蒸馏温度设太高学生分布趋于均匀软目标里的差异太弱,学得慢(排序不变)适中的 T,并把软目标乘回 T²(第 7 课)
工具返回也算 loss模型去学预测环境输出学习信号被污染只训模型写的 token(第 8 课)
同步等最慢的 rolloutGPU 利用率很低训练慢几倍部分 rollout、异步,并处理过期 token(第 8 课)
记错出处说 GRPO 是 R1 发明的、DPO 是 Anthropic 的、RLHF 始于 InstructGPT、PPO 原文就有 KL讲错演进史GRPO:DeepSeekMath 2024-02;DPO:Stanford 2023;RLHF 用于语言模型:Ziegler 2019;PPO 原文是 Atari / MuJoCo

这一章你应该带走的(各课「一句话」):

💬

有不明白的? 随时在对话里问,问题会按课 ID 记到 05-问答记录/,真实提问会展开成新的岔路课。

深入这一章

每条都在 2026-09-26 实际打开核对过,写清它讲清了什么、对应哪一课、为什么推荐。外部链接都要联网;论文优先链本地 PDF。

🎮 想更直观 10–30 分钟

先玩本章的组件;下面三条是外部最好的直观入口
20 min中文需联网 Lambert、Castricato、von Werra、Havrilla · 2022-12
RLHF 三阶段(预训练 → 奖励模型 → PPO)的数据怎么流,以及为什么要用 KL 惩罚防止策略跑到奖励模型没见过的分布。
对应第 2 课。图解精准,官方翻译术语一致;HF 在 GitHub issue #1292 挂了勘误表,读前对照一眼。
交互中英需联网 社区项目
REINFORCE、PPO、DPO、GRPO、DAPO 等 11 个算法的公式逐项可点,有 PPO 与 GRPO 的公式 diff 视图。
对应第 2–4 课。diff 视图正好回答「GRPO 相对 PPO 改了哪一项」。社区项目,公式细节以原论文为准。
30 min英文需联网 2026-03-10
同步 RL 里生成占满墙钟时间、训练 GPU 在等;同置与分离两种架构;为什么每个 token 要记录它来自哪一版参数。
对应第 8 课的 rollout 长尾与异步 RL,是本章唯一讲 RL 系统工程的入口。

🔬 想吃透原理 1–3 小时

唯一必看:Raschka《The State of RL for LLM Reasoning》。其余按课挑
约 15,000 词英文需联网
从 RLHF 到 PPO、GRPO、RLVR 与推理模型,含 PPO 伪代码走查和数值例子,并梳理了 2025 年的一批推理 RL 论文。
对应第 2–6 课,单篇价值最高。读的时候带着本章的「两条轴」:文中「RLVR 砍掉奖励模型」说的是奖励来源,不是优化器又进了一步。
按章读英文需联网 纸质版 2026-07 出版
Tülu 3 作者写的整本书:偏好数据、奖励模型、正则、PPO / DPO / GRPO、可验证奖励、推理训练的工程细节。
对应第 2–5 课。把本章每一课展开成一章;作者本人做过 Tülu 3 的 RLVR,第 5 课「PPO × 可验证奖励」的一手解释。
1h07m中文需联网
逐节精读 SFT → RM → PPO 三阶段的动机、标注流程、奖励模型怎么训、PPO 怎么接。
对应第 1–2 课。中文里讲「原始范式」最扎实的一份。
40 min英文需联网
把 GRPO 写成四步,给出组内优势与 KL 的公式,并逐个说明 DAPO、Dr. GRPO 等变体在修什么;默认 β = 0。
对应第 4 课。可以直接当讲义读;配合 GrpoLab 的三个视图。
30–40 min英文需联网
SFT 损失的数学定义、label shifting、−100 机制、assistant_only_loss,以及 Qwen3 从 Base 到 Instruct 的完整例子。
对应第 1 课。那个例子几乎就是本章实验课的蓝本。
万字英文需联网 2024-11-28
reward hacking 的成因与分类;即使代理奖励与真实目标正相关,钻空子照样会发生。
对应第 5 课。和 RewardHackLab 的「先升后降」互相印证。
40 min英文需联网
Bradley-Terry、Elo 与 DPO 损失的推导,附从零实现。
对应第 2–3 课。BT 与 DPO 是同一条推导的两端,这篇讲得最连贯。
各 20–40 min英文需联网 第二篇:huggingface.co/docs/trl/lora_without_regret
前者是数百次 LoRA 实验的量化结论;后者复现 2025 年「配置对了 LoRA 能追平全量微调」。
对应第 1 课的 LoRA 一节。两篇并排读,看同一个问题的认知怎么在两年里演进。
各 15 min英文需联网 第二篇:huggingface.co/blog/chat-templates
前者在 Universal-NER 上对照了屏蔽与不屏蔽用户 token;后者点出模板用错时的静默失败。
对应第 1 课。读完再回到 ChatTemplateMask 看 Qwen3.8 的真实模板。

📄 想读原文 按需

有本地 PDF 的直接打开;其余链 arXiv(需联网,P6 统一下载)
Ouyang et al. 2022
§3.5 的式 (1)(奖励模型)与式 (2)(PPO-ptx);附录 C 的超参(β = 0.02、clip 0.2、6B RM 与 value)。
第 1–2 课的主要出处。
Christiano et al. 2017
不到 1% 的交互给出成对偏好,就能学会复杂行为;chosen / rejected 的形态从这里来。
第 2 课。
Schulman 2017 · Rafailov 2023 DPO:/papers/S5-03-DPO.pdf
PPO 的裁剪目标(原文没有 LLM、RM、KL);DPO §4 的闭式解与式 (7)。
第 2–3 课。
Shao 2024 · DeepSeek 2025/2026 R1:/papers/S5-05-DeepSeek-R1.pdf
GRPO 式 (3)、学出来的奖励模型、KL 0.04;R1-Zero、不用神经奖励模型的理由、GRPO 与 PPO 的对照、蒸馏对照表 16。
第 4–7 课。本地的 R1 是 2026-01 的 v2(Nature 版),数字与 v1 不同处页面已注明。
Hu 2021 · Wang 2023 Self-Instruct:/papers/S4-03-Self-Instruct.pdf
低秩假设与 2rd 的参数账;用模型自己生成、再过滤的指令数据。
第 1 课。
Hinton 2015 · Wei 2022 CoT:/papers/S6-07-Chain-of-Thought.pdf
温度与乘回 T²;思维链提示只在约 100B 以上有收益。
第 6–7 课。
2026 GLM-5:/papers/S7-03-GLM-5-Tech-Report.pdf
K3 §4.1.2:推理力度 RL(超预算奖励改为 −1)、智能体式生成奖励模型、部分 rollout、多老师 on-policy 蒸馏;GLM-5 §3:后训练骨架与 slime。
第 5–8 课的前沿做法。官方自报。
arXiv需联网 2109.01652 · 2305.11206 · 2411.15124
RLHF 第一次用于语言模型(5,000 条比较);指令微调 20 / 25 胜 GPT-3;1,000 条示范与表层对齐假设;RLVR 的命名与 PPO 训法(α = 10)。
第 1、2、5 课的出处。旧版课程把 LIMA 错链到了 InstructGPT 的 PDF,这里改正。
arXiv 2025需联网 2503.20783 · 2507.18071 · 2504.13837 · 2505.24864
GRPO 的三个修补(动态采样、长度偏置、序列级比率);RL 扩展能力还是重排的两方。
第 4 课与岔路课。
arXiv需联网 2306.13649 · 2306.08543 · 2502.18449 · 2512.02556
模式融合、思考预算、strong-to-weak 蒸馏与表 21;on-policy 蒸馏;反向 KL 蒸馏;SFT 与 RL 的修 bug 对照;1,800+ 环境的任务合成。
第 6–8 课。
🚫

排除了什么(也是筛选标准):① CSDN、知乎上大量「DPO vs PPO vs GRPO 完全指南」——同质化转载、只贴公式不讲动机,多数还把 GRPO 记成 R1 发明的;② 把「PPO → GRPO → RLVR」讲成一条砍法线的解读(包括本课程旧版)——混淆了优化器与奖励来源;③ 复述型的 R1 解读——多数不区分 v1(71.0%)与 Nature 版(77.9%)的数字;④ 只教调用 API 的 GRPO / DPO 速通教程——拿到的是参数表,拿不到「朴素方案为什么失败」;⑤ 李沐的 GRPO / R1 精读——多次检索未找到,不存在就不列。另注:OpenAI 的 o1 博客对脚本访问返回 403,第 6 课引用的数字经搜索结果核对,浏览器打开需联网。