核心论文:
- Switch Transformers: Scaling to Trillion Parameter Models(Fedus, Zoph, Shazeer, Google, 2021)arXiv:2101.03961
- GLaM: Efficient Scaling of Language Models with Mixture-of-Experts(Du et al., Google, 2021)arXiv:2112.06905
- Mixtral of Experts(Jiang et al., Mistral AI, 2024)arXiv:2401.04088
- DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts(Dai et al., DeepSeek, 2024)arXiv:2401.06066
- DeepSeek-V2(Chen et al., DeepSeek, 2024)arXiv:2405.04434
- DeepSeek-V3 Technical Report(DeepSeek-AI, 2024)arXiv:2412.19437
- Outrageously Large Neural Networks: The Sparsely-Gated MoE Layer(Shazeer et al., Google Brain, 2017)arXiv:1701.06538
目录
- 一、为什么需要 MoE:Dense 模型的瓶颈
- 二、MoE 的早期历史
- 三、Switch Transformers:将 MoE 引入 Transformer 时代
- 四、Mixtral 8x7B:第一个广泛使用的开源 MoE 模型
- 五、DeepSeekMoE:细粒度专家的突破
- 六、DeepSeek-V2/V3:最先进的 MoE 实现
- 七、MoE 的分布式训练挑战
- 八、MoE vs Dense:工程权衡全面分析
- 九、DeepSeek-V3 完整 MoE 架构参数总结
- 十、MoE 专家的专业化:实验证据
- 十一、MoE 的未来方向
一、为什么需要 MoE:Dense 模型的瓶颈
1.1 Dense 模型的扩展成本
在标准(Dense)Transformer 中,每个 token 的前向传播都需要通过所有的参数。这意味着:
- 模型参数量增加 $N$ 倍 → 每次推理的计算量(FLOPs)也增加约 $N$ 倍
- 推理延迟与参数量线性相关
对于一个 175B 参数的 GPT-3 模型,在 A100 GPU(312 TFLOPs/s,BF16)上,单次推理一个 token 大约需要:
$$\text{FLOPs} \approx 2 \times N = 2 \times 175 \times 10^9 = 350 \text{ GFLOPs}$$
延迟约 1.1ms/token(不含 KV Cache 读写)。
随着模型规模扩展,这个成本对实际部署造成了巨大压力:
- 训练成本:随参数量和训练 tokens 线性增长
- 推理成本:对每次用户查询都产生
- 内存成本:70B 模型仅参数就需要约 140GB 显存(BF16)
1.2 Sparse 模型的思路:有选择地激活参数
MoE(Mixture of Experts)的核心思想:
不是让所有参数处理所有 token,而是根据 token 的内容,动态选择一部分参数(”专家”)来处理它。
这样:
- 总参数量(模型容量)可以很大
- 每次推理时实际激活的参数量(计算量)可以相对较小
一个极端的例子: DeepSeek-V3 有 671B 总参数,但每个 token 只激活约 37B 参数(约 5.5%)。在相同的推理计算量下,它比 37B 的 Dense 模型有更大的”知识库”。
二、MoE 的早期历史
2.1 Mixture of Experts 的起源(1991 年)
MoE 的概念最早由 Jacobs, Jordan, Nowlan, Hinton 在 1991 年的论文中提出,用于回归和分类任务:不同的”专家”网络专门处理输入空间的不同区域,一个”门控网络”决定哪些专家处理当前输入。
这个思想在接下来的 20 年里在机器学习中有零散应用,但没有引起广泛关注。
2.2 Shazeer 2017:大规模 MoE 的第一次突破
论文: Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer(Shazeer et al., Google Brain, 2017)arXiv:1701.06538
Noam Shazeer(同时也是 Transformer 的共同作者)等人首次将 MoE 应用于大规模语言模型(基于 LSTM):
- 使用 Top-K 门控:每个 token 只路由到 K 个专家($K=2$),而不是让所有专家都处理
- 引入了辅助损失(Auxiliary Loss)来维持负载均衡:防止所有 token 都路由到同几个”受欢迎”的专家,导致其他专家被闲置
- 展示了在相同计算量下,MoE 模型的 perplexity 低于 Dense 模型
这篇论文奠定了后续所有 MoE 工作的基础,但当时影响有限,直到 Switch Transformers 才真正引起广泛关注。
三、Switch Transformers:将 MoE 引入 Transformer 时代
论文: Switch Transformers: Scaling to Trillion Parameter Models(Fedus, Zoph, Shazeer, Google, 2021)arXiv:2101.03961
3.1 核心架构
Switch Transformers 将标准 Transformer 中的 FFN(前馈网络)层替换为 MoE 层。其他组件(注意力层、归一化层)保持不变。
标准 Transformer FFN:
所有 token → 单一 FFN(W1, W2)→ 所有 token 的输出 |
Switch Transformer MoE FFN:
每个 token → Router(决定专家) → Expert_i(Wi_1, Wi_2)→ 该 token 的输出 |
Router 的工作机制:
对于输入 token 的表示 $x \in \mathbb{R}^{d_{model}}$,Router 计算每个专家的路由概率:
$$h(x) = W_r \cdot x \in \mathbb{R}^E \quad (E \text{ 是专家数量})$$
$$p_i = \text{softmax}(h(x))_i = \frac{e^{h_i(x)}}{\sum_{j=1}^E e^{h_j(x)}}$$
Switch Transformer 使用 Top-1 路由(每个 token 只去一个专家,$K=1$):
$$\text{Expert index} = \arg\max_i p_i$$
$$\text{token output} = p_{\text{selected}} \cdot \text{Expert}_{\text{selected}}(x)$$
为什么用 Top-1?作者发现 Top-1 路由比 Top-2 计算更简单,且在大规模时效果接近。
3.2 负载均衡问题(Load Balancing)
核心挑战: 如果让路由自由发展,模型会形成”专家崩塌”(Expert Collapse)——所有 token 都路由到少数几个”受欢迎”的专家,大多数专家几乎不工作。这造成:
- 计算资源浪费(大部分专家空转)
- 专家没有机会学习(需要接受 token 才能通过梯度学习)
- 最终性能下降(相当于回到了小模型)
辅助损失(Auxiliary/Load Balancing Loss):
为了鼓励均匀分配,Switch Transformers 加入辅助损失:
设 $f_i$ 是路由到专家 $i$ 的 token 比例(实际分布),$P_i$ 是模型认为应该路由到专家 $i$ 的概率均值,辅助损失为:
$$\mathcal{L}_{\text{aux}} = \alpha \cdot E \cdot \sum_{i=1}^E f_i \cdot P_i$$
这个损失在 $f_i = 1/E$(均匀分布)时最小,因此鼓励负载均衡。$\alpha$ 是平衡系数(通常取 $10^{-2}$)。
专家容量(Expert Capacity):
每个专家在一个 batch 中能处理的 token 数量有上限(容量 $C$):
$$C = \frac{\text{Tokens per batch}}{E} \times \text{capacity factor}$$
如果某个专家接收到超过 $C$ 个 token,多余的 token 会被跳过(overflow),直接通过残差连接传递。这是一个硬性工程约束,防止单个专家计算时间过长。
3.3 训练稳定性技术
MoE 模型的训练比 Dense 模型更不稳定(更容易出现 Loss Spike)。Switch Transformers 提出了几个解决方案:
专家 Dropout(Expert Dropout): 在训练时,对 FFN 内的参数使用更高的 dropout 率,提升正则化
初始化: Router 权重 $W_r$ 初始化时使用更小的方差($\sigma = 0.1$,而非标准的 $1/\sqrt{d_{model}}$),防止训练初期路由过于极端
BFloat16 精度: 与 Dense 模型相比,MoE 中的路由计算对精度更敏感,使用 BFloat16 而非 Float16 可以减少上溢/下溢
3.4 Switch Transformers 的规模
Switch Transformers 训练了高达 1.6T 参数的模型(使用 2048 个专家),每次推理激活约 1/2048 的参数。在固定计算量下,比 Dense T5-11B 模型的 perplexity 低约 0.7 nats。
这证明了超大规模 MoE 的可行性,为后续工作奠定了基础。
四、Mixtral 8x7B:第一个广泛使用的开源 MoE 模型
论文: Mixtral of Experts(Jiang et al., Mistral AI, 2024)arXiv:2401.04088
4.1 架构
Mixtral 8x7B 是 Mistral 7B 的 MoE 扩展版本:
- 8 个专家(Expert),每个专家是一个标准的 FFN 网络(与 Mistral 7B 同尺寸)
- Top-2 路由:每个 token 路由到 2 个专家,两个专家的输出加权平均
- 总参数:约 46.7B(8 × 7B,但各层共享注意力机制)
- 每次激活参数:约 12.9B(2 × 7B,减去共享部分)
路由机制:
$$G(x) = \text{Softmax}(\text{TopK}(x \cdot W_g, 2))$$
其中 TopK 函数保留前 2 个最大值,其余置为 $-\infty$(softmax 后变为 0):
$$y = \sum_{i=1}^8 G_i(x) \cdot E_i(x)$$
只有 $G_i(x) > 0$ 的专家才实际执行计算,其余不参与。
4.2 性能
与 Llama 2 70B 的对比:
| Benchmark | Llama 2 70B | Mixtral 8x7B |
|---|---|---|
| MMLU | 68.9% | 70.6% |
| HellaSwag | 87.3% | 86.7% |
| HumanEval | 29.9% | 40.2% |
| Math | 11.1% | 22.2% |
Mixtral 8x7B 在相同推理计算量下(12.9B vs 70B 激活参数,推理快约 5.4 倍),在大多数 benchmark 上超越或持平 Llama 2 70B。
开源意义: Mixtral 8x7B 是第一个广泛开源且高性能的 MoE 模型,证明了 MoE 架构的实用性,推动了社区对 MoE 的深入研究。
五、DeepSeekMoE:细粒度专家的突破
论文: DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models(Dai et al., DeepSeek-AI, 2024)arXiv:2401.06066
5.1 标准 MoE 的专家利用率问题
标准 Top-K MoE(如 Mixtral 8x7B)的一个潜在问题:每个专家负责处理种类繁多的 token,每个专家需要”同时擅长很多事”,难以真正专业化。
类比: 如果你需要解决各种复杂问题,与其使用 8 个”全能专家”,不如使用更多个各有专攻的”细分专家”——同样的总知识量,但每个专家可以更专注。
5.2 DeepSeekMoE 的细粒度设计
核心思路:将 $N$ 个大专家替换为 $mN$ 个小专家($m > 1$),同时激活 $mK$ 个小专家(总计算量相同,但专家更细化)。
数学上:
- 标准 MoE:$N$ 个专家,每个维度 $d_{ff}$,激活 $K$ 个
- DeepSeekMoE:$mN$ 个专家,每个维度 $d_{ff}/m$,激活 $mK$ 个
总计算量相同($K \times d_{ff} = mK \times d_{ff}/m$),但专家数量更多、每个更小、选择更多元。
额外创新:共享专家(Shared Expert)
DeepSeekMoE 发现,某些知识是所有 token 都需要的(如基本语法规则、通用世界知识),可以提取出来放在固定激活的”共享专家”中:
$$y = u \cdot \sum_{i=1}^{K_s} E_i^{shared}(x) + \sum_{j \in \text{Top-K}_r} g_j \cdot E_j^{routed}(x)$$
其中 $K_s$ 个共享专家始终激活,$K_r$ 个路由专家根据 token 内容选择。
效果:
- 相同计算量下,DeepSeekMoE 的 perplexity 比标准 Top-2 MoE 低约 0.4 nats
- 专家利用率(每个专家接收不同类型 token 的均匀性)显著提高,表明专家实现了更好的专业化
六、DeepSeek-V2/V3:最先进的 MoE 实现
6.1 DeepSeek-V2(2024)
论文: arXiv:2405.04434
DeepSeek-V2 首次提出了 MLA(Multi-head Latent Attention),与 DeepSeekMoE 结合,构成了 DeepSeek 系列的技术核心。
MoE 配置:
- 总参数:236B
- 每次激活:21B(约 8.9%)
- 路由专家:每层 160 个,每 token 选 6 个(Top-6)
- 共享专家:每层 2 个(始终激活)
6.2 DeepSeek-V3 的 MoE 配置
论文: arXiv:2412.19437
DeepSeek-V3 是目前公开的规模最大、技术细节最完整的顶级 MoE 模型。
MoE 配置:
- 每层总专家数:256 个路由专家 + 1 个共享专家
- 每 token 选择:Top-8 路由专家 + 1 共享专家 = 9 个专家
- 专家 FFN 维度:$d_{ff}^{expert} = 2048$(较小)
- 总激活参数:37B
架构公式:
$$y = E^{shared}(x) + \sum_{i \in \text{Top-8}} g_i \cdot E_i^{routed}(x)$$
其中 $g_i$ 是归一化后的路由权重:
$$g_i = \frac{s_i}{\sum_{j \in \text{Top-K}} s_j}, \quad s_i = \text{Sigmoid}(h_i(x))$$
注意:使用 Sigmoid 而非 Softmax 计算路由权重,然后对 Top-K 归一化。这个细节差异来自 DeepSeek 的实验发现:Sigmoid + 归一化比纯 Softmax 在深层 MoE 中更稳定。
6.3 Auxiliary-Loss-Free 负载均衡
DeepSeek-V3 最重要的创新之一: 去掉了辅助损失(Auxiliary Loss),改用 Bias 机制维持负载均衡。
背景: 辅助损失(Switch Transformer 提出)有一个已知问题——它与语言建模损失相互竞争,强化辅助损失会降低模型性能,而弱化它会导致负载不均衡,形成难以调节的权衡。
DeepSeek-V3 的 Bias 方法:
在路由逻辑分数 $h_i(x)$ 上加一个可调整的 bias 项 $b_i$:
$$\text{routing score}_i = h_i(x) + b_i$$
但 Top-K 选择后,实际使用的门控权重仍然基于原始 $s_i = \text{Sigmoid}(h_i(x))$(不含 bias)。
Bias 的更新规则(非梯度):
- 如果专家 $i$ 在最近的训练步骤中过载(接收 token 太多):$b_i \leftarrow b_i - \gamma$
- 如果专家 $i$ 在最近的训练步骤中欠载(接收 token 太少):$b_i \leftarrow b_i + \gamma$
这相当于一个简单的负反馈控制器,动态调整每个专家的”吸引力”,而不干扰语言建模损失的优化。
效果: 相比辅助损失方法,perplexity 提升约 0.3 nats(相同计算量下)。
6.4 Multi-Token Prediction(多 Token 预测)
DeepSeek-V3 引入了 Multi-Token Prediction(MTP) 训练目标:在预测下一个 token 的同时,也预测后续 2 个 token。
架构:
在标准的 Next Token Prediction 损失之外,DeepSeek-V3 使用了额外的预测头来预测位置 $t+1$ 和 $t+2$ 的 token:
$$\mathcal{L}_{\text{MTP}} = \mathcal{L}_1 + \lambda (\mathcal{L}_2 + \mathcal{L}_3)$$
其中 $\mathcal{L}_1$ 是标准 NTP 损失,$\mathcal{L}_2, \mathcal{L}_3$ 是预测后续 token 的损失,$\lambda$ 是权重系数(DeepSeek-V3 使用 $\lambda = 0.3$)。
动机(来自论文):
- 迫使模型”向前看”更多 token,学习更长期的依赖关系
- 额外的预测头在推理时可以用于推测解码(Speculative Decoding)——用额外预测头的输出作为”草稿 token”,然后让主模型验证,加速推理
训练效果: 在固定计算量下,MTP 训练使验证集 perplexity 降低约 0.5%。
七、MoE 的分布式训练挑战
7.1 专家并行(Expert Parallelism)
在分布式训练中,MoE 引入了一种特殊的并行策略:专家并行。
将不同的专家分配到不同的 GPU 上:
GPU 0: Expert 0, 32, 64, ... |
All-to-All 通信: 每个 token 需要路由到特定专家的 GPU,这需要全局的 All-to-All 通信,每层都需要两次(输入数据分发 + 输出数据聚合)。
通信瓶颈: All-to-All 通信的量与 token 数量和专家数量成正比。DeepSeek-V3 使用 256 个专家,All-to-All 通信成为训练效率的主要瓶颈之一。
DeepSeek-V3 的优化(Node-Limited Routing): 为减少跨节点通信(跨节点带宽远低于节点内带宽),DeepSeek-V3 设计了一个约束:每个 token 最多路由到 $M$ 个不同的节点($M=4$)。这减少了跨节点流量,同时通过足够多的专家总数(256 个)保持了足够的选择多样性。
7.2 负载均衡与 GPU 利用率
在 MoE 的批量推理中,不同专家接收到的 token 数量不均匀,导致部分 GPU 繁忙(处理热门专家),部分 GPU 空闲(处理冷门专家),GPU 利用率下降。
Expert Capacity 机制(见第三节)部分缓解了这个问题,但会导致溢出 token 信息损失。
DeepSeek-V3 的解决方案: 将负载均衡设计为训练时优化目标的一部分(通过 Auxiliary-Loss-Free 方法),同时在推理框架中实现动态调度,减少等待时间。
八、MoE vs Dense:工程权衡全面分析
| 维度 | Dense 模型 | MoE 模型 |
|---|---|---|
| 推理计算量(FLOPs/token) | 高(与总参数量正比) | 低(只激活部分专家) |
| 推理内存带宽 | 较低(所有参数都被使用) | 较高(需要加载所有专家,但只计算部分) |
| 训练效率 | 高(无路由开销) | 略低(额外的路由计算和通信) |
| 模型容量(参数量) | 受显存限制 | 可以更大(分布在多 GPU) |
| 训练稳定性 | 高 | 较低(路由崩塌风险) |
| 推理延迟(单次) | 较低(无 All-to-All) | 较高(专家并行通信开销) |
| 推理吞吐量(批量) | 受计算量限制 | 更高(相同计算量,更大容量) |
| 参数效率 | 高(每个参数都用到) | 较低(稀疏激活,部分参数利用率低) |
| 工程复杂度 | 低 | 高(路由、负载均衡、专家并行) |
结论: MoE 的核心优势是在相同推理计算量下提供更大的模型容量,代价是工程复杂度大幅提升。对于需要广博知识(多语言、多领域)同时要保持推理效率的场景,MoE 是理想选择。
九、DeepSeek-V3 完整 MoE 架构参数总结
以下数据来自 DeepSeek-V3 技术报告(arXiv:2412.19437):
整体架构:
- Transformer 层数:61 层(其中前 3 层用 Dense FFN,后 58 层用 MoE FFN)
- 总参数量:671B
- 每次激活参数量:37B
- 上下文长度:128K tokens
注意力层(使用 MLA):
- Query 头数:128
- 每头 Query 维度:128
- KV 压缩维度(低秩):512(相比展开后的 16384 大幅压缩)
MoE 层(每层):
- 共享专家数:1
- 路由专家总数:256
- 每 token 选择路由专家数:8
- 每个专家的 FFN 维度($d_{ff}^{expert}$):2048
- 负载均衡:Auxiliary-Loss-Free + Bias 机制
训练配置:
- 训练数据:14.8T tokens
- 批次大小:15,360 sequences × 4096 tokens = 62.9M tokens/step
- 峰值学习率:$2.2 \times 10^{-4}$,余弦衰减
- 优化器:AdamW,$\beta_1 = 0.9$,$\beta_2 = 0.95$,$\epsilon = 10^{-8}$
- 精度:FP8(主要计算),BF16(梯度累加)
- 训练硬件:2048 张 H800 GPU
- 训练时长:约 2.788M GPU 小时
训练成本估算: 按 H800 GPU 租金约 $2/小时,约 550 万美元——远低于 GPT-4 等级模型的估计(数亿美元量级),主要归功于:
- MoE 架构减少了每步计算量
- FP8 精度将计算效率提升 1.5-2 倍
- DeepSeek 的工程优化(Auxiliary-Loss-Free 减少训练不稳定)
十、MoE 专家的专业化:实验证据
10.1 专家分工的实验研究
Mixtral 的技术报告分析了不同专家的激活分布,发现:
- 语言专业化: 在处理不同语言(英语、法语、德语、中文)时,激活的专家集合有显著差异
- 任务专业化: 处理代码和处理自然语言时,激活不同的专家组合
- 层次专业化: 靠近输入的层(低层)的专家更关注语法/表层特征;靠近输出的层(高层)更关注语义/任务特征
10.2 DeepSeekMoE 的专业化分析
DeepSeekMoE 论文(arXiv:2401.06066)对专家专业化进行了定量分析:
专家专业化指数(Expert Specialization Index): 定义为某专家的 token 分布的 KL 散度,衡量该专家与均匀分布的偏差程度。指数越高,说明专家越专注于特定类型的 token。
实验发现:使用细粒度专家(更多、更小的专家)后,平均专业化指数提高了约 40%,说明专家确实实现了更精细的分工。
十一、MoE 的未来方向
稀疏度提升: 从目前的 “256 个专家,每次选 8 个”(3%)向更稀疏的方向探索,理论上允许更大的模型容量。
Mixture of Depths(MoD): 不只是在专家层面稀疏,在层(Layer)层面也稀疏——不是每个 token 都需要经过所有层,复杂的 token 经过更多层。这与 MoE 可以结合(MoE + MoD),进一步提高参数效率。
可解释的专家结构: 目前 MoE 的路由是”黑盒”的,研究人员正在尝试引导专家学习人类可理解的分工(如语言、领域、任务类型),提高可解释性。
专家通信(Expert Communication): 当前 MoE 的专家之间是独立的,但某些任务可能需要多个专家合作。允许专家之间信息交换可能进一步提升能力。

