混合专家模型(Mixture of Experts, MoE)把 Transformer 的 FFN 层替换为一组并行的「专家」子网络,路由器为每个 token 只激活其中 k 个——用稀疏激活把模型容量单 token 计算成本解耦:总参数可以堆到千亿乃至万亿,推理计算量却维持在 dense 模型的一小部分。

参考:Hugging Face MoE 详解

dense 模型的困境很直接:scaling law 说参数越多能力越强,但 dense Transformer 每个 token 都要流过全部参数,训练与推理成本随规模线性上涨。MoE 给出的答案是——既然处理一个 token 用不着动用模型的全部知识,那就把参数拆开、按需取用。

这个思路并不新。1991 年 Jacobs 与 Jordan 的 Adaptive Mixture of Local Experts 就提出了可学习门控的分而治之;2017 年 Shazeer 把它带进大规模深度学习(noisy top-k gating,挂在 LSTM 上做到 137B 参数);真正的转折点是 2020–2021 年 GShard 与 Switch Transformer 证明它在 Transformer 预训练里的可扩展性。2024 年之后,前沿开源模型几乎全线转向 MoE。

核心原理:路由器决定 token 去哪

Transformer 的每个 block 由 self-attention 和 FFN 两部分组成,其中 FFN 承担约三分之二的参数量,是模型知识的主要载体。MoE 的改造点几乎总在 FFN:attention 保持稠密共享,FFN 被替换成 N 个结构相同、参数独立的专家(每个专家就是一个标准 FFN),外加一个轻量 router。Google 系的实现(GShard、Switch)通常每隔一层做一次替换,现代 LLM 则普遍每层都换成 MoE。

Router 是一个 的线性层加 softmax,对输入 token 表示 打出 N 个 gate 分数,取 Top-k、其余置零(常再归一化),最终输出是 k 个专家结果的加权和:

k 的取值是核心超参。Switch Transformer 证明 k=1 就够,省一半路由开销;DeepSeek 系与 Qwen 系用 k=6~8 配合细粒度专家。k 越大,输出越接近多专家加权平均,表达越平滑,但成本曲线也越靠近 dense。

flowchart LR
    subgraph D["Dense block"]
        x1["token"] --> a1["Self-Attention"] --> f1["单个大 FFN<br/>全部参数参与计算"]
    end
    subgraph M["MoE block"]
        x2["token"] --> a2["Self-Attention"] --> r["Router<br/>softmax + Top-k"]
        r -->|g1| e1["专家 1"]
        r -->|g2| e2["专家 2"]
        r -.-> e3["专家 3..N<br/>本 token 跳过"]
        e1 --> y["加权求和输出"]
        e2 --> y
    end

容量因子与 token drop

分布式训练里,token 要先按路由结果分组、发往专家所在设备,负载不均时某些专家会「爆仓」。工程解法是给每个专家设容量上限 (CF 为 capacity factor,T 为 batch 内 token 总数,N 为专家数),溢出的 token 直接走残差连接——等于这一层的 FFN 对它被跳过了。CF 调大,padding 浪费算力和显存;调小,drop 率上升伤收敛。GShard 取 CF≈1.25,后续实践多在 1–2 之间。

MoE 不是 ensemble

专家是同一层内联合训练的 FFN,没有人为分工;所谓「专家 i 管语法、专家 j 管代码」的领域特化是训练中涌现的,而且相当脆弱。把它理解成「多个独立模型的投票」是常见误读。

结构演进:三代范式

稀疏门控的奠基(2017–2021)

Shazeer 2017 年的 sparsely-gated MoE 在 gate 上加噪声,防止训练早期全部 token 涌向少数专家。GShard(Google,机器翻译)把它搬进 Transformer:每隔一层把 FFN 换成 Top-2 MoE,扩展到 600B+ 参数,并系统化了容量因子、随机路由与负载均衡辅助损失。Switch Transformer 更激进——砍到 Top-1、用 2048 个专家堆到 1.6T 参数,等计算资源下预训练速度是 T5-XXL 的 4 倍。这是 MoE 第一次拿出「省钱 scaling」的完整证据。

LLM 时代的验证(2023–2024)

Mixtral 8×7B(Mistral,2023-12)是行业转折点:8 个 7B 级专家、Top-2 路由,总参 46.7B、激活仅 12.9B,多数基准压过 Llama 2 70B 与 GPT-3.5。用不到 13B 的计算量打出 70B dense 的成绩,MoE 从此从 Google 内部技术变成全行业标配。DBRX(132B/36B,16 专家 Top-4)、Grok-1(314B,8 专家 Top-2)随即跟进。

