一、MoE 的最短定义
混合专家模型(Mixture of Experts)用一个可学习路由器,为每个输入选择一小部分参数子网络(专家),再把这些专家的输出加权合并。
在现代语言模型里,“专家”通常不是完整 Transformer,而是替换某些层中的 FFN / MLP。注意力层依旧是共享的;变化发生在逐 token 的非线性变换处。2017 年的稀疏门控 MoE 展示了这一条件计算路线,之后 GShard、Switch Transformer 等把它放进大规模 Transformer 与分布式系统中。Shazeer et al., 2017;Lepikhin et al., 2020
这里 \(x\in\mathbb{R}^d\) 是一个 token 的隐藏状态,\(W_r\) 是路由器,\(E_i\) 是第 \(i\) 个专家。公式里真正的“稀疏”来自 TopK:没有被选中的专家不为这个 token 做前向计算。
总参数量决定权重需要多少存储;激活参数量近似决定单 token 做多少矩阵乘;端到端延迟还受专家间通信、批量大小、内存带宽和负载是否均匀影响。因此“激活参数少”不自动等于“单请求更快”。
二、一个 token 如何穿过 MoE 层
把稠密 Transformer 块中的一个 FFN 换成下图的稀疏 MoE。路由器只做一个较小的线性投影并产生专家分数;系统按选择结果把 token 重排成专家批次,分别计算,再恢复原 token 顺序。
为什么通常替换 FFN,而不是注意力?
FFN 对每个 token 独立,天然适合先按专家分组,再做大批量矩阵乘。注意力则需要 token 之间交互,稀疏化后会同时改变信息连接结构与缓存策略,问题更复杂。Switch Transformer 也实验过稀疏注意力,但主架构选择替换 FFN。Fedus et al., 2021
三、一个可手算的 Top‑2 路由例子
假设一个 batch 有 4 个 token、4 个专家,路由器对 token “bank” 输出下列概率。Top‑2 选择 (E_2) 与 (E_4),其余专家跳过。
有些实现会对选中的两个权重重新归一化,此时系数变成 (0.55/(0.55+0.25)=0.6875) 和 (0.3125)。这不是无关紧要的记号差异:它会改变输出尺度与路由梯度,读代码时应确认实现采用哪一种。
若 capacity factor 为 1,单专家容量近似为 \(T/N\)。这里 \(T=4,N=4\),每个专家只有 1 个位置;如果三个 token 都选了 \(E_2\),就会溢出。Switch 的静态容量实现可能丢弃超额 token(让残差路径直接通过),提高 capacity factor 则会增加空槽、计算和通信。Switch Transformer §2.2
四、Top‑k MoE 的伪代码
下面不是某个框架的可运行实现,而是把关键机制完整暴露出来:路由、容量检查、分发、专家批处理、合并,以及训练时的均衡约束。
# X: [tokens, d_model];experts[i]: FFN_i
function sparse_moe(X, experts, k, capacity_factor, training):
logits = float32(X) @ router_weight # [T, N]
probs = softmax(logits, axis="expert")
top_w, top_id = top_k(probs, k) # [T, k]
top_w = top_w / sum(top_w, axis=-1) # 可选:对已选专家重归一化
capacity = ceil(capacity_factor * T * k / N)
slots = group_by_expert(X, top_id, capacity)
# slots 记录 token_id、expert_id、gate_weight;溢出策略由实现决定
expert_output = empty_like(slots)
parallel for expert_id in 0 .. N-1:
expert_output[expert_id] = experts[expert_id](slots[expert_id].tokens)
Y = zeros_like(X)
for item in slots:
Y[item.token_id] += item.gate_weight * expert_output[item]
if training:
hard_fraction[i] = count(top_id contains i) / (T * k)
soft_fraction[i] = mean(probs[:, i])
balance_loss = alpha * N * sum(hard_fraction * soft_fraction)
return Y, balance_loss
return Y
这段伪代码省略了设备拓扑:在专家并行中,group_by_expert 往往对应一次 all-to-all,专家计算后再做一次反向 all-to-all。真正的高性能实现还会做 token 排序、padding、融合 kernel 和通信计算重叠。
负载均衡损失在约束什么?
如果路由器过早偏爱少数专家,热门专家溢出、冷门专家学不到东西。Switch 用硬分配比例 (f_i) 与平均软概率 (P_i) 的点积作为辅助损失:(L_{aux}=\alpha N\sum_i f_iP_i),推动两者接近均匀分布。它是工程折中,不保证语义上“每个专家各司其职”;而且权重过大可能干扰主任务。Switch Transformer §2.2
五、不同 MoE 变体到底改了什么
大多数变体都在回答三个问题:谁选择谁、每个 token 激活几个专家、如何防止负载失衡。把它们沿同一条数据流排列,比按模型发布时间背名字更有用。
| 变体 | 选择规则 | 主要收益 | 主要代价 / 限制 | 代表工作 |
|---|---|---|---|---|
| Top‑1 | 每个 token 选 1 个专家 | 专家计算与通信最少,路由实现简单 | 单次选择出错没有第二条专家路径;仍需处理热点与溢出 | Switch Transformer |
| Top‑2 / Top‑k | 每个 token 选固定 k 个专家并加权 | 允许专家组合,路由更有冗余 | 计算与通信大致随 k 增长;容量管理更复杂 | GShard、Mixtral |
| Expert Choice | 每个专家从 token 中选固定容量 | 天然给每个专家固定负载,不再让热门专家溢出 | 一个 token 可能被 0 个或多个专家选中;自回归因果场景的使用方式受约束 | Zhou et al., 2022 |
| 共享专家 | 固定共享专家始终激活,再叠加细粒度 routed experts | 把常见知识从路由专家中抽出,减少路由专家的重复 | 共享路径不是稀疏的;专家拆得更细会提高调度复杂度 | DeepSeekMoE |
| Soft MoE | 用软权重把 token 压成固定 slots,专家处理 slots 后再软分发回来 | 端到端连续可微,避免硬路由与 token dropping | 专家处理的是 token 混合物;论文重点验证在视觉模型,不能直接把结论外推到自回归 LLM | Puigcerver et al., 2023 |
变体之外,还有两个正交维度
专家放在哪里:可以每层都用 MoE,也可以隔层使用或保留前后若干稠密层。专家如何部署:专家并行把不同专家放在不同设备,常与数据并行、张量并行、流水线并行组合。这些是层布局与系统策略,不应和路由算法混成一个“MoE 类型”。
六、Sigmoid Router 与 Softmax Router
两者的核心差异不是“能不能做 Top‑K”,而是路由器怎样表达专家之间的关系:Softmax 把专家放在同一个有限预算里竞争;Sigmoid 先让每个专家独立判断相关性。
Softmax 的全部权重之和恒为 1。提高一个 logit 会通过分母压低其他专家的概率,因此路由梯度天然跨专家耦合。Sigmoid 的归一化前 Jacobian 是逐专家对角的:某个专家的分数不会因为另一专家的 logit 上升而自动下降,更接近多标签相关性判断。
| 比较轴 | Softmax Router | Sigmoid Router |
|---|---|---|
| 专家关系 | 相互竞争,共享总权重 1 | 归一化前独立打分,可同时高或同时低 |
| 权重总和 | 对全部专家恒为 1 | 不固定;常在 Top‑K 后重新归一化 |
| 原始梯度 | 一个 logit 影响所有 softmax 概率 | 激活函数阶段逐专家独立 |
| 表达偏置 | “在这些专家里谁更合适” | “每个专家各自有多合适” |
| 输出尺度 | 天然受总和约束 | 直接混合时随门值总和变化,需归一化或缩放 |
| 典型实现 | Switch、GShard、Mixtral、MiniMax‑Text‑01 | DeepSeek‑V3、GLM‑4.5、Kimi K2、MiniMax‑M2/M3 |
三个相同 logit 的直觉
logits = [2.00, 2.00, 2.00]
softmax = [0.33, 0.33, 0.33] # 三者一样好,但总预算只有 1
sigmoid = [0.88, 0.88, 0.88] # 三者各自都很合适
为什么两者经常选中相同的 Top‑K?
对单个 logit 而言,\(\exp(z)\)、Softmax 中的对应分量和 \(\sigma(z)\) 都严格单调递增。因此,在没有专家偏置、分组掩码或其他校正时,直接按分数 Top‑K 与按原始 logit Top‑K 的排序相同。换 Router 往往不改变“选了谁”,真正改变的是选中专家的混合权重和反向传播。
Softmax 权重的比值是 \(e^{z_i-z_j}\);归一化 Sigmoid 的比值是 \(\sigma(z_i)/\sigma(z_j)\)。它们通常不同。重新归一化会把两者输出都约束到固定总尺度,使前向差距缩小;但归一化又会让被选专家之间重新产生梯度耦合,而未选专家仍通常没有主任务梯度。
因此,Sigmoid 不是免费的“更好 Router”。它减少了全体专家在激活函数阶段的零和竞争,但仍需要 Top‑K、负载控制和输出尺度设计。MiniMax‑M2 的技术报告把这种独立打分作为设计动机;DeepSeek‑V3 则把归一化 Sigmoid 与专家校正偏置、分组限制组合使用。MiniMax‑M2 Series;DeepSeek‑V3 Technical Report
七、DeepSeek、GLM、Kimi 与 MiniMax 如何实现 MoE
这几家的近期公开权重都采用 token-choice Top‑K:token 经 Router 打分,按专家重排并通过 all-to-all 分发,专家执行 SwiGLU 类 FFN,再按门值合并。真正拉开差异的是专家颗粒度、共享路径、路由校正和负载均衡作用域。
这是便于比较的概念式:没有 shared expert 时第一项为零;\(\mathcal{T}(x)\) 是校正与分组约束后的 Top‑K 集合;\(\tilde g_i\) 通常由未加校正偏置的原始门值归一化得到;\(\lambda\) 是模型配置中的 routed scaling factor。残差连接位于这个 FFN 子层之外。
| 公开模型版本 | Routed experts | 每 token | Shared | Router 与均衡 |
|---|---|---|---|---|
| DeepSeek‑V3 | 256 | Top‑8 | 1 | Sigmoid;8 组取 4 组;动态校正偏置主导批级均衡;另有极小序列级辅助损失 |
| GLM‑4.5 | 160 | Top‑8 | 1 | Sigmoid;loss-free bias;公开配置不做有效分组限制;序列级辅助权重 0.0001 |
| Kimi K2 | 384 | Top‑8 | 1 | Sigmoid;noaux_tc 校正选择;无分组限制;seq_aux=true、系数 0.001 |
| MiniMax‑Text‑01 / M1 | 32 | Top‑2 | 0 | Softmax Top‑K;Switch 风格辅助均衡,系数 0.001 |
| MiniMax‑M2 | 256 | Top‑8 | 0 | Sigmoid;可学习专家偏置;公开配置辅助系数 0.001 |
| MiniMax‑M3 文本骨干 | 128 | Top‑4 | 1 | Sigmoid;routing bias;路由缩放 2.0 |
表中数字来自相应技术报告、官方仓库或官方权重配置,描述的是列出的具体版本,不代表各公司所有模型。配置字段能证明公开推理图的结构,但不一定完整披露训练时偏置更新算法。
DeepSeek‑V3:细粒度专家、共享专家与节点受限路由
DeepSeek‑V3 有 61 个 Transformer 层,前 3 层使用 dense FFN;之后每个 MoE 层包含 256 个 routed experts 和 1 个始终执行的 shared expert,每个 token 选择 8 个 routed experts。公开配置使用 Sigmoid、Top‑K 后归一化和 2.5 的 routed scaling factor。DeepSeek‑V3 官方配置
路由先将专家分为 8 组,并只在得分最高的 4 组里选择 Top‑8,以限制跨节点通信。负载控制为每个专家维护校正偏置:偏置只参与“选谁”,最终混合权重仍来自原始 Sigmoid affinity。过载专家的偏置降低,欠载专家的偏置升高。论文称其为 auxiliary-loss-free 主均衡策略,但同时明确保留了一个权重极小的序列级辅助损失,防止单条序列内出现极端失衡。DeepSeek‑V3 §2.1.2
GLM‑4.5:更深、更窄的 DeepSeek 风格 MoE
GLM‑4.5 有 92 层,前 3 层 dense;后续 MoE 层有 160 个 routed experts、Top‑8、1 个 shared expert,每个专家的中间维度为 1536。它同样采用 Sigmoid 与 loss-free balance routing,选中权重归一化后乘 2.5。公开配置的 n_group=1、topk_group=1 意味着没有 DeepSeek‑V3 那样的跨组筛选。论文还披露:偏置更新率在前 15T token 为 0.001,之后归零,并使用权重 0.0001 的序列级均衡损失。GLM‑4.5 Technical Report;官方配置
Kimi K2:更多专家、单层 dense 与较大的路由缩放
Kimi K2 的官方仓库报告 1T 总参数、32B 激活参数、61 层,其中只有第 1 层为 dense;其余 MoE 层有 384 个 routed experts、Top‑8 和 1 个 shared expert,每个专家中间维度 2048。官方配置沿用 DeepSeek‑V3 兼容实现,使用 Sigmoid、topk_method=noaux_tc、Top‑K 归一化和 2.827 的路由缩放;n_group=topk_group=1 表示不做分组筛选。Kimi K2 官方仓库;官方配置
它也不是“完全没有辅助正则”:公开配置保留 seq_aux=true 与 aux_loss_alpha=0.001。因此更准确的描述是:Top‑K 选择走无强辅助损失的校正偏置路径,同时保留序列级约束。
MiniMax:从 32 选 2 到细粒度 Sigmoid MoE
MiniMax‑Text‑01 与 M1代表较早的大专家路线:32 个专家、Top‑2、专家中间维度 9216、无 shared expert。官方 Text‑01 实现对 router logits 做 Softmax,并使用 Switch 风格的辅助负载损失;公开配置的系数为 0.001。其主要架构重点还包括 Lightning Attention 与全注意力混合,而不是新路由算法。MiniMax‑01 官方仓库;官方实现
MiniMax‑M2改为 256 个细粒度专家、Top‑8、无 shared expert,模型报告为 229.9B 总参数、9.8B 激活参数。它使用 Sigmoid 和可学习的 expert-specific bias;官方配置仍列出 0.001 的辅助损失系数,因此应理解为“大幅降低依赖”,而非证明训练阶段绝对没有辅助损失。MiniMax‑M2 Series;M2 官方配置
MiniMax‑M3 的文本骨干又调整为 128 个 routed experts、Top‑4,并加入 1 个 shared expert;公开配置为 Sigmoid、routing bias 和 2.0 的路由缩放。配置能确认推理结构,但其公开技术材料没有像 DeepSeek‑V3 那样完整说明偏置如何随训练负载更新,因此不应仅凭字段名断言两者算法完全相同。MiniMax‑M3 官方配置
MiniMax 官方将 H3‑Omni‑Transformer 描述为 33B 参数的 dense 单流 Transformer,并明确说明注意力层和 FFN 层没有模态专用结构。若某个 H3 实验在训练后把 dense FFN 按隐藏维切成 28 份,再蒸馏一个 Top‑8 Router,它属于稠密模型的训练后 MoE 近似:这些切片最初共同实现一个函数,不等同于从预训练开始端到端分化的独立专家。可借鉴 shared expert、Sigmoid + 路由偏置和 grouped GEMM,但应把它与官方文本 MoE 分开评价。MiniMax H3 官方仓库
八、MoE 真正困难的部分在系统与训练
1. 负载不均衡
路由器可能把大量 token 发给同一个专家。静态容量系统需要丢 token 或预留空槽;动态容量系统虽可避免丢弃,却会被最慢的热门专家拖住。负载均衡辅助损失、路由噪声、Expert Choice 和无辅助损失的偏置校正,都是在解决同一问题的不同办法。
2. 跨设备通信
稠密 FFN 的 token 留在原设备上;专家并行 MoE 要先把 token 发到拥有对应专家的设备,再把结果发回。两个 all-to-all 可能吞掉理论 FLOP 节省,尤其是在小 batch、设备互联较慢或路由高度不均时。GShard 的贡献不仅是模型结构,也包括让这类分片计算可表达、可扩展的系统方法。GShard, 2020
3. 训练稳定性
硬路由会让输入分布和专家获得的梯度随训练变化。Switch 报告了路由器局部使用 float32、缩小参数初始化尺度等稳定化手段;ST‑MoE 又提出 router z-loss,惩罚过大的路由 logits。它们说明 MoE 并非“把 FFN 复制 N 份”就能稳定训练。Zoph et al., 2022
4. 推理时仍要保存大量权重
一个 token 只访问少量专家,但服务节点仍需容纳或按需加载全部专家。低并发解码时,每步 token 少,专家矩阵乘不容易形成大批次;权重读取和跨卡通信可能主导延迟。MoE 的优势最容易在高吞吐批处理与足够快的设备互联上兑现。
Switch、Expert Choice、Soft MoE 与 DeepSeekMoE 的报告分别使用不同架构、任务、硬件、训练预算和质量阈值。它们能证明某个设计在各自实验边界内有效,不能组成一张公平排行榜。
九、什么时候该选哪一种
| 你的首要约束 | 优先考虑 | 先验证什么 |
|---|---|---|
| 想要最简单的稀疏基线 | Top‑1 / Switch | 溢出率、每专家 token 数、all-to-all 占比 |
| 愿意多算一点换专家组合 | Top‑2 | Top‑2 相对 Top‑1 的质量增益是否覆盖通信成本 |
| 固定专家容量是硬约束 | Expert Choice | token 覆盖率,以及推理任务是否允许批内专家选 token |
| 担心通用知识挤占路由专家 | 共享专家 + 细粒度专家 | 共享专家计算占比、路由专家冗余与实际专门化 |
| 视觉编码器中希望连续软路由 | Soft MoE | slot 数、token 混合是否损伤任务需要的局部信息 |
MoE 专家会自然学成“数学专家”“代码专家”吗?
不应默认如此。路由只被主任务和均衡约束间接训练,专家可能按语言、语法模式、token 位置或难以命名的特征分工,也可能高度冗余。可解释的专门化需要路由统计、专家消融和反事实替换等证据,不能只看几个被路由的示例。
MoE 是模型压缩吗?
不是。MoE 通常增加总参数与权重存储,只降低每个 token 激活的参数比例。量化、剪枝、蒸馏才主要面向存储或部署压缩;它们可以与 MoE 组合。
收束
MoE 的核心不是“很多专家”,而是条件计算:让不同 token 使用不同参数。它把 Transformer 的容量扩展问题改写成路由问题,也把一部分 FLOP 压力转换成了负载均衡、显存和网络通信压力。Top‑1、Top‑2、Expert Choice、共享专家与 Soft MoE 并没有统一胜者;选择取决于任务是否允许相应路由、系统能否高效聚合专家批次,以及你愿意为稳定性付出多少复杂度。
参考文献
- Shazeer, N. et al. Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer, 2017.
- Lepikhin, D. et al. GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding, 2020.
- Fedus, W., Zoph, B., Shazeer, N. Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity, 2021/2022.
- Zoph, B. et al. ST-MoE: Designing Stable and Transferable Sparse Expert Models, 2022.
- Zhou, Y. et al. Mixture-of-Experts with Expert Choice Routing, 2022.
- Puigcerver, J. et al. From Sparse to Soft Mixtures of Experts, 2023.
- Dai, D. et al. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models, 2024.
- Jiang, A. Q. et al. Mixtral of Experts, 2024.
- DeepSeek-AI. DeepSeek-V3 Technical Report, 2024/2025;另见官方权重配置。
- Zeng, A. et al. GLM-4.5: Agentic, Reasoning, and Coding Foundation Models, 2025;另见官方权重配置。
- Moonshot AI. Kimi K2 official repository, 2025;另见官方权重配置。
- MiniMax-AI. MiniMax-01 official repository, 2025.
- MiniMax-AI. The MiniMax-M2 Series: Mini Activations Unleashing Max Real-World Intelligence, 2026;另见 M2 与 M3 官方配置。
- MiniMax-AI. MiniMax H3 official repository, 2026.
评论加载中...