跳到正文
Soren
Knowledge阅读室15 个章节
本页目录
← 返回 Knowledge
LLM Architecture · Study Note · Updated 2026-09

MoE 混合专家
为什么大模型只激活一部分参数?

从一个 token 如何经过 Router 开始,理解 Top-K 稀疏激活、专家分工、负载均衡、Shared Expert、DeepSeekMoE,再一路走到 Expert Parallelism、通信开销与 2026 年前沿模型。目标不是“知道 MoE 是什么”,而是形成一套能读技术报告的架构直觉。

Sparse ActivationRouter / Top-KDeepSeekMoELoad BalancingExpert Parallelism阅读时间约 18–25 min
一句话抓住 MoE
模型拥有很大的总参数容量,但对每个 token 只调用少数几个专家,用条件计算(conditional computation)换取“更大的模型容量 / 更低的单次计算量”。
671B → 37BDeepSeek-V3
235B → 22BQwen3-235B-A22B
400B → 17BLlama 4 Maverick
552B → 8/16BDeepSeek V4.1 Flash

以下是我基于公开论文与模型报告整理的学习框架;具体模型数据和实现细节请以文末原始资料为准。

01 · Mental Model

先建立直觉:MoE 不是“多个 AI 开会”

如果只记一个画面:把 Transformer 里原本固定的一大块 FFN,换成“很多个可选 FFN + 一个 Router”。每个 token 来时,Router 决定它应该送给哪些专家计算。

Token hidden state
→
Router
为专家打分
→
Expert 1
Expert 2 ✓
Expert 3
Expert 4 ✓
→
加权合并
继续下一层
示意:Top-2 routing。真实模型的专家数、激活数与路由方式会不同。
最重要的三个词:大容量(many parameters) + 稀疏激活(sparse activation) + 条件计算(conditional computation)。

Dense 模型的直觉是:“同一层里的参数,对所有 token 都被使用。”MoE 则变成:“不同 token 可以激活不同的参数子集。”因此,一个模型可以拥有庞大的总容量,却不必在每个 token 上把所有专家都跑一遍。

02 · Where MoE lives

MoE 到底替换了 Transformer 的哪一块?

经典 Transformer block 可以先粗略拆成:

hidden state → Attention → FFN / MLP → next hidden state

很多现代 MoE 模型主要把原来的 FFN / MLP 子层改造成 MoE:

Dense FFN

x → FFN(x) → y

每个 token 基本都会经过同一组 FFN 参数。

MoE FFN

x → Router(x) → {Expert_i} → weighted sum → y

每个 token 只经过被选中的少数专家。

所以先把 MoE 看成“FFN 的稀疏化 / 条件化版本”,会比“几个不同人格的 AI 专家”准确得多。

03 · Token Journey

跟着一个 token 走完 MoE

Step 1:拿到 token 的隐藏表示

经过前面的 Attention 等计算后,当前 token 有一个向量表示 h。Router 读取的是这个表示,而不是人为写好的“数学/代码/英语”标签。

Step 2:Router 给专家打分

score = Wrouter · h
# 得到对 N 个专家的 routing scores

Step 3:选择 Top-K 专家

selected = TopK(score, k)
# 例如 128 个专家里只激活 8 个

Step 4:只计算被选中的专家

ei = Experti(h), i ∈ selected

Step 5:按路由权重合并

y = Σ pi · Experti(h)
注意:Top-K 是经典表达方式,但不是所有现代模型都用完全相同的路由算法。把它理解成一类“稀疏选择机制”更稳妥。
04 · Routing

Router 为什么是 MoE 的灵魂?

如果 Router 选得差,专家再多也没意义。它同时决定模型能力与系统效率:

Specialization

谁处理这个 token?

不同专家逐渐承担不同模式,形成 specialization。

Sparsity

一次激活多少专家?

越稀疏越省算力,但也会改变容量与表达灵活性。

Balance

