04 / Post-Training研究

现代后训练:从示范到可学习的反馈

SFT、蒸馏、拒绝采样和在线优化,如何组成一套能力改进系统。

用监督信号、数据分布和算力流建立后训练地图,解释何时值得从静态数据走向在线交互。

READ WITH A QUESTION

读完这一章,你应该能够

  • 按反馈类型选择训练方法
  • 区分采样改进与参数改进
  • 定位后训练的数据瓶颈与能力瓶颈
前置理解 自回归语言模型损失 · 条件概率 · 训练与验证集划分
本章目录 · 0 个小节

问题不是“接下来跑哪一个算法”

设想同一个基础模型:能写出正确函数,却不遵守返回格式;能遵守格式,却在难题上找不到解;能解单题,却不会在终端报错后修复。三个问题需要不同的反馈。把它们统称为“再做一轮 SFT”,会使数据量不断增长而瓶颈不动。

课程分析:后训练是选择、暴露、强化行为的组合过程。它依赖基础模型已有的表示和候选解分布,也可能通过反复探索形成新的求解策略。“只是解锁已有能力”与“可以凭空学会一切”都不足以指导实验。先测多样采样下是否曾出现正确解,再决定需要更好的选择器、更多探索,还是回到能力塑形阶段。

R1 技术报告描述冷启动数据、推理强化学习、拒绝采样与监督训练、进一步强化学习的阶段组合;该报告支持“后训练可以交替使用监督与反馈”,不能据此认定所有团队遵循相同顺序,也不能把公开权重视为完整训练代码。报告证据

先决定监督对象,再决定方法

可获得的信号数据单位适合解决的问题主要风险
高质量示范提示、目标回复、有效 token mask格式、工具协议、典型解题行为模仿教师错误或表面文风
相对偏好同一提示下的 chosen / rejected已有候选之间的行为排序标注偏差、离线分布陈旧
可验证结果任务、生成轨迹、执行结果数学、代码等有检查器的任务检查器漏洞、探索稀疏
过程评价状态、动作、局部评价定位长链条中的局部错误局部正确不保证最终成功
环境回馈动作、观察、终止条件软件工程、浏览、长期任务环境成本、状态与归因复杂度

这是一张课程分类表,不是宣称某一方法在所有任务上优于其他方法。过程监督的代表性论文比较了数学任务中的过程奖励与结果奖励;该实验不直接证明任意 Agent 中逐步奖励优于最终奖励。论文实验

SFT 的质量在张量形成之前决定

监督损失可写为:

LSFT=−∑i,tmi,tlog⁡πθ(yi,t∣xi,yi,<t)∑i,tmi,t.\mathcal L_{\mathrm{SFT}}=-\frac{\sum_{i,t}m_{i,t}\log\pi_\theta(y_{i,t}\mid x_i,y_{i,<t})}{\sum_{i,t}m_{i,t}}.

mm 指明哪些 token 真正被监督。多轮工具轨迹里,用户消息与工具输出通常作为条件,模型回答和工具调用才是策略行为。若把一段测试日志当成模型应生成的答案训练,模型可能学会复述“测试通过”,而不是修复代码。损失 mask 与 attention mask 的语义必须分开。

课程分析:构建 SFT 数据至少经过来源许可检查、任务去重、可执行验证、格式验证、难度分桶和拆分泄漏检测。过滤器有误报与漏报,应抽样人工复核;质量评分更高不等于下游增益更高。按领域和难度分别报告接受率,否则一个“高质量”过滤器可能把少数语言或困难任务全部删除。

蒸馏有两种不同预算:离线序列蒸馏保存教师生成结果,再做交叉熵;分布蒸馏对齐教师概率分布,需要额外推理和词表对齐。对于公开模型案例,只有技术报告明确说明的蒸馏形式才可当作事实。R1 报告提供从其生成数据进行蒸馏的案例;本站不推断未公开的教师服务部署配置。报告证据

拒绝采样与 Best-of-N 为什么不同

对同一任务采样 NN 条候选,经验证器筛选。若只在当前请求中返回最优候选,是推理时选择;若把通过候选积累成训练集再更新参数,才是拒绝采样微调。两者共享生成和验证开销,但一个将成本支付在每次请求,一个将成本摊入后续模型。

在候选独立且单次成功率为 pp 的理想条件下,至少出现一个成功候选的概率是 1−(1−p)N1-(1-p)^N。这里的“出现”不等于“识别”:错误的 grader 可能从正确候选集合里仍选出错误结果。实际采样也常相关,因此不能把这个式子直接当作扩容收益承诺。

课程分析:只保留通过样本会改变任务分布。容易任务产出多、困难任务可能完全消失。要记录每个任务的尝试次数、成功次数、选择概率和教师版本,并设置任务级配额。没有这些分母,就无法区分“模型变强”与“数据变容易”。

从离线偏好转向在线反馈

离线 DPO 可以直接训练偏好对而不在每个优化步骤实时调用 reward model。它的理论依赖偏好模型和参考策略等条件,不是对任意数据都等价于理想 RL 的保证。DPO 论文

在线方案则定期或连续用当前策略生成候选、调用偏好标注器或验证器、更新策略。在线描述的是数据与当前策略的关系;使用 DPO 形式的损失并不自动意味着完全离线。新增系统成本包括生成服务、评分服务、版本追踪、样本队列和过期数据治理。

CODE / 可复制
任务池:来源、难度、拆分标签
候选生成:policy / teacher 与采样预算
验证和偏好标注:结果、置信度、grader 版本
数据选择:SFT 示例 / 偏好对 / RL 轨迹
训练更新:loss mask、参考模型、优化器
独立评测:能力、行为、成本与退化
失败分析返回任务池

