一句话定义
MoE 把 Transformer 里的 FFN 复制成多个「专家」,再用一个路由网络为每个 token 选择少数几个专家进行计算。模型总参数很大,但单次前向只激活其中一小部分。
为什么需要它
继续堆参数是提升模型能力的直接方式,但稠密模型每增加一份参数,每个 token 的计算量也跟着增加。MoE 把「参数量」和「计算量」拆开:总参数可以扩到很大,而每个 token 只走 top-k 个专家,推理成本主要由激活参数决定。
关键机制
Router
Router 对 token 表示打分,选出 top-k 专家,并输出归一化权重。它的质量决定哪些专家被使用。
Expert
每个专家是一个独立的 FFN;被选中的专家计算 token,未被选中的不参与。
Gating
门控负责权重和负载:路由权重、容量因子、辅助损失都在这一层约束,避免所有 token 挤向同一专家。
加权求和
各专家输出按路由权重合并。
工程代价
- 总参数占用大量显存,部署时对显存容量要求高。
- 专家分布在不同设备上时,需要 all-to-all 通信,延迟和带宽成为瓶颈。
- 路由本身可能不稳定,训练初期容易出现专家塌缩。
- 微调时专家利用率可能进一步失衡,需要额外监控。
用在哪里
- 需要把总参数做大、但想控制单 token 计算量的大模型(稀疏 MoE)。
- 多语言、多任务、多领域混合训练时,让不同专家形成分工。
- 显存和互联带宽充足的集群;单机小模型通常不值得引入路由和通信开销。
常见误区
- 总参数不等于激活参数:宣传的参数量通常指总参数。
- MoE 不是「多个模型集成」,所有专家共享同一套注意力和其他层。
- 专家多不代表每个 token 都用得上,路由质量决定实际收益。
相关概念
- FFN:被专家化的子层。
- Transformer:MoE 的宿主架构。
- 量化:降低 MoE 部署显存压力的常见手段。