负载是否均衡?

大量 token 挤到少数专家上,会伤害训练和系统吞吐。

Systems

token 被送到哪张 GPU?

专家常分布在不同设备上,routing 会直接触发跨卡通信。

因此 Router 不是一个无关紧要的小分类器,而是模型学习机制与分布式系统之间的接口。

05 · What is an Expert

Expert 到底是什么?

“专家”这个名字很容易让人脑补成数学 Agent、编程 Agent、法律 Agent。实际上在经典 Transformer MoE 里,Expert 通常就是一个拥有独立参数的前馈网络模块(FFN / MLP)。

Experti(h) ≈ W2,i · activation(W1,i · h)

它不会拿着“我是数学专家”的显式标签。所谓专家分工,是训练过程中由数据、梯度与 Router 共同形成的;有时能观察到偏好,但不应把它过度拟人化。

MoE ≠ Multi-Agent。Multi-Agent 是多个智能体通过消息、工具和协议协作;MoE 是单个神经网络内部的条件计算结构。
06 · Load Balance

为什么不能让几个“强专家”一直包办?

假设一个 MoE 有 64 个专家,但 Router 逐渐变成:

E1: 35% tokens
E2: 31% tokens
E3: 19% tokens
E4–E64: 合计 15%

这会出现典型的负载不均衡 / routing collapse:

  • 学习不均衡:热门专家得到大量梯度,冷门专家几乎学不到东西。
  • 容量浪费:存了很多专家参数,却长期不使用。
  • 设备拖尾:部分 GPU 被塞爆,其他 GPU 算完只能等待。
  • 吞吐下降:理论 FLOPs 很漂亮,真实 wall-clock 却可能不好看。
  • 正反馈:热门专家越常被选,可能越容易继续被选。
工程直觉:“少算参数”只是第一步;真正困难的是高效地把 token 送到合适专家,并让整个集群保持均衡。
07 · DeepSeekMoE

DeepSeekMoE:细粒度专家 + Shared Expert

2024 年 DeepSeekMoE 的核心目标之一,是让专家分工更细、更专门。最值得记住两个设计。

① Fine-Grained Expert Segmentation

传统设计可想成:N 个较大的 routed experts,每 token 选 K 个。DeepSeekMoE 进一步把专家拆成更多、更小的模块,同时激活更多个小专家,让组合方式更加灵活。

粗粒度

8 experts → activate 2

单个专家承担的功能跨度更大。

细粒度

更多小 experts → 激活更多小块

同等计算预算下,可形成更灵活的专家组合。

② Shared Experts

如果所有 routed experts 都重复学习公共能力,会浪费参数容量。Shared Expert 负责更通用的知识,让 routed experts 更有空间形成差异化。

Token
→
Shared Expert · 通用能力
Router
Routed E1 ✓
Routed E2
Routed E3 ✓
Routed E4
共享知识与路由专家职责分离,是 DeepSeekMoE 的核心思想之一。
08 · Loss-Free Balancing

从辅助损失到 Loss-Free Balancing

传统:给“负载均衡”单独加一个 loss

L = Llanguage-model + λ · Lbalance

语言建模 loss 负责“预测得准”,balance loss 负责“别把 token 全塞给少数专家”。问题是辅助 loss 会产生自己的梯度,可能干扰主任务优化。

Loss-Free:用动态 bias 调节选择概率

2024 年的 Auxiliary-Loss-Free Load Balancing 工作提出:做 Top-K 路由前,对每个专家的 routing score 加一个动态 expert-wise bias。

adjusted_scorei = router_scorei + biasi

if expert_i 近期太忙 → bias_i 下调
if expert_i 近期太闲 → bias_i 上调

这样通过偏置影响专家被选择的概率,而不是让一个额外 loss 持续对主模型产生干扰梯度。DeepSeek-V3 的技术报告明确采用了 auxiliary-loss-free load balancing。