当工具执行、浏览器状态和多轮观察成为反馈的一部分,继续扩展的是这条数据链,而不仅是一个新的 loss。下一步阅读Agent 组成边界。

新一代路线:在线策略蒸馏接在什么位置

官方陈述,查阅于 2026-09-22:DeepSeek-V4.1-Flash 模型卡明确描述 SFT → RL → on-policy distillation,且称主要变化在 Agent 任务与环境自动合成的数据链,而非新的后训练算法。这里的证据是模型卡和报告,不是本站获得了其完整训练系统。当前案例

课程分析:离线蒸馏让学生拟合教师走过的轨迹;on-policy 蒸馏则让教师在学生实际到达的前缀上提供分布或反馈,直接覆盖学生自己的错误状态。示意目标可写为 Eh∼πs[DKL(πs(⋅∣h)∥πt(⋅∣h))]\mathbb E_{h\sim\pi_s}[D_{\rm KL}(\pi_s(\cdot|h)\|\pi_t(\cdot|h))],但 KL 方向、采样近似、教师组合与优化细节因实现而异;这个示意式不是对 DeepSeek 未公开实现的断言。

它新增 teacher inference 预算和学生 rollout 预算,还要求 teacher/student 对相同前缀、工具协议和 token 支持给出可比较信号。若只在“完美教师历史”中训练学生,学生实际犯错后可能没有被覆盖。MiMo-V2.6-Flash-RL 模型卡提出混合自主学生轨迹、教师前缀和 SFT 前缀的多教师蒸馏路线,可作为这一覆盖/成本权衡的新案例;仅凭模型卡不能补全其完整生产配置。官方模型卡

真实源码:看 batch,而不是只看 Trainer 名字

源码观察:在 TRL 的固定版本 b8721872beaf3e8b6e78b6c991f15682d17d86d2,文件 trl/trainer/dpo_trainer.py 中,DPOTrainer._compute_loss 读取 input_ids 与 completion_mask,错开 logits 和 labels 后取 token log probability,屏蔽非 completion token,再分出 chosen 与 rejected;参考 log probability 可以预计算,也可以由冻结参考模型计算。源码与版本

调用链是训练器 compute_loss → _compute_loss → model forward → masked log-prob reduction → preference objective。输入按 chosen、rejected 拼接,形状概念为 [2B, T];输出是可微的标量损失,内部日志保留偏好相关统计。不要照搬旧博客里的 dpo_loss 方法名:本文版本的真实入口已经变化。

这条导读适合提出两个工程问题:参考 log-prob 缓存是否与 tokenizer、模板和截断配置一致?chosen 与 rejected 是否真的来自同一个任务与观察前缀?任一项错位都可能让 loss 正常下降而能力恶化。

最小实验与生产差异

在项目根目录运行:

CODE / 可复制
python3 -m labs.run --experiment preference --seed 7
python3 -m unittest discover -s tests -p 'test_*.py' -v

教学实现用有限动作的概率分布计算偏好目标、解析导数与中心差分,观察一次更新如何改变相对概率。它没有加载语言模型,目的是把“数据 → 标量目标 → 参数梯度 → 行为分布”连起来。预期解析导数与差分接近,偏好目标沿正确方向改善;实际数值以命令输出为准。

生产模型还需要处理序列求和与长度偏差、混合精度、参考模型显存、分布式梯度聚合、训练/推理模板一致性。有限动作实验通过只能验证目标函数,不能证明长文本训练稳定。

如何发现路线选错了

现象优先检查需要追加的实验
偏好胜率涨,执行正确率降grader 是否偏爱文风、长度隐藏执行测试与长度匹配评测
SFT loss 降,困难任务不变成功示范是否覆盖难任务按任务难度画接受率和学习曲线
增加候选数没有提升候选相关性、单次成功率、验证器召回固定任务比较生成上限与选择上限
在线 reward 涨,固定集不涨任务采样变化、污染、奖励漏洞固定 grader 与 holdout 环境复测

工程任务:为一组代码修复任务设计 SFT、拒绝采样微调、在线 RL 三个等总预算实验。预算必须计入生成 token、测试 CPU 时间、训练 GPU 时间和标注成本。提交数据 schema、拆分规则、阶段停止条件、失败归因表。若三个实验的基础 checkpoint、任务分布或推理预算不同,不得把结果简单归因于训练算法。

MAKE IT RUN

把这一章放进实验里

调整变量,观察机制,再运行本地 Python 实验验证。

进入实验

本章证据与源码

引用代表相应来源支持的结论,不意味着公开了完整训练配方。

论文实验DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement LearningDeepSeek-AI · arXiv:2501.1源码观察TRL:DPOTrainer 的当前偏好损失入口huggingface · b8721872beaf论文实验Direct Preference OptimizationRafailov et al. / Stanford · arXiv:2305.1论文实验Let’s Verify Step by StepLightman et al. / OpenAI · arXiv:2305.2源码观察verl:多轮 Agent rollout 的标准化接口volcengine · 8e03c039f9a7官方事实DeepSeek-V4.1-Flash:官方模型卡deepseek-ai · dba1be0a40aa官方事实MiMo-V2.6-Flash-RL:混合Agent RL与分组评分XiaomiMiMo · 5711b2681699

留下你的工程判断

记录一个还没有解释清楚的现象,或下一次实验要控制的变量。笔记仅保存在当前浏览器。

自动保存在本机 · 可在“我的学习笔记”导出
理解机制,比记住结论更重要。