模型后训练策略
何时使用
- 模型在某类任务上"做不好",要判断是缺底座、缺协议还是缺策略
- 决定项目走 Mid-training / SFT / RL 哪条路线,或要不要做 RL
- 构造 Mid-training 语料、SFT 示范数据、拒绝采样数据
- 搭建 RL 训练环境、选择 RL 算法与 LoRA 超参
- 用蒸馏提升样本效率(CoT 蒸馏、Prompt 蒸馏、在轨蒸馏、自蒸馏)
- RL 训练不收敛、组内无差异、更新后能力退化,需要定位原因
核心原则
- 四阶段不是三种"微调力度",而是分别处理底座、协议与策略。 Mid-training 补知识与基础能力,SFT 固化输出格式与行为协议,RL 重新分配概率质量并探索示范之外的策略。三者各有进入门槛,不是流水线仪式。
- 数据和环境比算法更重要。 决定成败的是 Mid-training 语料是否补齐底座、示范数据是否建立行为协议、仿真环境与奖励是否提供可靠试错反馈。PPO/GRPO 的基本用法掌握即可,很多场景下前两类数据到位后根本不需要 RL。
pass@k 是最重要的分流指标。 在留出任务上以接近训练的溫度采样:pass@k = 1-(1-p)^k。pass@1 低但 pass@k 随 k 明显上升 → 正确策略已在分布里,RL/拒绝采样/蒸馏有东西可放大;合理 k 与温度下 pass@k 仍近零 → 基模几乎生成不出成功轨迹,此时只给 0/1 奖励,GRPO 一组 rollout 全为 0,组内优势直接消失。
- "SFT 记忆、RL 泛化"是受控实验下测得的倾向,不是普遍属性。 数据足够多样、正则化得当时 SFT 也能泛化;奖励或环境有偏时 RL 也会过拟合。机制解释:极大似然 SFT 有 mass-covering 倾向,RL 配合反向 KL 有 mode-seeking 倾向。
- SFT 与预训练是同一个数学任务(预测下一个词),差别只在数据组织和损失屏蔽(只在回答 token 上回传梯度)。所以 SFT 样本效率极高(几千条见效),也因此在示范覆盖不足时容易记住问法而非形成知识。
- LoRA 是工程默认项:必须应用到所有主要权重矩阵(尤其参数占比最大的 MLP,只加注意力层会掉点);最优学习率约为全参微调的 10 倍;SFT 用中高 rank(64–256),RL 每轮信息量小、用小 rank(8–32)甚至 1。
- on-policy 是数值问题,不只是调度问题。 采样引擎与训练引擎的浮点差异会让更新前本应为 1 的概率比偏离 1,把名义上的 on-policy 悄悄变成 off-policy。sampler/trainer 一致性应与奖励曲线同等重要。
实践模式
1. 路线决策:先诊断缺口,再选方法
| 观察到的现象 | 主要缺口 | 优先方法 | 进入下一阶段的门槛 |
|---|
领域概念、语言或基础操作不会;合理采样下 pass@k 仍近 0 | 知识与能力不在基模有效支持中 | Mid-training;动态事实用 RAG | 领域留出集改善、通用保留集可接受、目标任务开始出现可验证的正确或部分正确轨迹 |
| 偶尔能做对,但格式、工具 schema、语气或固定流程不稳定 | 行为协议没固化 | SFT 或约束解码 | 解析成功率稳定,关键动作与输出协议可被验证器可靠评分 |
| 已有非零成功率和可靠奖励,但好策略概率低、长程决策或 OOD 泛化不足 | 概率质量分配与策略优化 | RL | 奖励与真实目标一致;rollout 组内有足够奖励差异;独立测试集随训练改善 |
| 只有少量稳定示范,尚无可交互环境 | 可模仿数据有、在线反馈无 | SFT/RFT/离线偏好优化 | 先建立基线与评估,再判断是否值得建 RL 环境 |
决策顺序:① 先排除不需要改权重的方案(prompt、工具、代码约束、上下文管理能解决就不训练;事实需频繁更新/引用/删除就走 RAG)→ ② 在目标留出集测能力支持(不只贪心 pass@1,还看固定采样配置下的 pass@k、部分进展率、格式解析率,并人工审计失败原因)→ ③ 用 SFT 立协议,不拿它硬塞知识库 → ④ 只在有探索空间时上 RL。
2. Mid-training:补底座
数据构造五步:从失败分布反推数据(按主题/语言/文档类型/代码模式/上下文长度切分评估,只针对知识与能力缺口补,别把输出格式错误误诊成知识不足)→ 构造高密度目标语料(原始文档建立术语事实关联,代码仓库学结构与依赖,教材式推导与合成释义把隐含关系写明确;做去重、质量过滤、评估集污染检查)→ 按能力配比(自然长文本 + 长文本原子能力思维链 + Agent 执行轨迹,后两类可从较强开源模型蒸馏)→ 每个阶段做双重回放(原始短文本与通用数据保留语言知识;"长度提升后的旧任务"检验同一能力在更长窗口仍成立;通用数据最好来自基模原始预训练集,取不到用 FineWeb-2 类开源语料)→ 多维门禁决定停止(留出领域任务、通用能力、原有指令遵循、目标任务 pass@1/pass@k 同时跟踪;领域升而通用降 = 混合或学习率过激,loss 降而 pass@k 不动 = 数据没覆盖所需能力或缺少访问知识的 SFT)。
Mid-training 后必须用 LongBench v2、IFEval、端到端 Agent 评估验证不同上下文长度下的长上下文基础能力没有丢失(位置与检索、关系与推理、聚合与统计、指令遵循、长链思考、Agent 原子能力六类)。稳健配方:Mid-training 吸收知识与能力 → 小规模 SFT 建立输出格式 → 有非零成功率后再 RL。先小规模验证数据配比,再扩大训练预算。
3. SFT:立协议
数据三条路,常组合使用:人工专家示范(质量天花板最高,贵而慢,适合定义格式与风格的种子数据)→ 教师模型生成(合成数据,强模型批量产出的"输入—输出"对,过滤后蒸馏给学生)→ 拒绝采样(模型对同一问题采样多条候选,验证器筛出正确样本再反过来训练自己,即 RFT,是可验证任务上性价比极高的数据构造手段)。
构造流程:定义任务分布与输出 schema → 批量生成候选 → 规则校验 + 格式检查 + 人工抽检做质量过滤 → 去重、平衡配比、保证多样性。数千到数万条高质量样本通常足以固化输出格式;与其堆十万条脏数据,不如精修一万条干净数据——数据里的每一处噪声,SFT 都可能忠实地写进参数。
流水线:线上数据 → 任务蓝图 → 合成任务 → 多次候选轨迹 → 任务验证与轨迹验证 → SFT 数据。能写成单元测试、数据库断言或状态差异检查的条件优先用确定性代码;开放式沟通质量再用模型评价器补充并人工抽样校准。训练集按任务模板/客户/时间段去重划分,评估集必须来自不重叠的任务类型;参考解法、隐藏测试和验证器反馈不能泄露给模型。
4. RL:一次参数更新的四步
以 GRPO 为例(同一 SWE-bench 任务复制到 16 个隔离沙箱):① rollout —— 策略模型独立解决 16 次,每次包含完整的"读代码 → 改文件 → 跑测试 → 提交";② 计算奖励 —— 验证器在干净环境应用补丁并运行测试,4 通过得 1、12 失败得 0;③ 计算相对优势 —— 组内平均 4/16,通过的 4 条得正优势、失败的 12 条得负优势;④ 梯度下降更新 —— 提高正优势轨迹中模型所做选择的概率,降低负优势的。全成功或全失败的组没有组内差异,梯度消失。
PPO 与 GRPO 的区别只在"拿谁来比较":GRPO 直接比较同一问题的多条 rollout,不需要价值模型;PPO 训练价值模型逐步估计"通常能做到多好",更适合需要细粒度信用分配的长轨迹。DPO 则学习事先收集好的偏好对,不让当前策略在线生成 rollout。
环境工程顺序:任务蓝图 → 可重置模拟器 → 确定性验证器 → 训练/评估隔离 → 少量真实交互校准。训练环境与评估环境可共享任务生成器与验证代码,但不能共享同一批任务;测试用例、隐藏状态和参考解法留在验证器一侧。先用少量 rollout 检查"任务是否可完成、验证器能否区分对错",再扩大采样规模。注意确定性验证器的 CPU 吞吐可能成为瓶颈(吞吐取决于并行验证器 worker,而不是继续堆 GPU)。
工具轨迹的关键细节:环境返回的 token 不是策略生成的,计算策略梯度时必须屏蔽这些反馈 token,只对模型自己的思考和工具调用参数回传梯度,否则模型会被训练去预测沙盒输出。
5. 蒸馏:把一次 rollout 变成密集监督
样本效率低根因是反馈太稀疏——一条 rollout 结束只得一个成败标量。蒸馏让同一条轨迹贡献大量梯度。
- 在轨蒸馏(On-Policy Distillation):学生决定走到哪里,教师在学生已经走到的位置给出下一步的完整 token 分布,最小化两者 KL。长度 T 的 rollout 产生约 T 组逐 token 监督,数学任务上达到同等性能所需步数约为纯 RL 的 1/10。前提是学生至少能进入教师可纠正的有效状态,教师策略不能离学生有效支持太远。
- On-Policy 自蒸馏(OPSD):没有更强教师时,同一模型分饰两角——教师版看到"特权信息"(标准答案、已验证解答、领域文档),学生版只看到问题本身,在自己采样的轨迹上向教师版逐 token 分布对齐。特权信息只能在训练侧构造,不能泄露给部署时的 Agent。它不会凭空创造新知识:模型拿着答案也讲不清过程时就没有额外信号;朴素 OPSD 可能丢失原有思考风格,需要保留集/风格正则。
- CoT 蒸馏 / Prompt 蒸馏:前者转移强教师的完整思考轨迹,同参数量下可恢复教师 70%–80% 能力;后者把"长提示 + 思考型教师"压缩进"短提示 + 非思考学生",获 20–30 倍响应速度提升。蒸馏会继承教师的系统性错误与冗长思考习惯。
6. 上线前的自检清单
常见陷阱
- 用 SFT 硬塞知识库,或把所有知识都交给参数。少量事实可随示范学入,大规模相互关联的知识应走 Mid-training;需动态更新、引用、权限控制或删除的事实应由 RAG 管理。
- 格式未稳定就引入 RL。模型不能稳定生成奖励计算所需的 JSON 时,训练信号会稀疏或失真;先用小规模评估设定格式稳定性门槛,必要时 SFT 或约束解码。
pass@k 近零仍直接上 RL。全失败 rollout 没有正向轨迹,组内优势消失,通常只会消耗采样预算。
- 把标称窗口当成有效窗口。位置编码允许 128K 不代表模型在 128K 上仍会检索、推理和规划;扩窗前先完成当前长度的能力门禁,按"能力 × 长度"矩阵检查退化。
- 忽视仿真保真度。仿真过于简化或环境响应不真实,训练出的策略一上线就失效;高保真环境的构建成本可能高于训练本身。造不出真实环境时用模型扮演环境(合成工具返回值、仿真环境动态),但模拟器的世界知识就是训练的天花板,其系统性偏差会被策略照单全收,需辅以真实交互定期校准。
- 过度训练导致泛化下降。训练损失持续下降而验证集恶化时,模型在死记训练细节。Mid-training 造成通用能力遗忘、SFT 过拟合示范、RL 过拟合当前奖励与任务分布,三者都需要独立保留集和早停。
- 价值函数崩溃与探索不足。PPO 价值估计不准会让优势计算出现偏差,表现为训练曲线剧烈震荡;温度过低或随机性不足会使 Agent 陷入局部最优。
- 把训练—推理数值失配当成小噪声。log probability 小误差会经指数化、长前缀累积、裁剪与优势加权被放大,最终表现为重要性比率尖峰、大量 token 被裁剪、梯度或响应长度突变、奖励与熵一起坍塌。
- 低估 RL 的计算成本。SFT 上表现良好的任务转 RL 可能需要 10–100 倍训练时间;测试分布与训练高度一致时 SFT 可能已经足够。
- 训练数据质量低下。Mid-training 会吸收语料中的错误关联,SFT 会直接学习示范噪声,RL 的奖励若有系统性偏差则会把策略朝错误方向放大。
配套代码
chapter8/continued-pretraining/ — 继续预训练补新语言(Mistral 7B + 韩语维基,80/20 配比缓解遗忘,LoRA + 训练 embed/lm_head),演示 Mid-training→SFT 两阶段职责分离。
chapter8/curly-quote-sft/ — 作用域敏感的 SFT:先把反馈提炼成 SKILL.md 规范,再用结构化合成数据训练 Qwen3-8B LoRA。
chapter8/exact-copy-sft/ — 特殊字符串 byte-exact 复制 SFT,含 tokenizer 审计以排除词元化造成的假象。
chapter8/cot-distillation/ — CoT 蒸馏三阶段:可审计的教师轨迹采集(规则验证过滤)→ 学生真实参数更新 → 配对基座/学生/教师评估。
chapter8/SimpleVLA-RL/ — 稀疏结果奖励下的开放探索:一条演示 SFT 冷启动 + GRPO,成功率 17.3%→91.7%,发现演示中没有的动作。
chapter8/retool/ — SFT 预热后用交织文本-代码思考与沙盒反馈做 PPO,AIME 2024 约 25%→67.0%。
chapter8/AWorld-train/ — MCP 多工具沙盒中跑通可重置、可重放的多工具训练链路。
chapter8/RLVP/ — 奖励结果、惩罚路径:GRPO 上叠加结果奖励与确定性路径信号。
chapter8/AdaptThink/ — RL 训练"何时不思考"的元策略,含约束优化目标与重要性采样冷启动处理。
深度阅读
book/chapter8.md「从预训练到 RL:四阶段全景」
book/chapter8.md「Mid-training:补知识与基础能力」
book/chapter8.md「SFT(监督微调)」「SFT 数据合成:从示范到可训练轨迹」
book/chapter8.md「何时选择 Mid-training、SFT 与 RL」
book/chapter8.md「RL 算法:从 16 次 rollout 到一次参数更新」
book/chapter8.md「RL 环境:从评估到仿真」
book/chapter8.md「蒸馏:提升样本效率」
book/chapter8.md「后训练实践要点」