8.6 DeepSeek 的技术创新:MLA 和 MoE
用更聪明的方式而不是更大的规模来实现更好的性能 为了理解 DeepSeek 为什么需要 MLA,先看看传统 Transformer 注意力机制的问题: DeepSeek 引入的 MLA(Multi-head Latent Attention)解决了这个问题。
8.6 DeepSeek 的技术创新:MLA 和 MoE
用更聪明的方式而不是更大的规模来实现更好的性能
8.6.1 传统注意力的浪费
为了理解 DeepSeek 为什么需要 MLA,先看看传统 Transformer 注意力机制的问题:
8.6.2 MLA:多头潜在注意力
DeepSeek 引入的 MLA(Multi-head Latent Attention)解决了这个问题。
核心思想
如何工作?
MLA的工作流程:
输入:序列 [token1, token2, ..., tokenN]
↓
投影到潜在空间:
├─ 将高维的Q,K,V投影到低维潜在空间
├─ 假设原始维度是4096(embed_dim)
├─ 投影到256维的潜在空间
├─ 这一步压缩比 = 4096/256 = 16倍
└─ 节省93%+的KV缓存!(关键:只存储256维的缓存)
↓
注意力计算(在潜在空间中进行):
├─ 在低维空间中计算标准注意力
├─ 复杂度仍是O(N²)(N 为序列长度,不因 MLA 变小);变小的是参与计算的向量维度
├─ 矩阵维度从4096×4096降到256×256
├─ KV 缓存占用从 16MB → 1MB(减少约93%,对应 16 倍压缩)
└─ 长序列推理的显存与带宽瓶颈大幅缓解
↓
解压层(投影回原始维度):
├─ 使用学习的映射矩阵将结果恢复
├─ 从256维映射回4096维
├─ 这个映射是在训练中优化的,丢失的信息很少
├─ 关键:解压层很轻量(只是矩阵乘法)
└─ 恢复的质量接近原始注意力
↓
输出:与传统注意力相同的质量
推理优化的关键(KV缓存):
传统Transformer:
├─ 处理1000个token,需要存储1000×4096维的K和V
├─ 总占用内存 = 1000 × 4096 × 4bytes = 16MB(仅KV)
└─ 序列越长,内存爆炸
MLA方式:
├─ 处理1000个token,只需存储1000×256维的压缩K和V
├─ 总占用内存 = 1000 × 256 × 4bytes = 1MB(仅压缩KV)
└─ 节省93%的KV缓存!这正是长序列推理的瓶颈
数学直觉(简化版)
传统注意力:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
其中:
Q, K, V 都是大矩阵(d_model × sequence_length)
- d_model通常是4096(对于大模型)
- 计算QK^T需要4096×4096的矩阵乘法
- 存储完整的KV缓存很昂贵
MLA的方式(三个关键步骤):
第1步:投影到潜在空间
Q_low = Q @ W_q_down # 维度:d_model → d_latent
K_low = K @ W_k_down # (4096维 → 256维)
V_low = V @ W_v_down
第2步:在潜在空间进行注意力计算
Attention_low(Q_low, K_low, V_low) = softmax(Q_low·K_low^T/√d_latent)V_low
这里的直观感受:
- Q_low·K_low^T 是 256×256 的矩阵乘法(而不是 4096×4096),中间矩阵明显更小
- 但 MLA 真正省下的不是注意力算力,而是需要缓存的 K/V:压缩后 KV 缓存大幅减小,这才是它的核心收益(见下方"效果总结")
第3步:投影回原始维度
Output = Attention_low @ W_output # 256维 → 4096维
效果总结:
- KV缓存大小:从16MB → 1MB(减少约93%,对应约16倍压缩)—— 这是 MLA 最主要的收益
- 推理速度:长序列推理的瓶颈通常在显存带宽(反复读取巨大的 KV 缓存),缓存变小后访问更快,推理吞吐随之提升
- 注意力计算量:与标准多头注意力大致相当(实现中会把低秩投影"吸收"进权重、恢复到各头维度),所以 MLA 省的是显存而非算力
- 质量:通过训练优化投影矩阵,质量接近原始注意力
为什么这样做有效?
- 32个注意力头中有大量冗余(很多头学到类似的模式)
- 潜在空间能够有效编码这些冗余
- 类比:就像JPEG压缩图像,去掉看不见的细节,保留重要信息
KV 缓存压缩的实际影响
对长序列推理的革命性改进:
场景:处理128K token的长文本
传统Transformer:
├─ 每层的KV缓存占用:128K × 4096 × 2 × 2bytes = 2GB
├─ 假设96层:96 × 2GB = 192GB(仅KV缓存!)
└─ 需要H100级别的GPU才能运行
MLA方式:
├─ 每层的KV缓存占用:128K × 256 × 2 × 2bytes = 128MB
├─ 假设96层:96 × 128MB = 12.3GB(仅KV缓存)
└─ 可以在A100 40GB上轻松运行
成本对比:
- H100 GPU:$40,000/个
- A100 GPU:$10,000/个
- MLA节省的硬件成本:4倍
这就是DeepSeek能用更便宜GPU的原因之一!
8.6.3 MoE:混合专家
第二个创新:不是所有 token 都需要所有参数
具体工作方式:路由器如何工作
公司部门分工的比喻:
MoE的路由机制详解:
- 路由网络(Gating Network)的结构:
├─ 输入:token的嵌入表示(比如4096维)
├─ 简单的线性层:4096维 → 8个专家分数
├─ 输出:8个softmax分数 [0.3, 0.4, 0.2, 0.05, ...]
└─ 速度:非常快(只是一次矩阵乘法)
- Top-K选择:
├─ 经典 MoE(如 Mixtral-8x7B)使用 K=2(每个 token 激活 2 个专家)
├─ 路由权重:假设分数是[0.4, 0.35, 0.15, 0.1, ...]
├─ 硬选择:选择最高的2个(0.4和0.35)
│ └─ 专家A: 40%, 专家B: 35%, 其他: 0%
│
└─ 软选择(也叫平衡选择):
└─ 按照概率分配(基于分数)
└─ 专家A: 40%, 专家B: 35%, 专家C: 15%, ...
- 负载均衡:防止所有token都选择同一个专家
├─ 问题:如果路由器总是倾向于选择专家A
│ 那么其他专家就会被浪费
│
├─ 解决方案:添加辅助损失函数
│ ├─ 在训练时添加额外的损失:
│ │ “确保每个专家被使用的次数相近”
│ │
│ ├─ 如果有8个专家和1000个token
│ │ └─ 理想情况:每个专家处理 1000/8 = 125个token
│ │ └─ 如果某个专家只被选了10次,就增加损失
│ │
│ └─ 训练到收敛:负载均衡自动实现
│
└─ 效果:即使MoE参数很多,也能高效使用
MoE 在 DeepSeek-V3 中的实现
DeepSeek-V3的MoE架构:
参数配置(基于 DeepSeek-V3 技术报告):
├─ 总专家数:256 个
├─ 共享专家:1 个(所有 token 都必须通过)
├─ 每次激活:Top-K=8 个路由专家 + 1 个共享专家
├─ 总参数:约 671B(MoE 层含 256 个专家的全部参数)
├─ 每个 token 激活参数:约 37B(8 个路由专家 + 共享专家)
└─ 稀疏性:每个 token 只激活全参数的一小部分
推理流程:
输入:一个token的嵌入向量
↓
路由器(Gating Network):
├─ 计算分数:[分数1, 分数2, ..., 分数256]
├─ 应用softmax
└─ 选择Top-K=8 的路由专家(基于分数)+ 1 个共享专家
↓
执行计算:
├─ 8 个被选中的路由专家分别处理这个 token
├─ 共享专家也处理这个 token(所有 token 都通过)
├─ 单 token 激活参数共约 37B(含路由专家 + 共享专家)
└─ 按照路由权重混合结果
↓
输出:融合后的特征表示
稀疏激活的力量
稀疏激活 = 只激活部分参数,而不是全部参数
DeepSeek-V3的参数配置解释:
总参数数 vs 激活参数数 的区别:
┌────────────────────────────────────────┐
│ 总参数:671B(约 6,710 亿参数) │
│ 这包括: │
│ ├─ 256 个路由专家(占大头) │
│ ├─ 1 个共享专家 │
│ └─ 注意力层等共享组件 │
│ │
│ 每次推理激活:约 37B(约 370 亿参数) │
│ 这来自: │
│ ├─ Top-K=8 个被路由器选中的专家 │
│ ├─ 加上 1 个共享专家 │
│ └─ 加上注意力层等共享部分 │
│ │
│ 稀疏性:37B / 671B ≈ 5.5% │
│ 含义:每次推理只激活约 5.5% 的参数 │
└────────────────────────────────────────┘
重点理解:为什么"总参数 671B,激活 37B"?
DeepSeek-V3 共 61 层 Transformer:
├─ 每层的前向网络(FFN)是 MoE 结构
│ ├─ 256 个路由专家 + 1 个共享专家
│ ├─ 每个 token 只激活其中 Top-K=8 个路由专家
│ └─ 加上共享专家 → 每层 MoE 激活 9 个专家
│
├─ 注意力层是所有 token 共享的
│ └─ 使用 MLA(多头潜在注意力,详见 8.6.2)
│
└─ 推理时:每层只激活 9 个专家 + 注意力层
全部 61 层加总,激活参数约 37B(每个 token)
对比不同模型的参数配置:
传统密集模型(比如 200B 量级的 dense 模型):
├─ 总参数:200B
├─ 激活参数(推理):200B(全部)
└─ 推理成本:必须运行 200B 的计算
MoE 稀疏模型(DeepSeek-V3):
├─ 总参数:671B(容量更大)
├─ 激活参数(推理):37B(仅 5.5%)
├─ 推理成本:只运行 37B 的计算
├─ 对比 200B 密集模型:37B / 200B ≈ 0.19 倍
│ 即推理成本"反而显著低于"同代 dense 模型
└─ 好处:用更低的推理成本,访问 671B 规模的知识容量!
为什么这样设计有效?
知识分布假设:
不同的知识分散在不同的"专家"中
- 256 个细粒度专家分别擅长不同领域
- 数学、代码、语言、常识、长尾知识等
- 路由器根据 token 内容选出最匹配的 8 个
对于一个数学 token:
不需要激活与之无关的专家(浪费)
只需要激活路由器选中的 8 个专家(高效)
路由器在训练中学会了这种选择
结果效果对比:
方案 1:使用 200B 密集模型
├─ 参数数:200B
├─ 推理速度:1.0x(基准)
├─ 性能:取决于训练,通常 GPT-3.5 量级
方案 2:使用 671B 稀疏模型(DeepSeek-V3)
├─ 参数数:671B(总)/ 37B(激活)
├─ 推理速度:约 0.19x 的 FLOPs(远少于 200B dense)
├─ 性能:在 MMLU/HumanEval/Math 等基准上达到前沿水平
└─ 关键:知识容量×8,激活计算量÷5
这就是为什么 DeepSeek 能用更低推理成本达到更好效果!
8.6.4 DeepSeek 如何结合 MLA 和 MoE
两大创新的协同
DeepSeek V3的架构:
1. 在注意力层使用MLA
├─ 减少内存占用
├─ 加快注意力计算
└─ 没有牺牲性能
2. 在前向网络层使用MoE
├─ 增加模型的知识广度
├─ 但只激活必要的参数
└─ 推理速度不受影响
整体效果对标(基于各自官方报告):
┌──────────────────────────────────┐
│ DeepSeek V3 与GPT-4 Turbo对比 │
├──────────────────────────────────┤
│ 参数规模:在同一量级 │
│ 激活参数:DeepSeek的稀疏性优势 │
│ 推理性能:多数任务相当 │
│ 训练成本:DeepSeek报告低成本案例│
└──────────────────────────────────┘
注:跨厂商比对易受多种因素影响,
宜参考各自官方技术报告。
8.6.5 这为什么节省了这么多成本?
训练成本的分解
训练一个大模型的成本:
总成本 = 数据成本 + 计算成本 + 人员成本
计算成本 = FLOPs × 硬件成本
FLOPs = Forward-Backward Operations
= 模型大小 × 数据大小 × 迭代次数
DeepSeek相比GPT-4的改进:
1. 模型更高效
└─ MLA + MoE = 同性能下更少激活计算
2. 数据选择更聪明
└─ 高质量数据 > 大量数据
└─ 不需要训练在垃圾数据上
3. 利用更少GPU资源
└─ 不需要最新最贵的GPU
└─ 可以用A100而不必须用H100
4. 中国成本更低
└─ 电费更便宜
└─ 工程师成本更低
所有这些因素的组合:
根据 DeepSeek 官方报告,一次代表性训练运行的成本约 $5.6M
业界对 GPT-4 的训练成本估计范围较广(未见官方披露)
成本优势显著,但不宜简化为"固定倍数"(详见本节8.6.7)
8.6.6 实际的性能影响
推理成本
推理成本对比示例(基于 2026-06-01 官方公开价格核验,仅为量级示意):
OpenAI GPT-4 Turbo(历史示例):
├─ 输入:$0.01/1K token
├─ 输出:$0.03/1K token
└─ 一个典型问题:成本随输入/输出比例变化,不宜固化为单值
Claude 3.5 Sonnet(示例):
├─ 输入:$0.003/1K token
├─ 输出:$0.015/1K token
└─ 一个典型问题:~$0.005
DeepSeek V4 Flash(示例):
├─ deepseek-v4-flash 输入(cache hit):$0.0028/1M token
├─ deepseek-v4-flash 输入(cache miss):$0.14/1M token
├─ deepseek-v4-flash 输出:$0.28/1M token
└─ 兼容名 deepseek-chat / deepseek-reasoner 目前即分别对应 deepseek-v4-flash 的非思考 / 思考模式(旧兼容名计划于 2026-07-24 弃用)
成本相对关系:
GPT-4 Turbo : Claude : DeepSeek 只能作为同一日期、同一 token 结构下的量级比较;生产选型应重新计算。
说明:
- 实际成本受缓存命中率、模型版本、问题难度、输出长度等影响
- 自部署 vs 托管 API 的成本结构完全不同
- 价格政策会随时更新,应以官方当期价格为准
8.6.7 本节小结
DeepSeek 的成本优势来自于两个关键创新:
- MLA(多头潜在注意力)
- 压缩注意力的表示
- 减少内存和计算
- 保持性能
- MoE(混合专家)
- 稀疏激活参数
- 更多知识,更少计算
- 高效的权衡
加上工程和数据策略,DeepSeek 展示了一个重要方向:
- 在部分公开基准和应用场景中取得有竞争力的模型性能
- 通过 MLA、MoE、数据选择和系统优化降低训练与推理成本
- 具体“便宜多少倍”取决于对比对象、价格口径、缓存命中率和部署方式,不宜写成固定倍数
这改变了 AI 产业的格局:不再需要巨额融资才能做出顶级模型。
8.6.8 思考题
- 如果 MoE 这么高效,为什么其他公司(OpenAI、Anthropic)不大规模使用?
- MoE 有什么缺点?是否所有问题都适合用 MoE?
- MLA 和 MoE 的组合还有改进空间吗?下一个创新可能是什么?