Something About DeepSeek
探索未至之境
DeepSeek (深度求索), founded in 2023, is a Chinese company dedicated to making AGI a reality.
Unravel the mystery of AGI with curiosity. Answer the essential question with long-termism.
本文由AI生成,尚未完全完成Review
至于什么时候再把这一页捡起,只有天知道……
DeepSeek-V2
A Strong, Economical, and Efficient Mixture-of-Experts Language Model
基本信息
发布时间:2024 年 5 月
技术报告:DeepSeek-V2
模型规模:236B 总参数,21B 激活(MoE);另有 Lite 版 15.7B 总参数,2.4B 激活 | 预训练:8.1T tokens(中英双语,中文 tokens 比英文多约 12%)| 上下文:128K(通过 YaRN 从 4K 扩展)| 架构:60 层 Transformer,隐藏维度 5120,128 注意力头,每头维度 128
性能评价:MMLU 78.5、BBH 78.9、MATH 43.6、HumanEval 48.8、C-Eval 81.7、CMMLU 84.0。仅 21B 激活参数即在开源模型中达到顶级水平,超越 DeepSeek 67B(Dense)在几乎所有基准上的表现,同时节省 42.5% 训练成本、KV Cache 减少 93.3%、最大生成吞吐量提升至 5.76 倍。Chat 版本(RL)在 AlpacaEval 2.0 达到 38.9% 长度控制胜率,MT-Bench 8.97 分,AlignBench 7.91 分(超越 GPT-4-0613)。
外界评价:DeepSeek-V2 是首个在开源 MoE 模型中同时实现高性能和低成本的模型,其 MLA 机制被业界认为是 KV Cache 优化的里程碑式工作,直接影响了后续 V3、V4 的架构设计。
Multi-head Latent Attention(MLA)
传统做法:标准多头注意力(MHA)在推理时需要缓存所有层所有头的 Key 和 Value,KV Cache 大小为 \(2 n_h d_h l\)(\(n_h\) 为头数,\(d_h\) 为每头维度,\(l\) 为层数)。这成为长序列推理的瓶颈——batch size 和序列长度都受 KV Cache 内存限制。
已有的优化方案:
| 方案 | KV Cache | 性能 |
|---|---|---|
| MHA(标准) | \(2 n_h d_h l\) | 强 |
| GQA(分组查询注意力) | \(2 n_g d_h l\) | 中等 |
| MQA(多查询注意力) | \(2 d_h l\) | 弱 |
GQA 和 MQA 通过减少 K/V 头数来降低缓存,但代价是性能下降。
DeepSeek-V2 的改动:设计了 MLA(Multi-head Latent Attention),核心思想是低秩联合压缩——不直接缓存 K 和 V,而是将它们压缩到一个低维潜向量(latent vector)中:
其中 \(\mathbf{c}_t^{KV} \in \mathbb{R}^{d_c}\) 是压缩后的潜向量,\(d_c \ll d_h n_h\)。推理时只需缓存 \(\mathbf{c}_t^{KV}\),KV Cache 大小降为 \(d_c l\)。
关键优化:上投影矩阵 \(W^{UK}\) 可以被吸收到 \(W^Q\) 中,\(W^{UV}\) 可以被吸收到 \(W^O\) 中——推理时甚至不需要显式计算出 K 和 V,直接用压缩向量做注意力计算。
解耦 RoPE 问题:RoPE 是位置敏感的,如果直接对压缩后的 K 应用 RoPE,\(W^{UK}\) 会与位置相关的 RoPE 矩阵耦合,导致 \(W^{UK}\) 无法被 \(W^Q\) 吸收(矩阵乘法不满足交换律)。解决方案是解耦 RoPE——用额外的多头查询 \(\mathbf{q}_t^{R,i}\) 和共享 key \(\mathbf{k}_t^R\) 来承载位置信息:
推理时需要额外缓存解耦 key,总 KV Cache 为 \((d_c + d_h^R) l\)。
MLA 的 KV Cache 对比:
| 机制 | KV Cache(每 token 元素数) | 性能 |
|---|---|---|
| MHA | \(2 n_h d_h l\) | 强 |
| GQA | \(2 n_g d_h l\) | 中等 |
| MQA | \(2 d_h l\) | 弱 |
| MLA | \((d_c + d_h^R) l \approx \frac{9}{2} d_h l\) | 更强 |
DeepSeek-V2 中 \(d_c = 4 d_h\),\(d_h^R = d_h / 2\),MLA 的 KV Cache 等效于 GQA 仅 2.25 个分组,但性能超越 MHA。
DeepSeekMoE 架构
传统 MoE 的问题:GShard 等传统 MoE 架构使用少量大粒度专家(如 8 个),每个专家承载大量知识,容易出现知识冗余——不同专家学到相似的内容,专家特化程度低。
DeepSeek-V2 的改动:采用 DeepSeekMoE 架构,两个核心设计:
设计一:细粒度专家分割
将传统的大专家拆成更多小专家。DeepSeek-V2 每个 MoE 层有 160 个路由专家 + 2 个共享专家,每 token 激活 6 个路由专家。中间隐藏维度为 1536(相比传统 MoE 的大专家更小)。
为什么有效?细粒度分割让每个专家更专注于特定知识领域,提高专家特化程度。类比:一个全能工程师 vs 六个各自专精的专家团队,后者在各自领域更深入。
设计二:共享专家隔离
除了路由专家外,设置 2 个共享专家对所有 token 都激活。共享专家捕获通用知识(语法、常见模式等),路由专家专注于特定领域知识。这减少了路由专家之间的知识冗余——不需要每个路由专家都学一遍"的"字怎么用。
FFN 输出计算:
其中 \(g_{i,t}\) 由 top-K 路由决定:
设备限制路由(Device-Limited Routing):专家并行时,如果 token 被路由到太多设备,通信开销会很大。DeepSeek-V2 限制每个 token 最多发送到 \(M = 3\) 个设备——先选 3 个亲和力最高的设备,再在这些设备内做 top-K 选择。实验表明 \(M \geqslant 3\) 时性能接近无限制路由。
三重辅助损失:为保证负载均衡,设计了三个辅助损失:
| 损失 | 目标 | 公式 |
|---|---|---|
| 专家级平衡 \(L_{\text{ExpBal}}\) | 防止路由崩溃(部分专家不被选中) | \(\alpha_1 \sum_{i=1}^{N_r} f_i P_i\) |
| 设备级平衡 \(L_{\text{DevBal}}\) | 各设备计算量均衡 | \(\alpha_2 \sum_{i=1}^{D} f_i' P_i'\) |
| 通信平衡 \(L_{\text{CommBal}}\) | 各设备通信量均衡 | \(\alpha_3 \sum_{i=1}^{D} f_i'' P_i''\) |
其中 \(f_i\) 是实际被路由到专家 \(i\) 的 token 比例,\(P_i\) 是路由概率均值。超参数 \(\alpha_1 = 0.003\),\(\alpha_2 = 0.05\),\(\alpha_3 = 0.02\)。
Token-Dropping 策略:辅助损失无法保证严格均衡,因此在训练时采用设备级 token 丢弃——计算每个设备的平均计算预算(容量因子 = 1.0),丢弃亲和力最低的 token 直到满足预算。约 10% 训练序列的 token 永不被丢弃,以保证训练-推理一致性。
训练细节
训练基础设施:基于 HAI-LLM 框架,使用 NVIDIA H800 GPU 集群。节点内 8 GPU 通过 NVLink/NVSwitch 连接,跨节点通过 InfiniBand 通信。采用流水线并行部署不同层,每层的路由专家均匀部署在 8 个设备上。
训练超参数:AdamW 优化器(\(\beta_1 = 0.9\),\(\beta_2 = 0.95\),weight_decay = 0.1),学习率采用 warmup-and-step-decay 策略——前 2K 步线性升温至 \(2.4 \times 10^{-4}\),训练 60% tokens 后乘以 0.316,90% 后再乘以 0.316。batch size 从 2304 逐步增至 9216。最大序列长度 4K。
长上下文扩展:初始预训练后,使用 YaRN 将上下文从 4K 扩展到 128K。YaRN 仅应用于承载 RoPE 的解耦共享 key \(\mathbf{k}_t^R\)。额外训练 1000 步(32K 序列长度),模型在 128K 上下文下仍表现稳健(NIAH 测试全绿)。
对齐训练
SFT:使用约 150 万条数据,涵盖对话、代码、数学、推理等场景。
RL(GRPO):采用 Group Relative Policy Optimization,省去与策略模型同等大小的 Critic 模型,用组内分数估计基线。对每个问题采样一组输出 \(\{o_1, \ldots, o_G\}\),优化目标:
两阶段 RL 策略:
- 推理对齐阶段:用代码和数学的奖励模型训练,提升推理能力
- 人类偏好对齐阶段:多奖励框架——有用性奖励模型 + 安全性奖励模型 + 规则奖励模型,加权求和
DeepSeek-V2 是 GRPO 的首次大规模应用,验证了该算法的有效性,为后续 R1 的纯 RL 训练奠定了基础。
DeepSeek-Coder-V2
基本信息
发布时间:2024 年 6 月 14 日(Lite 版)/ 6 月 17 日(完整版)
技术报告:DeepSeek-Coder-V2
模型规模:236B 总参数,21B 激活(MoE);Lite 版 16B 总参数,2.4B 激活 | 预训练:10.2T tokens(基于 DeepSeek-V2 中间检查点 + 6T 代码/数学 tokens)| 上下文:128K
性能评价:HumanEval 90.2%、MBPP+ 76.2%、MATH 75.7%、Aider 73.7%、SWE-Bench Lite 12.7%,在代码和数学任务上超越 GPT-4-Turbo、Claude 3 Opus、Gemini 1.5 Pro,是首个在编码任务上达到 GPT-4-Turbo 水平的开源模型。支持 338 种编程语言。
外界评价:DeepSeek-Coder-V2 被业界称为"价格屠夫"和"AI 界的拼多多"——其 API 价格仅为 GPT-4 Turbo 的 1%,却在编码基准上达到甚至超越后者的水平。这一性价比震动了整个 AI 行业,证明了开源模型在代码任务上追赶闭源模型的可行性。
基于中间检查点的持续预训练
传统做法:训练代码模型时,通常从零开始在纯代码语料上预训练(如 CodeLlama、StarCoder)。这需要海量计算资源,且模型缺乏自然语言理解能力,限制了代码注释生成、文档理解等需要语言能力的任务。
DeepSeek 的改动:从通用语言模型 DeepSeek-V2 的中间检查点(已训练 4.2T tokens)出发,用 6T 额外 tokens 持续预训练,总计 10.2T tokens。
为什么这样做有效:持续预训练(Continual Pre-training)相比从零训练有两个关键优势:
- 知识迁移:通用语言模型已习得的语法、语义、世界知识可以直接迁移到代码理解中,减少所需训练 tokens
- 多语言代码能力:保持 30% 自然语言比例,使模型不会"遗忘"语言能力,能处理代码注释、文档字符串、自然语言编程指令
数据配比:60% 源代码 + 10% 数学 + 30% 自然语言。
- 代码语料:1,170B tokens,从 GitHub 和 CommonCrawl 收集,支持 338 种语言(从 DeepSeek-Coder 的 86 种大幅扩展)
- 数学语料:221B tokens,使用与 DeepSeekMath 相同的 fastText 流水线从 CommonCrawl 收集,规模约为 DeepSeekMath 语料的 2 倍
- 自然语言语料:直接从 DeepSeek-V2 训练语料中采样
数据收集的 fastText 分类器:
传统做法是用关键词匹配或正则表达式过滤代码网页,召回率低且对新语言泛化差。DeepSeek 训练了一个有监督分类器:
- 种子语料构建:从 StackOverflow、PyTorch 文档、StackExchange 等高质量站点抓取已知的代码/数学页面,作为正样本
- fastText 模型训练:以正样本和随机网页训练二分类器。由于中文等语言无法通过空格分词,使用 DeepSeek-V2 的 BPE tokenizer 替代默认的空格分词,显著提升了召回准确率
- 迭代扩充:用训练好的分类器扫描 CommonCrawl,召回新的代码/数学页面;对每种编程语言统计被召回网页来自各域名的比例,若某域名超过 10% 的页面被分类为代码/数学相关,则整个域名被标记为代码/数学来源,并将该域名下未收集的 URL 加入种子语料
- 重复 3 轮:每轮用扩充后的正样本重新训练分类器,逐步提高召回率。最终从 CommonCrawl 收集到 70B 代码相关 tokens 和 221B 数学相关 tokens;对 GitHub 进行 2 轮迭代收集,额外获得 94B 源代码
与从零训练的对比:
| 从零训练 | 持续预训练(DeepSeek-Coder-V2) | |
|---|---|---|
| 训练 tokens | 需要全部从零消耗 | 复用 4.2T 已有 + 6T 新增 |
| 自然语言能力 | 需额外混合语言数据 | 天然保留(30% 语言语料) |
| 计算成本 | 极高 | 约为从零训练的 60% |
成效:消融实验显示,新代码语料使 1B 模型在 HumanEval 上提升 6.7%(30.5% → 37.2%),MBPP 上提升 9.4%(44.6% → 54.0%)。
FIM 训练策略(Fill-in-the-Middle)
传统做法:标准自回归语言模型只训练从左到右生成 \(P(x_t | x_1, \ldots, x_{t-1})\)。对于代码补全中的"填充中间部分"任务(如函数体补全、代码重构),模型无法利用右侧上下文。
DeepSeek 的改动:仅对 DeepSeek-Coder-V2-Lite(16B) 采用 FIM 训练(236B 完整版仅使用标准 Next-Token Prediction),采用 PSM(Prefix-Suffix-Middle) 模式,将原始序列 \(\mathbf{x} = (x_1, \ldots, x_n)\) 在随机位置 \(k\) 处拆分为前缀 \(\mathbf{p} = (x_1, \ldots, x_{k-1})\)、中间 \(\mathbf{m} = (x_k, \ldots, x_{l-1})\)、后缀 \(\mathbf{s} = (x_l, \ldots, x_n)\),重排为:
数学形式化:给定原始序列的自回归训练目标 \(\mathcal{L}_{\text{AR}} = -\sum_{t=1}^{n} \log P(x_t | x_{<t})\),FIM 变换后训练目标变为:
即模型学习条件概率 \(P(\mathbf{m} \mid \mathbf{p}, \mathbf{s})\)——给定前缀和后缀,预测中间部分。
FIM 率设为 0.5:每个文档以 50% 概率应用 FIM 变换、50% 保持标准 AR 训练。这是因为:
- FIM 率过高会损害标准左到右生成质量(模型看到的 AR 训练样本太少)
- FIM 率过低则双向上下文能力不足
- 消融实验表明 0.5 是最佳平衡点
在文档级别应用:FIM 变换在文档级别(而非 token 级别)进行——整个文档要么完全应用 FIM,要么完全保持 AR。这避免了同一文档内混杂两种训练信号导致的梯度冲突。
成效:在 FIM 任务上,Lite 版(2.4B 激活)达到 Python 80.0%、Java 89.1%、JavaScript 87.2%,与更大的 33B 模型相当。
GRPO 用于代码强化学习
传统做法:代码 RL 通常直接使用编译器/测试用例的通过与否作为奖励信号(0/1 奖励)。问题在于:
- 二值奖励信号稀疏——大量生成的代码只得到 0(不通过),梯度信号噪声大
- 某些编程题测试用例有限,无法全面评估代码质量
- 不同代码质量(如时间复杂度、可读性)被压缩为同一个 1
DeepSeek 的改动:两阶段奖励设计
- 阶段一:用编译器信号训练一个奖励模型 \(\text{RM}: (\text{prompt}, \text{code}) \to \mathbb{R}\),将离散的编译器反馈转化为连续分数
- 阶段二:用奖励模型的分数作为 GRPO 的奖励信号,替代原始编译器信号
为什么奖励模型优于编译器信号:
| 编译器信号(0/1) | 奖励模型(连续) | |
|---|---|---|
| 信号粒度 | 二值,无梯度方向 | 连续,区分代码质量 |
| 泛化能力 | 仅对有测试用例的题有效 | 对新题目也能给出评分 |
| 训练稳定性 | 高方差,收敛慢 | 低方差,收敛快 |
成效:在 LeetCode 和 LeetCode-zh 内部测试集上,使用奖励模型信号的 RL 训练显著优于直接使用编译器信号。
训练稳定性改进
在训练 236B 模型时,遇到了训练不稳定和梯度尖峰问题,追溯到指数归一化技术。解决方案是回退到传统归一化方法(推测为 RMSNorm 或 LayerNorm),保证了训练的稳定进行。
DeepSeek-V3
发布时间:2024 年 12 月 26 日 | 技术报告:arXiv:2412.19437
模型规模:671B 总参数,每 token 激活 37B(MoE 架构)| 预训练:14.8T tokens,2.788M H800 GPU hours | 架构细节:61 层 Transformer,隐藏维度 7168,128 注意力头(每头 128 维),256 路由专家 + 1 共享专家,每 token 激活 8 个路由专家,每 token 最多路由到 4 个节点 | 训练集群:2048 H800 GPU,16 路流水线并行 + 64 路专家并行(跨 8 节点)+ ZeRO-1 数据并行
性能评价:在 MMLU(88.5)、MATH-500(90.2)、AIME 2024(39.2)、Codeforces(51.6 百分位)等基准上达到与 GPT-4o、Claude-3.5-Sonnet 相当的水平,是当时最强的开源模型。
外界评价:DeepSeek-V3 发布后,在聊天机器人竞技场(Chatbot Arena)中排名开源模型第一、全球前十,并被评为性价比最高的模型。更令业界震惊的是其训练成本——仅 557 万美元(2.788M H800 GPU hours),远低于同等水平闭源模型的训练开销。这打破了"只有巨头才能训练顶级模型"的共识,引发了关于 AI 训练成本结构的广泛讨论。
Multi-head Latent Attention(MLA)— 注意力的低秩压缩
传统方案:Multi-Head Attention(MHA)的 KV cache 问题
标准 MHA 有 \(n_h\) 个注意力头,每个头的维度为 \(d_h\),对序列中每个 token \(t\) 需缓存:
以 \(n_h = 128, d_h = 128\) 为例,每个 token 需缓存 \(2 \times 128 \times 128 = 32{,}768\) 个参数。在 128K 上下文下,KV cache 达到 \(128K \times 32K \times 2\text{bytes (FP16)} = 8\text{GB}\) 每层每请求。对于 80 层模型,仅 KV cache 就需要 640GB,远超单卡显存。
已有改进方案的局限:
- Multi-Query Attention(MQA):所有头共享同一组 K/V,cache 缩小 \(n_h\) 倍,但性能明显下降
- Grouped-Query Attention(GQA):将 \(n_h\) 个头分为 \(g\) 组,每组共享 K/V,cache 缩小 \(n_h/g\) 倍。是 MQA 和 MHA 的折中,但性能仍不如 MHA
DeepSeek-V3 的方案:MLA——低秩联合压缩
MLA 的核心洞察:标准 MHA 中,不同头的 K/V 虽然独立计算,但它们的输入相同(都是 \(\mathbf{h}_t\)),因此不同头的 K/V 之间存在大量冗余信息。可以用一个低维潜在向量 \(\mathbf{c}_t^{KV}\) 联合表示所有头的 K/V。
KV 压缩与恢复:
其中 \(\mathbf{W}^{DKV} \in \mathbb{R}^{d_c \times d}\) 为下投影(压缩)矩阵,\(\mathbf{W}^{UK} \in \mathbb{R}^{n_h d_h \times d_c}\) 和 \(\mathbf{W}^{UV} \in \mathbb{R}^{n_h d_h \times d_c}\) 为上投影(恢复)矩阵。
DeepSeek-V3 的具体配置:\(n_h = 128\) 个注意力头,每头维度 \(d_h = 128\),KV 压缩维度 \(d_c = 512\),Query 压缩维度 \(d'_c = 1536\),解耦位置 key 的每头维度 \(d_h^R = 64\)。总隐藏维度 \(d = 7168\)。压缩比为 \(d_c / (n_h \cdot d_h) = 512 / 16384 = 3.125\%\)。
位置编码的解耦:RoPE 位置编码与低秩压缩不兼容——RoPE 需要在 Q 和 K 上施加位置相关的旋转,但压缩后的 \(\mathbf{c}_t^{KV}\) 是位置无关的。解决方案是解耦位置 key:
即每个头的 key 由两部分拼接:内容部分 \(\mathbf{k}_{t,i}^C\)(从压缩向量恢复)和位置部分 \(\mathbf{k}_t^R\)(直接从 \(\mathbf{h}_t\) 投影并施加 RoPE)。
推理时的 cache 对比:
| 每 token cache | 典型值 (\(d_c = 512, d_R = 64\)) | |
|---|---|---|
| 标准 MHA | \(2 n_h d_h\) | 32,768 |
| GQA (8 组) | \(2 \times 8 \times d_h\) | 2,048 |
| MLA | \(d_c + d_R\) | 576 |
MLA 的 cache 仅为标准 MHA 的 1.8%,甚至小于 GQA,同时性能与标准 MHA 相当。
为什么低秩压缩不损失性能:消融实验表明,当 \(d_c \geqslant 512\) 时,MLA 与标准 MHA 的性能差距可忽略。这是因为不同注意力头的 K/V 矩阵确实近似低秩——它们的"有效秩"远小于 \(n_h d_h\),一个 \(d_c\) 维的潜在空间足以捕获其主要信息。
Query 侧的压缩(训练时减少激活内存):
Query 压缩在推理时不减少 cache(Q 不需要缓存),但在训练时大幅减少反向传播需要存储的激活值。
吸收技巧(Absorption Trick):上投影矩阵 \(\mathbf{W}^{UK}\) 可以被"吸收"到输出投影矩阵 \(\mathbf{W}^O\) 中,推理时无需显式恢复完整 K/V,进一步减少计算:
由于 \(\mathbf{W}^{UK}_i\) 和 \(\mathbf{W}^O_i\) 都是静态矩阵,可以预计算 \(\hat{\mathbf{W}}_i^O = \mathbf{W}^{UV}_i \mathbf{W}_i^O\),推理时直接用 \(\mathbf{c}_t^{KV}\) 与 \(\hat{\mathbf{W}}_i^O\) 相乘。
Auxiliary-Loss-Free Load Balancing — 无辅助损失的负载均衡
传统方案及其问题
MoE(Mixture-of-Experts)模型中,每个 token 只激活 \(K_r\) 个专家(\(K_r \ll N_r\),\(N_r\) 为专家总数)。如果某些专家总是被选中而其他专家很少被激活,会导致:
- 专家塌缩:被忽略的专家参数得不到更新,浪费模型容量
- 负载不均:热门专家过载导致计算瓶颈,冷门专家空闲
传统解决方案(GShard、Switch Transformer)引入辅助损失 \(\mathcal{L}_{\text{aux}}\):
其中 \(f_i\) 是专家 \(i\) 被选中的 token 比例,\(p_i\) 是专家 \(i\) 的平均路由概率。这个损失鼓励 \(f_i\) 和 \(p_i\) 均匀分布。
核心矛盾:辅助损失 \(\mathcal{L}_{\text{aux}}\) 与主目标 \(\mathcal{L}_{\text{LM}}\) 存在冲突——为了降低 \(\mathcal{L}_{\text{aux}}\),模型被迫将 token 路由到非最优的专家上,损害语言建模质量。\(\alpha\) 越大,负载越均衡,但模型性能越差。
DeepSeek-V3 的创新:偏置驱动的负载均衡
核心思想:将"路由决策"与"门控值计算"解耦。
首先,用 sigmoid(而非 softmax)计算每个 token 与每个专家的亲和力分数:
其中 \(\mathbf{e}_i\) 是专家 \(i\) 的嵌入向量。注意 sigmoid 是逐元素独立的(不像 softmax 会归一化),因此不同专家的分数不互相制约。
然后,引入可学习偏置 \(b_i\),仅用于决定哪些专家被选中,但不参与门控值计算:
最后对选中的门控值归一化:
关键区别:
| 传统辅助损失法 | DeepSeek-V3 偏置法 | |
|---|---|---|
| 门控值 | 受负载均衡约束影响 | 仅由原始亲和力 \(s_{i,t}\) 决定 |
| 路由决策 | 与门控值耦合 | 由 \(s_{i,t} + b_i\) 独立决定 |
| 对 LM 目标的影响 | 直接冲突 | 无冲突(偏置不参与梯度计算) |
偏置的动态调整:训练过程中每步监控每个专家的实际负载 \(f_i\),用简单规则动态调整偏置:
其中 \(\bar{f} = \frac{1}{N_r} \sum_{i=1}^{N_r} f_i\) 是平均负载,\(\gamma = 0.001\) 是调整步长(前 14.3T tokens 使用,之后设为 0 停止调整)。这个过程不引入任何额外损失项,不参与梯度计算。
补充的序列级平衡损失:虽然主要依赖偏置策略,但为防止单个序列内的极端不平衡(如某序列所有 token 都路由到同一个专家),额外引入一个极小权重的序列级平衡损失:
其中 \(f_i\) 是专家 \(i\) 在该序列中被选中的 token 比例,\(P_i\) 是专家 \(i\) 的平均归一化亲和力分数,\(\alpha = 0.0001\)(极小,仅起"安全网"作用)。
成效:实现负载均衡的同时不损害模型性能,训练全程无 token 丢弃。
Multi-Token Prediction(MTP)— 多 token 预测
传统方案:标准语言模型在每个位置只预测下一个 token,训练目标为:
每个位置仅产生一个训练信号(下一个 token 的对数似然),训练效率受限于 token 序列长度。
DeepSeek-V3 的 MTP:因果链式多步预测
MTP 在每个位置预测未来 \(D\) 个 token(\(D = 1\) 时退化为标准 LM)。与 Meta 的 MTP(独立预测)不同,DeepSeek-V3 的 MTP 保持因果链:第 \(k\) 步的预测依赖第 \(k-1\) 步的输出。
第 \(k\) 深度(\(k = 1, \ldots, D\))的计算:
其中 \(\mathbf{h}_i^{k-1}\) 是上一深度的输出(\(k=1\) 时为主模型最后一层的输出),\(\text{Emb}(t_{i+k})\) 是第 \(i+k\) 个 token 的嵌入,\(\mathbf{M}_k\) 是线性投影将拼接后的向量映射回 \(d\) 维,\(\text{TransformerBlock}_k\) 是独立的 Transformer 层。
因果链的设计:
第 \(k\) 步的输入 \(\mathbf{h}^{k-1}\) 包含了前 \(k-1\) 步预测的隐含信息,因此第 \(k\) 步的预测可以"修正"前几步的错误,形成自校正链。
MTP 损失:
总训练目标为 \(\mathcal{L} = \mathcal{L}_{\text{LM}} + \lambda \mathcal{L}_{\text{MTP}}\)。DeepSeek-V3 设置 \(D = 1\)(每个位置额外预测 1 个 token),\(\lambda\) 采用退火策略:前 10T tokens 设为 0.3,后 4.8T tokens 降为 0.1。
与 Meta MTP 的关键区别:
| Meta MTP | DeepSeek-V3 MTP | |
|---|---|---|
| 预测方式 | \(D\) 个独立头并行预测 | 因果链,第 \(k\) 步依赖第 \(k-1\) 步 |
| 参数共享 | 各头完全独立 | embedding 和 output head 与主模型共享 |
| 推理时使用 | 可用于 speculative decoding | 丢弃 MTP 模块,零额外开销 |
| 信号密度 | \(D\) 倍 | \(D\) 倍(但有因果链的额外信息增益) |
共享 embedding 和 output head 的好处:MTP 模块不引入新的 embedding 矩阵或 output head,而是复用主模型的。这既减少参数量,又保证 MTP 预测的分布与主模型一致——MTP 损失的梯度可以直接更新主模型的 embedding 和 output head,避免训练信号的割裂。
成效:消融实验表明,\(D = 1\) 时在代码和数学任务上有显著提升(Small MoE 在 MMLU 上提升 3.3%,BBH 上提升 2.4%),且推理时可将 MTP 模块用于 speculative decoding 进一步加速生成。推理时也可直接丢弃 MTP 模块,零额外开销。
其他工程优化
FP8 混合精度训练:V3 率先在 671B 规模模型上验证了 FP8 训练的可行性。关键挑战是矩阵乘法的累积误差——FP8 的动态范围有限,大量 FP8 乘积的累加容易溢出。V3 采用细粒度量化策略:权重按 \(128 \times 128\) 的 tile 量化,激活按 \(1 \times 128\) 的 block 量化(每元素独立缩放因子),累加时在 CUDA core 上以 FP32 精度累积 128 个 FP8×FP8 乘积的结果,避免精度损失。这种 tile-wise/block-wise 量化相比 per-tensor 量化能更好地保留异常值(outlier)信息。
DualPipe 流水线并行:将前向和反向计算重叠执行,每个 micro-batch 的前向计算与上一个 micro-batch 的反向计算并行。每个 chunk 被拆分为注意力、dispatch、MLP、combine 四个组件,反向 chunk 进一步拆分为"对输入的反向"和"对权重的反向"。气泡比率对比:1F1B 为 \((PP-1)(F+B)\),ZB1P 为 \((PP-1)(F+B-2W)\),DualPipe 仅为 \((\frac{PP}{2}-1)(F\&B+B-3W)\),代价是峰值激活内存增加 \(1/PP\) 倍(因需保持两份模型参数)。
从 R1 蒸馏:V3 的后训练阶段从 DeepSeek-R1 蒸馏了推理能力——用内部 R1 模型生成推理数据(数学、代码、逻辑推理),经 SFT + RL 流水线训练专家模型,再用专家模型生成最终训练数据。这使 V3 在 STEM 问题上获得显著提升,同时保持了输出风格和长度的可控性。
DeepSeek-R1
发布时间:2025 年 1 月 20 日 | 技术报告:arXiv:2501.12948
模型规模:基于 DeepSeek-V3(671B MoE)| 开源:MIT 许可证,含 1.5B~70B 蒸馏模型
性能评价:AIME 2024(79.8%)、MATH-500(97.3%)、Codeforces(96.3 百分位)、GPQA Diamond(71.5%),与 OpenAI o1 相当。蒸馏模型中,R1-Distill-Qwen-7B(55.5% AIME)超越 QwQ-32B-Preview。
外界评价:DeepSeek-R1 的发布被西方媒体称为 AI 领域的"史普尼克时刻"(Sputnik moment)——一家中国公司以极低成本(训练成本仅 29.4 万美元)复现了 OpenAI o1 级别的推理能力,并完全开源,震动了全球科技界。2025 年 9 月,DeepSeek-R1 登上《自然》(Nature)杂志封面,标志着其学术影响力获得最高认可。R1 证明了纯强化学习可以涌现出复杂的推理行为,改变了"推理能力需要大量人工标注数据"的行业共识。
纯强化学习涌现出推理能力(R1-Zero)
传统做法与预设
在 R1 之前,业界普遍认为推理能力(链式思维、自我验证、反思)需要通过监督微调(SFT)注入——即用人类标注的高质量推理数据微调模型(如 OpenAI o1 的训练方式被认为是大量人工标注的 CoT 数据 + RLHF)。
R1-Zero 的颠覆性发现
R1-Zero 直接在 DeepSeek-V3 基座模型上进行大规模 RL,完全不使用任何 SFT 数据。训练模板极简——只告诉模型用 <think> 和 <answer> 标签包裹推理过程和答案,不提供任何示例:
奖励设计采用纯规则,避免神经奖励模型的 reward hacking:
- 准确性奖励:数学题用规则验证答案正确性,编程题用编译器运行测试用例
- 格式奖励:检查输出是否正确使用
<think>和<answer>标签
奖励函数的形式化:
注意:这里没有使用任何神经网络奖励模型——纯规则奖励避免了 reward hacking(模型找到奖励模型的漏洞而非真正解决问题)。
"Aha Moment"现象:训练中间版本的模型自发学会了在解题时说"Wait, let me reevaluate this step-by-step",主动分配更多思考时间重新评估初始方法。这不是人工编程的行为,而是 RL 环境中自然涌现的——当模型发现"重新思考"能提高正确率从而获得更高奖励时,这一行为被自然强化。
推理时间(thinking time)的自适应增长:随着训练进行,模型的平均输出长度自然增长——它学会了"用更多 token 换取更高准确率"。这与人类解题时"花更多时间思考更难的题目"的行为高度类似。
成效:R1-Zero 在 AIME 2024 上从初始 15.6% 提升至 71.0%(pass@1),多数投票(majority voting)下达到 86.7%,超越 OpenAI o1-0912。
失败尝试的启示:论文坦诚分享了两种未成功的探索:
- 过程奖励模型(PRM):为推理的每一步提供奖励信号,理论上比只看最终答案更精细。但实践中遇到三个困难:(1) 推理步骤的粒度难以明确定义;(2) 判断中间步骤是否正确本身就很困难,自动标注效果不佳,人工标注难以扩展;(3) 引入神经网络 PRM 后不可避免地导致 reward hacking,且重训奖励模型增加了训练复杂度
- 蒙特卡洛树搜索(MCTS):受 AlphaGo 启发,将答案拆分为小步骤进行树搜索。但 LLM 的动作空间远大于围棋——每个步骤可生成几乎无限数量的 token,搜索空间指数爆炸。即使设置节点扩展上限,模型也容易陷入局部最优。训练细粒度价值模型本身也很困难,难以像 AlphaGo 那样通过自我对弈迭代提升
GRPO:Group Relative Policy Optimization
传统方案:PPO 的瓶颈
PPO(Proximal Policy Optimization)是 RLHF 的标准算法。PPO 需要四个模型同时参与训练:
| 模型 | 作用 | 显存占用 |
|---|---|---|
| Actor(策略模型) | 生成回答 | 全量参数 |
| Critic(价值模型) | 估计状态价值 \(V(s)\) | 全量参数(与 Actor 同等大小) |
| Reference(参考模型) | 计算 KL 散度约束 | 全量参数(冻结) |
| Reward(奖励模型) | 评估回答质量 | 通常较小 |
其中 Critic 模型与 Actor 同等大小(都是大语言模型),占用大量显存和计算。且 Critic 的训练本身不稳定——价值估计的方差直接影响策略梯度的质量。
DeepSeek 的创新:GRPO——去掉 Critic
GRPO 的核心思想:用同一问题下多个采样的组内统计量(均值和标准差)替代 Critic 模型的基线估计。
对每个问题 \(q\),从旧策略 \(\pi_{\theta_{old}}\) 采样一组输出 \(\{o_1, o_2, \cdots, o_G\}\)(\(G\) 通常为 16~64),优化目标:
优势函数通过组内归一化计算(不需要 Critic):
为什么组内归一化是有效的基线估计:
- 在 RL 中,优势函数 \(A(s, a) = Q(s, a) - V(s)\) 需要一个基线 \(V(s)\) 来降低方差
- PPO 用 Critic 网络估计 \(V(s)\),需要额外训练且不稳定
- GRPO 观察到:同一问题 \(q\) 的多个采样的奖励均值 \(\frac{1}{G}\sum r_i\) 是 \(V(q)\) 的无偏蒙特卡洛估计(因为 \(\mathbb{E}_{o \sim \pi}[r(o, q)] = V(q)\))
- 用均值替代 \(V\),标准差归一化,得到零均值、单位方差的优势估计
KL 散度项(非标准形式,来自 DeepSeek-Math):
这是 \(D_{KL}(\pi_\theta \| \pi_{ref})\) 的一个上界近似(基于 \(f\)-divergence 的形式),避免了直接计算 KL 散度需要对整个词表求和的开销。
GRPO vs PPO 的全面对比:
| PPO | GRPO | |
|---|---|---|
| 所需模型数 | 4(Actor + Critic + Ref + RM) | 3(Actor + Ref + RM) |
| Critic 训练 | 需要,不稳定 | 不需要 |
| 基线估计 | Critic 网络 \(V_\phi(s)\) | 组内均值 \(\bar{r}\) |
| 超参数 | Critic 学习率、GAE \(\lambda\) 等 | 更少(无 Critic 相关超参) |
| 显存 | 极高(2 个全量模型) | 降低约 30%~40% |
| 适用场景 | 通用 RL | 特别适合有明确奖励的任务 |
成效:相比 PPO 省去了 Critic 模型的显存和计算开销,训练效率大幅提升,同时保持了稳定的策略优化。
四阶段训练流水线(DeepSeek-R1 完整版)
R1-Zero 虽然推理能力强,但存在可读性差、语言混杂、格式不规范等问题。R1 完整版采用四阶段流水线解决这些问题:
阶段一:Cold Start SFT
用数千条高质量长 CoT 数据微调基座模型,提供推理行为的"种子"。这些数据包括:
- 带
<think>标签的详细推理过程 - 规范的格式和语言
- 自我验证和反思的示例
与 R1-Zero 的"零 SFT"不同,这里的 SFT 不是为了"教会"模型推理(RL 可以做到),而是为了规范输出格式——让模型知道 <think> 标签中应该放什么、用什么语言、如何组织答案。
阶段二:Reasoning-oriented RL
与 R1-Zero 相同的大规模 RL,但奖励函数增加语言一致性奖励:
即 CoT 推理过程中目标语言词汇的比例,避免中英文混杂。消融实验表明该奖励会轻微降低模型性能,但使输出更符合人类阅读偏好。
阶段三:Rejection Sampling + SFT
从阶段二的 RL 模型中采样大量回答,筛选高质量推理数据(通过规则验证答案正确性 + 格式规范性,部分使用 DeepSeek-V3 作为生成式奖励模型判断),加上 200k 非推理数据(写作、问答、翻译等),共约 800k 样本,微调 2 个 epoch。这一步的目的是:
- 将 RL 探索到的高质量推理模式"固化"到模型中
- 补充非推理能力,避免模型成为"偏科生"
阶段四:RL for All Scenarios
最终 RL 阶段,针对不同任务使用不同奖励:
| 任务类型 | 奖励信号 |
|---|---|
| 数学/代码推理 | 规则验证(答案正确性、测试用例通过率) |
| 通用问答 | 奖励模型(评估 helpfulness) |
| 安全相关 | 奖励模型(评估 harmlessness) |
最终奖励函数:
知识蒸馏:小模型也能强推理
用 R1 生成的推理数据微调 Qwen 和 Llama 系列的小模型:
| 模型 | AIME 2024 | MATH-500 | Codeforces Rating |
|---|---|---|---|
| R1-Distill-Qwen-1.5B | 28.9% | 83.9% | 954 |
| R1-Distill-Qwen-7B | 55.5% | 92.8% | 1189 |
| R1-Distill-Qwen-14B | 69.7% | 93.9% | 1481 |
| R1-Distill-Qwen-32B | 72.6% | 94.3% | 1691 |
| R1-Distill-Llama-70B | 70.0% | 94.5% | 1633 |
蒸馏 vs 直接 RL 的关键发现:
消融实验对比了两种让小模型获得推理能力的方法:
| 直接在小模型上做 RL | 蒸馏 R1 数据到小模型 | |
|---|---|---|
| AIME 2024 (7B) | ~15% | 55.5% |
| 训练成本 | 高(大量采样) | 低(SFT 即可) |
| 推理风格 | 不稳定,需大量探索 | 稳定,继承 R1 的推理模式 |
为什么蒸馏优于直接 RL:小模型的探索能力有限——在 RL 环境中,小模型很难自发发现高质量的推理路径(因为它的策略空间太小)。而蒸馏直接将 R1 已经探索到的高质量推理模式"传授"给小模型,相当于跳过了探索阶段,直接进入利用阶段。这与人类学习中"先模仿大师解题,再自己创新"的路径一致。
成效:7B 蒸馏模型在 AIME 上超越 GPT-4o(9.3%)数倍。蒸馏 + RL 的效果 > 单独蒸馏 > 直接 RL。
使用注意:R1 对提示词敏感——few-shot prompting 反而会降低性能,建议使用 zero-shot 设置,直接描述问题并指定输出格式。
DeepSeek-V4
发布时间:2026 年 4 月 24 日 | 技术报告:Hugging Face
模型规模:V4-Pro(1.6T 参数,49B 激活)、V4-Flash(284B 参数,13B 激活)| 上下文:100 万 tokens | 预训练:32T~33T tokens
性能评价:V4-Pro 在推理、编码、长上下文等任务上达到 GPT-5.2 和 Gemini-3.0-Pro 水平。在 1M token 上下文下,单 token 推理 FLOPs 仅为 V3.2 的 27%,KV cache 仅为 10%。
外界评价:DeepSeek-V4 发布时与 GPT-5.5 同期(2026 年 4 月),被评价为"疯狂划算的交易"(insanely good deal)——以远低于对手的成本提供同等级的性能。V4 的百万 token 上下文能力和极致的推理效率(KV cache 仅为 V3 的 10%)再次证明了 DeepSeek 在模型效率优化上的领先地位。
相比 V3 的架构变更:
- 亲和力函数:从 Sigmoid 改为 \(\text{Sqrt}(\text{Softplus}(\cdot))\),即 \(\sqrt{\log(1 + e^{\mathbf{e}_i^\top \mathbf{h}_t})}\)
- Hash 路由:前几层的 dense FFN 替换为使用 Hash 路由的 MoE 层——根据 token ID 的哈希函数直接确定目标专家,无需学习路由权重
- 移除节点限制:V3 中每 token 最多路由到 4 个节点的约束被移除,通过重新设计并行策略保持训练效率
混合注意力架构:CSA + HCA
传统方案的瓶颈:标准全注意力的复杂度为 \(O(n^2 d)\),KV cache 为 \(O(n)\)。当上下文长度 \(n = 1{,}000{,}000\) 时:
- 注意力计算:\(10^{12} \times d\) FLOPs,单 token 不可承受
- KV cache:\(10^6 \times 2 n_h d_h \times\) 层数,单请求超过 TB 级别
已有长上下文方案的局限:
| 方案 | 思路 | 局限 |
|---|---|---|
| FlashAttention | IO 优化,不改变计算量 | 计算量仍是 \(O(n^2)\),只是更快 |
| Ring Attention | 分布式注意力 | 通信开销大,且仍是全注意力 |
| Sparse Attention | 只关注部分 token | 固定模式(如局部+全局),灵活性不足 |
V4 的方案:CSA(Compressed Sparse Attention)+ HCA(Heavily Compressed Attention)交替使用
两种注意力互补——CSA 在精度和效率之间取得平衡,HCA 追求极致效率,两者在不同层交替使用。
CSA 详细机制
第一步:重叠压缩(Overlapping Compression)
将 KV 序列压缩为更短的条目序列。每 \(m\) 个 token 压缩为 1 个条目,但使用重叠窗口(当前块和前一个块有重叠),保证相邻条目之间信息连续:
其中 \(C^a, C^b \in \mathbb{R}^{n \times c}\) 是两组 KV 条目(通过不同的线性投影 \(W^{a,KV}, W^{b,KV}\) 计算),\(Z^a, Z^b\) 是对应的压缩权重,\(B^a, B^b \in \mathbb{R}^{m \times c}\) 是可学习的位置偏置,\(S\) 是 softmax 归一化后的注意力权重,\(\odot\) 为逐元素乘法。每个压缩条目 \(C_i^{\text{Comp}}\) 实际聚合了 \(2m\) 个 token 的信息(来自 \(C^a\) 的 \(m\) 个 token 和 \(C^b\) 的 \(m\) 个 token),但由于 \(C^b\) 用于 \(C_i^{\text{Comp}}\) 的部分与 \(C^a\) 用于 \(C_{i-1}^{\text{Comp}}\) 的部分重叠,实际压缩率为 \(1/m\)。
直觉理解:这类似于对 KV 序列做带注意力权重的池化——不是简单平均,而是让模型学习哪些 token 更重要,分配更高权重。重叠窗口保证了相邻压缩条目之间的信息连续性。
第二步:Lightning Indexer 稀疏选择
压缩后仍可能有大量条目(\(n/m\) 个)。Lightning Indexer 用极轻量的方式计算每个 token 与所有压缩条目的相关性分数,选出 top-\(k\) 个最相关的:
Indexer 的设计极其轻量:
- 用 ReLU 代替 Softmax——避免归一化开销,且 ReLU 的稀疏性可以利用硬件加速
- 用 加权求和 代替多头注意力——\(n_h^I\) 个头的分数直接加权求和,不涉及矩阵乘法
- 计算复杂度仅为 \(O(n \cdot (n/m) \cdot n_h^I)\),远小于标准注意力的 \(O(n^2 d)\)
第三步:滑动窗口 + 压缩条目的混合注意力
最终注意力由两部分组成:
- 滑动窗口:对最近 \(n_{\text{win}}\) 个 token 做全注意力(保证局部细粒度依赖)
- 压缩条目:对 top-\(k\) 个压缩条目做注意力(获取远程信息)
HCA(Heavily Compressed Attention):与 CSA 类似但压缩率更大(\(m' \gg m\),如 \(m' = 64\) vs \(m = 4\)),不做重叠压缩,不做稀疏选择——直接对所有压缩条目做注意力。适合需要全局感知但精度要求不那么高的层。
CSA/HCA 的共享 Key-Value MQA:压缩后的 KV 条目同时作为 key 和 value(Shared KV),核心注意力采用 Multi-Query Attention(MQA)模式——所有 query 头共享同一组压缩 KV 条目,减少计算量。
额外技术细节:
- Query/Key 归一化:在核心注意力前对每个头的 query 和压缩 KV 条目施加 RMSNorm,防止 attention logits 爆炸
- 部分 RoPE:仅对 query 和 KV 条目的最后 64 维施加 RoPE 位置编码;对核心注意力输出也施加位置 \(-i\) 的 RoPE,使输出携带相对位置信息
- Attention Sink:引入可学习的 sink logits \(\{z'_h\}\),在注意力分母中加入 \(\exp(z'_h)\),允许每个头调整总注意力权重使其不等于 1(甚至接近 0),提升对噪声 token 的鲁棒性
- 混合精度 KV 存储:RoPE 维度用 BF16 存储,其余维度用 FP8 存储,KV cache 大小减半
- Lightning Indexer 使用 FP4 精度:在超长上下文下进一步加速注意力计算
复杂度分析:
| 每 token FLOPs | KV cache | |
|---|---|---|
| 标准全注意力 | \(O(n \cdot d)\) | \(O(n \cdot d)\) |
| CSA(\(m\)=4, \(k\)=1024, \(n_{\text{win}}\)=4096) | \(O((k + n_{\text{win}}) \cdot d)\) | \(O(n/m \cdot d + n_{\text{win}} \cdot d)\) |
| HCA(\(m'\)=64) | \(O(n/m' \cdot d)\) | \(O(n/m' \cdot d)\) |
在 \(n = 1{,}000{,}000\)、\(k = 1024\)、\(n_{\text{win}} = 4096\) 时,CSA 的每 token FLOPs 约为标准注意力的 0.5%。
成效:1M token 上下文下,V4-Pro 的单 token FLOPs 仅为 V3.2 的 27%,KV cache 仅为 10%。
Manifold-Constrained Hyper-Connections(mHC)— 流形约束的超连接
传统方案:残差连接及其问题
标准 Transformer 使用残差连接 \(\mathbf{y} = \mathbf{x} + \mathcal{F}(\mathbf{x})\) 来稳定深层训练。然而:
- 当层数 \(L\) 很大时(V4 有 90+ 层),残差累积 \(\mathbf{x} + \sum_{l=1}^{L} \mathcal{F}^l(\mathbf{x})\) 可能导致范数增长
- 虽然 Pre-Norm 缓解了梯度消失,但残差路径的非扩张性没有理论保证
Hyper-Connections(HC)的改进:
HC 引入可学习的输入变换 \(\mathbf{A}^l\)、残差变换 \(\mathbf{B}^l\)、输出变换 \(\mathbf{C}^l\):
其中 \(\hat{\mathbf{X}}^l = [\mathbf{x}^1; \ldots; \mathbf{x}^l]\) 是所有前序层输出的拼接(不只是上一层)。
问题:\(\mathbf{B}^l\) 是任意矩阵,深层堆叠时 \(\prod_{l=1}^{L} \mathbf{B}^l\) 的谱范数可能指数增长或衰减,导致训练不稳定。
V4 的创新:mHC——将 \(\mathbf{B}^l\) 约束在双随机矩阵流形上
双随机矩阵(Doubly Stochastic Matrix)集合:
即每行和每列的元素之和都为 1,且所有元素非负。这个集合在数学上称为 Birkhoff 多面体。
为什么约束在双随机矩阵上有效:
定理 1(谱范数界):对于任意 \(\mathbf{M} \in \mathcal{M}\),\(\|\mathbf{M}\|_2 \leqslant 1\)。
证明:\(\mathbf{M}\) 是非负矩阵且每行和为 1,由 Perron-Frobenius 定理,其谱半径 \(\rho(\mathbf{M}) = 1\)。对于非负矩阵,\(\|\mathbf{M}\|_2 \leqslant \sqrt{\|\mathbf{M}\|_1 \|\mathbf{M}\|_\infty}\)。由于 \(\|\mathbf{M}\|_1 = \max_j \sum_i M_{ij} = 1\)(列和为 1),\(\|\mathbf{M}\|_\infty = \max_i \sum_j M_{ij} = 1\)(行和为 1),因此 \(\|\mathbf{M}\|_2 \leqslant 1\)。\(\square\)
定理 2(乘法封闭性):若 \(\mathbf{M}_1, \mathbf{M}_2 \in \mathcal{M}\),则 \(\mathbf{M}_1 \mathbf{M}_2 \in \mathcal{M}\)。
证明:\((\mathbf{M}_1 \mathbf{M}_2) \mathbf{1} = \mathbf{M}_1 (\mathbf{M}_2 \mathbf{1}) = \mathbf{M}_1 \mathbf{1} = \mathbf{1}\),同理 \(\mathbf{1}^\top (\mathbf{M}_1 \mathbf{M}_2) = \mathbf{1}^\top\)。非负性由非负矩阵乘法保持。\(\square\)
推论:深层堆叠时,\(\prod_{l=1}^{L} \mathbf{B}^l\) 的谱范数 \(\leqslant 1\),保证残差变换是非扩张的(non-expansive),前向和反向传播数值稳定。
输入变换 \(\mathbf{A}^l\) 和输出变换 \(\mathbf{C}^l\) 的约束:通过逐元素 Sigmoid 约束为非负有界 \((0, 1)\),避免信号抵消。
动态参数化:三个变换矩阵由输入动态生成(而非静态参数):
其中 \(\mathbf{S}\) 是静态(输入无关)分量,\(\alpha\) 是可学习缩放因子。对于 \(\mathbf{B}^l\),先用指数函数确保正性 \(\mathbf{M}^{(0)} = \exp(\tilde{\mathbf{B}}^l)\),再通过 Sinkhorn-Knopp 算法 投影到双随机矩阵流形:交替进行行归一化 \(\mathbf{T}_r\) 和列归一化 \(\mathbf{T}_c\),即 \(\mathbf{M}^{(t)} = \mathbf{T}_r(\mathbf{T}_c(\mathbf{M}^{(t-1)}))\),直到收敛。
与标准残差连接的对比:
| 标准残差 | Pre-Norm 残差 | mHC | |
|---|---|---|---|
| 变换矩阵 | 固定 \(\mathbf{I}\) | 固定 \(\mathbf{I}\) | 可学习,输入动态生成 |
| 谱范数保证 | 无 | 无 | \(\|\mathbf{B}^l\|_2 \leqslant 1\)(理论保证) |
| 跨层信息 | 仅上一层 | 仅上一层 | 所有前序层(\(\hat{\mathbf{X}}^l\)) |
| 参数量 | 0 | 0 | \(O(n^2)\)(但 \(n\) 很小,通常 \(\leqslant 8\)) |
Muon 优化器 — 混合 Newton-Schulz 正交化
传统方案:AdamW 的局限
AdamW 是 Transformer 训练的标准优化器。它对每个参数独立维护一阶矩 \(m_t\) 和二阶矩 \(v_t\),更新量为 \(\frac{m_t}{\sqrt{v_t} + \epsilon}\)。局限在于:
- 各向同性缩放:AdamW 对梯度的每个维度独立缩放,不考虑参数矩阵的整体结构
- 对矩阵参数次优:权重矩阵的最优更新方向应该考虑矩阵的谱结构(奇异值分解),而非逐元素缩放
Muon 的核心思想:矩阵正交化
Muon 优化器对矩阵参数(如 Linear 层的权重)使用基于矩阵分解的更新方向。给定梯度矩阵 \(\mathbf{G}\),其 SVD 为 \(\mathbf{G} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^\top\),Muon 的目标是找到 \(\mathbf{U}\mathbf{V}^\top\)——即梯度方向的正交极分解(去除奇异值大小,只保留方向)。
正交极分解的性质:\(\mathbf{U}\mathbf{V}^\top\) 是与 \(\mathbf{G}\) 最近的正交矩阵(在 Frobenius 范数下),它将梯度的每个奇异方向"归一化"为 1,使得更新量在所有方向上均匀,避免某些方向更新过大而其他方向更新过小。
问题:SVD 的计算复杂度为 \(O(\min(mn^2, m^2n))\),对大矩阵不可行。
Newton-Schulz 迭代近似:用多项式迭代近似 \(\mathbf{U}\mathbf{V}^\top\)。先将梯度矩阵按 Frobenius 范数归一化 \(\mathbf{M}_0 = \mathbf{G} / \|\mathbf{G}\|_F\)(确保最大奇异值不超过 1),然后进行迭代:
为什么这能收敛到 \(\mathbf{U}\mathbf{V}^\top\):设 \(\mathbf{M}_{k-1} = \mathbf{U} \mathbf{D}_k \mathbf{V}^\top\)(SVD 形式保持),则迭代变为对奇异值 \(d\) 的标量迭代:
不动点为 \(d = 1\)(正交矩阵的奇异值全为 1)。通过选择 \((a, b, c)\) 使得 \(f(d) = ad + bd^3 + cd^5\) 满足 \(f(1) = 1\) 且 \(f'(1) = 0\)(二次收敛),可以保证快速收敛。
混合策略:
- 前 8 步:\((a, b, c) = (3.4445, -4.7750, 2.0315)\)——大步长快速收敛,但可能在 \(d = 1\) 附近振荡
- 后 2 步:\((a, b, c) = (2, -1.5, 0.5)\)——小步长精确稳定,保证最终奇异值精确等于 1
验证 \(f(1)\) 和 \(f'(1)\):
对于 \((a, b, c) = (2, -1.5, 0.5)\): - \(f(1) = 2 - 1.5 + 0.5 = 1\) \(\checkmark\) - \(f'(d) = 2 - 4.5d^2 + 2.5d^4\),\(f'(1) = 2 - 4.5 + 2.5 = 0\) \(\checkmark\)
额外优化(完整算法见 Algorithm 1):
- Nesterov 动量:维护动量缓冲 \(M_t = \mu M_{t-1} + G_t\),在计算 Newton-Schulz 迭代前使用 Nesterov trick:输入为 \(\mu M_t + G_t\)(而非 \(G_t\))
- RMS Rescaling:正交化后的更新量按 \(\sqrt{\max(n, m)} \cdot \gamma\) 重新缩放(\(n, m\) 为矩阵维度),使得 Muon 可以复用 AdamW 的学习率等超参数
- 权重衰减:与 AdamW 相同,\(W_t = W_{t-1} \cdot (1 - \eta \lambda) - \eta O_t\)
配置:embedding 模块、预测 head、mHC 的静态偏置/门控因子、所有 RMSNorm 权重仍使用 AdamW;其余所有模块使用 Muon。
成效:相比 AdamW 收敛更快、训练更稳定。V4 不使用 QK-Clip 技术(因为 CSA/HCA 的 query/key 已经施加了 RMSNorm,attention logits 不会爆炸)。
细粒度专家并行(Fine-Grained EP)
传统 MoE 专家并行的通信瓶颈
在多节点训练中,MoE 的专家分布在不同 GPU 上。每个 token 需要被路由到远程专家处理,再返回结果。传统实现中,通信和计算是串行的:
通信时间占比随节点数增加而增大,成为瓶颈。
V4 的流水线化方案
将 MoE 计算拆分为 5 个阶段,每个阶段处理一批专家(一个 wave):
| 阶段 | 操作 | 类型 |
|---|---|---|
| 1. Dispatch | 将 token 发送到目标专家所在 GPU | 通信 |
| 2. Linear-1 | 专家的第一层线性变换 | 计算 |
| 3. SwiGLU + FP8 Cast | 激活函数 + 精度转换 | 计算 |
| 4. Linear-2 | 专家的第二层线性变换 | 计算 |
| 5. Combine | 将专家输出发回原 GPU 并聚合 | 通信 |
不同 wave 的不同阶段可以同时执行——当 wave 1 在做 Combine(通信)时,wave 2 可以在做 Linear-1(计算),通信被计算完全隐藏。
通信隐藏的条件:设峰值计算吞吐为 \(C\),互联带宽为 \(B\)。通信可被完全隐藏的条件是 \(C/B \leqslant V_{\text{comp}} / V_{\text{comm}}\),其中 \(V_{\text{comp}}\) 为计算量,\(V_{\text{comm}}\) 为通信量。对 DeepSeek-V4-Pro,每个 token-expert 对需要 \(6hd\) FLOPs(SwiGLU gate、up、down 三个投影)但仅需 \(3h\) Bytes 通信(FP8 Dispatch + BF16 Combine),因此:
即每 GBps 带宽足以隐藏 6.1 TFLOP/s 的计算。一旦带宽达到此阈值,增加带宽的边际收益递减。
成效:理论加速 1.92×(相比未融合基线),实测 1.50~1.73×(通用推理场景),RL rollout 等延迟敏感场景可达 1.96×。已开源 CUDA 实现 MegaMoE。
FP4 量化感知训练
V4 对 MoE 层的路由专家参数采用 FP4 精度(4-bit 浮点数),这是业界首次在如此大规模模型上使用 FP4。虽然在当前硬件上 FP4×FP8 的峰值 FLOPs 与 FP8×FP8 相同,但在未来硬件上理论上可额外提升 33% 效率。结合 CSA/HCA 的混合精度 KV 存储(BF16 + FP8)和 Lightning Indexer 的 FP4 计算,V4 在精度和效率之间取得了极致平衡。
其他工程细节
TileLang 内核开发:V4 的复杂架构若用标准 PyTorch 算子实现,会产生数百个细粒度 ATen 算子。V4 采用 TileLang 开发融合内核替代大部分算子,在保持开发灵活性的同时达到接近手写 CUDA 的性能。
训练不稳定性缓解:V4 在预训练中遇到了训练不稳定性问题,论文提到通过多种策略缓解(包括 mHC 的谱范数约束、Query/Key 归一化等),确保了训练全程的稳定性。
总结对比
| DeepSeek-V2 (2024.05) | DeepSeek-Coder-V2 (2024.06) | DeepSeek-V3 (2024.12) | DeepSeek-R1 (2025.01) | DeepSeek-V4 (2026.04) | |
|---|---|---|---|---|---|
| 核心创新 | MLA + DeepSeekMoE | 持续预训练 + FIM + 奖励模型 RL | MLA + 无辅助损失负载均衡 + MTP | 纯 RL 涌现推理 + GRPO | CSA/HCA 混合注意力 + mHC + Muon |
| 解决的问题 | KV cache 效率、MoE 训练成本 | 开源模型代码能力追赶闭源、多语言支持 | KV cache 效率、MoE 负载均衡、训练信号稀疏 | 推理能力是否需要 SFT、RL 训练效率 | 百万 token 注意力效率、深层训练稳定性 |
| 关键数学 | 低秩 KV 联合压缩、细粒度专家分割 | fastText 数据筛选、PSM-FIM | 低秩压缩、偏置动态调整 | 组内归一化优势函数 | 双随机矩阵约束、Newton-Schulz 迭代 |
| 模型规模 | 236B (21B active) | 236B (21B active) / 16B (2.4B) | 671B (37B active) | 671B (37B active) | 1.6T (49B active) / 284B (13B active) |
| 上下文长度 | 128K | 128K | 128K | 128K | 1M tokens |
| 对标 | LLaMA 3 70B, Mixtral 8x22B | GPT-4-Turbo, Claude 3 Opus | GPT-4o, Claude-3.5-Sonnet | OpenAI o1 | GPT-5.2, Gemini-3.0-Pro |
| 外界评价 | MLA 里程碑、开源 MoE 标杆 | "价格屠夫"、"AI 界的拼多多" | 开源第一、性价比最高 | "史普尼克时刻"、登上 Nature 封面 | "疯狂划算的交易" |