真正值得记:不是一句“DeepSeek 不要辅助 loss”,而是尽量把系统约束(负载均衡)与主学习目标的梯度解耦。
09 · Systems Reality

MoE 真正昂贵的地方:显存、通信与等待

“671B 总参数、37B 激活”很容易给人错觉:那不就等价于一个 37B Dense?并不是。

1. 不参与计算 ≠ 不需要存储

没激活的专家这一次不做矩阵乘,但其权重仍需驻留在 GPU、CPU 或其他存储层级。激活参数下降 10 倍,不等于权重存储下降 10 倍。

2. Expert Parallelism 带来 All-to-All 通信

不同专家分布在不同 GPU 时,一个 batch 的 token 会按 Router 结果被重新分发:

tokens on GPU A/B/C/D
↓ dispatch by routing
experts on GPU A/B/C/D
↓ expert computation
send outputs back
↓ combine

因此高速互联、通信库、token dispatch、batching 和容量控制都会影响真实效率。

3. 最慢的专家制造等待

如果某张卡收到的 token 显著更多,其他卡即使先算完也可能需要等它。这就是负载均衡直接影响吞吐和延迟的原因。

指标能否按激活参数同比例下降?原因
矩阵计算 FLOPs通常显著下降只计算被选中的专家
权重存储不会同比下降全部专家参数仍需保存
显存需求复杂取决于分片、量化、offload、并行策略
端到端延迟不一定同比下降Router、通信、同步和内存带宽都有成本
模型容量可大幅增加MoE 最核心的扩展优势
10 · Still Relevant in 2026?

MoE 现在还在用吗?——仍是核心扩展路线之一

MoE 不是 2026 才出现的新技术;但截至 2026 年 9 月,大量前沿公开模型仍明确采用 MoE。新的重点已经从“要不要用 MoE”,转向“如何让路由、专家粒度、注意力和系统实现更高效”。

2024-12
DeepSeek-V3
671B total37B active/tokenDeepSeekMoE

采用 DeepSeekMoE,并引入 auxiliary-loss-free load balancing。

2025-04
Qwen3-235B-A22B
235B total22B active128 experts / 8 active

Qwen 同时发布 Dense 与 MoE 型号,展示不同规模与部署场景的取舍。

2025
Llama 4 Maverick
400B total17B active128 routed + shared

Meta 首批采用 MoE 的 Llama 系列之一;每 token 经过 shared expert 和一个 routed expert。

2026-04
DeepSeek-V4
Pro 1.6T / 49B activeFlash 285B / 13B active

继续保留 DeepSeekMoE,同时进一步优化 Attention 与长上下文效率。

2026-09-10
DeepSeek V4.1 Flash
552B MoE8B input active16B output active

新的 Causal Encoder–Decoder 非对称结构,让输入与输出阶段使用不同激活规模。

2026
Qwen3-VL MoE variants
30B-A3B235B-A22BMultimodal

MoE 不只用于纯文本 LLM,也继续进入多模态视觉语言模型。

更大的趋势:从“稠密计算”走向“选择性计算”

Dense Transformer

所有 token 基本经过同一套大参数块

结构简单、部署成熟,但模型越大,单 token 计算通常也一起上涨。

Sparse MoE

FFN 开始选择性激活

总容量可以快速增大,但每 token 只支付少量专家计算成本。

2026 and beyond

Attention、KV Cache、甚至输入/输出路径也在继续结构化压缩

目标越来越明确:让“总能力容量”增长得比“每 token 实际计算成本”更快。

11 · Dense vs MoE

Dense 会被 MoE 淘汰吗?不会

MoE 是重要路线,但不是“所有模型都应该 MoE”。在较小模型、本地部署、极低延迟服务和硬件互联较弱的环境里,Dense 依然非常有吸引力。

