MoE:专家选择与负载均衡#
本页内容6 个部分
1. 基本原理#
标准 Transformer 中,每个 token 经过同一个 FFN(dense model,所有参数全部激活)。MoE(Mixture of Experts)的核心思想:用 N 个专家 FFN 替换单个 FFN,每个 token 只激活其中 top-k 个专家——即稀疏激活。
这带来的核心好处是:**参数量可以大幅增加,而计算量基本不变。**例如 Mixtral 8x7B 拥有 47B 参数,但每个 token 只激活约 13B 参数,推理速度接近一个 13B 的 dense 模型,效果却接近甚至超过同规模 dense 模型。
是第 个专家 FFN, 是 gate 网络给出的权重,未被选中的专家
每个 MoE 层的计算流程:
- Token 表示 经过 gate 网络(一个线性层 ),得到 N 个分数
- Softmax → 取 top-k,只保留 k 个最高分的专家
- 将 分别送入被选中的 k 个专家 FFN,按 gate 权重加权求和
**关键洞察:**MoE 替换的是 FFN 层,而不是 Attention 层。Attention 负责 token 间的信息交流(必须全局计算),FFN 负责 token 内的特征变换(天然适合专家分工)。实际部署中,通常每隔一层或每隔两层才使用 MoE 层,其余仍使用标准 FFN。
2. Gate(路由机制)#
Gate(也叫 Router)是 MoE 的核心组件——它决定每个 token 被分配给哪些专家。
**结构:**非常简单,就是一个线性层 ,将 token 表示映射为 N 个分数,再经 softmax 得到概率分布。
Gate 计算流程:
scores = x · W_g (d) · (d × N) → (N)
probs = softmax(scores) (N) → (N) 概率分布
top_k = TopK(probs, k) 选出 k 个最大的
gates = renormalize(top_k) 重新归一化为权重
Top-1 vs Top-2 路由:
Top-1 路由(Switch Transformer)
每个 token 只激活 1 个专家。计算最省,但每个 token 只有一个专家"视角",表达能力受限。
优势:每个 token 只分配给一个专家,路由和通信较简单;实际成本还取决于专家布局、容量与通信实现。
Top-2 路由(GShard、Mixtral)
每个 token 激活 2 个专家并加权组合。相比同尺寸专家的 top-1,专家 FFN 计算约翻倍;相对 dense 的成本和精度取决于比较基线。
目前主流方案。Mixtral 8x7B 用 8 个专家、top-2 路由,每层为每个 token 选择 2 个 FFN 专家。“8×7B”不是每个 FFN 有 7B 参数;全模型约 47B 参数、每 token 约 13B 激活参数。
3. Load Balancing(负载均衡)#
**问题:**如果没有约束,gate 网络很快会学到"把所有 token 都发给少数几个效果最好的专家"——这就是 expert collapse(专家坍塌)。大部分专家完全闲置,MoE 退化成一个小的 dense 模型,完全失去了大参数量的优势。
解决方案:辅助负载均衡损失(auxiliary load balancing loss),在训练损失中加入一个正则项,鼓励 token 均匀分配到各专家:
= 被路由到专家 的 token 比例, = 路由到专家 的平均概率, = 平衡系数(通常 0.01)
这里采用 Switch 的 top-1 定义,。均匀时损失为 ;训练把离散分配比例 视作常数,通过 抑制过载专家。这是负载均衡的代理目标,不能把它当成“任何不均匀必然增大”的距离函数,也不能保证最终均匀;top-k 的归一化约定要另行说明。
**Expert Capacity(专家容量):**固定容量实现可能丢弃超额分配,也可采用重路由或 dropless 实现。共享专家不是容量溢出的兜底专家:DeepSeekMoE 的共享分支处理所有 token,与稀疏路由分支并行,旨在分离共享知识和专家知识。具体专家数量取决于模型配置。
4. 代表模型#
| 模型 | 年份 | Expert 数 | Top-k | 总参数 | 激活参数 | 关键创新 |
|---|---|---|---|---|---|---|
| Switch Transformer | 2021 | 128 | 1 | - | - | top-1 routing,扩展稀疏模型训练 |
| GShard | 2020 | 2048 | 2 | 600B | - | 首个千亿级 MoE,random top-2 routing |
| Mixtral 8x7B | 2024 | 8 | 2 | 47B | ~13B | 开源标杆,证明 MoE 在中等规模也高效 |
| DeepSeek-MoE | 2024 | 64+2 shared | 6 | - | - | 细粒度专家 + 共享专家,减少冗余 |
🔥 面试标准回答
MoE 用 N 个专家 FFN 替换单个 FFN,每个 token 通过 gate 网络只激活 top-k 个专家(稀疏激活)。好处是参数量可以大幅增加而计算量基本不变。核心挑战是 load balancing——可用辅助损失或动态路由 bias 等方法缓解专家负载失衡;这些方法不保证严格均匀,也不意味着没有辅助损失就必然塌缩。代表模型:Mixtral 8x7B(47B 参数,13B 激活)、DeepSeek-V2/V3(细粒度专家 + 共享专家)。
参考资料#
Mixtral、Switch Transformer、DeepSeekMoE。
延伸阅读#
- Grouped GEMM:怎样把大小不同的专家矩阵乘法组织成 GPU 工作?
- DeepEP:MoE 专家并行如何完成 token 的 dispatch 与 combine?