MoE:用参数量换计算效率
MoE(Mixture of Experts)的核心思想很简单:不是所有参数都需要参与每次计算。通过路由机制,只激活与当前输入最相关的"专家"子网络,在保持大参数量的同时大幅降低计算量。
基本原理
稠密模型 vs 稀疏模型
传统稠密模型:每个token经过所有参数的计算。
输入token → [Attention] → [MLP(d, d_ff)] → 输出
所有参数参与计算
MoE模型:MLP层被替换为多个专家MLP,路由器选择激活哪些专家。
输入token → [Attention] → [Router] → 选择Top-K专家
↓
[Expert1] [Expert2] ... [ExpertN]
↓ (仅K个被激活)
加权合并 → 输出
关键参数
- 专家数(N):总专家数量。通常8-64个
- 激活数(K):每个token激活的专家数。通常2-8个
- 稀疏率:1 - K/N。如8/64的配置,稀疏率为87.5%
以DeepSeek-V3为例:256个专家,每token激活8个,总参数671B但推理时只激活37B——等效于37B模型的计算量,但拥有671B参数的知识容量。
路由机制
基础路由
最简单的路由方式:
def route(token, experts):
# 计算token与每个专家的亲和度
scores = softmax(W_router @ token) # [N]
# 选择Top-K个专家
top_k_indices = argsort(scores)[-K:]
top_k_scores = scores[top_k_indices]
# 归一化
top_k_scores /= top_k_scores.sum()
# 加权合并
output = sum(experts[i](token) * top_k_scores[i]
for i in top_k_indices)
return output
负载均衡问题
基础路由有一个严重问题:路由坍缩。模型倾向于总是选择少数几个"好"专家,其他专家得不到训练。
辅助损失法
添加辅助损失强制负载均衡:
L_aux = α * N * Σ(f_i * P_i)
f_i: 实际路由到专家i的token比例
P_i: 路由器对专家i的平均概率
当所有专家被均匀使用时,f_i * P_i最小(均匀分布的熵最大)。
专家级别的负载均衡
更细粒度的方法:
- 监控每个专家的实际负载
- 动态调整路由阈值
- 过载专家的token溢出到次优专家
Expert Choice路由
传统路由是"token选择专家",Expert Choice反过来——“专家选择token”:
- 每个专家根据自身容量选择最匹配的token
- 天然保证负载均衡
- 但处理batch内token的顺序敏感
训练挑战
训练不稳定性
MoE训练比稠密模型更容易不稳定:
- 梯度通过路由器的方差大
- 专家间学习速度不均匀
- 路由的离散性导致梯度估计有偏
解决方案
- 更低的学习率(约为稠密模型的1/2到1/4)
- 更大的batch size
- z-loss:惩罚路由器输出过大值
- 逐步增加专家数量(curriculum)
通信开销
分布式训练MoE时,不同GPU负责不同专家,需要在GPU间传递token(All-to-All通信):
GPU1(Expert1-4) ←→ GPU2(Expert5-8) ←→ GPU3(Expert9-12) ...
All-to-All通信
这成为训练的通信瓶颈。优化方向:
- Expert Parallelism:按专家切分GPU
- TopK All-to-All:只传递被选中的token
- 通信计算重叠:提前开始通信
数据效率
MoE的参数利用率高,但训练数据需求更大——因为每个专家看到的数据更少。解决方案:
- 更大batch size
- 更长训练周期
- 数据混合策略调整
推理优化
动态激活
推理时只加载被激活专家的参数,减少内存访问:
token → Router → [Expert2, Expert5]
只加载这两个专家的权重计算
专家缓存
热门专家常驻GPU显存,冷门专家放CPU内存:
- 用LRU策略管理专家权重缓存
- 监控专家调用频率,动态调整缓存
- 减少专家权重加载延迟
专家量化
对不同专家使用不同精度:
- 高频专家:FP16(精度优先)
- 低频专家:INT4(内存优先)
- 根据使用频率动态调整
MoE变体
DeepMoE / DeepSeekMoE
DeepSeek的创新:
- 细粒度专家:更多更小的专家(256个),提高路由灵活性
- 共享专家:一些专家始终激活,处理通用信息
- K=8, N=256:每token激活8/256
Mixtral
Mistral的MoE方案:
- 8个专家,每token激活2个
- 稀疏率75%
- 架构简洁,易于部署
Switch Transformer
Google的早期工作:
- 每token只激活1个专家(K=1)
- 极致稀疏但表达能力受限
MoE经济学
训练成本
以671B参数的MoE为例(DeepSeek-V3):
- 训练成本约等效于37B稠密模型的2-3倍
- 但推理能力接近671B稠密模型
推理成本
| 模型 | 总参数 | 激活参数 | 推理成本(相对) | 能力 |
|---|---|---|---|---|
| 70B稠密 | 70B | 70B | 1x | 基准 |
| 8x22B MoE | 141B | 22B | 0.31x | 略高于70B |
| DeepSeek-V3 | 671B | 37B | 0.53x | 接近671B |
MoE的核心经济价值:以小参数的计算成本获得大参数的能力。
总结
MoE架构正在成为大模型的主流选择——当模型规模超过百亿参数后,稠密架构的计算成本变得不可接受,而MoE提供了一条优雅的出路。2026年,从DeepSeek到Mixtral到Llama,主流开源模型几乎都采用了MoE。MoE不是简单的架构选择,而是改变大模型经济学的基础创新——让参数量增长不再被计算成本限制。