MoE:为什么只激活一部分专家?

用稀疏路由增加参数容量,而不让每个 Token 都付出全部计算

目录

  Dense FFN 对所有 Token 使用同一组参数。Mixture of Experts 准备多个 FFN 专家,再由 Router 为每个 Token 选择少数专家。

MoE 增加的是总参数容量;稀疏路由控制的是每个 Token 实际使用的计算量。

MoE:为什么只激活一部分专家?

第 15 课核心流程,点击查看原始 SVG

1、专家通常是什么

在多数 Transformer MoE 中,每个专家就是一套独立 FFN。Attention 往往仍是共享的,MoE 主要替换 Block 中的 Dense FFN。

专家不一定对应人类可命名的领域,它们是训练中自动形成的参数分工。

2、Router 怎样选择

Router 接收 Token 隐藏状态,为每个专家产生分数,再选择 Top-1 或 Top-2 专家。Token 被发送给选中的专家,输出按路由权重合并。

路由是逐 Token 的,同一句话里的不同 Token 可能进入不同专家。

3、为什么只激活少数专家

如果 E 个专家全部执行,计算会随专家数一起增长。稀疏激活让模型拥有更大的总参数量,同时每个 Token 只支付 K 个专家的计算,其中 K 远小于 E。

4、负载均衡为什么困难

Router 可能把大量 Token 都送给少数热门专家,造成拥堵,其他专家却闲置。训练通常加入负载均衡损失、容量限制或其他路由策略。

超过专家容量的 Token 可能被丢弃、改投其他专家或等待,具体行为取决于实现。

5、MoE 的通信代价

专家分布在不同 GPU 上时,Token 需要通过 All-to-All 发往对应设备,再把结果送回。MoE 节省了算术计算,却可能增加通信、调度和内存访问压力。

6、总参数不等于激活参数

描述 MoE 模型时要同时看总参数和每 Token 激活参数。总参数反映整体容量,激活参数更接近一次 Forward 实际经过的权重规模,但速度还受通信和内核效率影响。

容易混淆的三件事

  1. 专家不是人工预先命名的职业。
  2. 稀疏激活不代表权重不占显存。
  3. 激活参数少不保证端到端一定更快。

记住这 5 件事

  1. 专家通常是独立 FFN
  2. Router 逐 Token 选 Top-K
  3. 总参数大于激活参数
  4. 需要负载均衡
  5. 跨卡路由带来通信

参考资料

第十五课复习总图

大模型第十五课复习总图

第十五课复习总图,点击查看原始 SVG

  下一课转向 GPU 执行:FlashAttention 为什么数学结果不变,却能更快、更省显存?