[TOC]
背景
在之前的文章中,我们详细介绍了 DeepSeek-V3 的 MLA 机制 和 DeepSeek-V3.2 的 Lightning Indexer。MLA 解决了推理时的内存带宽问题,DSA 通过 sparse attention 将计算复杂度从 \(O(L^2)\) 降低到 \(O(L \cdot k)\)。但随着上下文长度推向百万级别(1M tokens),即使是 sparse attention,KV Cache 的绝对大小和注意力的计算开销仍然是瓶颈。
DeepSeek-V4 在 V3.2 的基础上做了根本性的架构升级:引入 Compressed Sparse Attention (CSA) 和 Heavily Compressed Attention (HCA) 的混合注意力架构,从序列维度压缩 KV Cache,再配合 sparse attention,实现了 1M token 上下文下仅需 V3.2 27% 的推理 FLOPs 和 10% 的 KV Cache。
本文基于 DeepSeek-V4 技术报告 和开源实现,详细解析 V4 的核心架构创新。
1. 模型概览
DeepSeek-V4 系列包括两个模型:
| 模型 | 总参数量 | 激活参数量 | 上下文长度 | 训练数据 |
|---|---|---|---|---|
| DeepSeek-V4-Pro | 1.6T | 49B | 1M tokens | 33T tokens |
| DeepSeek-V4-Flash | 284B | 13B | 1M tokens | 32T tokens |
相比 DeepSeek-V3.2(671B 总参数 / 37B 激活),V4 的核心创新点:
- 混合注意力架构:CSA + HCA 的交替配置,大幅提升长上下文效率
- Manifold-Constrained Hyper-Connections (mHC):增强残差连接
- Muon 优化器:替代 AdamW,加快收敛并提升训练稳定性
2. 符号定义
以 DeepSeek-V4-Pro 为例,定义本文使用的维度符号:
DeepSeek-V4-Flash 的关键差异:\(d = 4096\), \(L = 43\), \(n_h = 64\), \(d_Q = 1024\), \(G = 8\), \(k = 512\)。
3. 整体架构
层配置:V4-Pro 的前 2 层使用 HCA,后续层 CSA 和 HCA 交替使用。V4-Flash 的前 2 层使用纯滑动窗口 attention。
4. Compressed Sparse Attention (CSA)
CSA 是 V4 的核心注意力机制:先压缩 KV Cache(序列维度 \(\frac{1}{m}\) 倍),再用 Lightning Indexer 做 sparse selection,只选 top-k 个压缩 entry 做核心注意力。
4.1 Compressed Key-Value Entries
设输入隐藏状态为 \(\mathbf{H} \in \mathbb{R}^{n \times d}\)(\(n\) 为序列长度,\(d\) 为隐藏维度),CSA 首先计算两组 KV entries 及其对应的压缩权重:
其中 \(\mathbf{W}^{aKV}, \mathbf{W}^{bKV}, \mathbf{W}^{aZ}, \mathbf{W}^{bZ} \in \mathbb{R}^{d \times c}\) 是可训练参数(\(c\) 为 head 维度);\(\mathbf{C}^a, \mathbf{C}^b \in \mathbb{R}^{n \times c}\) 是两组 KV entries;\(\mathbf{Z}^a, \mathbf{Z}^b \in \mathbb{R}^{n \times c}\) 是对应的压缩权重。
Overlapped Compression
每 \(m\) 个 token 的 KV entries 压缩为一个 entry。核心操作是重叠压缩——每个压缩 entry \(\mathbf{C}^{\text{Comp}}_i\) 由 \(2m\) 个原始 token 加权得到(当前块 \(m\) 个来自 \(\mathbf{C}^a\) + 前一块 \(m\) 个来自 \(\mathbf{C}^b\)):
其中:
- \(\odot\) 表示 Hadamard 积(逐元素乘法)
- \(\text{Softmax}_{\text{row}}(\cdot)\) 沿行维度做归一化,跨当前块和前一块共 \(2m\) 个元素
- \(\mathbf{B}^a, \mathbf{B}^b \in \mathbb{R}^{m \times c}\) 是可学习的位置偏置
- 当 \(i = 0\) 时,\(\mathbf{Z}^b_{m(i-1):mi-1}\) 填充 \(-\infty\),\(\mathbf{C}^b_{m(i-1):mi-1}\) 填充零
直觉解释:
整个序列被划分为连续的块,每块 \(m\) 个 token:块 0 是 token \([0, m-1]\),块 1 是 token \([m, 2m-1]\),…,块 \(i\) 是 token \([mi, m(i+1)-1]\)。\(\mathbf{C}^{\text{Comp}}_i\) 就是第 \(i\) 个压缩块的表示——将块 \(i\) 的信息浓缩为一个 \(c\) 维向量。
Eq. (11) 做了什么:为了计算第 \(i\) 个压缩 entry,我们需要从 \(2m\) 个 token 中学习贡献权重:
- \(\mathbf{Z}^a_{mi:m(i+1)-1}\):从 \(\mathbf{Z}^a\) 中取出当前块 \(i\) 的 \(m\) 个 token 的压缩分数(位置 \(mi\) 到 \(m(i+1)-1\))
- \(\mathbf{Z}^b_{m(i-1):mi-1}\):从 \(\mathbf{Z}^b\) 中取出前一个块 \(i-1\) 的 \(m\) 个 token 的压缩分数(位置 \(m(i-1)\) 到 \(mi-1\))
将这 \(2m\) 个分数拼接,加上位置偏置 \(\mathbf{B}^a, \mathbf{B}^b\),然后跨 \(2m\) 个元素做 Softmax 归一化,得到权重 \(\mathbf{S}^a\)(当前块 \(m\) 个)和 \(\mathbf{S}^b\)(前一块 \(m\) 个)。Softmax 确保 \(2m\) 个权重在每个维度上之和为 1,形成竞争关系——模型自适应地决定哪些 token 对该压缩 entry 贡献最大。
Eq. (12) 做了什么:用 Eq. (11) 得到的权重对 KV entries 做加权求和:
- 第一项 \(\sum_{j=mi}^{m(i+1)-1} \mathbf{S}^a_j \odot \mathbf{C}^a_j\):取当前块 \(i\) 的 \(m\) 个 KV entries(\(\mathbf{C}^a\)),用对应权重 \(\mathbf{S}^a\) 逐维度缩放后求和
- 第二项 \(\sum_{j=m(i-1)}^{mi-1} \mathbf{S}^b_j \odot \mathbf{C}^b_j\):取前一块 \(i-1\) 的 \(m\) 个 KV entries(\(\mathbf{C}^b\)),用对应权重 \(\mathbf{S}^b\) 逐维度缩放后求和
两项加在一起就是最终的 \(\mathbf{C}^{\text{Comp}}_i \in \mathbb{R}^c\)。注意 \(\odot\) 是 Hadamard 积(逐维度乘法),意味着每个维度独立地选择权重——比 scalar 加权更有表达力,模型可以在不同维度上关注不同的 token。
重叠的意义:块 \(i\) 的压缩 entry 不仅看当前块的 token,还看前一块 \(i-1\) 的 token(通过 \(\mathbf{C}^b\));而块 \(i+1\) 又会看块 \(i\) 的 token。这样相邻压缩块之间共享了边界信息,避免了硬切分导致的信息断裂——跨块边界的语义依赖得以保留。
为何压缩率是 \(\frac{1}{m}\) 而非 \(\frac{1}{2m}\):虽然每个 \(\mathbf{C}^{\text{Comp}}_i\) 来自 \(2m\) 个 token,但 \(\mathbf{C}^a\) 用于 \(\mathbf{C}^{\text{Comp}}_i\) 的 token 位置 \([mi, m(i+1)-1]\),恰好是 \(\mathbf{C}^b\) 用于 \(\mathbf{C}^{\text{Comp}}_{i+1}\) 的 token 位置(重叠部分)。每个原始 token 位置只"主导"一个压缩 entry(通过 \(\mathbf{C}^a\)),同时"辅助"下一个压缩 entry(通过 \(\mathbf{C}^b\))。因此整体压缩率仍为 \(\frac{1}{m}\),最终产出 \(\mathbf{C}^{\text{Comp}} \in \mathbb{R}^{\frac{n}{m} \times c}\)。
4.2 Lightning Indexer (Sparse Selection)
压缩后仍有 \(\frac{n}{m}\) 个 KV entries。CSA 用 Lightning Indexer 选出 top-k 个做核心注意力。
Step 1: 压缩 Indexer Keys
对 indexer keys 执行与 \(\mathbf{C}^{\text{Comp}}\) 相同的压缩操作,得到 \(\mathbf{K}^{I\text{Comp}} \in \mathbb{R}^{\frac{n}{m} \times c^I}\),其中 \(c^I\) 是 indexer head 维度。
Step 2: Indexer Queries(低秩投影,与主注意力共享压缩向量 \(\mathbf{c}^Q_t\))
其中 \(\mathbf{W}^{DQ} \in \mathbb{R}^{d \times d_c}\) 为 query 下投影(\(d_c\) 为 query 压缩维度);\(\mathbf{W}^{IUQ} \in \mathbb{R}^{d_c \times c^I n^I_h}\) 为 indexer query 上投影;\(n^I_h\) 为 indexer head 数量。
Step 3: 计算 Index Score(加权多头 ReLU 点积)
其中 \(\mathbf{W}^w \in \mathbb{R}^{d \times n^I_h}\) 是可学习权重矩阵;\(w^I_{t,h} \in \mathbb{R}\) 是第 \(h\) 个 indexer head 的标量权重;\(s < \lfloor\frac{t}{m}\rfloor\) 保证因果性。
Step 4: Top-k 选择
每个 query token \(t\) 从 \(\frac{n}{m}\) 个压缩 entry 中选出 \(k\) 个。
4.3 Shared Key-Value MQA
选出稀疏 KV entries 后,CSA 执行核心注意力。关键设计:每个压缩 KV entry 同时作为 key 和 value(Shared Key-Value MQA)。
主注意力的 queries 从同一个 \(\mathbf{c}^Q_t\) 上投影得到(与 indexer queries 共享压缩向量 \(\mathbf{c}^Q_t\)):
其中 \(\mathbf{W}^{UQ} \in \mathbb{R}^{d_c \times c \cdot n_h}\);\(n_h\) 为主注意力 head 数量。注意 key 和 value 是同一组 entry。
与 V3.2 MLA 的关键区别:MLA 为 key 和 value 分别做上投影 (\(\mathbf{W}^{UK}\), \(\mathbf{W}^{UV}\)),KV Cache 中需要存独立的压缩向量。而 CSA 的 Shared KV 设计使得每个 entry 只需存一份,KV Cache 开销大幅减少。
4.4 Grouped Output Projection
\(n_h\) 很大时,直接将 \([\mathbf{o}_{t,1}; ...; \mathbf{o}_{t,n_h}] \in \mathbb{R}^{n_h \cdot c}\) 投影到 \(\mathbb{R}^d\) 计算量巨大。V4 设计了分组输出投影:
- 将 \(n_h\) 个 head 分成 \(G\) 组
- 每组 \(\frac{n_h}{G}\) 个 head 的拼接输出 \(\mathbf{o}^g_t \in \mathbb{R}^{\frac{n_h}{G} \cdot c}\) 先投影到中间维度 \(d_G\)
- 再将 \(G\) 组中间输出拼接后投影到最终维度 \(d\)
4.5 其他细节
论文还描述了 CSA(及 HCA)的几项附加技术:
Query 和 KV Entry 归一化:在核心注意力之前,对每个 query head 和压缩 KV entry 执行 RMSNorm,避免 attention logits 爆炸。
Partial RoPE:对 query 向量和 KV entry 向量的最后 64 维施加 RoPE。由于 KV entry 同时作为 key 和 value,朴素注意力输出 \(\mathbf{o}_{t,i}\) 会带有绝对位置编码。对策:对 \(\mathbf{o}_{t,i}\) 的最后 64 维施加位置为 \(-t\) 的 RoPE,使最终输出携带相对位置信息。
滑动窗口分支(Sliding Window KV Entries):
为什么需要(两个互补的原因):
原因一:因果性硬约束——同块 token 通过压缩路径完全不可达。 压缩 entry \(\mathbf{C}^{\text{Comp}}_i\) 是块 \(i\) 内全部 \(m\) 个 token 的加权融合(Eq. 12),包含了块内所有 token 的信息——包括块内靠后位置的"未来"token。由于 autoregressive 因果性,位于块 \(i\) 内位置 \(t\) 的 query 不能使用 \(\mathbf{C}^{\text{Comp}}_i\)(否则会偷看到 \(t\) 之后的 token)。论文的约束是 \(s < \lfloor\frac{t}{m}\rfloor\),即 query \(t\) 只能 attend 到完全在它之前的压缩块。这意味着块 \(i\) 内位于 \(t\) 之前的 token(位置 \(mi\) 到 \(t-1\)),虽然是合法的"过去",但被融合进了含有未来信息的 \(\mathbf{C}^{\text{Comp}}_i\),通过压缩路径根本无法访问。
原因二:局部细节需要高精度——压缩会丢失 fine-grained 信息。 在语言模型中,当前 query 与刚过去的邻近 token 关系最为紧密和微妙。即使前面的压缩块(\(s < \lfloor\frac{t}{m}\rfloor\))可以访问,这些块的信息也是 \(m\) 个 token 融合后的"粗粒度摘要"。对于局部上下文(最近几十个 token),模型需要逐 token 级别的精确表示,而非压缩后的混合信号。
具体做法:为每个 query token 额外产出最近 \(n_{\text{win}}\) 个 token 的未压缩 KV entries。这些 entries 与 compressed entries 维度相同(都是 \(c = 512\)),但不经过任何压缩操作,以原始精度保留。在核心注意力中,query 同时 attend to 两部分:
- Compressed KV entries:经过压缩(和 sparse selection)的全局长程记忆
- Sliding Window KV entries:未压缩的最近 \(n_{\text{win}}\) 个 token,负责精确的局部上下文
两者参与同一个 softmax attention 计算(因为维度相同,可以直接拼接为统一的 key/value 集合)。
具体配置与 attention 总 entry 数:
| 参数 | V4-Pro | V4-Flash |
|---|---|---|
| attention top-k(indexer 选出的压缩 entry 数) | 1024 | 512 |
| \(n_{\text{win}}\)(sliding window 大小) | 128 | 128 |
| 每个 query 实际 attend to 的 entry 总数 | \(1024 + 128 = 1152\) | \(512 + 128 = 640\) |
Top-k 远大于 \(n_{\text{win}}\):top-k 覆盖全局长程依赖(从 \(\frac{n}{m}\) 个压缩 entries 中选出最相关的),\(n_{\text{win}}\) 覆盖局部精细依赖(最近 128 个 token 的未压缩表示)。两者拼接后共同参与同一个 softmax attention 计算(再加上 attention sink)。
工程实现:滑动窗口 entries 存储在固定大小的 state cache 中。随着新 token 生成,最老的 token 滑出窗口并被送入压缩路径。因此滑动窗口的内存开销是固定的、不随上下文长度增长。
与 compressed entries 维度相同的原因:从代码看,self.wkv = Linear(self.dim, self.head_dim) 同时用于产出 sliding window entries 和作为压缩路径的输入——两者共享同一个投影矩阵和 head 维度 \(c\)。这是 Shared Key-Value MQA 的设计要求:所有 entries(无论压缩与否)都同时充当 key 和 value,必须在同一个 attention 运算中兼容。
Attention Sink:设可学习的 sink logits \(\{s'_1, ..., s'_{n_h}\}\),修改注意力分数计算:
使得每个 head 的注意力分数之和可以不等于 1(甚至接近 0),允许 head "不关注任何东西"。
4.6 CSA 完整数据流图
5. Heavily Compressed Attention (HCA)
HCA 采用更激进的压缩(\(m' \gg m\)),但不使用 sparse attention——直接对所有压缩 entries 做 dense attention。
5.1 非重叠压缩
与 CSA 不同,HCA 只使用一组 KV entries,且压缩是非重叠的:
每 \(m'\) 个 token 压缩为一个 entry,无重叠。结果 \(\mathbf{C}^{\text{Comp}} \in \mathbb{R}^{\frac{n}{m'} \times c}\)。对于 1M 上下文,HCA 的 KV entries 数量仅为 \(\frac{10^6}{128} \approx 7812\) 个。
5.2 Dense Shared Key-Value MQA
由于压缩后 entries 极少,HCA 直接对全部压缩 entries 做 dense attention。Query 投影方式与 CSA 相同(低秩):
HCA 同样使用 Shared Key-Value MQA(KV entry 同时作为 key 和 value)、Grouped Output Projection、RMSNorm、Partial RoPE、滑动窗口和 Attention Sink。
5.3 HCA 完整数据流图
6. CSA 与 HCA 的对比
| 特性 | CSA | HCA |
|---|---|---|
| 压缩率 | \(m = 4\) | \(m' = 128\) |
| 压缩方式 | 重叠压缩(\(2m\) tokens, 两组 \(C^a, C^b\)) | 非重叠压缩(\(m'\) tokens, 一组 \(C\)) |
| Sparse Attention | 是(Lightning Indexer + Top-k) | 否(dense) |
| KV entries 数(1M context) | \(\frac{10^6}{4} = 250K\),sparse 选 \(k\) | \(\frac{10^6}{128} \approx 7812\) |
| 层配置(V4-Pro) | 偶数层(Layer 2, 4, 6, ...) | 奇数层 + 前 2 层 |
| 适合场景 | 需要 fine-grained token-level 信息 | 粗粒度语义理解 |
设计哲学:CSA 先轻度压缩再 sparse select,保留 token-level 精度;HCA 做极度压缩但保持 dense,确保全局信息覆盖。两者互补。
7. 注意力层的其他细节
7.1 Partial RoPE
CSA 和 HCA 都对 queries、KV entries、以及 attention outputs 的最后 64 维应用 RoPE:
特殊处理:由于 KV entry 同时作为 key 和 value,naive attention output 会携带绝对位置编码。为此,对 attention output 的最后 64 维也应用 RoPE(position \(-t\)),使最终输出只携带相对位置信息。
7.2 滑动窗口注意力 (SWA)
由于压缩操作的因果性要求,每个 query 只能 attend 已完成压缩的前置块。为补充当前块内的局部信息,引入一个额外的滑动窗口分支:
- 窗口大小 \(w_{\text{win}} = 128\)
- 为最近 128 个 token 生成未压缩的 KV entries
- 在 core attention 中与压缩 KV entries 一起使用
7.3 Attention Sink
在 core attention 的 softmax 分母中加入一个可学习的 sink logit,允许注意力权重总和不为 1:
其中 \(s'_h\) 是每个 head 的可学习 sink logit。
7.4 Query/KV Entry Normalization
在 core attention 之前,对 queries 和 KV entries 分别做 RMSNorm,防止 attention logits 爆炸。
8. Manifold-Constrained Hyper-Connections (mHC)
V4 使用 mHC 替代传统残差连接,增强信号在层间的传播。
8.1 基本思想
标准 Hyper-Connections (HC) 将残差流宽度扩展 \(n_{\text{hc}}\) 倍:从 \(\mathbb{R}^d\) 扩展到 \(\mathbb{R}^{n_{\text{hc}} \times d}\)(\(n_{\text{hc}} = 4\))。
每层的变换包含三个映射:
- Input mapping \(\mathbf{A}_i \in \mathbb{R}^{1 \times n_{\text{hc}}}\):从扩展残差流中提取 \(d\) 维输入给层
- Residual mapping \(\mathbf{M}_i \in \mathbb{R}^{n_{\text{hc}} \times n_{\text{hc}}}\):变换残差流本身
- Output mapping \(\mathbf{O}_i \in \mathbb{R}^{n_{\text{hc}} \times 1}\):将层输出注入回扩展残差流
8.2 Manifold 约束
mHC 的核心创新是将残差映射矩阵 \(\mathbf{M}_i\) 约束到双随机矩阵的流形(Birkhoff 多面体):
这确保:
- 谱范数有界 \(\|\mathbf{M}_i\|_2 \leq 1\):残差变换是非扩张的,前向传播和反向传播数值稳定
- 乘法封闭:\(\mathcal{M}\) 在矩阵乘法下封闭,多层 mHC 堆叠后仍然稳定
8.3 动态参数化
三个映射的参数由动态(输入依赖)+ 静态(偏置)两部分组成:
其中 \(\Psi\) 是可学习的 gating factors(初始化为小值),\(\mathbf{W}\) 是动态投影矩阵。
8.4 约束应用
对原始参数应用约束:
- Input/Output mapping:用 Sigmoid 确保非负有界
- Residual mapping:用 Sinkhorn-Knopp 迭代投影到双随机矩阵
9. Muon 优化器
V4 系列的大部分参数使用 Muon 优化器(而非 AdamW),其核心思想是对梯度做近似正交化。
9.1 算法
对于每个逻辑独立的权重矩阵 \(\mathbf{W} \in \mathbb{R}^{m \times n}\):
其中:
- \(\beta = 0.95\):动量系数
- \(\lambda = 0.1\):权重衰减
- \(\rho\):RMS 重缩放因子(V4 中设为 0.18)
- HybridNewtonSchulz:将矩阵近似正交化为 \(\mathbf{U}\mathbf{V}^T\) 形式
9.2 Hybrid Newton-Schulz 迭代
目标:将矩阵 \(\mathbf{X}\)(SVD = \(\mathbf{U}\Sigma\mathbf{V}^T\))正交化为 \(\mathbf{U}\mathbf{V}^T\)。
先归一化 \(\mathbf{X}_0 = \mathbf{X} / \|\mathbf{X}\|_F\),然后迭代:
V4 使用 10 次迭代,分两阶段:
- 前 8 步:\((a, b, c) = (3.4445, -4.7750, 2.0315)\),快速收敛
- 后 2 步:\((a, b, c) = (2, -1.5, 0.5)\),精确稳定在 1
9.3 使用范围
| 优化器 | 应用模块 |
|---|---|
| Muon | 绝大部分参数(attention, MoE experts, etc.) |
| AdamW | Embedding, Prediction Head, RMSNorm, mHC 的静态偏置和 gating |
10. MoE (Mixture-of-Experts)
V4 沿用 DeepSeekMoE 架构,但做了若干调整:
10.1 V4-Pro 配置
- 每层 1 个 shared expert + 384 个 routed experts
- 每个 expert 的 intermediate dimension = 3072
- 每个 token 激活 6 个 routed experts
- 激活函数:\(\sqrt{\text{Softplus}(\cdot)}\)(替代 V3 的 Sigmoid)
10.2 Hash Routing
V4-Pro 的前 3 层 MoE 使用 Hash routing(根据 input token ID 的哈希函数确定目标 expert),后续层使用标准 learned routing。
10.3 负载均衡
- Auxiliary-loss-free 策略(bias update speed = 0.001)
- 额外的 sequence-wise balance loss(weight = 0.0001)防止单序列内极端不均衡
11. 效率分析
11.1 单 Token 推理 FLOPs 对比(1M context)
| 模型 | 单 Token FLOPs | 相对 V3.2 |
|---|---|---|
| DeepSeek-V3.2 | 基准 | 100% |
| DeepSeek-V4-Pro | 约 0.27× | 27% |
| DeepSeek-V4-Flash | 约 0.10× | 10% |
11.2 KV Cache 对比(1M context)
| 模型 | 累计 KV Cache | 相对 V3.2 |
|---|---|---|
| DeepSeek-V3.2 | ~50 GB | 100% |
| DeepSeek-V4-Pro | ~5 GB | 10% |
| DeepSeek-V4-Flash | ~3.6 GB | 7% |
11.3 效率来源分析
CSA 的效率提升路径:
以 V4-Pro 为例(\(L = 10^6\), \(c = 4\), \(k = 1024\)):
- 压缩后 KV entries 数:\(\frac{10^6}{4} = 250K\)
- Sparse 选择后实际 attend 数:\(1024\)
- 总压缩比:\(\frac{1024}{10^6} \approx 0.1\%\)
HCA 的效率:
- 直接压缩 \(128 \times\):\(\frac{10^6}{128} \approx 7812\) entries
- Dense attend,无需 indexer 开销
11.4 精度优化
- KV entries 存储:RoPE 维度用 BF16,其余用 FP8(接近减半存储)
- Lightning Indexer 的 QK 计算:FP4 精度
- Routed expert 参数:FP4 精度(推理时)
- Index scores:量化存储
12. 训练策略
12.1 Pre-training 阶段
| 阶段 | 序列长度 | 说明 |
|---|---|---|
| 初始 | 4K | Dense attention |
| 中期 | 16K → 64K | 引入 sparse attention (两阶段) |
| 后期 | 1M | Sparse attention |
Sparse attention 引入流程:
- 前 1T tokens 使用 dense attention warmup
- 序列长度扩展到 64K 时引入 sparse attention
- 先短暂 warmup lightning indexer,然后全程 sparse training
12.2 Hyper-parameters(V4-Pro)
12.3 训练稳定性技术
Anticipatory Routing:将 routing 的计算和 backbone 更新解耦——在 step \(t\) 时,使用当前参数 \(\theta_t\) 做特征计算,但 routing indices 使用历史参数 \(\theta_{t - \Delta t}\) 预计算。
SwiGLU Clamping:将 SwiGLU 的线性部分 clamp 到 \([-10, 10]\),gate 部分上界 clamp 到 10。
13. Post-Training
V4 的 post-training 采用两阶段范式:
13.1 Specialist Training
针对不同领域(math, code, agent, instruction following)独立训练 specialist 模型:
- SFT 阶段:在高质量领域数据上做 supervised fine-tuning
- RL 阶段:使用 GRPO (Group Relative Policy Optimization) + 领域专用 reward model
13.2 On-Policy Distillation (OPD)
将多个 specialist 合并为统一模型:
其中:
- \(\pi_\theta\):student 模型
- \(\pi_{T_i}\):第 \(i\) 个 teacher (specialist)
- \(\lambda_i\):teacher 权重
- \(D_{\text{KL}}(\pi_\theta \| \pi_{T_i})\):reverse KL
关键技术选择:
- 使用 full-vocabulary logit distillation(而非 token-level KL 近似),梯度估计更稳定
- 采用 reverse KL(student \(\to\) teacher),鼓励 mode-seeking behavior
- 训练轨迹从 student 采样(on-policy),超过 10 个 teacher 参与蒸馏
13.3 FP4 Quantization-Aware Training
在 post-training 阶段引入 QAT,让模型适应量化带来的精度损失:
- MoE expert weights → FP4 (MXFP4)
- CSA Indexer 的 QK path → FP4
- Forward:用 FP4 模拟量化(通过 FP8 中间格式)
- Backward:STE (Straight-Through Estimator)
13.4 推理模式
| 模式 | 特点 | 格式 |
|---|---|---|
| Non-think | 快速直觉响应 | </think> summary |
| Think High | 有意识的逻辑分析 | <think>..tokens..</think> summary |
| Think Max | 推理能力的极限 | 特殊 system prompt + <think>..tokens..</think> |
14. Benchmark 结果
14.1 Pre-training 基座模型
| Benchmark | V3.2-Base (37B/671B) | V4-Flash-Base (13B/284B) | V4-Pro-Base (49B/1.6T) |
|---|---|---|---|
| MMLU | 87.8 | 88.7 | 90.1 |
| MMLU-Pro | 65.5 | 68.3 | 73.5 |
| SimpleQA verified | 28.3 | 30.1 | 55.2 |
| FACTS Parametric | 27.1 | 33.9 | 62.6 |
| HumanEval | 62.8 | 69.5 | 76.8 |
| MATH | 60.5 | 57.4 | 64.5 |
| LongBench-V2 | 40.2 | 44.7 | 51.5 |
关键发现:V4-Flash(13B 激活)以 V3.2(37B 激活)不到一半的参数量,在大多数 benchmark 上超越 V3.2。
14.2 Post-training (V4-Pro-Max vs 竞品)
| Benchmark | Opus-4.6 Max | GPT-5.4 xHigh | Gemini-3.1-Pro High | V4-Pro-Max |
|---|---|---|---|---|
| SimpleQA-Verified | 46.2 | 45.3 | 75.6 | 57.9 |
| GPQA Diamond | 91.3 | 93.0 | 94.3 | 90.1 |
| HLE | 40.0 | 39.8 | 44.4 | 37.7 |
| LiveCodeBench | 88.8 | - | 91.7 | 93.5 |
| Codeforces (Rating) | - | 3168 | 3052 | 3206 |
| Apex Shortlist | 85.9 | 78.1 | 89.1 | 90.2 |
| SWE Verified | 80.8 | - | 80.6 | 80.6 |
| Terminal Bench 2.0 | 65.4 | 75.1 | 68.5 | 67.9 |
15. 设计选择总结
| 设计选择 | 原因 |
|---|---|
| 混合 CSA + HCA | CSA 提供 fine-grained 信息, HCA 提供全局覆盖,互补 |
| 重叠压缩 (CSA) | 相邻块边界信息不丢失,提升 recall |
| Shared Key-Value MQA | 同一 entry 作为 key 和 value,大幅减少 KV Cache |
| Grouped Output Projection | 解决高 head 数导致的输出投影计算量 |
| mHC (Birkhoff polytope) | 双随机矩阵约束确保深层堆叠的数值稳定性 |
| Muon 优化器 | 比 AdamW 更快收敛,配合 RMSNorm 免去 QK-Clip |
| FP4 Indexer + Expert | 进一步压缩计算和存储开销 |
| Anticipatory Routing | 解耦 routing 和 backbone 更新,消除 loss spikes |
| SwiGLU Clamping | 直接抑制异常值,稳定训练 |
| On-Policy Distillation | 替代 mixed RL,更稳定地合并多领域 specialist |
| 滑动窗口注意力分支 | 补充压缩导致的局部信息缺失 |
16. 与 V3.2 架构的关键区别
| 维度 | DeepSeek-V3.2 | DeepSeek-V4 |
|---|---|---|
| 注意力机制 | MLA + DSA (Lightning Indexer) | CSA + HCA (混合压缩) |
| KV Cache 形式 | 低秩压缩 (\(\mathbf{c}^{KV}\), 512d per token) | 序列维度压缩 (每 4/128 tokens → 1 entry) |
| 残差连接 | 标准 residual | mHC (Birkhoff polytope) |
| 优化器 | AdamW | Muon (大部分参数) |
| 上下文长度 | 128K | 1M |
| Indexer 作用对象 | 原始 token | 压缩后的 KV entries |
| 总参数量 (大模型) | 671B | 1.6T |
| 激活参数量 | 37B | 49B |
17. 总结
DeepSeek-V4 的核心设计哲学可以概括为:多层次压缩 + 精准选择。
- 序列维度压缩:CSA 将 \(L\) 个 token 压缩为 \(\frac{L}{c}\) 个 entry,HCA 压缩为 \(\frac{L}{c'}\) 个 entry
- Sparse Selection:CSA 进一步从 \(\frac{L}{c}\) 个 entry 中只选 \(k\) 个
- 混合配置:CSA 层保留细粒度信息,HCA 层保证全局覆盖
- 精度优化:FP4 indexer, FP8/FP4 KV cache, FP4 expert weights
最终实现了在 1M token 上下文下:
- FLOPs 仅为 V3.2 的 27%(V4-Pro)/ 10%(V4-Flash)
- KV Cache 仅为 V3.2 的 10%(V4-Pro)/ 7%(V4-Flash)
- 性能上 V4-Pro-Max 在多数 benchmark 达到或接近 frontier 水平
这使得百万级别上下文从"理论可行"变为"日常可用",为未来的 test-time scaling 和长程 agentic 任务奠定了基础。
参考
- DeepSeek-V4 Technical Report
- DeepSeek-V4-Pro Open-source Inference
- DeepSeek-V3.2 Lightning Indexer 详解 (前文)
- DeepSeek V3 MLA 详解 (前文)
- Manifold-Constrained Hyper-Connections (Xie et al., 2026)
- Muon Optimizer (Jordan et al., 2024; Liu et al., 2025)