--- name: post-training-strategy description: 为 Agent 模型做后训练或选路线时使用——判断该先补 Mid-training、用 SFT 立协议还是直接上 RL;构造 Mid-training 语料与 SFT 数据、搭建 RL 环境、在 GRPO/PPO/DPO 与蒸馏之间取舍;排查 pass@k 近零、格式不稳就训 RL、组内无奖励差异、训练-推理数值失配、过度训练泛化下降。触发词:后训练、Mid-training、继续预训练、SFT、RL、GRPO、PPO、DPO、拒绝采样、RFT、蒸馏、on-policy、RLVR、LoRA。 --- # 模型后训练策略 ## 何时使用 - 模型在某类任务上"做不好",要判断是缺底座、缺协议还是缺策略 - 决定项目走 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. 上线前的自检清单 - [ ] 在独立留出集上测过 `pass@1` 与固定配置下的 `pass@k`,并人工审计了失败原因 - [ ] 阶段切换有可测门槛,不是"Mid-training → SFT → RL"当仪式 - [ ] 每个阶段都有独立保留集与早停判据(领域/通用/指令遵循分开看) - [ ] RL 前奖励能在少量 rollout 中产生有意义的组内差异 - [ ] 更新前比较过 sampler 与 trainer 的 token log probability,监控概率比均值/分位数/最大值、近似 KL、被裁剪比例与策略 staleness - [ ] 同步的不只是权重,还有 LoRA adapter、tokenizer、chat template、模型 revision 与位置编码配置 - [ ] 先小规模验证关键假设,再放大训练预算 ## 常见陷阱 - **用 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`「后训练实践要点」