混合专家模型(MoE)
MoE 的核心思想可以概括为一句话:把传统 Transformer 的 FFN 层拆成多个"专家"子网络,每个输入 token 只激活其中一小部分。
一个 MoE 层包含两个核心组件:门控网络(Router)——一个可训练的小型神经网络,为每个 token 在所有专家上打分,经 softmax 取 top-k;专家网络(Experts)——通常是与标准 FFN 同结构的子网络,被选中者处理 token 后加权求和作为 MoE 层输出。
数学上:y = Σi=1N Softmax(TopK(score(x)))i · FFNi(x)
当 K << N 时,参数量随专家数增长,计算量只随 K 增长——就是"参数多、计算少"的悖论。Mixtral 8×7B 有 46.7B 参数,推理只激活约 12.9B。
💡 关键 insight
MoE 解耦了参数量与计算量。训练时获得大参数量的容量,推理时只花小参数量的计算——"训练-推理不对称"是 MoE 的核心优势。
MoE Layer
路由机制对比
| 方案 | 激活专家数 | 代表工作 | 优势 | 劣势 |
|---|---|---|---|---|
| Top-1 Gating | 1 | Switch Transformers | 计算效率最高 | 路由信号稀疏,专家"饿死"风险 |
| Top-2 Gating | 2 | GShard, Mixtral | 表达力与效率平衡好 | 通信量增加 |
| Noisy Top-K | K(可调) | Shazeer et al. 2017 | 灵活,噪声扰动探索 | 额外参数,不稳定 |
| Top-2 + 共享专家 | 2+1 共享 | DeepSeekMoE | 共享捕获通用知识 | 架构更复杂 |
负载均衡
路由器天然倾向于把所有 token 分配给少数热门专家。主流方案:辅助损失(Aux Loss)、专家容量(Expert Capacity)、Router z-loss、以及 DeepSeek-V3 的无辅助损失动态 bias。
并行策略:数据并行 vs 模型并行 vs 专家并行
数据并行(Data Parallelism):每张 GPU 持有完整的模型副本,处理不同的 batch 数据。最简单直接,但无法解决单卡显存放不下模型的问题。
模型并行(Model Parallelism / Tensor Parallelism):将单层的参数切分到多张 GPU 上,每张 GPU 算一部分,然后 all-reduce 合并结果。适合注意力层和嵌入层等超大参数。
专家并行(Expert Parallelism):MoE 特有的并行策略——不同的专家分布在不同的 GPU 上。每张 GPU 持有一组专家(比如 256 个专家分布在 32 张 GPU 上,每张 8 个)。非 MoE 层(注意力、LayerNorm)在所有 GPU 上复制,行为类似数据并行。
🔀 Token 分配全流程(以 1M tokens / 256 专家 / Top-8 为例)
- Router 打分:每个 token 经过 Router(线性层 + Softmax),在 256 个专家上得到一个概率向量。Router 参数量仅为
d_model × num_experts(如 4096×256 ≈ 1M),极轻量。 - Top-8 筛选:每个 token 选出得分最高的 8 个专家,生成 dispatch 矩阵(形状
[1M, 256],稀疏二元)。 - 原始分配:1M × 8 / 256 ≈ 每个专家理想 31,250 个 token。但 Router 会偏袒热门专家,热门可能收到 100,000+,冷门可能只有几千。
- 专家容量裁剪:设定
capacity = capacity_factor × tokens_per_expert_ideal。若 capacity_factor = 1.25,每个专家最多处理 31,250 × 1.25 ≈ 39,062 个 token。超出容量部分被丢弃(通过残差连接绕过该层或其 overflow 到下一层)。 - All-to-All 通信:每张 GPU 将本地的 token 发送到对应专家所在的远端 GPU。这是 MoE 训练的核心通信瓶颈——通信量与
K × tokens × hidden_dim成正比。 - 专家计算 + 返回:远端 GPU 上的专家处理接收到的 token,结果通过逆向 all-to-all 返回原 GPU,加权求和后输出。
微调挑战
稀疏 MoE 比稠密模型更易过拟合。有效策略:更高 dropout、小批量 + 高学习率、指令微调(MoE 从中受益显著大于稠密模型)。
1991:思想的诞生
Michael Jordan、Robert Jacobs 和 Geoffrey Hinton 在 Neural Computation 上提出"混合专家"框架:多个专家网络 + 一个门控网络,专家通过竞争样本自然实现专业化。90 年代的算力完全无法支撑大规模训练,这个想法沉睡了二十六年。
"Adaptive Mixture of Local Experts"
2017:稀疏门控复兴
Shazeer 等人在 ICLR 2017 发表 Outrageously Large Neural Networks。关键创新是稀疏门控:门控网络为每个 token 计算所有专家得分 → softmax → 只取 top-k。137B 的 MoE 模型验证了这条路可行。
2020-2021:工程化与规模化
GShard(2020)首次将 MoE 与 Transformer 结合,提出 Top-2 Gating + 专家容量机制。Switch Transformers(2021)简化到 Top-1 路由,训练速度比同等计算量的稠密模型快 7 倍,首次达万亿参数。GLaM(2022)以 GPT-3 1/3 的能耗达到同等质量。
2024:精细化革命
DeepSeek 提出两大创新:细粒度专家(将粗粒度专家拆为更多更小的子专家)和共享专家隔离(路由专家不再重复学习通识内容)。DeepSeek-V3(671B / 37B 激活)引入了无辅助损失负载均衡——通过动态 bias 调节路由。
2025:MoE 进入视频生成
阿里 Wan2.2 是全球首个将 MoE 应用于视频生成的开源实现。模型采用时间步感知 MoE——拆分为 high_noise_14B 和 low_noise_14B 两个专家,每个去噪时间步根据噪声等级自动路由到对应专家。
🎬 Wan2.2 设计思想
去噪的不同阶段需要不同能力——高噪声阶段需全局结构恢复,低噪声阶段需细节精修。用一个模型兼顾两端,不如用两个专门化专家。
| 配置 | DeepSeek-V2 | DeepSeek-V3 |
|---|---|---|
| 总参数 | 236B | 671B |
| 激活参数 | 21B | 37B |
| 路由专家 | 160 | 256 |
| 共享专家 | 2 | 1 |
| 激活每 token | 6 | 8 |
| 负载均衡 | 三级辅助损失 | 无辅助损失 + 动态 bias |
苏剑林(科学空间)提出的几何理解视角:
- Dense FFN 的输出可改写为 n 个 Expert 向量的加权和
- MoE 的本质是从 n 个向量中挑出 k 个求和来逼近 n 个向量之和
- 数学上,最佳逼近就是模长最大的 k 个向量
- 将 Expert 重参数化为 ρi·ei(模长×方向),Router 低成本预测 ρi
🔬 几何视角的价值
这个视角让 MoE 的很多问题豁然开朗——为什么用 softmax + top-k?为什么需要负载均衡?专家的 specialization 从何而来?
| 维度 | 传统路线 | 最新趋势 |
|---|---|---|
| 路由粒度 | Top-1 / Top-2 | 细粒度 top-mK |
| 专家粒度 | 少量大专家(8-64) | 大量小专家(160-256) |
| 共享专家 | 无 | 共享 + 路由分离 |
| 负载均衡 | 全局 auxiliary loss | 无辅助损失 + bias |
| 应用领域 | LLM | LLM + 视频生成 |
| 模型 | 出品方 | 总参数 | 激活参数 | 专家数 | 亮点 |
|---|---|---|---|---|---|
| Switch-C | 1.6T | — | 2048 | 最大参数规模 | |
| GLaM | 1.2T | 96B | 64 | GPT-3 质量, 1/3 能耗 | |
| Mixtral 8x7B | Mistral | 46.7B | 12.9B | 8 | 开源标杆 |
| DeepSeek-V2 | 深度求索 | 236B | 21B | 160+1 | 细粒度 + MLA |
| DeepSeek-V3 | 深度求索 | 671B | 37B | 256+1 | 无辅助损失均衡 |
| Qwen2.5-MoE | 阿里 | 60B | 13B | — | 国产开源 MoE |
| DBRX | Databricks | 132B | 36B | 16 | Megablocks |
| Jamba | AI21 Labs | 52B | 14.5B | — | Mamba + MoE |
| 维度 | 稠密模型 | 稀疏 MoE |
|---|---|---|
| 参数量 | 少 | 多(只激活部分) |
| 预训练效率 | 基准 | 快 2-4× |
| 推理速度 | 与参数成正比 | 快(只激活部分) |
| 推理显存 | 低 | 高(需加载全部专家) |
| 微调稳定性 | 稳定 | 易过拟合 |
| 指令微调增益 | 较小 | 显著更大 |
| 部署复杂度 | 低 | 高 |
🎯 选择建议
MoE 适合多 GPU + 高吞吐量 + 预训练;稠密模型适合显存有限 + 低延迟 + 单机部署。两类模型的"参数量"计算口径不同,不可直接比较。
- 推理效率——MoE 需将所有专家加载到内存,显存需求远大于同计算量稠密模型
- 专家坍缩——部分专家在训练中可能被路由网络完全忽略
- 负载均衡 vs 表达自由——强制均衡限制了深度专业化
- 通信开销——专家并行的 all-to-all 通信在大规模下显著
- 多模态 MoE——不同模态如何共享和竞争专家?
- MoE + 注意力——目前 MoE 主要用于 FFN 层,注意力层的 MoE 尚未充分探索
- 硬件适配——现有 GPU 对 MoE 不友好,专家间通信是瓶颈
| 未来方向 | 描述 |
|---|---|
| MoE → 稠密蒸馏 | 保留 30-40% MoE 增益,推理只加载稠密模型 |
| 专家合并 | 推理时合并专家权重,等价隐式蒸馏 |
| 极端量化 | QMoE 实现 <1bit/参数,压缩 20× |
| 细粒度 MoE | DeepSeek 路线:更多更小的专家 |
| MoE × 非 Transformer | Mamba+MoE(Jamba)、RWKV+MoE |
- 🤗 HuggingFace 博客《混合专家模型详解》—— 快速入门
- 🔬 苏剑林「MoE 环游记」系列(kexue.fm)—— 几何视角深入理解
- 📄 关键论文:Switch Transformers · GShard · DeepSeek-V2 · DeepSeek-V3 · Mixtral of Experts · Outrageously Large Neural Networks
- ⚙️ 动手实践:Megablocks / OpenMoE 框架训练小规模 MoE
📚 参考资料
Jacobs, Jordan, Hinton 1991 · Shazeer et al. 2017 · Switch Transformer 2021 · DeepSeek-V2/V3 2024 · Wan2.2 2025 · MoE环游记系列 (kexue.fm) · HuggingFace MoE Explained