DeepSeek V4 源码剖析
第18章 两阶段后训练:领域 SFT/RL + on-policy 蒸馏
先分头做精,再合并成一个。反过来做,会在每一件事上都平庸。
V4 不是用一套 SFT + RLHF 一条龙就上线的——它先训好 N 个领域专家,再蒸馏到一个统一模型。
18.1 引子:单阶段 SFT 走到尽头了吗
LLM 的标准后训练流程是:
- SFT (Supervised Fine-Tuning):用人工写的 (prompt, answer) 对训练
- RLHF / DPO / GRPO:用人类偏好或可验证奖励调优
这套流程在 GPT-3.5 / Llama 2 / V3 时代很成功,但在 V4 这种 1.6T + 多领域的场景下会遇到三个问题(技术报告第 5.1.2 节只点明了第 1 个方向:权重合并或混合 RL 容易掉点;问题 2、3 是本专栏的分析):
问题 1:跨领域负迁移
在一个统一模型上同时做"代码 SFT" + "数学 SFT" + "聊天 SFT" + "long context SFT"——领域之间的训练信号会互相干扰。模型学了代码后聊天能力可能下降;学了数学后写作能力可能下降。
问题 2:思考形态混淆
V4 同时支持 Non-Think / Think High / Think Max 三种推理模式。如果在统一模型上同时训三种模式的数据,模型会"困惑"——什么时候该 thinking、什么时候不该。技术报告第 5.1.1 节的做法是:为不同推理强度分别训练专家(RL 时用不同的长度惩罚和上下文窗口),回答格式用 <think> / </think> 区分,Think Max 再在 system prompt 开头注入一段固定指令(即 encoding/encoding_dsv4.py 里的 REASONING_EFFORT_MAX,仅在 thinking_mode="thinking" 且 reasoning_effort="max" 时加在第 0 条消息前)。
问题 3:384 expert 的精细调优
384 个 routed expert 已经在预训练里有差异化。后训练应该保住这种差异化,而不是把所有 expert 统一往同一个目标拉——单阶段 SFT 有可能冲淡预训练学到的分工(本专栏推测,技术报告没有讨论后训练对 expert 分工的影响)。
V4 的解法:把后训练拆成两阶段——先让多个领域专家模型独立成长,再蒸馏到统一模型。
18.2 阶段一:领域专家独立培养
V4 README 的原话是(注意这是一句话里的前半段,不是一个独立标题):
The post-training features a two-stage paradigm: independent cultivation of domain-specific experts (through SFT and RL with GRPO), followed by unified model consolidation via on-policy distillation, integrating distinct proficiencies across diverse domains into a single model.
下面这张图里的领域划分是本专栏的示意,不是官方口径——README 只说了"独立培养领域专家";技术报告第 1 节举例提到数学、代码、agent、指令遵循等领域,第 5.1.2 节说蒸馏阶段用了十余个 teacher 模型,但没有给出完整清单。图里只画 5 个作示意:
flowchart TB Pretrained["预训练 V4 base model<br/>(1.6T 参数)"] Pretrained --> ECode["V4-Code<br/>(代码专家)"] Pretrained --> EMath["V4-Math<br/>(数学专家)"] Pretrained --> EChat["V4-Chat<br/>(聊天专家)"] Pretrained --> ELongCtx["V4-LongCtx<br/>(长上下文专家)"] Pretrained --> EThink["V4-Think<br/>(推理专家)"] ECode -->|SFT + GRPO| ECodeOpt[V4-Code 优化版] EMath -->|SFT + GRPO| EMathOpt[V4-Math 优化版] EChat -->|SFT + GRPO| EChatOpt[V4-Chat 优化版] ELongCtx -->|SFT + GRPO| ELongCtxOpt[V4-LongCtx 优化版] EThink -->|SFT + GRPO| EThinkOpt[V4-Think 优化版]
每个领域专家:
- 从同一个预训练 V4 base 出发
- 用本领域的 SFT 数据 fine-tune
- 用本领域的 prompt 和奖励信号做 RL(GRPO,DeepSeek 的强化学习算法,超参沿用此前工作):易验证任务用规则校验器或测试用例;难验证任务用 rubric 引导的数据加生成式奖励模型(GRM)打分,不再训练标量奖励模型,而且 GRM 就是 actor 本身,评判能力和生成能力一起被 RL 优化(技术报告第 5.1.1 节)
这样得到 N 个"领域专家"模型——每个在自己领域显著超过预训练 base,但在其他领域可能弱于 base(因为没训)。
GRPO(Group Relative Policy Optimization,组相对策略优化)由 DeepSeekMath 提出(arXiv:2402.03300,Zhihong Shao 等 2024),在 R1 的训练中被大规模使用。它的做法是对同一个 prompt 采样一组回答,用组内的相对得分当基线,从而省掉 PPO 里那个独立的 value 网络。它的优势:
- 实现简单
- 训练成本低(不需要训 critic)
- 在可验证奖励(数学题对错、代码 pass/fail)上效果显著
第一阶段的产出是 N 个领域专家模型——每个的能力轮廓鲜明、差异化。(技术报告只说蒸馏阶段用了十余个 teacher,领域的完整切分没有公开。)
18.3 阶段二:on-policy 蒸馏到统一模型
接上一节那句话的后半段:followed by unified model consolidation via on-policy distillation, integrating distinct proficiencies across diverse domains into a single model。
这个阶段把 N 个领域专家的能力蒸馏回一个统一模型。技术报告第 5.1 节交代了它的位置:整体流程大体沿用 DeepSeek-V3.2,关键替换是把 V3.2 的混合 RL 阶段整个换成了 on-policy 蒸馏(OPD),思路引自 Thinking Machines Lab 的 On-Policy Distillation(2025):
flowchart TB ECode[V4-Code 优化版] --> Distill[on-policy<br/>蒸馏过程] EMath[V4-Math 优化版] --> Distill EChat[V4-Chat 优化版] --> Distill ELongCtx[V4-LongCtx 优化版] --> Distill EThink[V4-Think 优化版] --> Distill Distill --> V4Final["V4 统一模型<br/>(发布版)"]
on-policy 蒸馏与传统蒸馏的区别:
- 传统蒸馏:teacher 模型生成数据集,student 在这个固定数据集上 fine-tune
- on-policy 蒸馏:student 自己对 prompt 采样出回答轨迹,teacher 在这条轨迹的每个位置上给出自己的输出分布,student 学着向 teacher 的分布靠拢。V4 的目标函数是对 N 个专家的加权 reverse KL 求和:,权重 按专家的相对重要性定;而且用的是全词表 logits 蒸馏,而不是常见的逐 token KL 估计(后者方差大、训练不稳,技术报告第 5.1.2 节)
on-policy 的优势:
- student 学到的是它自己分布下的纠正——避免 teacher 数据分布与 student 不匹配
- 训练效率更高——每个 step 都是"针对 student 当前弱点"的纠正
- 可以增量加领域——新领域专家训完,蒸馏阶段直接把它加进 teacher 集合(本专栏推断;技术报告第 5.2.2 节只说框架支持"实际上不设上限"的 teacher 数量)
按技术报告第 5.1.2、5.2.2 节的描述整理的示意伪代码(函数名是本专栏起的,不是官方代码):
for batch in training_data:
# 1. student 对 prompt 自己采样回答轨迹(on-policy)
traj = student_model.sample(batch.prompt)
# 2. 取与当前任务相关的领域专家作 teacher;样本按 teacher 编号排序分发,
# teacher 只做前向:在 student 的轨迹上算最后一层 hidden,再过它自己的预测头还原全词表 logits
teacher = teacher_for(batch)
teacher_logits = teacher.forward_on(traj)
# 3. 全词表 reverse KL:D_KL(student || teacher),按 w_i 加权
loss = w[teacher] * reverse_kl(student_model.logits_on(traj), teacher_logits)
loss.backward()
optimizer.step()
工程上最麻烦的是 teacher 多而大:十余个 teacher、每个可能上万亿参数,权重放在集中式分布式存储里按需加载;词表超过 10 万,不能把所有 teacher 的 logits 物化下来,只缓存最后一层 hidden state,训练时再过对应的预测头重算 logits;KL 用专门的 TileLang kernel 算(技术报告第 5.2.2 节)。后训练的 rollout 和 teacher / reference 这类只做推理的前向用真 FP4 权重,训练步则把 FP4 无损反量化到 FP8 复用 FP8 训练框架(技术报告第 5.2.1 节)。
第二阶段的产出就是发布的 V4 模型——README 的说法是"把多个领域上各自的专长整合进一个模型"。
18.4 与 R1 路线的关系
V4 的两阶段后训练与 DeepSeek-R1 的训练路线有明显血缘——R1 的训练流程:
- R1-Zero:从 V3 base 直接用 RL(GRPO)训长链推理能力
- R1:先用少量冷启动长 CoT 数据(部分取自 R1-Zero 的输出,经人工整理)SFT,再做推理向 RL;然后用拒绝采样产出的推理数据加通用数据再 SFT 一轮,最后做覆盖全场景的 RL
按本专栏的解读,V4 的两阶段可以看作 R1 路线的一般化:
- R1 的 RL 重心是"推理"一个领域
- V4 把这个思路扩到多个领域
- 多个领域专家通过 on-policy 蒸馏融合
不过这只是思路上的类比。技术报告第 5.1 节说得很明白:V4 的后训练流程大体沿用 DeepSeek-V3.2,专家训练也是改编自 V3.2 的流程;V4 真正换掉的是后面那一步——V3.2 流程里的混合 RL 阶段被整个替换成多 teacher 的 on-policy 蒸馏。
18.5 数据工程:每阶段的数据特点
后训练阶段的数据需求与预训练完全不同。技术报告对后训练数据只说了"高质量、领域特定的 SFT 数据"和"rubric 引导的 RL 数据",没有给规模与来源,下面是本专栏按业界常见做法的推测:
阶段一数据(领域 SFT + RL):
- 总量:每领域需要大量高质量样本(具体规模未公开)
- 质量要求:样本必须接近"标准答案"——错误数据会教坏模型
- 多样性:覆盖该领域的关键 sub-task
- 来源:人工写 + 合成 + 从 R1 / V3 蒸馏
阶段二数据(蒸馏):
- 总量:大规模多领域 prompt 集(具体规模未公开)
- 质量要求:prompts 多样化即可,回答由 student 自己采样,teacher 只提供每个位置的输出分布
- 多样性:覆盖全部领域的混合分布
- 来源:通常是真实用户 prompt 的脱敏版本 + 合成 prompts
评估数据:
- 每领域有 hold-out 测试集
- 严格不参与训练
- 用于检测训练 over-fit / catastrophic forgetting
数据工程的工作量在后训练阶段不比预训练小——预训练数据是"爬下来过滤",后训练数据是"高质量精修",单条样本的成本要高得多。
18.6 评估闭环:什么决定阶段切换
后训练阶段的"何时停"是工程关键。技术报告没有公开 V4 的阶段切换判据,这里按常见做法推测,大体是一套评估闭环:
每个领域专家的"训练完成"判断(推测):
- 该领域 benchmark 的 score 收敛(连续几次 eval 不再提升)
- 训练 loss 收敛(不再下降但也不上升)
- gradient norm 稳定
- expert utilization 不偏离预训练分布太多
第二阶段(蒸馏)的停止判断(同样是推测):
- 各领域 benchmark 的 score 接近各自专家的水平
- 没有显著的"领域间负迁移"
- 长上下文任务(needle-in-haystack 类)准确率维持
这套评估必须严格——否则训练可能"看起来在前进,实际在退步"。模型发布后,第三方独立评估(如 Artificial Analysis)的结果也可以和官方公布的分数互相对照。
18.7 后训练对架构的影响
后训练和 V4 的架构之间有几处值得对照着看。先说明口径:技术报告只对第 4 条(FP4 QAT 在后训练阶段引入)有明确交代,前 3 条是本专栏从架构特性出发的推断,报告没有把这些设计说成"为后训练而做":
影响 1:384 expert + Hash 路由的稳定性
后训练阶段最好不要让 expert 路由发生大幅变化(否则可能破坏预训练学到的差异化)。V4 前 3 层用 Hash 路由,expert 由 token ID 查表决定(inference/model.py:559 的 tid2eid 是 requires_grad=False 的固定表),这几层的选择本身不会被后训练改动;其余层靠 bias 均衡加 sqrtsoftplus 打分。本专栏推断这些设计对后训练期间的路由稳定有利,但这只是工程推断,技术报告没有公开后训练期间路由变化的数据。
影响 2:MTP 在后训练里的角色 技术报告没有说明后训练阶段 MTP 模块是否继续参与训练、权重多少(第 4.2.2 节公开的 0.3 / 0.1 权重是预训练口径)。"MTP 的看远监督让思考链生成更好"是一种常见猜想,目前没有一手依据;MTP 在推理侧的用途(投机解码)见第 11 章。
影响 3:稀疏 attention 的鲁棒性 后训练经常涉及长 prompt(特别是 agent 任务,技术报告第 5.2.4 节专门为百万 token 级的 RL / OPD 做了优化),稀疏 attention 的"选错"可能间接被 SFT/RL 的信号惩罚,从而强化稀疏选择能力——这是推测,报告没有交代后训练期间 Indexer 怎么训。
影响 4:混合精度的稳定性 FP4 QAT 不是从预训练"延续"下来的,而是在后训练阶段才引入(技术报告第 3.4 节;预训练是 FP8 混合精度):训练步里 FP32 主权重先量化到 FP4,再无损反量化到 FP8 参与计算,梯度经 STE 回到 FP32 主权重;RL rollout 和推理才直接用真 FP4 权重。模型正是在后训练中学会适应 FP4 带来的精度损失。
除 FP4 QAT 外,这几条都是推断;能确定的是,V4 把"部署时用 FP4"这件事放进了后训练流程里去解决。
18.8 与同类后训练方案对比
把 V4 的两阶段后训练与几个流行方案对比:
| 方案 | 阶段数 | 主要算法 | 领域处理 | 代表模型 |
|---|---|---|---|---|
| 传统 SFT + RLHF | 2 | SFT + PPO | 单阶段统一 | Llama 2 / GPT-3.5 |
| DPO | 2 | SFT + Direct Preference Opt | 单阶段统一 | Zephyr |
| Constitutional AI | 多 | RLAIF | 单阶段统一 | Claude |
| R1 路线 | 2-3 | SFT + GRPO + 蒸馏 | 推理专长 | DeepSeek R1 |
| V4 两阶段 | 2 | SFT + GRPO + on-policy 蒸馏 | 多领域专长 + 统一 | DeepSeek V4 |
| Llama 4 | 3 | 轻量 SFT + 在线 RL + 轻量 DPO | 多领域单阶段 | Llama 4 |
V4 的特点在前两条,第三条是 DeepSeek 的一贯做法:
- 多领域专长:先培养十余个专家(按蒸馏阶段的 teacher 数)而非单模型 multi-task
- on-policy 蒸馏:让 student 在自己分布上学,用全词表 reverse KL
- 用 GRPO 而不是 PPO:训练成本低、不需要 critic(这一点并非 V4 首创,V3 和 R1 已经用 GRPO)
技术报告第 5.1.2 节的说法是:这种 logits 层面的对齐,实际上绕开了传统权重合并或混合 RL 常见的性能退化。
18.9 动手实验:simple distillation
import torch
import torch.nn as nn
import torch.nn.functional as F
class MiniTeacher(nn.Module):
"""模拟一个已训好的领域专家"""
def __init__(self, vocab=1024, dim=128):
super().__init__()
self.embed = nn.Embedding(vocab, dim)
self.linear = nn.Linear(dim, vocab)
def forward(self, x):
return self.linear(self.embed(x).mean(dim=1))
class MiniStudent(nn.Module):
"""统一模型 (student)"""
def __init__(self, vocab=1024, dim=128):
super().__init__()
self.embed = nn.Embedding(vocab, dim)
self.linear = nn.Linear(dim, vocab)
def forward(self, x):
return self.linear(self.embed(x).mean(dim=1))
# 假设我们有 3 个领域专家
torch.manual_seed(0)
teachers = [MiniTeacher() for _ in range(3)]
student = MiniStudent()
opt = torch.optim.Adam(student.parameters(), lr=1e-3)
# 逐 logits 蒸馏(简化:输入是随机 token,不是 student 自己采样的轨迹,所以只演示 loss 形式,不算真正的 on-policy)
for step in range(100):
# 1. 随机选一个领域 (在生产中由 prompt 类型决定)
domain = torch.randint(0, 3, (1,)).item()
teacher = teachers[domain]
# 2. 生成 batch
x = torch.randint(0, 1024, (32, 16))
# 3. teacher 算 logits
with torch.no_grad():
teacher_logits = teacher(x)
# 4. student 算 logits
student_logits = student(x)
# 5. 全词表 reverse KL:D_KL(student || teacher),与技术报告的 OPD 目标同向
# F.kl_div(input, target, log_target=True) 算的是 KL(target || input)
loss = F.kl_div(
F.log_softmax(teacher_logits, dim=-1),
F.log_softmax(student_logits, dim=-1),
reduction='batchmean', log_target=True
)
opt.zero_grad()
loss.backward()
opt.step()
if step % 20 == 0:
print(f"Step {step}, domain {domain}: loss = {loss.item():.4f}")
在 CPU(torch 2.11.0)上实跑,loss 从 step 0 的 0.0238 降到 step 80 的 0.0145(随机初始化的模型输出都接近均匀分布,所以数值很小)。因为每步随机换一个 teacher、输入又不分领域,student 最终学到的是 3 个 teacher 之间的折中;V4 的做法是让每条样本只对齐与任务相关的那个专家,避免这种互相拉扯。要改成真正的 on-policy,还需要让 student 先自回归采样出轨迹,再在轨迹上算两边的 logits。
18.10 后训练阶段的"质量墙"与"对齐墙"
V4 的两阶段后训练面对两堵"墙"——任何 LLM 后训练都要过:
质量墙:模型必须比 base 显著强
如果后训练后的模型在 benchmark 上没有显著提升,整个后训练阶段就是失败的——投入的算力和人力都白费了。V4 通过领域专家分别培养,让每个领域单独突破质量墙,再蒸馏融合。
突破质量墙的关键是数据质量——少量高质量样本往往胜过大量低质量样本。V4 的 SFT 数据怎么来的,技术报告没有交代;能确认的是 RL 阶段的难验证任务改用 rubric 引导数据加生成式奖励模型,报告称这样只需少量多样化的人工标注。
对齐墙:模型必须符合人类偏好
模型有能力 ≠ 模型符合用户期望。对齐墙包括:
- 拒绝有害请求(safety)
- 输出格式与用户期望一致
- 推理深度与任务匹配(Non-Think / Think High / Think Max 切换)
- 风格一致性(不要前 100 token 客气、后 100 token 冷漠)
V4 通过 GRPO 在每个领域独立做 RL,再用 on-policy 蒸馏合并——技术报告称这绕开了权重合并或混合 RL 常见的性能退化。
两堵墙的同时突破:V4 的工程精妙之处在于质量提升 + 对齐改进可以并行——领域专家阶段同时优化"该领域能力" + "该领域对齐"。蒸馏阶段把多领域的"质量 + 对齐"统一融合到一个模型。效果上,技术报告第 1 节的自评是:V4-Pro-Max 知识类评测领先开源模型但仍落后于 Gemini-3.1-Pro;推理上超过 GPT-5.2 和 Gemini-3.0-Pro,略逊于 GPT-5.4 和 Gemini-3.1-Pro;agent 公开评测与 Kimi-K2.6、GLM-5.1 相当,略逊于前沿闭源模型——并非各项都是 SOTA。
18.11 后训练阶段的可观测性
后训练比预训练更难监控——loss 曲线不一定反映真实质量。V4 大概率用了一套多维度评估管道:
自动评估:
- 各领域 benchmark 自动跑(HumanEval / MATH / MMLU / RULER 长文等)
- 每 epoch 跑一次,监控 score 趋势
- pass@1 / pass@10 等多个指标对照
人工评估:
- Win rate vs base model(人工对比 100-1000 prompts)
- 风格 / 安全 / 帮助度 三维度打分
- 每周抽样监控
对比基线:
- 与前代及同类开源、闭源模型对比(技术报告公开的对照对象包括 Opus-4.6、GPT-5.4、Gemini-3.1-Pro、Kimi-K2.6、GLM-5.1)
- 与 V4 base(未经后训练)对比 ——确认提升幅度
回归检测:
- 每个新版本与上一版做 A/B—— 不能新版在某些领域提升、其他领域回退
- 用同一组 prompt 重复跑——检测随机性是否增加
生产监控(GA 后):
- 用户实际 query 的输出质量分布
- 拒答率、不确定性表达频率
- 推理深度分布(Think Max 占比)
这套评估管道的工程量极大——耗费的工程师时间往往不亚于训练本身。这是大模型后训练的"隐性成本"——大多数学术 paper 不报告这部分,但工业部署必须。
18.12 V4 后训练 pipeline 的"复刻路线图"
如果你的团队想复刻 V4 的两阶段后训练(在自己的 base model 上),给一个具体的复刻路线图。下面的卡数、样本量和周期都是本专栏的粗略估计,DeepSeek 没有公开这类数据:
前置条件:
- 已有能力足够的 base model(pretrained)
- 至少 32 卡 GPU 集群(用于并行训练多个领域专家)
- 数据团队(每领域准备 100K+ 高质量样本)
- 评估管道(每领域 benchmark 自动跑通)
步骤 1:定义领域分类(1-2 周)
不要一上来就铺开——从 2-3 个最重要的领域开始(典型:代码、数学、聊天)。每领域定义:
- 训练数据来源
- benchmark 集合
- 期望提升幅度
步骤 2:领域专家培养(4-8 周 / 领域)
并行训练每个领域专家:
- SFT 阶段:1-2 周,10-50K samples
- RL/GRPO 阶段:2-4 周,多次迭代
- 评估收敛 + 调参:1-2 周
步骤 3:on-policy 蒸馏(2-4 周)
在所有领域专家完成后启动蒸馏:
- 准备多领域混合 prompt 集
- 配置 teacher routing(按 prompt 类型选 teacher)
- 蒸馏到统一模型
- 评估每领域 score 是否接近各自专家
步骤 4:综合评估 + 迭代(2-4 周)
- 跑全部领域 benchmark
- 与 base model + 其他模型对比
- 如果某领域回退,回到步骤 2 重新培养该领域专家
- 直到综合 score 达标
总时间:3-6 个月(估计)。总成本:没有可直接参照的公开数字。作为量级参考,DeepSeek-V3 报告里后训练只用了 5K H800 GPU 小时,预训练是 2664K;但那是 R1 式大规模 RL 之前的数字,V4 的报告没有公开后训练开销,不能直接套用。
这条路线图对中等规模团队可行——但需要严格的工程纪律。任何环节松懈(如评估不严格、领域定义模糊),最终模型会出现"训练时看起来好、生产时退化"的尴尬。
18.13 "领域专家培养 → 蒸馏" 路径的几个失败模式
V4 的两阶段路径已经被证明可行——但任何团队尝试复刻时会遇到几个典型失败模式。把这些失败模式列出来作为警示:
失败模式 1:领域分得过细
为了"全面覆盖"把领域切得过碎,每多一个专家就多一轮完整的 SFT + RL 成本,蒸馏阶段 teacher 之间的边界也更难划清。V4 自己用了十余个 teacher(技术报告第 5.1.2 节),为此专门做了 teacher 权重按需加载、只缓存最后一层 hidden 等调度设施(第 5.2.2 节)——teacher 多到十几个是可行的,前提是有这样的基础设施,并且每条样本能明确对应到一个相关专家。完整的领域清单没有公开,本专栏 §18.2 图里的 5 个是示意;"上限是多少"没有依据,这里只给方向:没有配套设施时宁可少而正交。
失败模式 2:领域定义有重叠
如果"代码专家"和"数学专家"都涵盖了"算法题"——这部分数据被两个 teacher 同时影响,蒸馏阶段 student 不知道该听谁的。领域定义应当尽量正交。
失败模式 3:蒸馏数据分布不均
如果蒸馏阶段的 prompt 90% 是聊天、10% 是代码——蒸馏后的 student 在代码上明显弱于代码专家。蒸馏数据必须镜像目标用户分布——而非任意 sample。
失败模式 4:评估闭环失效
如果某领域 benchmark 不严格——专家训练时"看起来 score 涨了"实际质量没变。蒸馏后 student 在该领域显著退化。每领域必须有可信 benchmark + hold-out 测试。
失败模式 5:忽略领域间负迁移
某些技巧在领域 A 上有效,对领域 B 反而有害。比如"长 thinking" 在数学上加分,在简单聊天上反而让用户烦躁。蒸馏阶段必须监控所有领域的综合表现,不能只盯主要领域。
失败模式 6:训练时间分配错误
每个领域专家训练时间应该按"该领域的难度 / 重要性" 分配。如果"聊天"训了 4 周但"数学"只训了 1 周——蒸馏后数学能力会拖后腿。V4 大概率给"难领域 / 重要领域" 更多训练步数。
这 6 个失败模式是本专栏按一般工程经验归纳的,并非 DeepSeek 公开的经验——想复刻 V4 后训练 pipeline 的团队可以作为检查清单。
18.14 延伸阅读
- DeepSeek-R1 论文(arXiv:2501.12948):R1 路线的源头
- DeepSeekMath 论文(Zhihong Shao 等 2024,arXiv:2402.03300):GRPO 的提出
- Distilling the Knowledge in a Neural Network(arXiv:1503.02531):蒸馏的源头
- DeepSeek-V4 技术报告第 5 节:后训练流程、GRM、OPD 目标函数与 teacher 调度的一手描述
- Thinking Machines Lab, On-Policy Distillation(博客,2025):V4 技术报告引用的 on-policy 蒸馏出处
- Self-Play Fine-Tuning(arXiv:2401.01335):同样在模型自己生成的数据上训练的自博弈微调思路,可与 on-policy 蒸馏对照
- 《LLM 评测体系》专栏第 18 章:把 Evals 变成 Quality Gate(CI 集成与回归告警)
- 本专栏第 17 章:预训练阶段如何为后训练铺垫
18.15 本章小结
- V4 用两阶段后训练:领域专家培养 + on-policy 蒸馏
- 阶段一:从同一 base 出发,独立培养多个领域专家(SFT + GRPO,难验证任务用生成式奖励模型)——蒸馏阶段用了十余个 teacher,完整领域清单未公开
- 阶段二:用 on-policy 蒸馏(全词表 reverse KL)把领域专家融合到统一模型,替换了 V3.2 流程里的混合 RL 阶段
- GRPO(Group Relative Policy Optimization,DeepSeekMath 提出)用组内相对得分当基线,省掉 PPO 的 value 网络;V3、R1 已在用
- on-policy 蒸馏让 student 在自己分布上学——避免 teacher 数据偏离
- FP4 QAT 在后训练阶段才引入:训练时 FP4 无损反量化到 FP8,rollout 与推理用真 FP4;hash routing / MTP / 稀疏 attention 与后训练稳定性的关系是本专栏推断,报告未说明
- 与传统单阶段 SFT + RLHF 相比,V4 的关键改动是先分头培养专家、再用 on-policy 蒸馏合并,报告称这避开了权重合并或混合 RL 的性能退化
第 19 章:把 V4 部署到生产——vLLM / SGLang / TensorRT-LLM 的工程接缝。