10 KiB
MoE 混合专家架构
Mixture of Experts — 用稀疏激活实现"参数量 vs 计算量"的解耦,是 DeepSeek V4、GPT-4、Mixtral 等旗舰模型的核心架构
一、为什么要 MoE?
密集模型的困境
传统 Transformer 中,每个 Token 流经所有 FFN 1 参数:
Token → FFN(全部参数参与计算)→ 输出
参数量越大 → 每次推理计算量越大 → 训练和推理成本线性增长。
MoE 的核心思想
"参数多,但每次只用一小部分"
Token → 路由器 → 选择最相关的几个专家 → 只激活它们 → 输出
↑
其他专家保持休眠
| 密集模型 | MoE 模型 | |
|---|---|---|
| 总参数量 | 100B | 可以到 1.6T(16倍) |
| 每次推理计算量 | 100B | 仅约 36B |
| 训练效率 | 基准 | 更高(同算力下能训练更大模型) |
| 推理延迟 | 基准 | 需要加载更多权重到显存 |
二、MoE 层的工作原理
数学公式
\text{MoE}(x) = \sum_{i \in \text{TopK}(G(x), k)} G(x)_i \cdot E_i(x)
其中:
| 符号 | 含义 |
|---|---|
G(x) |
路由器/门控网络,输出每个专家的"置信度分数" |
TopK(G, k) |
选择分数最高的 k 个专家(通常 k=2~8) |
E_i(x) |
第 i 个专家(一个 FFN 1 子网络) |
G(x)_i |
Softmax 归一化后的专家权重 |
一句话总结
输入 Token → 路由器打分 → 选 Top-K 专家 → 加权合成输出
结构图解
输入 Token x
│
▼
┌───────────┐
│ 路由器 G │ ← 一个小型线性层,输出 N 个分数
│ (Gate) │ (N = 专家总数)
└─────┬─────┘
│ Softmax 归一化
│ 选出分数最高的 k 个
▼
┌─────────────────────────────────────┐
│ N 个专家(Expert) │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐│
│ │ E₁ │ │ E₂ │ │ E₃ │... │ Eɴ ││
│ │💤 │ │🔥 │ │💤 │ │🔥 ││
│ └─────┘ └──┬──┘ └─────┘ └──┬──┘│
│ │ │ │
│ 只激活 k=2 个专家! │ │
└─────────────┼─────────────────┼─────┘
│ │
└─── 加权求和 ────┘
│
▼
输出 MoE(x)
三、MoE 层 vs 标准 FFN 层
标准 Transformer 块: 使用 MoE 的 Transformer 块:
注意力层 [^Attn] 注意力层 [^Attn]
↓ ↓
FFN(全部参数) 路由器 → 选择专家
↓ ↓
注意力层 [^Attn] 被选中的专家(稀疏激活)
↓ ↓
FFN(全部参数) 注意力层 [^Attn]
↓
路由器 → 选择专家
↓
被选中的专家(稀疏激活)
只在 FFN 层引入 MoE,注意力层保持不变(注意力机制本身就负责 Token 间信息交互,无需稀疏化)。
四、关键设计维度
1. 专家粒度
| 类型 | 说明 | 示例 |
|---|---|---|
| 粗粒度 | 少量大专家(如 8 个,每个完整 FFN 大小) | 早期 MoE、Mixtral 8×7B |
| 细粒度 | 大量小专家(如 384 个微专家,每个很小) | DeepSeek-V3/V4(64 个微专家/层,激活 6 个) |
细粒度的优势:
- 路由组合更灵活:从 N 选 k 变为 mN 选 mk,组合数暴增
- DeepSeek V4 每层约 3630 万种可能的专家组合
- 同等总参数下,每个专家更小,训练/推理更灵活
2. 共享专家 vs 路由专家
| 类型 | 说明 |
|---|---|
| 共享专家 | 始终激活,捕捉通用模式(语法、基础常识) |
| 路由专家 | 按 Token 动态选择,负责特定领域(数学、代码、翻译...) |
DeepSeekMoE 采用两层设计:
- 2 个共享专家(always on)
- 62 个路由专家(每个 Token 激活 6 个)
共享专家提升训练稳定性,但可能降低专家专门化程度。
3. 路由器设计
简单线性路由器(当前主流):
router_logits = W_g · x ← 一个小矩阵,N × d_model
topk_experts = TopK(softmax(router_logits), k)
实际推理时的路由模式:
- 每个 Token 独立路由(不考虑上下文)
- 序列中相邻 Token 可能路由到不同专家
五、负载均衡 — MoE 的核心挑战
问题
如果路由器"偷懒",总是选固定的几个专家 → 其他专家闲置 → 退化为密集模型
传统方案:辅助损失(Auxiliary Loss)
L_{total} = L_{主任务} + \alpha \cdot L_{负载均衡}
强制惩罚专家使用不均匀的情况。问题:梯度冲突,可能导致训练不稳定。
2025 前沿:无梯度负载均衡
# 动态偏置调整 — 不干扰主损失梯度
logits_i(t+1) = W_g · x + b_i(t) - γ · (f_i(t)/f̄(t) - 1)
其中:
f_i(t):当前被路由到专家 i 的 Token 比例f̄(t):理想平均比例 = 1/N- 效果:专家使用率的变异系数 < 0.1,无梯度冲突
六、2025 年前沿进展
1. DAG-MoE 2 (ICML 2026)
不是简单加权平均专家输出,而是把选中的专家排列成有向无环图(DAG, Directed Acyclic Graph),实现结构化的专家聚合(DAG 聚合)
传统 MoE: E₁↘
E₂ → 加权平均 → 输出
E₃↗
DAG-MoE: E₁ → E₃ ↘
E₂ → E₄ → E₆ → 输出(信息流经多个专家)
- 允许单层内多步推理
- 模型学习最优的专家聚合结构(每个输入不同)
- 同等 FLOPs 下更强的表达能力
2. MoLE:查找表专家(ICML 2025 Oral)
将训练好的 FFN 专家重新参数化为查找表(LUT),专家计算变为查表操作
- 推理速度接近密集模型
- 大幅降低显存占用
- 使 MoE 在内存受限设备上部署成为可能
3. MoE + MLA(Multi-head Latent Attention,多头潜在注意力) 3
正交瓶颈联合优化:
| 瓶颈 | 方案 |
|---|---|
| FFN 计算量大 | MoE 稀疏激活 |
| 注意力 KV 缓存大 | MLA 低秩压缩 |
- ρ = 1/2 时:KV 缓存减少 68%,推理加速 3.2×
- 困惑度仅下降 0.8%
- DeepSeek V4 使用此组合
4. MoE-X:可解释 MoE(ICML 2025)
- 将 MoE 层理解为等效的大型稀疏 MLP
- 强制专家内部也做稀疏激活
- 可解释性超越 Sparse Autoencoder(SAE)方法
七、主流 MoE 模型对比
| 模型 | 总参数 | 激活参数 | 专家数 | 激活数 | 特点 |
|---|---|---|---|---|---|
| Mixtral 8×7B | 46.7B | 12.9B | 8 | 2 | 经典粗粒度 MoE |
| DeepSeek-V3 | 671B | 37B | 256 | 8 | 细粒度 + 共享专家 |
| DeepSeek-V4 Pro | 1600B | 36B | 384/层 | 6 | 细粒度 + MLA + DSpark |
| DeepSeek-V4 Flash | 284B | 13B | 精简 | 精简 | Pro 的轻量版 |
| GPT-4(传闻) | 1.8T | ~280B | 16(推测) | 2 | 早批大规模 MoE |
趋势:专家数量越来越多,每个专家越来越小(细粒度),激活参数占比越来越低。
八、MoE 的代价
| 代价 | 说明 |
|---|---|
| 显存占用 | 所有专家都在 VRAM 里,即使大部分不激活 → 需要更多 GPU |
| 通信开销 | 多 GPU 部署时,Token 需要跨 GPU 路由到专家 |
| 训练不稳定 | 负载均衡损失与主损失可能冲突 |
| 微调困难 | 稀疏激活 → 梯度更稀疏 → 微调更难收敛 |
| 批次大小 | 每个专家实际收到的 Token 少 → 需要较大 batch size |
九、总结
MoE = 用路由器在大量专家中选择少数激活,实现"参数膨胀但计算可控"
关键取舍:
优势:同等算力下更大的模型容量、更好的性能/成本比
代价:更高显存、更复杂的工程、训练和微调挑战
2025 年趋势:
细粒度 → DAG 聚合 → 可解释 → 查找表推理 → 与 MLA 协同
相关链接
脚注
-
FFN(Feed-Forward Network,前馈神经网络):Transformer 中每个位置的独立全连接子网络。结构为两层 MLP:
W₂ · Act(W₁ · x + b₁) + b₂,参数量约占整个 Transformer 块的 2/3,是模型"知识存储"的主要位置。现代模型多使用 SwiGLU 激活的变体。详见 FFN 前馈网络详解。 ↩︎ -
DAG 聚合(DAG Aggregation):将选中的专家按有向无环图(DAG)的结构进行串联/并联组合,而非传统的简单加权平均。每个输入路由到一组专家后,模型学习这些专家之间最优的信息流动路径——例如 E₁ 的输出作为 E₃ 的输入,E₂ 的输出则直接进入最后阶段。这允许在单层 MoE 内完成多步推理,表达能力强于传统加权求和,同等 FLOPs 下能取得更好性能。DAG-MoE 发表于 ICML 2026。 ↩︎
-
MLA(Multi-head Latent Attention,多头潜在注意力):DeepSeek 提出的注意力压缩技术。核心思路是将 K 和 V 首先投影到一个低维潜在空间(
d_latent << d_model),再从中展开供注意力计算使用。这大幅减少了 KV 缓存的显存占用——在 ρ = 1/2 时可缩减 68%,且对模型质量影响极小(困惑度仅降 0.8%)。MLA 与 MoE 是正交优化:MoE 省 FFN 计算,MLA 省注意力显存,两者叠加效果倍增。 ↩︎