Transformer 架构

MoE 混合专家:为什么大模型参数暴涨却不爆算力

稠密模型每层全算;MoE 用「多个小专家 + 路由」替代,参数很多但每次只激活一小部分(稀疏激活)。Mixtral、DeepSeek 都靠它堆参数。本文讲清结构、路由与负载均衡。

一句话回答

MoE(Mixture of Experts)把每个前馈层换成 N 个并行小专家 + 一个路由。前向时路由只挑 top-k 个专家算,于是总参数很大,但单次推理激活的参数很少——用「参数多」换「表达强」,用「稀疏激活」保住「算力省」。

稠密 vs 稀疏激活

稠密模型
每层 FFN 对全部 token 全算。参数量 = 推理算力,想变强只能整体变大,算力线性涨。
稀疏 MoE
每层有 N 个专家,路由只激活 top-k(常 k=1 或 2)。参数量是 N 倍,激活算力只约 k/N。
激活参数量 ≈ 总参数 × (k / N)
关键收益:在相同推理算力下,MoE 的总参数量可以大几倍,从而容量更大、知识更多。

结构:专家 + 路由

把 Transformer 里的 FFN 层替换成 MoE 层:

稠密 FFN:一个全连接 FFN MoE:路由选 top-2 专家 router E1 E2 E3 E4

路由(Gating)怎么算

对 token 的隐藏状态 x,router 算 N 个 logits,softmax 后取 top-k:

weights = softmax(W_g · x)  →  选 top-k 个专家,权重归一化

输出 = Σ_{选中专家 e} weight_e · Expert_e(x)。

训练技巧 Noisy Top-k:训练时在 router logits 加一点噪声,防止路由过早锁定、让专家能被更公平地探索。

负载均衡:MoE 的头号难题

如果不约束,路由会偷懒——所有 token 都塞给一两个"明星专家",其余专家饿死(专家坍缩),容量优势丧失。

解法两类:

负载不均是训练不稳和效果差的主因,工程上要精心调辅助损失权重和容量上限。

代表模型

Mixtral 8×7B
8 专家选 2,激活约 13B,效果对标 70B 稠密。
DeepSeek-V2/V3
细粒度 MoE + 共享专家,极致参数效率。
Qwen / 大模型
多代 MoE 版本,训推均用。

训练与推理的坑

维度说明
显存总参数全要驻留显存(哪怕不都激活),显存占用大。
通信专家常分片到多卡,路由带来频繁的 all-to-all 通信。
负载不均衡导致部分专家/设备成为瓶颈,批处理效率低。
微调路由对数据敏感,小数据微调易过拟合到少数专家。

总结