MoE_让大模型更大_更准_还更快

Mixture of Experts (MoE) 是一种神经网络架构,它的核心思想是将一个复杂的任务分解成若干个子任务,并为每个子任务分配一个专家网络来处理。这种架构在处理大规模模型时,能够显著提高效率和性能。

近些年,MoE 与 LLMs 的结合,LLMs 的性能和效率得到进一步提升。如今 MoE 已经成为 LLMs 的核心技术,被广泛应用于各种 LLMs 中。

本文将简要介绍 MoE 最初被提出时的样子,以及它是如何集成至 LLMs 框架中的,方便大家快速了解 MoE 的核心技术和优势。下面是一篇 LLMs 中 MoE 技术的综述,感兴趣的可以详细阅读下:

Cai W, Jiang J, Wang F, et al. A survey on mixture of experts in large language models[J]. IEEE Transactions on Knowledge and Data Engineering, 2025.

MoE 架构示意图

1. 最初的 MoE

MoE 的概念最早是在上世纪 90 年代由 Michael I. Jordan 和 Robert A. Jacobs 在论文《Adaptive mixtures of local experts》中首次提出。他们将 MoE 描述为一种由多个 Expert Network 和一个 Gating Network 所组成的系统。Gating Network 负责根据输入的数据,动态地决定将任务分配给哪些 Expert Network,并对它们输出进行加权组合,如下图所示。

MoE 基本架构

此外,Jordan 于 1993 在论文《Hierarchical mixtures of experts and the EM algorithm》中进一步对 MoE 框架进行了理论完善,提出了 Hierarchical MoE,并使用 EM 算法实现对模型的训练,为 MoE 后续发展奠定基础。

层次化 MoE

虽然 MoE 的概念在理论上很有吸引力,但由于以下几个原因,使得在它提出后相当长的一段时间里的应用相对有限:

  • 计算资源:训练复杂的 MoE 模型需要大量计算资源,然而早期算力有限,使得 MoE 很难大规模应用
  • 训练难度:MoE 的训练(特别是 Gating Network 的训练)面临着梯度消失负载不平衡等问题,使得模型难以收敛
  • 非稀疏性:早期 MoE 的 Gating Network 采用 Softmax 函数,这使得每个 Expert Network 在前向传播中都会被激活,无法实现真正的稀疏性(即只有部分 Expert Network 被激活),无法有效降低计算成本

在最近几年,得益于以下关键技术的突破,以及大模型应用的普及,使得 MoE 再次回到大众视野中来:

  • 稀疏门控:Google Brain 团队 2017 年在论文《Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer》中提出稀疏门控(Sparsely-Gated)的概念,实现了 Gating Network 只激活 Top-k 个的 Expert Network,解决了之前 MoE 的计算效率问题。这篇论文对 MoE 具有里程碑意义,让 MoE 真正具备了实际应用的潜力
  • 有效性验证:Google 在其 GLaM 中使用了 MoE 架构,成功训练了拥有万亿参数的模型,并证明了 MoE 在扩大模型规模的同时,能保持较低的计算成本
  • 广泛应用:随着 Transformer 架构的流行,MoE 被广泛应用于各种 LLM(如 PaLM、Switch Transformers、GPT-4、Mixtral) 中,成为提升模型规模和效率的关键技术。现在 MoE 已经成为大模型的核心技术之一了

2. 大模型中的 MoE

在 GPT4 刚发布时,不少揭秘博主认为:

GPT-4 is a mixture-of-experts model, with 16 experts of 111B parameters each.

按照上面的逻辑说法,GPT4 的结构大致是这样的:

GPT-4 MoE 架构推测

实际上并不是上面这种简单的 MoE 架构。下面我们来看下在大模型中 MoE 是如何实现的。

在大语言模型中,MoE 的实现方式本质上是将传统的 Transformer 模型中的 FFN(Feed-Forward Network)层替换为 MoE 层。这一改动使模型能够在保持较低计算成本的同时,显著扩大模型规模。如下图所示:

Transformer 中的 MoE 层

从图中可以看出,MoE 层主要有如下两个核心部分:

  • 专家网络(Experts Networks):是一组相互独立的前馈网络(FFN)。每个专家网络拥有自己的权重,可以简单认为为每个专家负责处理输入数据中的特定模式。在 LLMs 中,通常会有几十甚至上百个专家
  • 门控网络(Gating Network)/ 路由网络(Router):是一个小型网络,作用是根据上一次输入内容,动态将输入分配给哪些专家网络进行处理

MoE 层处理流程如下图所示:

MoE 处理流程

MoE 的核心是 Gating Network 如何实现稀疏选择 Expert Network。

2.1. Sparse Activation

与 Dense 层需要激活并计算所有参数不同,MoE 层仅根据 Gating Network 决策,激活一小部分 Expert Network。当某个 Expert Network 的激活概率为零时,它的前向传播计算会被完全跳过,从而节省了大量的计算资源。