细粒度专家 + 共享专家(2024 至今)

DeepSeekMoE 论文的两项设计成了此后主流 MoE 的默认结构。细粒度专家分割(fine-grained expert segmentation):把专家切小、数量增多、每 token 选更多个——比如 256 选 8——组合空间指数级增长,路由灵活性远高于 8 选 2。共享专家隔离(shared expert isolation):留出 1–2 个每 token 必经的共享专家,承载通用知识,减少细粒度专家之间的冗余。

flowchart LR
    x["token"] --> sh["共享专家<br/>每个 token 必经<br/>承载通用知识"]
    x --> r["Router"]
    r -->|Top-k| e1["细粒度专家 i"]
    r -->|Top-k| e2["细粒度专家 j"]
    r -.-> e3["其余细粒度专家<br/>本 token 跳过"]
    sh --> y["输出 = 共享 + Σ 细粒度"]
    e1 --> y
    e2 --> y

DeepSeek-V2(236B/21B,160 细粒度 + 2 共享,Top-6)验证了这条路线的成本优势;DeepSeek-V3(671B/37B,256+1,Top-8)又把负载均衡做到 aux-loss-free:不再加辅助损失,改在路由决策里给每个专家挂一个按负载动态调节的 bias 项——过载调低、闲置调高,且 bias 不进入 gate 数值、不污染梯度。GPT-OSS 的 128 专家 Top-4、Kimi K2 的 384+1 都是这一范式的变体。

为什么有效:几个假说

「省计算」只是账面答案,不平凡的事实是:同样训练 FLOPs 下,MoE 的 loss 更低Unified Scaling Laws for Routed Language Models(Google, 2022)把 dense 的 scaling law 推广到 routed 模型,结论是参数量与计算量对 loss 的影响可以分解为两条近似独立的轴——MoE 恰好把两者拆开了,所以在「计算预算固定」这条约束下普遍占优。至于为什么加参数能降 loss,业界有几个层次的解释,都不算定论。

知识容量假说目前最主流。Geva 等人 2021 年的工作指出 FFN 层本质上是 key-value memory:key 匹配输入模式,value 输出对应的知识。语言模型要记的事实、词法、搭配都存在 FFN 权重里,容量不够就互相干扰。MoE 把记忆槽乘以 N 而不增加每 token 的读写成本——自然容纳更多知识。一个旁证是 Sparse Upcycling:把训好的 dense checkpoint 复制成多份专家再继续训,约一半额外计算就能超过原 dense 模型,说明「拆出更多记忆槽」这件事本身就有收益。

条件计算假说是 MoE 的原始动机(Bengio 的 conditional computation 思路):不同 token 需要的处理深度不同,标点不需要句法分析,常见词不需要大容量检索。dense 模型对每个 token 花同样的钱,MoE 让简单的 token 走简单的路。

特化的实证比直觉微妙。Switch Transformer 与 Mixtral 的路由分析都发现:专家确实分化出了稳定分工,但分工发生在 token 类型与句法层面——缩进、数字、标点、专有名词各归其主,且相邻 token 大量涌向同一专家;Mixtral 论文明确报告没有观察到「领域专家」(比如「代码专家」「数学专家」)。「混合专家」这个名字里的「专家」是个比喻,真实机制更像按词法特征分桶。

组合灵活性解释细粒度专家的优势:256 选 8 的组合空间是天文数字,同一层可以为不同 token 激活完全不同的「子配置」,相当于在参数空间里做了条件化分解——这是 DeepSeekMoE 细粒度设计优于 8 选 2 的主流解释。也有理论工作把 MoE 看作隐式集成(implicit ensemble),认为多专家加权平均平滑了损失面。

未解决的问题

MoE 的「等效参数」是打折的:激活 12.9B 的 Mixtral 远强于 13B dense,又明显弱于 46.7B dense——介于两者之间,折扣率没有理论预测。路由坍缩、微调过拟合也说明这套机制还没被真正理解。截至 2026 年,对 MoE 有效性的解释仍停留在 scaling law 实证加机制假说的阶段,没有统一理论。

工程挑战

负载均衡