维度DenseMoE
结构复杂度较低较高,需要 Router / dispatch / balance
每 token 参数使用基本使用整层只激活部分专家
扩大总容量通常同步增加计算可以更快扩大容量而保持稀疏计算
多 GPU 通信相对直接Expert Parallelism 更复杂
消费级硬件通常更友好总权重很大时更难装下
超大规模训练稳定成熟容量 / 计算比很有吸引力
正确结论:不是“MoE 战胜 Dense”,而是设计者会根据规模、硬件、延迟、成本与能力目标,在 Dense 与 Sparse 之间选择。
12 · Misconceptions

最容易理解错的 8 件事

误区 01

专家 = 几个聊天机器人

错。经典 MoE expert 是网络内部的 FFN/MLP 模块,不是 Agent 投票。

误区 02

一个问题只选一次专家

错。典型 token-level routing 会对不同 token 动态选择不同专家。

误区 03

总参数 = 单 token 计算量

错。MoE 的关键正是 total 与 active parameters 的分离。

误区 04

37B active = 37B Dense

错。Attention、共享模块、通信、内存访问与总权重存储都不同。

误区 05

专家越多一定越强

错。路由、数据、专家粒度、通信与训练稳定性都会限制收益。

误区 06

没激活的参数不占显存

错。它们这次不计算,但权重仍需被存储在某个层级。

误区 07

负载均衡只是训练技巧

错。它同时是系统问题,直接影响 GPU 等待、吞吐和成本。

误区 08

MoE 已经过气

错。2026 年最新公开前沿模型仍在持续使用和改造 MoE。

13 · Cheat Sheet

最后压缩成一张速查表

术语你应该立刻想到什么
MoE很多专家 + 稀疏选择;用条件计算扩大模型容量
Expert通常是独立参数的 FFN / MLP 子网络
Router / Gate根据 hidden state 给专家打分并决定计算路径
Top-K每个 token 只选择 K 个专家参与计算
Active Parameters一次 token 前向传播实际参与的参数规模,不等于总参数
Load Balancing防止 token 过度集中到少数专家
Shared Expert承担通用能力,减少 routed experts 的知识冗余
Fine-Grained Experts把专家进一步拆细,让组合与 specialization 更灵活
Expert Parallelism专家分散在不同设备,引入 token dispatch 与 All-to-All
Loss-Free Balancing动态 routing bias 控制负载,减少额外 balance loss 的梯度干扰
一句话复习:MoE 的目标不是“少用参数显得聪明”,而是让模型的知识/能力容量增长速度快于每个 token 的实际计算成本增长速度。
14 · Active Recall

5 分钟自测:你是不是真的懂了?

先自己回答,再展开答案。能顺畅说清这些问题,就已经不只是“看过 MoE 视频”。

671B 总参数、37B 激活到底意味着什么?

模型总共拥有约 671B 参数容量,但单个 token 的一次前向传播不会把所有专家参数都计算一遍。不能简单等价成“37B Dense”。

Router 在训练和系统层面分别决定什么?

训练层面决定不同 token 流向哪些专家、专家如何形成 specialization;系统层面决定 token 被 dispatch 到哪些设备,影响通信与负载均衡。

为什么没被选中的专家仍然可能很贵?

因为不参与当前 token 计算不意味着权重不存在。大量专家权重仍需存储、分片、加载和调度。

Shared Expert 在解决什么问题?

把广泛共享的通用模式集中给共享专家承担,减少 routed experts 重复学习相同知识。

Loss-Free Balancing 为什么有吸引力?

传统 balance auxiliary loss 会额外产生梯度。Loss-Free 方法根据近期负载动态调整专家 routing bias,尽量将负载控制与主任务梯度解耦。

为什么理论 FLOPs 低,实际速度却不一定同比提高?

真实系统还要支付 token routing、All-to-All 通信、内存带宽、同步等待、负载不均衡和非 MoE 模块计算等成本。

Sources · Primary References

参考资料与继续阅读

优先放论文与官方模型页面。视频适合建立直觉,论文/官方报告负责校准细节。