Gating Network 的稀疏决策(如 Top-k)直接决定了哪些 Expert Network 被激活。这使得 MoE 在逻辑上可以拥有万亿级别的总参数量,但实际上只需要在加载和计算一小部分活跃参数,从而大大提升了模型计算效率。

Gating Network (G) 作用是将输入分配给哪些 Expert Network (E),如下所示:

其中,表示 Expert Network 的个数。

最常用的稀疏策略是 Shazeer 等人 Noisy Top-K Gating,通过引入了一些可调整的噪声,然后保前 Top k 的值:

  • 引入噪声其中, 是用于控制噪声幅度的可学习权重矩阵
  • 选择 Top K 的值:
  • 使用 Softmax 函数计算每个 Expert 的激活概率:

简单来说仅对中的 Top k 的值进行 Softmax 操作,将其他非 Top k 的专家的激活概率强制设为 0,从而实现严格的稀疏激活。

稀疏激活示意图

如下是 Mixtral 8x7B 第 32 层中,针对不同 domain 的输入, Expert 所分配的 Token 数:

Mixtral 专家分配

下图的词云显示了每个 Expert 最常处理的 Token:

专家词云分析

从图中可以看出,不同 Domain 的输入,会对应激活的 Expert 分部有较大差异,这表明不同 Expert 会针对性处理不同 Domain 的 Token。

2.2. Load Balancing Loss (LBL)

单纯的 Top K 选择会存在专家负载不均衡的问题:少数专家会被频繁选择,而其他专家则长期处于非激活状态,造成模型容量的浪费和训练不稳定。为了解决这个问题,研究人员在训练过程中额外引入了负载均衡辅助损失(Load Balancing Loss,LBL)。

LBL 旨在鼓励 Gating Network 在每个训练 Batch 中均匀地选择专家,从而最大化模型的整体利用率。通常涉及两个关键指标:专家被选择的频率和路由赋予的平均分数。

经典的 LBL 可以表示为:

当所有 Expert Network 的选取概率()和分数相同()时,达到最小值,负载均衡达到最优。

如下图所示,Mixtral 8x7B 经过负载均衡后,不同层中每个 Expert 被分配的 Token 数:

负载均衡效果

2.3. Noise Top-K Gating Code

以下是基于 PyTorch 框架下,Noisy Top-k Gating 机制的伪代码:

import torch
import torch.nn as nn
import torch.nn.functional as F

class NoisyTopkRouter(nn.Module):
    def __init__(self, d_model, num_experts, top_k):
        super(NoisyTopkRouter, self).__init__()
        self.top_k = top_k
        self.gate = nn.Linear(d_model, num_experts)
        self.noise = nn.Linear(d_model, num_experts)
    
    def forward(self, x):
        logits = self.gate(x)
        noise_logits = self.noise(x)
        noise = torch.randn_like(logits) * F.softplus(noise_logits)
        noisy_logits = logits + noise
        top_k_logits, top_k_indices = noisy_logits.topk(self.top_k, dim=-1)
        zeros = torch.full_like(noisy_logits, -1e9)
        sparse_logits = zeros.scatter(dim=-1, index=top_k_indices, src=top_k_logits)
        gating_weights = F.softmax(sparse_logits, dim=-1)
        return gating_weights, top_k_indices

3. 结论

MoE 技术的优越性已在多个备受关注的大模型中得到充分验证,已被广泛应用于各种大模型中。

MoE 应用总结

可以说 MoE 技术代表了大模型架构的一个重要转折点,它通过将模型容量与计算成本解耦,为大模型的可持续扩展提供了一个经济可行的路径,使得我们能够构建更大、更强、又相对高效的模型。

4. 参考文献

[1] Jacobs R A, Jordan M I, Nowlan S J, et al. Adaptive mixtures of local experts[J]. Neural computation, 1991, 3(1): 79-87.

[2] Jordan M I, Jacobs R A. Hierarchical mixtures of experts and the EM algorithm[J]. Neural computation, 1994, 6(2): 181-214.

[3] Shazeer N, Mirhoseini A, Maziarz K, et al. Outrageously large neural networks: The sparsely-gated mixture-of-experts layer[J]. arXiv preprint arXiv:1701.06538, 2017.

[4] Kyle Kranen and Vinh Nguyen. Applying Mixture of Experts in LLM Architectures. developer.nvidia.com. 2024.

[5] Maarten Grootendorst. A Visual Guide to Mixture of Experts (MoE). Newsletter.maartengrootendorst.com. 2024.

[6] Cameron R. Wolfe. Mixture-of-Experts (MoE) LLMs. Cameronrwolfe.substack.com. 2025.

[7] Avi Chawla. Transformer vs. Mixture of Experts in LLMs. Dailydoseofds.com. 2025.