Outrageously Large Neural Networks — MoE 怎样让模型“很大但不每次全算”
这篇 2017 年 Google Brain 论文是现代稀疏 MoE(Mixture-of-Experts,专家混合)路线的关键起点。它的核心想法很简单:不要让每个输入都经过整张巨大网络,而是准备很多“专家”小网络,再让一个门控网络为每个 token 或样本只挑少数几个专家。这样模型参数量可以扩大到 137B 级别,但每次前向计算只激活很小一部分。
背景铺垫
- 模型容量受参数量限制。 参数越多,模型理论上能记住和表达的信息越多;但 dense 模型每次都会用到所有参数,所以参数变多通常也意味着计算变贵。
- 条件计算想打破这个绑定。 条件计算指“不同输入走不同计算路径”。理想状态是总参数很多,但每个输入只用其中一小块。
- Mixture-of-Experts 是一种条件计算。 MoE 准备很多专家网络,每个专家通常是前馈网络;门控网络根据输入选择少量专家,并把它们的输出加权合并。
- 难点不只是数学,还有系统。 如果门控总选同几个专家,模型会失衡;如果专家分布在不同 GPU 上,通信也会拖慢训练。本文同时处理算法和集群效率问题。
问题是什么
- 大模型容量很有用,但计算成本爆炸。 语言建模和翻译需要吸收海量文本知识,容量越大越有潜力;可 dense 网络把所有参数都算一遍,扩容很快不可承受。
- 早期条件计算很难训练好。 硬选择专家不可微,软选择又会激活太多专家,失去节省计算的意义。训练时还容易出现所有输入挤向少数专家。
- GPU 集群不喜欢不规则计算。 稀疏路由会让每个专家收到不同数量的样本,负载不均衡会让一部分 GPU 空等,吞吐下降。
- 论文想证明 MoE 可以真的规模化。 目标不是只提出一个层,而是在语言建模和机器翻译上,把专家数量扩到上千甚至更多,还保持可训练和高效。
核心想法
- 每个输入只激活 top-k 个专家。 门控网络给专家打分,再只保留最高的少数几个专家。论文常用 top-2:每个 token 只走两个专家,而不是所有专家。
- 专家可以很多,但每次计算很少。 总参数量来自成百上千个专家;单次计算量来自被选中的几个专家。这就是“容量”和“计算”解耦的关键。
- 门控要加噪声和负载均衡损失。 噪声让早期路由更容易探索;负载均衡损失惩罚专家使用不均,避免热门专家过载、冷门专家闲置。
- MoE 层插在已有网络中间。 论文把 MoE 放在 stacked LSTM 之间,并以卷积方式应用到序列位置上。它不是替换整个模型,而是作为一个超大容量层。
输入 token
来自语言模型或翻译模型
包含
当前词位置的隐藏状态
问题
不想让它经过全部专家
→门控
稀疏门控
Noisy Top-k Gating
选择
只保留得分最高的 1–2 个专家
训练
加噪声和负载均衡项
→路由
专家网络
大量前馈子网络
总容量
最多到 137B 参数
实际计算
每个 token 只用少数专家
方法怎么做
- 门控网络先给专家打分。 对输入 \(x\),门控网络产生每个专家的分数,再通过 top-k 操作把大多数专家权重置零。剩下专家的输出按门控权重加权求和。
- Noisy gating 帮助专家被探索。 训练时给门控 logits 加可学习噪声,让模型不要太早固定到少数专家。这样更多专家有机会收到梯度。
- 负载均衡损失让专家分工更平均。 论文加入 importance loss 和 load loss,分别约束专家收到的总门控权重和样本数量。直觉是:别让一个专家变成所有输入的默认路线。
- 专家并行依赖 all-to-all 通信。 每个设备持有一部分专家,输入先按专家路由到对应设备,专家算完再把结果送回原位置。这是 MoE 工程复杂度的核心。
- MoE 层放在 LSTM 层之间。 论文在语言建模和机器翻译中,把 MoE 作为超大前馈层插入序列模型,让模型容量主要来自专家层。
组件 1:Gate
决定用哪些专家
给每个专家打分,只留下 top-k,输出稀疏权重。
组件 2:Experts
大量前馈网络
每个专家处理被路由过来的 token,专家之间参数不同。
组件 3:Balance
避免专家拥堵
辅助损失让样本更均匀地分散到专家上。
新意在哪里
- 它让条件计算第一次很有工程说服力。 条件计算在理论上早就有吸引力,但本文展示了在现代 GPU 集群上可训练、可扩展、有效果的方案。
- 它把“参数量”和“每 token 计算量”拆开。 Dense 模型参数翻倍通常计算也翻倍;MoE 可以让参数量上千倍增长,而单次计算只小幅增加。
- 它指出负载均衡是 MoE 的核心问题。 MoE 不是简单堆专家;如果没有平衡项和噪声,门控会塌缩,系统吞吐也会被少数专家拖垮。
- 它预示了后来的稀疏 LLM 路线。 Switch Transformer、GShard、Mixtral 等后续模型都沿着“稀疏激活专家”这条路继续发展。
Dense 扩容
所有参数每次都参与计算
容量变大时,训练和推理成本几乎同步增加;模型越大越难部署。
Sparse MoE 扩容
只激活少数专家
总参数量很大,但每个 token 只走 top-k 专家;容量和计算不再强绑定。
结果速览
- 参数量扩到 137B 级别。 论文展示了包含最多 137B 参数的 MoE 层,在当时属于非常激进的模型容量扩展。
- 语言模型 perplexity 明显下降。 在 1 Billion Word Benchmark 上,MoE 模型达到 28.0 perplexity,优于当时公开结果,并且计算成本更低。
- 机器翻译 BLEU 提升。 论文报告 WMT’14 英法和英德翻译分别达到 40.56 和 26.03 BLEU,超过当时强基线。
- 效率损失相对可控。 作者强调实现了超过 1000× 的模型容量提升,同时在现代 GPU 集群上只付出较小计算效率损失。
- 专家数量继续增加仍有收益。 实验显示增加专家数量可以继续改善结果,说明模型真的在利用额外容量,而不只是挂了很多闲置参数。
局限与开放问题
- 系统复杂度显著增加。 MoE 需要路由、跨设备通信、专家容量限制和负载均衡,比 dense 层难实现和调试得多。
- 专家是否真“专业”并不自动保证。 名字叫 experts,但专家学到什么分工取决于数据、门控和训练动态,不一定符合人类理解的主题或任务边界。
- 小 batch 或低并行度不一定划算。 MoE 的效率依赖把足够多 token 分发到专家上;规模不够时,通信和调度开销可能吃掉收益。
- 本文还是 LSTM 时代的架构。 它的核心思想延续到 Transformer MoE,但具体插入位置、路由粒度、训练技巧在后续工作中变化很大。
- 负载均衡和质量之间有张力。 强行平均使用专家可能牺牲门控自由度;放得太松又会塌缩或拥堵。这仍是后续 MoE 研究的常见主题。
影响
- 它是现代 MoE 大模型的重要源头。 后来的 GShard、Switch Transformer、Pathways、Mixtral 等都可以看到这篇论文的影子:稀疏路由、专家并行、负载均衡。
- 它改变了“模型大小”的含义。 从这条路线开始,讨论模型规模时必须区分总参数量和激活参数量。一个模型可以总参数巨大,但每次推理只用其中一部分。