不加约束时路由会坍缩:少数「赢家」专家吃掉大部分 token,其余专家得不到梯度,模型退化回 dense。经典解法是 auxiliary loss(Switch 取权重 0.01),但它与主损失的梯度互相干扰,权重难调——压狠了伤主任务,放松了均衡失效。DeepSeek-V3 的 bias 调整代表新方向:把均衡从损失函数里拿出来,变成一个轻量的控制回路。

通信开销

MoE 层的 dispatch/combine 两次 all-to-all 通信是训练和推理的通信大头。Expert Parallelism(EP)把不同专家组放到不同设备上,与 attention 侧的张量并行(TP)正交组合;EP 度越高,all-to-all 越贵,集群互联质量(NVLink / InfiniBand)直接决定 MoE 的扩展效率。

flowchart TB
    a["Attention 层<br/>非专家部分,各卡复制"] --> d["Dispatch<br/>按路由结果分组,all-to-all 发往专家所在卡"]
    d --> g1["GPU 组 1:专家 1..128"]
    d --> g2["GPU 组 2:专家 129..256"]
    g1 --> c["Combine<br/>all-to-all 送回原卡,按 gate 权重加权合并"]
    g2 --> c

显存墙:稀疏省的是计算,不是存储

全部专家参数都要驻留显存。Mixtral 46.7B 总参虽只激活 13B,fp16 部署仍要 90GB+。专家量化(GPT-OSS 的 MXFP4、DeepSeek 的 FP8)与 offloading 因此成为部署热点——MXFP4 让 117B 的 GPT-OSS-120B 塞进单张 80GB H100。

训练稳定性与微调

Router 是所有 token 梯度的必经之路,数值上很敏感:N 很大时 softmax 尖锐化、低精度下的误差会被路由决策放大成「token 大规模改道」。常用手段包括 router 保留 fp32 计算、z-loss 约束 logits 量级(ST-MoE)、noisy gating。微调侧,MoE 在小数据下游微调时比 dense 更容易过拟合,冻结专家、只调非专家参数或用 LoRA 往往更稳。

业界使用情况

2024 年起,「前沿开源权重 = MoE」基本成为事实标准。代表模型:

模型机构 / 年份总参数激活参数专家数Top-k
Switch TransformerGoogle, 2021最高 1.6T最多 20481
Mixtral 8×7BMistral, 202346.7B12.9B82
DBRXDatabricks, 2024132B36B164
DeepSeek-V2DeepSeek, 2024236B21B160 + 2 共享6
DeepSeek-V3DeepSeek, 2024671B37B256 + 1 共享8
Qwen3-235B-A22B阿里, 2025235B22B1288
Llama 4 MaverickMeta, 2025400B17B1281
Kimi K2月之暗面, 20251T32B384 + 1 共享8
GPT-OSS-120BOpenAI, 2025117B5.1B1284
Qwen3.5-397B-A17B阿里, 2025397B17B

几条值得注意的行业趋势:

激活率一路走低。 Mixtral 27.6% → DeepSeek-V3 5.5% → GPT-OSS-120B 4.4% → Qwen3.5 4.3%。同等推理成本下总参数持续膨胀,2026 年的 Qwen3.8 旗舰已到 2.4T 总参 / 95B 激活。稀疏度本身成了 scaling 的新维度——模型变大不再天然意味着变贵。

闭源侧同样如此。 GPT-4 被多方分析报道为 MoE(SemiAnalysis 曾给出 8×220B 的估计),OpenAI 官方从未确认;但不公开架构的厂商也没人否认在用稀疏激活——2025 年以来的推理价格战,背后几乎都有 MoE 的影子。

推理基础设施全面适配。 vLLM、SGLang 等框架原生支持 expert parallelism 与专家量化;端侧走细粒度 + 低激活路线,Qwen3.5-35B-A3B 一类模型用接近 3B 的成本拿到 20B+ 的能力。

什么时候不用 MoE。 几 B 到 30B 的规模,dense 的微调生态更成熟、行为更好预测;显存严格受限的设备上,总参数驻留反而是负担;需要频繁全参微调的场景,MoE 的过拟合倾向与显存门槛都不友好。

MoE 的本质,是把 scaling law 里「模型能力」和「每个 token 要付的计算」这两个原本锁死的变量拆开。代价是显存占用、通信复杂度和一整套负载均衡工程。落到选型上就一句话:计算受限选 MoE,显存受限、追求微调简单则选 dense——业界在前沿侧的投票已经非常一致。