方法详细拆解:SFT / RL / OPD
从数学原理、梯度行为、遗忘机制到工业实践,逐一对三种后训练方法进行拆解。
一、SFT(Supervised Fine-Tuning,监督微调)
数学形式
SFT 在固定数据集 上最小化交叉熵损失:
等价于最小化模型分布与经验目标分布之间的前向 KL 散度:
梯度行为
每个 token 获得均等的梯度信号,不论该 token 是推理关键步骤还是风格填充词:
灾难性遗忘机制
- 均匀压力: 所有 token 一律接受梯度更新,没有优先级区分
- 无距离约束: 前向 KL 不限制模型分布与起始分布的距离
- 全分布覆盖: 为匹配目标分布 ,模型可能丢弃 支持之外的模式(即原有能力)
旧分布 P₀ 目标分布 Q
/|\ /|\
/ | \ 前向 KL / | \
/ | \ ==========> / | \
| | |
旧模式被覆盖 新模式被引入
优势与局限
| 优势 | 局限 |
|---|---|
| 实现简单,收敛稳定 | 灾难性遗忘 |
| 可以利用海量离线数据 | 测试时分布失配 |
| 计算效率高(无需在线采样) | 泛化差(复合误差) |
二、RL(Reinforcement Learning,强化学习)
数学形式
使用策略梯度方法(如 REINFORCE)在 on-policy 样本上优化:
其中 通常是二元奖励(0/1), 控制 KL 惩罚强度。
REINFORCE + 二元奖励 = Rejection Sampling
当 时:
- 从当前策略采样 个 response:
- 筛选 的样本
- 在正样本上做加权监督学习
这等价于 rejection sampling,收敛到的策略为:
反向 KL 的隐式作用
RL 的反向 KL 属性来自 on-policy 采样本身,而非显式 KL 惩罚:
- 模型只能在自己的分布中采样 → 正样本自然聚集在当前分布附近
- 更新方向朝向”最近的可行策略”
- 移除显式 KL 惩罚后,on-policy 采样仍提供隐式正则化
稀疏更新模式
SFT 更新: ████████████████████ (每个 token 均匀更新)
RL 更新: ██ ████ ██ (仅在正样本的 token 上更新)
正样本比例通常很低(如 pass@1 ≈ 0.1-0.3),意味着大部分采样结果被丢弃 → 稀疏的参数更新 → 更少的分布偏移。
优势与局限
| 优势 | 局限 |
|---|---|
| 遗忘少(隐式 KL 约束) | 信号稀疏(二元奖励信息少) |
| 泛化好(状态分布匹配) | 需要在线采样(计算开销大) |
| 不依赖教师质量 | 信用分配困难 |
| 可突破 SFT 上限 | 训练不稳定(策略梯度方差大) |
三、OPD(On-Policy Distillation,On-Policy 蒸馏)
数学形式
学生模型 在自己的前缀上接收教师 的分布监督:
关键差异:前缀 由学生生成(on-policy),而非来自教师的数据集。
OPSD 变体(On-Policy Self-Distillation)
OPSD 是 OPD 的一种特例,教师 = 学生 + 参考答案前缀:
其中:
- 参考答案前缀 :给教师提供正确的”起点”,学生在此基础上自由生成
- Per-token clipping: 防止 KL 在某些 token 上过大
- Style token 掩码: 排除风格/格式 token,仅对内容 token 进行蒸馏
为什么 OPD 学生能超越教师
SFT: 教师数据 → 学生模仿(学生只在教师分布中学习)
OPD: 学生探索 → 教师在学生路径上指导(教师适应学生分布)
- 前缀由学生产生: 教师看到的是学生实际遇到的分布,而非教师自己的分布
- KL 保留丰富信息: 教师分布包含不确定性、替代方案、风格偏好
- 模式坍缩可能有利: 围绕正确方向收缩分布 → 性能提升
- 教师质量上限较低: 实验表明 SFT 教师和 RL 教师产出的 OPD 学生表现相似
优势与局限
| 优势 | 局限 |
|---|---|
| 遗忘少(on-policy 属性) | 需要在线采样 |
| 信号密集(逐 token KL) | 教师偏差可能传导 |
| 泛化好(状态分布匹配) | 计算开销高于 SFT |
| 可超越教师 | 信用分配仍不够精细 |
| 结合 RL 和蒸馏优点 | OPSD 依赖参考答案质量 |
四、工业流水线
标准流水线
flowchart LR A[预训练<br/>Pretrain] --> B[SFT<br/>监督微调] B --> C[RL<br/>强化学习] C --> D[OPD<br/>On-Policy 蒸馏] D --> E[最终模型] style A fill:#e1f5fe style B fill:#fff3e0 style C fill:#fce4ec style D fill:#e8f5e9 style E fill:#f3e5f5
各阶段作用
| 阶段 | 作用 | 特点 |
|---|---|---|
| 预训练 | 构建基础语言能力分布 | 大规模无监督学习 |
| SFT | 建立指令遵循能力 | 离线数据,可能引入遗忘 |
| RL | 提升推理/任务解决能力 | On-policy,保持分布接近 |
| OPD | 融合多专家能力,软化回归 | On-policy 蒸馏,最终稳定化 |
行业实践
GLM 5 / DeepSeek V4 模式:
RL 训练多个专家 → OPD 融合 → 最终模型
- RL 阶段可能训练多个专家(数学专家、代码专家等)
- OPD 作为最终融合阶段,杂交各专家能力
- 最终模型常超越单个 RL 教师
MiMo-V2 Flash 模式:
- 数学/代码推理:偏好 RL(需要精确的逐步推理)
- 创意写作/知识:偏好蒸馏(需要丰富的分布信息)
- 根据不同能力域选择不同后训练策略
完整流水线的 Mermaid 图
flowchart TB subgraph 预训练阶段 A[大规模预训练<br/>Base Model] end subgraph SFT阶段 B[指令数据 SFT<br/>建立指令遵循] end subgraph RL阶段 C1[RL 专家 1<br/>数学推理] C2[RL 专家 2<br/>代码生成] C3[RL 专家 3<br/>其他领域] end subgraph OPD阶段 D[OPD 融合<br/>多专家蒸馏] end subgraph 部署 E[最终统一模型] end A --> B B --> C1 B --> C2 B --> C3 C1 --> D C2 --> D C3 --> D D --> E style A fill:#e1f5fe,color:#000 style B fill:#fff3e0,color:#000 style C1 fill:#fce4ec,color:#000 style C2 fill:#fce4ec,color:#000 style C3 fill:#fce4ec,color:#000 style D fill:#e8f5e9,color:#000 style E fill:#f3e5f5,color:#000
作者推荐策略
实用方案: 先用 SFT 将模型极端专业化(不担心遗忘),再用 OPD 把专业能力”蒸馏回”通用基础模型。流程:
基础模型 → SFT(过度训练,最大化专项能力)→ OPD(恢复通用能力 + 保留专项能力)
这比直接精细平衡 SFT 数据配比更实用:先走极端,再软化回归。
五、三种方法终极对比表
| 维度 | SFT | RL | OPD |
|---|---|---|---|
| 目标分布 | 固定外部数据集经验分布 | 隐式: | 教师分布(on-policy 前缀) |
| 数据来源 | 离线,预先收集 | On-policy,在线采样 | On-policy,在线采样 |
| KL 方向 | 前向 KL(mode-covering) | 反向 KL(mode-seeking) | 前向 KL(但 on-policy 约束) |
| 遗忘程度 | 高 | 低 | 低 |
| 泛化能力 | 差(分布失配) | 好 | 好 |
| 更新密度 | 密集(每个 token 均匀) | 稀疏(仅正样本) | 密集(on-policy 区域内) |
| 信用分配 | Token 级均匀 | 标量奖励(最稀疏) | Token 级 KL(较丰富) |
| 计算效率 | 高(无采样开销) | 低(需在线采样) | 中(需在线采样) |
| 训练稳定性 | 高 | 低(策略梯度方差) | 中高(KL 匹配稳定) |
| 教师依赖 | 强(数据质量决定上限) | 无教师依赖 | 中等(教师质量影响有限) |
| 信号丰富度 | 中(one-hot 目标) | 低(标量奖励) | 高(全分布 KL) |