什么是 Mixture of Experts(MoE)模型?大语言模型如何通过专家混合提升效率
Mixture of Experts(MoE,专家混合)是一种将模型内部部分网络划分为多个“专家(Experts)”,并根据输入动态选择其中少数专家参与计算的神经网络架构。它的核心目标是让模型拥有更大的参数容量,同时避免每次推理都激活全部参数,从而提高计算效率。
例如,一个 MoE 模型内部可能包含多个专家网络,但处理某个 Token 时,Router(路由器)只选择其中最合适的一个或几个专家。下一个 Token 又可能被分配给其他专家。也就是说,MoE 的“专家”并不是人工提前规定好的数学、编程或语言专家,而是在训练过程中逐渐学习不同的数据模式和表示。
随着大语言模型规模不断扩大,MoE 已成为重要的模型架构路线之一。理解 MoE,也有助于进一步理解为什么模型的“总参数量”不一定等于一次推理实际使用的参数量,以及现代 LLM 如何在模型容量、计算成本和推理效率之间寻找平衡。
什么是 Mixture of Experts(MoE)模型?
Mixture of Experts 可以翻译为“专家混合模型”。它的基本思想并不复杂:与其让整个模型对每一个输入执行完全相同的计算,不如准备多个可学习的专家网络,再根据输入选择其中最合适的专家参与处理。
在 Transformer 中,MoE 通常不会把整个模型完全拆成多个独立模型,而是用多个 Expert 替换部分标准的 Feed-Forward Network(FFN)层。Attention 等其他组件仍然可以由所有 Token 共享,而进入 MoE 层后,不同 Token 会被 Router 分配给不同专家。
因此,一个典型的 MoE 层可以简单理解为三个部分:
| 组件 | 作用 |
|---|---|
| Router / Gating Network | 判断 Token 应该发送给哪些专家 |
| Experts | 分别处理被分配过来的 Token |
| Combination | 根据路由权重整合专家输出 |
这种结构带来的关键变化是稀疏激活(Sparse Activation)。模型虽然拥有大量参数,但每个 Token 实际只需要经过少数几个专家,而不是使用所有专家参数。
MoE 模型是如何工作的?
MoE 的工作流程可以从一个 Token 进入 Transformer 的过程理解。首先,文本被 Tokenizer 拆分为 Token,再经过 Embedding 和前面的 Transformer 计算,形成当前 Token 的隐藏表示。
当这个表示进入 MoE 层后,Router 会根据当前输入计算每个 Expert 的路由分数。系统随后按照路由策略选择得分较高的专家,例如 Top-1 或 Top-2 Experts,并将 Token 发送给这些专家处理。
假设一个 MoE 层拥有 8 个 Experts,而 Router 对某个 Token 选择 Expert 2 和 Expert 6,那么这次计算主要激活这两个专家,而不是同时运行全部 8 个专家。对于另一个 Token,Router 则可能选择 Expert 1 和 Expert 4。
被选中的专家分别完成前馈计算后,系统再按照路由权重组合它们的输出,并将结果传递到下一层。
整个过程可以简化为:
Token → Hidden Representation → Router → Select Top-k Experts → Expert Computation → Combine Outputs → Next Transformer Layer
这种“按需选择计算路径”的机制,是 MoE 与传统 Dense 模型最重要的区别之一。
MoE 中的 Expert 真的是不同领域的“专家”吗?
“Mixture of Experts”这个名字很容易让人误以为模型内部存在一个“数学专家”、一个“编程专家”和一个“翻译专家”,Router 会先判断用户问题属于哪个领域,再调用对应模块。
实际情况通常没有这么简单。
Expert 是训练过程中学习形成的神经网络模块,而不是开发者手动给每个专家分配职业。随着训练进行,不同 Expert 可能逐渐对某些 Token、语言结构、数据模式或特征表现出不同程度的专门化,但这种分工往往不是人类可以直接用一个标签概括的。
而且,Router 通常是在 Token 级别进行路由,而不是把整个用户 Prompt 一次性分给一个专家。同一句话中的不同 Token 完全可能进入不同 Expert。
因此,“专家”更准确的理解是:模型内部可以被动态选择的不同计算模块,而不是多个具有明确职业分工的小型 AI。
Router 如何决定使用哪些 Experts?
Router 是 MoE 架构中的关键组件,因为它决定了每个 Token 应该进入哪些专家网络。
当 Token 的隐藏表示进入 MoE 层后,Router 会计算该 Token 与不同 Experts 之间的匹配分数,并形成一个路由概率分布。系统随后根据预设的 Top-k 策略选择少数专家。
例如,一个包含 8 个 Experts 的 MoE 层可能得到如下示意结果:
| Expert | Router Score |
|---|---|
| Expert 1 | 0.08 |
| Expert 2 | 0.41 |
| Expert 3 | 0.05 |
| Expert 4 | 0.07 |
| Expert 5 | 0.04 |
| Expert 6 | 0.28 |
| Expert 7 | 0.03 |
| Expert 8 | 0.04 |
如果采用 Top-2 Routing,那么 Expert 2 和 Expert 6 会被选择。这里的数字仅用于说明机制,并不代表某个实际模型。
Router 本身也需要通过训练进行学习。如果路由设计合理,不同输入可以逐渐分配到更加合适的计算路径;但如果大量 Token 总是集中到少数 Experts,就可能出现负载不均衡,因此 MoE 训练通常还需要额外的负载均衡机制。
MoE 与 Dense 模型有什么区别?
Dense Model(稠密模型)与 MoE 最大的区别,在于一次计算会激活多少模型参数。
在典型 Dense Transformer 中,每个 Token 都会经过相同的主要网络层,因此这些层中的参数都会参与计算。随着模型参数规模扩大,单次训练和推理需要的计算资源也随之增加。
MoE 则引入多个 Experts,并通过 Router 对其进行稀疏激活。模型可以增加更多专家来扩大总参数容量,但每个 Token 只调用其中一部分专家。
| 对比维度 | Dense Model | MoE Model |
|---|---|---|
| 参数结构 | 主要参数通常共同参与计算 | 包含多个可选择的 Experts |
| 每个 Token 的计算路径 | 相对固定 | Router 动态选择 |
| 参数激活 | 更接近稠密激活 | 稀疏激活 |
| 扩大模型容量 | 通常同时增加计算量 | 可增加 Experts 而不同比例增加单 Token 计算 |
| 系统复杂度 | 相对较低 | 路由和分布式部署更复杂 |
这也解释了为什么比较 MoE 与 Dense 模型时,不能只看“总参数量”。对于 MoE,更有意义的指标还包括 Active Parameters(激活参数),也就是处理一次输入时真正参与主要计算的参数规模。
为什么大型 AI 模型会使用 MoE?
MoE 最重要的价值,是帮助模型将“参数容量”和“每次计算成本”部分解耦。
如果单纯扩大 Dense 模型,增加参数通常也意味着每次 Token 推理需要进行更多计算。模型能力可能提升,但训练成本、推理延迟和硬件需求也会随之上升。
MoE 提供了另一条扩展路线。开发者可以增加 Expert 数量,让模型拥有更大的总参数空间,但通过稀疏路由,每次只激活少数 Experts。这样可以在不让单 Token 计算量与总参数量同步增长的情况下扩展模型容量。
这并不意味着 MoE 天然“更便宜”。更大的模型仍需要存储更多权重,而 Expert Routing、GPU 间通信和负载均衡也会增加系统复杂度。MoE 的优势主要在于计算效率与模型容量之间的扩展方式不同,而不是简单地减少所有 AI 成本。
MoE 会让 AI Inference 更快、更便宜吗?
MoE 可以减少每个 Token 需要激活的参数,但这并不意味着所有 MoE 模型在实际使用中一定比 Dense 模型更快。
从计算量来看,稀疏激活意味着模型不需要让所有 Expert 同时处理每个 Token,因此在相似计算预算下,可以拥有更大的参数容量。这是 MoE 提高效率的核心来源。
但实际推理还受到显存、GPU 通信、Batch Size、路由效率以及模型部署方式影响。即使某些 Expert 当前没有参与计算,它们的参数仍然需要被存储和管理。在多 GPU 环境下,如果一个 Token 被路由到另一块 GPU 上的 Expert,还可能产生额外通信开销。
因此,MoE 的推理效率不能简单理解为“总参数很多,但运行成本很低”。它是一种通过稀疏计算改善模型扩展效率的架构,而最终速度和成本仍然取决于具体模型和推理基础设施。
MoE 模型面临哪些挑战?
MoE 在提高模型容量的同时,也引入了 Dense 模型中相对不明显的新问题,其中最典型的是 Load Balancing(负载均衡)。
如果 Router 总是偏好少数几个 Experts,这些专家会接收到大量 Token,而其他专家利用率很低。这不仅浪费模型容量,还可能让热门 Expert 成为计算瓶颈。因此,训练 MoE 时通常需要设计辅助目标或其他机制,鼓励 Token 在不同 Experts 之间形成更加合理的分布。
另一个挑战来自分布式计算。大型 MoE 模型的 Experts 往往分布在多个 GPU 或计算节点上,动态路由会产生跨设备的数据交换。模型参数虽然可以稀疏激活,但系统需要高效地把 Token 发送到正确的 Expert,再将结果返回原来的计算流程。
此外,MoE 的训练稳定性、Expert Capacity、路由策略和部署优化都需要额外设计。因此,MoE 并不是简单地“增加几个专家”,而是一套涉及模型架构和 AI 基础设施的完整工程问题。
MoE 与 Transformer、LLM 和 AI Inference 有什么关系?
MoE 并不是 Transformer 的替代品,而是可以嵌入 Transformer 中的一种架构设计。
标准 Transformer Layer 通常包含 Attention 和 Feed-Forward Network。MoE Transformer 可以保留 Attention,同时将部分 FFN 替换为多个 Expert FFN,再使用 Router 动态选择计算路径。
因此,可以把几个概念的关系简单理解为:
Transformer 提供基础模型架构 → MoE 改变部分网络层的计算方式 → LLM 使用这些结构学习语言 → AI Inference 执行实际的 Token 计算和生成。
当用户通过 AI API 调用一个 MoE LLM 时,通常不需要手动选择内部 Expert。Expert Routing 发生在模型内部,对应用层而言,输入仍然是 Prompt,输出仍然是模型生成的结果。
这也是为什么 MoE 更多属于模型架构层概念,而模型路由(Model Routing)属于更上层的 AI 基础设施概念。前者是在一个模型内部选择 Expert,后者通常是在多个独立模型之间选择适合当前请求的模型,两者不应混为一谈。
总结
Mixture of Experts(MoE,专家混合)是一种通过多个 Expert 和 Router 实现稀疏计算的神经网络架构。模型拥有多个专家模块,但每个 Token 通常只激活其中少数 Experts,从而让总参数容量和单次计算量不再完全同步增长。
在 Transformer 中,MoE 通常用于替换部分 Feed-Forward Network。Router 根据 Token 的隐藏表示选择 Top-k Experts,专家完成计算后再将结果组合并传递到下一层。这种结构让大型模型能够在控制计算量的同时进一步扩大参数容量。
不过,MoE 并不意味着模型一定运行得更快或成本一定更低。Expert 参数仍需要存储,动态路由还会带来负载均衡、GPU 通信和部署复杂度等问题。因此,理解 MoE 时,比单纯比较总参数量更重要的是理解 Active Parameters、Sparse Activation 和 Expert Routing 等概念。
FAQ
MoE 模型中的 Experts 是独立的大语言模型吗?
通常不是。Experts 一般是同一个模型内部的神经网络模块,例如不同的 Feed-Forward Networks,它们共享整个 Transformer 的其他组件和训练过程。
MoE 模型的总参数量等于每次推理使用的参数量吗?
不等于。MoE 采用稀疏激活,每个 Token 通常只调用少数 Experts,因此实际激活参数量可以明显低于模型的总参数量。
Top-1 和 Top-2 Routing 有什么区别?
Top-1 Routing 为每个 Token 选择得分最高的一个 Expert,而 Top-2 Routing 会选择两个 Experts 并组合其输出,两种方式在计算量、路由稳定性和模型效果方面存在不同权衡。
MoE 和 Model Routing 是一回事吗?
不是。MoE Routing 是在单个模型内部为 Token 选择 Expert,而 Model Routing 通常是在多个独立 AI 模型之间选择适合当前任务的模型。
MoE 为什么需要负载均衡?
如果 Router 将过多 Token 分配给少数 Experts,就会造成计算拥堵和其他 Experts 利用不足,因此 MoE 通常需要负载均衡机制让专家资源得到更有效的利用。


