深入MoE:混合专家架构原理、门控算法与DeepSeek-V3工程实践全解析
文章目录
🍃作者介绍:25届双非本科网络工程专业,阿里云专家博主,深耕 AI 原理 / 应用开发 / 产品设计。前几年深耕Java技术体系,现专注把 AI 能力落地到实际产品与业务场景。
🦅个人主页:@逐梦苍穹
🐼GitHub主页:https://github.com/XZL-CODE
✈ 您的一键三连,是我创作的最大动力🌹

1、前言
如果你是零基础小白,建议先看看这篇:
学这么久AI,MoE你还不知道?一篇文章讲清楚,小白也能看懂
2024年末,DeepSeek-V3以区区560万美元的训练成本,造出了671B参数的顶级大模型,震撼了整个AI产业。Mixtral 8x7B用13B的实际计算量击败了Llama 2 70B,Kimi K2以1.04万亿参数的体量跻身开源榜首。这些令人瞠目结舌的成绩背后,有一个共同的技术核心——混合专家架构(Mixture of Experts,MoE)。
MoE并不是新技术。1991年,Jacobs、Jordan与Hinton等人就在神经网络领域播下了这粒种子;2017年,Shazeer将稀疏门控MoE引入深度学习,首次实现了1370亿参数级别的大规模语言模型。但真正让MoE从实验室走向工业界主流的,是近三年大模型军备竞赛的现实压力——如何在算力有限的条件下,把模型做得又大又好?
MoE给出的答案优雅而深刻:参数量与计算量解耦。通过条件计算(Conditional Computation),让每个token只激活整个网络中很小一部分专家,从而在几乎不增加推理FLOPs的情况下,将模型的"记忆容量"扩展几十倍。
本文面向有深度学习基础的技术人员,系统梳理MoE的完整技术体系:从架构设计、门控算法、负载均衡,到主流模型的工程实践与训练推理挑战。每一个公式都配有直观解释,争取让读者不仅知道"是什么",更能理解"为什么这么设计"。
2、MoE 架构总览
2.1 核心思想:条件计算
传统Dense(密集)模型的问题是:参数量和计算量强耦合。一个70B参数的Dense模型,每推理一个token,就必须走一遍全部70B参数的前向计算。想要能力更强?只能加参数,加了参数计算量也随之暴涨,算力需求线性增长。
MoE打破了这个绑定关系,核心思想来自条件计算:
模型总参数量很大,但每次推理只激活其中一小部分。激活哪一部分?由输入决定。
具体来说,MoE架构由两个核心组件构成:
- N个专家(Expert):每个专家是一个独立的前馈网络(FFN),有自己独立的参数。不同专家通过训练,自然分化出对不同类型输入(不同语言、不同领域、不同任务类型)的专业化处理能力。
- 门控/路由网络(Router/Gate):扮演"调度大脑"的角色。对于每个输入token,路由器从N个专家中动态选出K个(通常K远小于N),只有这K个专家参与该token的计算,其余N-K个专家的参数在这次推理中完全不被激活。
稀疏激活的威力体现在这个不等式:
FLOPs ∝ K 而 参数量 ∝ N , K ≪ N \text{FLOPs} \propto K \quad \text{而} \quad \text{参数量} \propto N, \quad K \ll N FLOPs∝K而参数量∝N,K≪N
以DeepSeek-V3为例:256个路由专家 + 1个共享专家,每次只激活8个(6~7路由 + 1共享),激活比例仅约 8 / 257 ≈ 3.1 % 8/257 \approx 3.1\% 8/257≈3.1%。671B总参数,推理时实际计算量约等于37B密集模型。
2.2 MoE 在 Transformer 中的位置
MoE并非重新发明Transformer,而是精准替换其中计算量最大的组件:前馈网络(FFN)层。
标准Transformer Block的结构:
输入 x → LayerNorm → Multi-Head Self-Attention → 残差连接(x + Attention_output) → LayerNorm → FFN(W₁, 激活函数, W₂) ← 被MoE替换 → 残差连接 → 输出 替换后的MoE Transformer Block:
输入 x → LayerNorm → Multi-Head Self-Attention → 残差连接 → LayerNorm → MoE层(Router + N个Expert FFN) ← 替换了单一FFN → 残差连接 → 输出 注意力机制(Self-Attention)保持不变,全部token仍然共享同一套注意力参数。只有FFN被替换为MoE。为什么选FFN而不是Attention?因为在典型的Transformer中,FFN的参数量约占整个模型的2/3,且FFN对每个token是独立处理的(没有token间的信息交互),天然适合"按token动态路由"的设计。

MoE层的替换并非全层覆盖,不同模型有不同策略:
| 模型 | MoE 覆盖策略 |
|---|---|
| Switch Transformer | 全部FFN层替换为MoE |
| GShard、GLaM | 每隔一层替换(奇数层或偶数层) |
| DeepSeek-V3 | 前3层保留Dense FFN,其余层全部MoE |
| Llama 4 Maverick | MoE层与Dense层交替排列 |
间隔替换的优势在于减少All-to-All通信频次,降低路由开销,同时保留部分Dense层维持稳定的信息流。
2.3 MoE 层的数学表达
MoE层的输出是所有被激活专家输出的加权求和:
y = ∑ i = 1 N G ( x ) i ⋅ E i ( x ) \mathbf{y} = \sum_{i=1}^{N} G(\mathbf{x})_i \cdot E_i(\mathbf{x}) y=i=1∑NG(x)i⋅Ei(x)
其中:
- x ∈ R d \mathbf{x} \in \mathbb{R}^d x∈Rd:输入token的隐层表示( d d d 为hidden dimension)
- N N N:专家总数
- G ( x ) ∈ R N G(\mathbf{x}) \in \mathbb{R}^N G(x)∈RN:门控网络的输出向量,即各专家的路由权重
- E i ( x ) E_i(\mathbf{x}) Ei(x):第 i i i 个专家对输入 x \mathbf{x} x 的输出
- G ( x ) i = 0 G(\mathbf{x})_i = 0 G(x)i=0 当 i ∉ Top-K i \notin \text{Top-K} i∈/Top-K(稀疏性的关键)
实际上,由于大多数 G ( x ) i = 0 G(\mathbf{x})_i = 0 G(x)i=0,计算可以简化为:
y = ∑ i ∈ S G ( x ) i ⋅ E i ( x ) \mathbf{y} = \sum_{i \in \mathcal{S}} G(\mathbf{x})_i \cdot E_i(\mathbf{x}) y=i∈S∑G(x)i⋅Ei(x)
其中 S \mathcal{S} S 是被选中的Top-K专家集合, ∣ S ∣ = K |\mathcal{S}| = K ∣S∣=K。
每个专家的内部结构与标准FFN完全相同:
E i ( x ) = W 2 , i ⋅ Act ( W 1 , i ⋅ x ) E_i(\mathbf{x}) = \mathbf{W}_{2,i} \cdot \text{Act}(\mathbf{W}_{1,i} \cdot \mathbf{x}) Ei(x)=W2,i⋅Act(W1,i⋅x)
常见激活函数:早期MoE用ReLU,Switch Transformer用GeLU,Mixtral、LLaMA系列用SwiGLU。
3、门控网络(Router)详解
路由器是MoE的核心控制机制。它决定每个token去哪里——这个决策直接影响整个模型的表达能力、训练稳定性和计算效率。从2017年到2024年,路由算法历经多次重大迭代。

3.1 基础 Softmax 门控
最早期、最朴素的门控方式:对全部 N N N 个专家做 Softmax 软加权。
Step 1 — 线性映射
路由器将输入 x \mathbf{x} x 映射到 N N N 维 logits 空间:
H ( x ) = x ⋅ W g \mathbf{H}(\mathbf{x}) = \mathbf{x} \cdot \mathbf{W}_g H(x)=x⋅Wg
其中 W g ∈ R d × N \mathbf{W}_g \in \mathbb{R}^{d \times N} Wg∈Rd×N 是可学习的路由权重矩阵。
Step 2 — Softmax 归一化
G soft ( x ) = Softmax ( H ( x ) ) G_{\text{soft}}(\mathbf{x}) = \text{Softmax}(\mathbf{H}(\mathbf{x})) Gsoft(x)=Softmax(H(x))
每个分量:
G soft ( x ) i = e H ( x ) i ∑ j = 1 N e H ( x ) j G_{\text{soft}}(\mathbf{x})_i = \frac{e^{H(\mathbf{x})_i}}{\sum_{j=1}^{N} e^{H(\mathbf{x})_j}} Gsoft(x)i=∑j=1NeH(x)jeH(x)i
缺陷:Softmax 门控是密集激活的——所有 N N N 个专家都有非零权重,必须全部计算,无法实现条件计算。当 N N N 很大时,计算量等价于 N N N 个FFN的总和,完全失去了MoE的效率优势。
3.2 Top-K 稀疏门控
为了实现稀疏激活,引入 KeepTopK 操作:
Step 1 — 计算路由 logits
H ( x ) = x ⋅ W g \mathbf{H}(\mathbf{x}) = \mathbf{x} \cdot \mathbf{W}_g H(x)=x⋅Wg
Step 2 — Top-K 稀疏化
KeepTopK ( v , k ) i = { v i 若 v i ∈ top- k 个最大值 − ∞ 否则 \text{KeepTopK}(\mathbf{v}, k)_i = \begin{cases} v_i & \text{若 } v_i \in \text{top-}k \text{ 个最大值} \\ -\infty & \text{否则} \end{cases} KeepTopK(v,k)i={vi−∞若 vi∈top-k 个最大值否则
将非Top-K的 logits 置为 − ∞ -\infty −∞,经过 Softmax 后对应权重变为 0。
Step 3 — Softmax 归一化(仅在选中的专家上)
G ( x ) = Softmax ( KeepTopK ( H ( x ) , k ) ) G(\mathbf{x}) = \text{Softmax}\big(\text{KeepTopK}(\mathbf{H}(\mathbf{x}), k)\big) G(x)=Softmax(KeepTopK(H(x),k))
因此:
G ( x ) i = { e H ( x ) i ∑ j ∈ S e H ( x ) j 若 i ∈ S 0 若 i ∉ S G(\mathbf{x})_i = \begin{cases} \dfrac{e^{H(\mathbf{x})_i}}{\sum_{j \in \mathcal{S}} e^{H(\mathbf{x})_j}} & \text{若 } i \in \mathcal{S} \\[6pt] 0 & \text{若 } i \notin \mathcal{S} \end{cases} G(x)i=⎩⎨⎧∑j∈SeH(x)jeH(x)i0若 i∈S若 i∈/S
Step 4 — 加权求和
y = ∑ i ∈ S G ( x ) i ⋅ E i ( x ) \mathbf{y} = \sum_{i \in \mathcal{S}} G(\mathbf{x})_i \cdot E_i(\mathbf{x}) y=i∈S∑G(x)i⋅Ei(x)
Top-K 稀疏门控的精妙之处在于:通过 − ∞ -\infty −∞ 的屏蔽手术刀式地把密集计算变成稀疏计算,而从输出形式上看仍然是一个加权求和,整体架构无需改变。
3.3 Noisy Top-K Gating(Shazeer 2017)
仅有Top-K还不够——如果初期训练时某些专家偶然比其他专家得分高,就会持续被优先选择,形成马太效应,导致大多数专家从未被充分训练。Shazeer 2017 论文(“Outrageously Large Neural Networks”)提出了一个精妙的解决方案:在训练时向 logits 添加可学习的高斯噪声。
完整公式推导:
Step 1 — 带噪声的 logits
H ( x ) i = ( x ⋅ W g ) i + ϵ ⋅ Softplus ( ( x ⋅ W noise ) i ) H(\mathbf{x})_i = (\mathbf{x} \cdot \mathbf{W}_g)_i + \epsilon \cdot \text{Softplus}\big((\mathbf{x} \cdot \mathbf{W}_{\text{noise}})_i\big) H(x)i=(x⋅Wg)i+ϵ⋅Softplus((x⋅Wnoise)i)
其中:
- W noise ∈ R d × N \mathbf{W}_{\text{noise}} \in \mathbb{R}^{d \times N} Wnoise∈Rd×N:噪声幅度的可学习权重矩阵
- ϵ ∼ N ( 0 , 1 ) \epsilon \sim \mathcal{N}(0, 1) ϵ∼N(0,1):每次前向传播独立采样的标准正态噪声
- Softplus ( z ) = log ( 1 + e z ) \text{Softplus}(z) = \log(1 + e^z) Softplus(z)=log(1+ez):平滑的非线性函数,确保噪声幅度非负
Step 2 — 带噪声的稀疏门控
G ( x ) = Softmax ( KeepTopK ( H ( x ) , k ) ) G(\mathbf{x}) = \text{Softmax}\big(\text{KeepTopK}(\mathbf{H}(\mathbf{x}), k)\big) G(x)=Softmax(KeepTopK(H(x),k))
设计的物理直觉:
噪声项 ϵ ⋅ Softplus ( ( x ⋅ W noise ) i ) \epsilon \cdot \text{Softplus}((\mathbf{x} \cdot \mathbf{W}_{\text{noise}})_i) ϵ⋅Softplus((x⋅Wnoise)i) 的作用是在训练初期为每个专家的 logit 引入随机扰动。一个平时得分略低的专家,有时会因为噪声加持而"意外"进入Top-K,从而获得训练机会。随着训练进行, W noise \mathbf{W}_{\text{noise}} Wnoise 会学习到合适的噪声水平:
- 对于已经训练充分、高度专业化的专家: W noise \mathbf{W}_{\text{noise}} Wnoise 倾向于输出较小值,减少扰动,保持稳定的专业化分工。
- 对于欠训练的"冷专家":噪声较大,增加被选中的概率,促进均衡探索。
推理时关闭噪声:推理阶段 ϵ = 0 \epsilon = 0 ϵ=0,路由完全确定性,确保输出可重现。
关键意义:Noisy Top-K Gating 同时解决了两个问题——稀疏激活带来的计算效率,以及训练时的探索与均衡。这是MoE从理论走向实用的里程碑。
3.4 Switch Transformer:Top-1 极简路由
2021年,谷歌的Switch Transformer(Fedus et al.)将路由策略推向了极致简化:K=1,每个token只路由到1个专家。
G ( x ) = Softmax ( x ⋅ W r ) G(\mathbf{x}) = \text{Softmax}(\mathbf{x} \cdot \mathbf{W}_r) G(x)=Softmax(x⋅Wr)
expert_index = arg max i G ( x ) i \text{expert\_index} = \arg\max_{i} G(\mathbf{x})_i expert_index=argimaxG(x)i
y = G ( x ) expert_index ⋅ E expert_index ( x ) \mathbf{y} = G(\mathbf{x})_{\text{expert\_index}} \cdot E_{\text{expert\_index}}(\mathbf{x}) y=G(x)expert_index⋅Eexpert_index(x)
乍看之下,每个token只走1个专家似乎会损失大量表达能力,但Switch Transformer的实验令人惊讶:Top-1路由在保持近似模型质量的同时,将训练速度提升了约7倍(相比T5基线)。
为什么Top-1有效?因为每个token的语义通常由单一的"主题"主导——表示一段英文代码的token,不需要同时激活"中文语法专家"和"数学推理专家"。Top-1的强约束反而促进了专家的高度专业化。
Top-1 vs Top-2 的工程对比:
| 对比维度 | Top-2(GShard) | Top-1(Switch) |
|---|---|---|
| 每token计算量 | 2个专家FFN | 1个专家FFN |
| 通信量 | 2× | 1× |
| 路由复杂度 | 较高 | 最简 |
| 表达灵活性 | 更强 | 较弱 |
| 训练稳定性 | 较好 | 需更强负载均衡 |
3.5 DeepSeek-V3:Sigmoid 路由 + 动态偏置
DeepSeek-V3 在路由机制上带来了两个创新:将 Softmax 换成 Sigmoid,以及引入动态偏置项(详见第5节负载均衡部分)。
Sigmoid 亲和度计算:
s i = sigmoid ( x ⊤ e i ) s_i = \text{sigmoid}\left(\mathbf{x}^{\top} \mathbf{e}_i\right) si=sigmoid(x⊤ei)
其中 e i \mathbf{e}_i ei 是第 i i i 个专家的中心向量(可学习参数), s i s_i si 是输入与专家 i i i 的亲和度得分。
Top-K 路由决策(使用偏置):
S = Top-K ( { s i + b i } i = 1 N ) \mathcal{S} = \text{Top-K}\left(\{s_i + b_i\}_{i=1}^N\right) S=Top-K({si+bi}i=1N)
其中 b i b_i bi 是负载均衡偏置项,不参与反向传播(详见5.2节)。
归一化门控权重(不含偏置):
G ( x ) i = s i ∑ j ∈ S s j , i ∈ S G(\mathbf{x})_i = \frac{s_i}{\sum_{j \in \mathcal{S}} s_j}, \quad i \in \mathcal{S} G(x)i=∑j∈Ssjsi,i∈S
关键设计:偏置只影响路由决策,不影响门控权重。这使得负载均衡完全与主任务损失解耦,是DeepSeek-V3能够在保持极低训练成本的同时达到顶级性能的核心技术之一。
Sigmoid 替代 Softmax 的优势:Softmax 的归一化会引入各专家之间的竞争关系(某专家得分提高会压低其他所有专家),而 Sigmoid 独立计算每个专家的亲和度,更加灵活,且数值更稳定。
3.6 路由策略演进对比
| 路由策略 | 来源 | 核心公式 | K值 | 关键特点 |
|---|---|---|---|---|
| Softmax Dense | 早期 | G = Softmax ( x W g ) G = \text{Softmax}(\mathbf{x}\mathbf{W}_g) G=Softmax(xWg) | N(全部) | 密集,无条件计算 |
| Noisy Top-K | Shazeer 2017 | H i + = ϵ ⋅ Softplus ( ⋅ ) H_i += \epsilon \cdot \text{Softplus}(\cdot) Hi+=ϵ⋅Softplus(⋅) | 可变 | 训练加噪,推理确定 |
| Top-1 Switch | Switch 2021 | argmax ( Softmax ( x W r ) ) \text{argmax}(\text{Softmax}(\mathbf{x}\mathbf{W}_r)) argmax(Softmax(xWr)) | 1 | 极简,高效 |
| Top-2 | GShard/Mixtral | Softmax ( KeepTopK ( ⋅ , 2 ) ) \text{Softmax}(\text{KeepTopK}(\cdot, 2)) Softmax(KeepTopK(⋅,2)) | 2 | 平衡效率与表达力 |
| Sigmoid+Bias | DeepSeek-V3 | s i = σ ( x ⊤ e i ) s_i = \sigma(\mathbf{x}^\top\mathbf{e}_i) si=σ(x⊤ei),路由用 s i + b i s_i+b_i si+bi | 8 | 解耦均衡与性能 |
4、负载均衡机制
4.1 为什么会出现路由坍塌(Routing Collapse)
理解负载均衡问题,需要先理解MoE训练中的一个危险陷阱:路由坍塌,也叫专家坍塌(Expert Collapse)。
想象一下无约束的MoE训练过程:
某专家(例如E₁)因为随机初始化,偶然比其他专家输出更好 → E₁被路由器更多地选中,获得更多token → E₁获得更多梯度更新,参数更优 → E₁变得更强,路由器对E₁的偏好增强 → 其他专家因为极少被选中,梯度更新不足 → 其他专家越来越差,路由器更少选择它们 → 极端情况:模型退化为"单专家模型",其他专家的参数完全浪费 
路由坍塌的直接后果:
- 少数"热专家"严重过载,导致token被丢弃(超出Expert Capacity)
- 多数"冷专家"长期空闲,参数完全浪费
- MoE相比Dense模型的优势消失——参数多了,但有效容量没有提升
- 分布式训练中,负载不均导致部分GPU计算饱和、其他GPU空转,系统效率崩溃
4.2 Shazeer 2017:Importance Loss + Load Loss
Shazeer 2017 论文提出了双重辅助损失来约束均衡,分别从两个角度度量不均衡程度。
4.2.1 Importance Loss(重要性损失)
定义专家重要性(batch中路由权重之和):
Importance ( X ) i = ∑ x ∈ batch G ( x ) i \text{Importance}(X)_i = \sum_{\mathbf{x} \in \text{batch}} G(\mathbf{x})_i Importance(X)i=x∈batch∑G(x)i
直觉理解:在一个训练batch中,专家 i i i 分配到的总权重越大,它对这个batch越"重要"。理想情况下,所有专家的重要性应该接近相等。
重要性损失(用变异系数衡量不均衡程度):
L importance ( X ) = w imp ⋅ CV ( Importance ( X ) ) 2 \mathcal{L}_{\text{importance}}(X) = w_{\text{imp}} \cdot \text{CV}\big(\text{Importance}(X)\big)^2 Limportance(X)=wimp⋅CV(Importance(X))2
其中变异系数 CV \text{CV} CV 定义为:
CV ( v ) = Std ( v ) Mean ( v ) \text{CV}(\mathbf{v}) = \frac{\text{Std}(\mathbf{v})}{\text{Mean}(\mathbf{v})} CV(v)=Mean(v)Std(v)
为什么用 CV 2 \text{CV}^2 CV2 而不是方差或标准差?
- CV 是无量纲的(标准差除以均值),不受权重绝对大小影响,只反映相对不均衡程度
- 平方项保证在均衡点( CV = 0 \text{CV}=0 CV=0)处梯度连续
- 平方对大偏差施加超线性惩罚:10% 的不均衡带来的损失远大于 1% 不均衡的100倍
4.2.2 Load Loss(负载损失)
Load Loss 关注的是实际路由决策的不均衡(而非软权重)——即每个专家在batch中实际接收了多少token。由于Top-K选择是不可微的,Shazeer 通过对路由决策进行概率化估计来计算负载分布(详见原论文附录A)。
总辅助损失:
L aux = L importance + L load \mathcal{L}_{\text{aux}} = \mathcal{L}_{\text{importance}} + \mathcal{L}_{\text{load}} Laux=Limportance+Lload
4.3 Switch Transformer:精简负载均衡损失
Switch Transformer 将双重辅助损失简化为单一的辅助损失,设计更加简洁且易于调参。
Token 分配比例(实际路由决策,不可微):
f i = 1 T ∑ x ∈ B 1 [ arg max G ( x ) = i ] f_i = \frac{1}{T} \sum_{\mathbf{x} \in \mathcal{B}} \mathbf{1}\left[\arg\max G(\mathbf{x}) = i\right] fi=T1x∈B∑1[argmaxG(x)=i]
其中 T T T 为batch中总token数, 1 [ ⋅ ] \mathbf{1}[\cdot] 1[⋅] 为示性函数。注意 f i f_i fi 对argmax不可微,因此作为常数(停止梯度)。
路由概率比例(可微的软分配):
P i = 1 T ∑ x ∈ B G ( x ) i P_i = \frac{1}{T} \sum_{\mathbf{x} \in \mathcal{B}} G(\mathbf{x})_i Pi=T1x∈B∑G(x)i
即路由器分配给专家 i i i 的平均概率。
Switch 辅助损失:
L balance = α ⋅ N ⋅ ∑ i = 1 N f i ⋅ P i \mathcal{L}_{\text{balance}} = \alpha \cdot N \cdot \sum_{i=1}^{N} f_i \cdot P_i Lbalance=α⋅N⋅i=1∑Nfi⋅Pi
其中 α \alpha α 为权重超参数,Switch Transformer 推荐 α = 10 − 2 \alpha = 10^{-2} α=10−2。
损失的直觉理解:
当所有专家均匀分配时, f i ≈ P i ≈ 1 / N f_i \approx P_i \approx 1/N fi≈Pi≈1/N,损失约为 α N ⋅ N ⋅ ( 1 / N ) 2 = α \alpha N \cdot N \cdot (1/N)^2 = \alpha αN⋅N⋅(1/N)2=α(最小值)。当某专家 i i i 过载( f i f_i fi 大)且路由器还偏向它( P i P_i Pi 大)时,乘积 f i ⋅ P i f_i \cdot P_i fi⋅Pi 大幅增大,损失增大,迫使路由器降低对该专家的路由概率 P i P_i Pi(通过梯度更新)。
梯度流向: f i f_i fi 作为常数权重,梯度通过 P i P_i Pi(即通过 G ( x ) i G(\mathbf{x})_i G(x)i)反向传播至路由器的参数 W r \mathbf{W}_r Wr。
总训练损失:
L total = L task + α ⋅ L balance \mathcal{L}_{\text{total}} = \mathcal{L}_{\text{task}} + \alpha \cdot \mathcal{L}_{\text{balance}} Ltotal=Ltask+α⋅Lbalance
α \alpha α 的选择:过大(如 10 − 1 10^{-1} 10−1)会干扰主任务学习,过小(如 10 − 3 10^{-3} 10−3)均衡效果不足。Switch Transformer 通过网格搜索发现 α = 10 − 2 \alpha = 10^{-2} α=10−2 是最优折中。
4.4 GShard 辅助损失
GShard(Lepikhin et al., 2020)提出了类似的辅助损失,归一化方式略有不同:
L GShard = 1 E ∑ e = 1 E c e S ⋅ m e \mathcal{L}_{\text{GShard}} = \frac{1}{E} \sum_{e=1}^{E} \frac{c_e}{S} \cdot m_e LGShard=E1e=1∑ESce⋅me
其中:
- E E E:专家总数
- c e c_e ce:路由到专家 e e e 的token数(不可微,停止梯度)
- S S S:总token数
- m e m_e me:路由器对专家 e e e 的平均gate概率(可微)
本质上与Switch辅助损失相同: c e / S c_e/S ce/S 对应 f i f_i fi, m e m_e me 对应 P i P_i Pi。
4.5 ST-MoE Router Z-Loss
ST-MoE(Zoph et al., 2022)注意到一个训练稳定性问题:当路由器的 logits 绝对值过大时,softmax 中的指数运算会放大浮点数舍入误差,导致训练不稳定。Z-Loss 专门解决这一问题:
L z ( x ) = 1 B ∑ i = 1 B ( log ∑ j = 1 N e x j ( i ) ) 2 \mathcal{L}_z(\mathbf{x}) = \frac{1}{B} \sum_{i=1}^{B} \left(\log \sum_{j=1}^{N} e^{x_j^{(i)}}\right)^2 Lz(x)=B1i=1∑B(logj=1∑Nexj(i))2
其中 B B B 为token数, x j ( i ) x_j^{(i)} xj(i) 为第 i i i 个token对第 j j j 个专家的路由 logit(softmax 前)。
物理含义: log ∑ j e x j \log\sum_j e^{x_j} log∑jexj(即 log-sum-exp)是 softmax 的"归一化常数",其值越大表示 logits 的整体幅度越大。Z-Loss 惩罚其平方,约束 logits 不能过大,从而减少数值误差,稳定训练。Z-Loss 通常与负载均衡损失配合使用:
L total = L task + α balance ⋅ L balance + α z ⋅ L z \mathcal{L}_{\text{total}} = \mathcal{L}_{\text{task}} + \alpha_{\text{balance}} \cdot \mathcal{L}_{\text{balance}} + \alpha_z \cdot \mathcal{L}_z Ltotal=Ltask+αbalance⋅Lbalance+αz⋅Lz
4.6 DeepSeek-V3:无辅助损失负载均衡(Auxiliary-Loss-Free)
上述所有辅助损失方法都存在一个根本矛盾:辅助损失的梯度会干扰主任务损失的梯度。路由器参数同时接受来自"如何路由才能让模型损失最小"和"如何路由才能保证均衡"的两个方向的梯度信号,二者可能彼此冲突,最终模型性能受损。
DeepSeek-V3 提出了一个优雅的解决方案,彻底移除辅助损失,通过动态偏置项来实现负载均衡,完全不影响主任务训练。
核心机制:
为每个专家维护一个偏置项 b i b_i bi,加在路由得分上用于Top-K决策:
routing score i = s i + b i \text{routing score}_i = s_i + b_i routing scorei=si+bi
S = Top-K ( { s i + b i } i = 1 N ) \mathcal{S} = \text{Top-K}\left(\{s_i + b_i\}_{i=1}^N\right) S=Top-K({si+bi}i=1N)
但输出权重仍然使用原始亲和度分数 s i s_i si,而非含偏置的路由得分:
G ( x ) i = s i ∑ j ∈ S s j , i ∈ S G(\mathbf{x})_i = \frac{s_i}{\sum_{j \in \mathcal{S}} s_j}, \quad i \in \mathcal{S} G(x)i=∑j∈Ssjsi,i∈S
偏置更新规则(在每个全局训练step后):
e i = c ˉ i − c i (负载偏差:期望token数 - 实际接收token数) e_i = \bar{c}_i - c_i \quad \text{(负载偏差:期望token数 - 实际接收token数)} ei=cˉi−ci(负载偏差:期望token数 - 实际接收token数)
b i ← b i + γ ⋅ sign ( e i ) b_i \leftarrow b_i + \gamma \cdot \text{sign}(e_i) bi←bi+γ⋅sign(ei)
其中:
- c i c_i ci:当前训练step中,专家 i i i 接收的token数
- c ˉ i = T / N \bar{c}_i = T / N cˉi=T/N:期望平均token数(总token数 / 专家数)
- γ = 0.001 \gamma = 0.001 γ=0.001:更新步长超参数(DeepSeek-V3取值)
工作逻辑:
- 若专家 i i i 过载( c i > c ˉ i c_i > \bar{c}_i ci>cˉi),则 e i < 0 e_i < 0 ei<0, b i b_i bi 减小 → 下一step中该专家的路由得分降低 → 被选中概率降低 → 接收token数减少
- 若专家 i i i 欠载( c i < c ˉ i c_i < \bar{c}_i ci<cˉi),则 e i > 0 e_i > 0 ei>0, b i b_i bi 增大 → 被选中概率提高
关键设计亮点:偏置项 b i b_i bi不参与反向传播(通过 sign 函数更新,与梯度计算完全分离)。主任务损失的梯度只流经 s i s_i si(即路由器参数 W g \mathbf{W}_g Wg),不受均衡偏置的干扰。
DeepSeek-V3 还保留了一个极小权重( α = 0.0001 \alpha = 0.0001 α=0.0001)的序列级负载均衡损失,防止单个序列内部的极端不均衡。
4.7 Expert Capacity(专家容量)
在分布式MoE训练中,为了保证通信量的确定性(All-to-All 消息长度需固定),每个专家设有最大可处理token数限制:
Expert Capacity = ⌊ T N ⌋ × C \text{Expert Capacity} = \left\lfloor \frac{T}{N} \right\rfloor \times C Expert Capacity=⌊NT⌋×C
其中:
- T T T:batch中总token数
- N N N:专家数
- C C C:容量系数(Capacity Factor),超参数
直觉理解:若完全均匀分配,每个专家应处理 T / N T/N T/N 个token。乘以系数 C C C 可以提供一定缓冲。
不同容量系数的取舍:
| 容量系数 C C C | 含义 | 优点 | 缺点 |
|---|---|---|---|
| 1.0 | 严格按均匀分配 | 计算高效,通信量小 | 任何不均衡都导致token丢弃 |
| 1.25 | 25%缓冲 | 几乎不丢token,计算较高效 | Mixtral等常用 |
| 2.0 | 100%缓冲 | 极少丢token | 显存浪费,通信开销大 |
溢出token的处理策略:
- Switch Transformer:溢出token直接丢弃,通过残差连接跳过MoE层(不经过任何专家)
- GShard:溢出token路由到得分第二高的备选专家
- MegaBlocks:通过块稀疏矩阵操作完全避免token丢弃
Switch Transformer 的研究发现:Capacity Factor 从2.0降至1.0,模型困惑度变化极微小(-1.554 vs -1.561),说明适度token丢弃对质量影响可忽略不计。
4.8 各均衡策略横向对比
| 策略 | 来源 | 公式核心 | 是否影响主损失梯度 | 数值稳定性 |
|---|---|---|---|---|
| Importance Loss | Shazeer 2017 | w ⋅ CV ( Importance ) 2 w \cdot \text{CV}(\text{Importance})^2 w⋅CV(Importance)2 | 有干扰 | 一般 |
| Switch Balance Loss | Switch 2021 | α N ∑ f i P i \alpha N \sum f_i P_i αN∑fiPi | 有干扰 | 较好 |
| GShard Loss | GShard 2020 | 1 E ∑ ( c e / S ) ⋅ m e \frac{1}{E}\sum (c_e/S) \cdot m_e E1∑(ce/S)⋅me | 有干扰 | 较好 |
| Z-Loss | ST-MoE 2022 | ( 1 / B ) ∑ ( log ∑ e x j ) 2 (1/B)\sum(\log\sum e^{x_j})^2 (1/B)∑(log∑exj)2 | 有干扰 | 最好 |
| Bias-Based(无辅助损失) | DeepSeek-V3 | b i ± γ ⋅ sign ( e i ) b_i \pm \gamma \cdot \text{sign}(e_i) bi±γ⋅sign(ei) | 无干扰 | 最好 |
5、稀疏激活原理:参数量与计算量解耦
5.1 核心数学关系
稀疏激活是 MoE 最重要的价值主张。理解它的核心,需要看清参数量和计算量之间的关系在 Dense 和 MoE 两种模型中是如何变化的:
Dense 模型:
FLOPs ∝ 参数量 ∝ d model × d ffn × L \text{FLOPs} \propto \text{参数量} \propto d_{\text{model}} \times d_{\text{ffn}} \times L FLOPs∝参数量∝dmodel×dffn×L
参数量与计算量强耦合,想要更多参数(更强能力),必然需要更多计算。
MoE 模型:
设每个专家的FFN维度为 d expert d_{\text{expert}} dexpert,专家数为 N N N,激活专家数为 K K K:
总参数量 ∝ N × d expert × d model \text{总参数量} \propto N \times d_{\text{expert}} \times d_{\text{model}} 总参数量∝N×dexpert×dmodel
每token FLOPs ∝ K × d expert × d model \text{每token FLOPs} \propto K \times d_{\text{expert}} \times d_{\text{model}} 每token FLOPs∝K×dexpert×dmodel
当 K ≪ N K \ll N K≪N 时,参数量是Dense同等FFN模型的 N N N 倍,但计算量只有 K / N K/N K/N 倍。参数量与计算量彻底解耦!
5.2 激活比例与参数效率
激活率(Activation Rate):
activation_rate = K N \text{activation\_rate} = \frac{K}{N} activation_rate=NK
参数效率(相比等计算量Dense模型的参数倍数):
参数效率 = 1 activation_rate = N K \text{参数效率} = \frac{1}{\text{activation\_rate}} = \frac{N}{K} 参数效率=activation_rate1=KN
几个典型模型的稀疏激活统计:
| 模型 | N | K | 激活率 | 等价Dense参数倍数 |
|---|---|---|---|---|
| Switch Transformer | 2048 | 1 | 0.05% | 2048× |
| Mixtral 8x7B | 8 | 2 | 25% | 4× |
| DeepSeek-V2 | 160 | 6 | 3.75% | ~27× |
| DeepSeek-V3 | 256 | 8 | 3.1% | ~32× |
| Kimi K2 | 384 | 8 | 2.1% | ~48× |
以DeepSeek-V3为例:671B的总参数量,推理时等价约37B的Dense模型计算量,参数效率约18倍(考虑到Attention、Embedding等非MoE参数)。
5.3 专家专业化的涌现
稀疏激活不只是计算效率的工程技巧,它带来了一个重要的涌现现象:专家专业化(Expert Specialization)。
在充分训练后,不同专家会自然地在以下维度上分化:
- 语言维度:多语言模型中,不同专家倾向于处理不同语言的token
- 领域维度:数学/代码/人文等不同知识领域的token倾向于被不同专家处理
- 层次维度:句法层面的专家 vs 语义层面的专家
- 任务维度:推理任务 vs 知识提取任务激活不同专家组合
专家专业化的涌现是 MoE 相比 Dense 模型的质量优势之一:通过竞争性路由机制,专家被"迫"聚焦于自己最擅长的数据子集,避免了知识的"平均化"。
5.4 Dense vs MoE 层结构对比

从图中可以清楚地看到两者的本质区别:
- Dense FFN:每个token走同一组参数 ( W 1 , Act , W 2 ) (\mathbf{W}_1, \text{Act}, \mathbf{W}_2) (W1,Act,W2),所有参数必须激活
- MoE 层:Router 先决定路由,被选中的K个专家并行处理,其余专家参数完全不参与计算
输出维度相同(都是 R d \mathbb{R}^d Rd),但 MoE 的"参数容量"是Dense的 N / K N/K N/K 倍。
6、主流 MoE 模型架构对比
6.1 架构演进全景

从2021年的Switch Transformer到2025年的Kimi K2,MoE模型在四个维度上持续进化:
- 参数规模:从1.6T(Switch)到1.04T(Kimi K2),但激活参数始终控制在合理范围
- 激活效率:激活比例从25%(Mixtral 8x7B)持续下降到3.1%(DeepSeek-V3)
- 专家数量:从8个(早期)到256个(DeepSeek-V3)到384个(Kimi K2),专家越来越细粒度
- 路由策略:从辅助损失到无辅助损失,从Softmax到Sigmoid,持续向性能最优方向演进
6.2 主流模型参数对比表
| 模型 | 机构 | 发布时间 | 总参数 | 激活参数 | 专家数 | Top-K | 共享专家 | 路由策略 |
|---|---|---|---|---|---|---|---|---|
| Switch Transformer | 2021.01 | 1.6T | ~极少 | 2048 | 1 | 无 | Top-1 + Aux Loss | |
| GLaM | 2021.12 | 1.2T | ~97B | 64 | 2 | 无 | Top-2 | |
| Mixtral 8x7B | Mistral | 2023.12 | 46.7B | 12.9B | 8 | 2 | 无 | Top-2 Softmax |
| Mixtral 8x22B | Mistral | 2024.04 | 141B | 39B | 8 | 2 | 无 | Top-2 Softmax |
| DeepSeek-V2 | DeepSeek | 2024.05 | 236B | 21B | 160+2 | 6+2 | 2个 | Top-6 + 2共享 |
| DeepSeek-V3 | DeepSeek | 2024.12 | 671B | 37B | 256+1 | 8 | 1个 | Sigmoid+Bias |
| Qwen3-235B | 阿里 | 2025.04 | 235B | 22B | 128 | 8 | 无 | 全局批次均衡 |
| Kimi K2 | Moonshot | 2025 | 1.04T | 32B | 384 | 8 | 无 | MLA+MuonClip |
| Llama 4 Maverick | Meta | 2025 | ~400B | 17B | 128 | - | 无 | 交替MoE+Dense |
6.3 DeepSeek-V3 的三大核心创新
DeepSeek-V3 是目前工程创新最密集的MoE模型之一,值得深入分析其三大核心创新。
6.3.1 细粒度专家分割(Fine-grained Expert Segmentation)
传统做法(GShard、Mixtral等):每层8个专家,每个专家参数量大,Top-2路由。
DeepSeek的做法:将同等容量的FFN分割为更多、更小的专家。以DeepSeek-V3为例:
| 对比 | 传统(8专家,Top-2) | DeepSeek(256专家,Top-8) |
|---|---|---|
| 专家数 | 8 | 256 |
| 每专家FFN维度 | 大(通常4× d d d) | 小(约1/32倍) |
| 激活专家数 | 2 | 8 |
| 激活参数量 | 相近(2/8 = 1/4倍总参) | 相近(8/256 = 1/32倍总参) |
| 专家专业化程度 | 较粗粒度 | 更细粒度 |
| 路由组合灵活性 | ( 8 2 ) = 28 \binom{8}{2}=28 (28)=28 种 | ( 256 8 ) ≈ 10 15 \binom{256}{8} \approx 10^{15} (8256)≈1015 种 |
细粒度的核心价值:同等计算量下,专家专业化程度更高,知识冗余更少,路由组合空间更大。每个专家覆盖更窄的知识领域,不同专家间的知识重叠更少,参数利用率更高。
6.3.2 共享专家隔离(Shared Expert Isolation)
DeepSeek-V2/V3引入了"共享专家"(Shared Expert)的概念:少数几个专家(V2有2个,V3有1个)对所有token始终激活,不参与Top-K路由竞争。
y = y shared + ∑ i ∈ Top-K G ( x ) i ⋅ E i routed ( x ) \mathbf{y} = \mathbf{y}_{\text{shared}} + \sum_{i \in \text{Top-K}} G(\mathbf{x})_i \cdot E_i^{\text{routed}}(\mathbf{x}) y=yshared+i∈Top-K∑G(x)i⋅Eirouted(x)
其中 y shared = ∑ j ∈ shared E j ( x ) \mathbf{y}_{\text{shared}} = \sum_{j \in \text{shared}} E_j(\mathbf{x}) yshared=∑j∈sharedEj(x)(对所有token激活的共享专家输出之和)。
为什么需要共享专家?
观察发现:在没有共享专家的MoE中,路由专家倾向于"浪费"部分容量学习通用知识(如基本句法、常识概念),因为每个token都需要这些知识,任何一个路由专家都有动力习得它。这导致多个路由专家学到了冗余的通用知识,降低了参数效率。
共享专家专门承载通用知识,让路由专家得以专注于领域特定的专业化知识,从而减少知识冗余,提升参数效率。
6.3.3 无辅助损失负载均衡(已在第5节详述)
此创新已在4.6节完整介绍。其意义在于:在不牺牲任何主任务性能的前提下实现完美负载均衡,消除了辅助损失与主任务损失的梯度冲突,是MoE训练方法论上的重大突破。
6.4 Mixtral 系列:开源 MoE 的标杆
Mixtral 8x7B(2023年12月)是让MoE架构在开源社区广为人知的里程碑模型。
架构参数:
- 32层Transformer,全部FFN替换为MoE
- 每层8个专家(每个专家~1B参数),Top-2路由
- 总参数46.7B,激活参数12.9B
- 上下文长度32K
核心性能:以等价于13B Dense模型的计算量,在大多数benchmark上超越Llama 2 70B(70B Dense模型),推理速度快约6倍。
工程细节:Mixtral的路由器在softmax之后取Top-2,而非先取Top-2再softmax——这使得路由权重更能反映专家间的相对得分差异,而非绝对得分。
6.5 Qwen3 MoE:取消共享专家的新实践
Qwen3-235B-A22B(2025年4月)在架构上做了一个有趣的选择:取消了Qwen2中的共享专家设计,改用全局批次负载均衡来保证均匀分发。
| 模型 | 共享专家 | 路由专家 | 负载均衡 |
|---|---|---|---|
| Qwen2-57B | 8个共享 | 64个路由 | 辅助损失 |
| Qwen3-235B | 无 | 128个路由 | 全局批次均衡 |
Qwen3的实验结论:通过更精细的全局负载均衡策略,可以在不依赖共享专家的情况下,让路由专家自然学习到通用知识的处理能力。这说明共享专家并非MoE的必要组件,而是解决知识冗余问题的多种路径之一。
7、MoE 训练与推理挑战
7.1 专家并行(Expert Parallelism)
当专家数量超过单个GPU的内存容量时,需要将不同专家分布到不同设备上——这就是专家并行(Expert Parallelism,EP)。
数据流程(以4 GPU、每GPU持有部分专家为例):
阶段1 - 本地路由计算 [GPU 0,1,2,3:各自持有当前batch的部分token] ↓ Router 计算(本地执行) [决定每个token应去哪个GPU上的哪个专家] 阶段2 - All-to-All Dispatch(token分发) [跨GPU发送:GPU i 把需要去GPU j 的token发给GPU j] ↓ All-to-All 通信 阶段3 - 专家计算 [每个GPU:对本地专家执行FFN计算,处理收到的所有token] ↓ 本地Expert FFN 计算 阶段4 - All-to-All Combine(结果回收) [跨GPU发送:GPU j 把计算结果返回给原始GPU] ↓ All-to-All 通信 阶段5 - 加权求和 [GPU 0,1,2,3:各自汇总从不同专家收回的输出,进行加权求和] 每个MoE层需要2次All-to-All通信(Dispatch + Combine),反向传播再需要2次,共4次。
与其他并行策略的对比:
| 并行方式 | 分割对象 | 通信模式 | 通信量 |
|---|---|---|---|
| 数据并行(DP) | 数据batch | All-Reduce(梯度) | O ( P ) O(P) O(P), P P P=参数量 |
| 张量并行(TP) | 单个矩阵 | All-Reduce(激活) | O ( B ⋅ S ⋅ d ) O(B \cdot S \cdot d) O(B⋅S⋅d) |
| 流水线并行(PP) | 模型层 | Point-to-Point | O ( B ⋅ S ⋅ d ) O(B \cdot S \cdot d) O(B⋅S⋅d) |
| 专家并行(EP) | 专家网络 | All-to-All(token) | O ( B ⋅ S ⋅ K ⋅ d ) O(B \cdot S \cdot K \cdot d) O(B⋅S⋅K⋅d) |
7.2 通信开销分析
All-to-All 通信是 Expert Parallelism 的主要瓶颈。精确计算每层的通信量:
V layer = 2 × B × S × K × d V_{\text{layer}} = 2 \times B \times S \times K \times d Vlayer=2×B×S×K×d
其中:
- B B B:batch size
- S S S:序列长度
- K K K:Top-K 的 K K K 值
- d d d:hidden dimension
- 2 2 2:Dispatch(前向)+ Combine(前向),反向传播再各一次
以典型配置举例: B = 32 , S = 2048 , d = 4096 , K = 2 B=32, S=2048, d=4096, K=2 B=32,S=2048,d=4096,K=2,且有16个MoE层:
V total = 2 × 32 × 2048 × 2 × 4096 × 16 ≈ 32 GB V_{\text{total}} = 2 \times 32 \times 2048 \times 2 \times 4096 \times 16 \approx 32 \text{ GB} Vtotal=2×32×2048×2×4096×16≈32 GB
这意味着每个训练step,仅MoE层的通信就需要传输约32GB数据。在高速互联(NVLink/InfiniBand,~200GB/s)下,通信时间约0.16秒,而在较慢的互联下可能成为严重瓶颈。
通信效率随设备数的变化(假设200GB/s互联):
| 专家并行度(EP) | 通信效率 |
|---|---|
| 8 | ~96% |
| 16 | ~90% |
| 32 | ~80% |
| 64 | <70% |
设备数越多,All-to-All 的延迟越高(每个设备需要与更多设备通信),效率越低。
7.3 推理优化策略
MoE模型的推理优化比Dense模型复杂得多,主要挑战是:
挑战1 — 显存需求高
MoE推理需要将全部专家(包括未激活的)加载到显存,因为路由决策是动态的,无法提前确定哪些专家会被用到。DeepSeek-V3的671B参数,即使用FP8量化,也需要约320GB显存,相当于4张H100 GPU。
挑战2 — 批处理局部性差
在Dense模型中,一个batch中的所有token都走相同的FFN,批处理效率高。在MoE中,不同token路由到不同专家,批处理局部性(Locality)下降,GPU利用率可能不足。
主流优化方向:
a) 计算-通信重叠(Overlap):
在All-to-All通信进行时,同步计算下一层的Attention或其他非通信操作,隐藏通信延迟。DeepSeek-V3在训练中实现了完全的计算-通信重叠,使All-to-All的实际时间开销接近于零。
b) 拓扑感知路由(Topology-Aware Gating):
优先将token路由到物理上更近的设备(如同一节点内的GPU),减少昂贵的跨节点通信。DeepSeek-V3采用节点限制路由:每个token最多路由至4个节点,大幅减少跨节点流量。
c) 专家卸载(Expert Offloading):
将暂时不用的专家参数卸载到CPU内存或磁盘,按需加载到GPU,以较高的I/O延迟换取更低的GPU显存需求。适合显存有限的推理场景。
d) 推测性专家加载(Speculative Expert Loading):
根据历史路由统计,预测下一步最可能被激活的专家,提前异步加载,减少等待时间。
e) 量化压缩:
对未激活专家使用更激进的量化(如INT4),激活专家使用更高精度(FP16/BF16)。DeepSeek-V3在训练中首创大规模FP8混合精度,推理时可进一步量化。
7.4 训练稳定性挑战
MoE的训练稳定性是工程实践中另一大挑战:
梯度尖峰(Loss Spike):由于路由的离散性(Top-K是不可微的阶跃操作),在某些训练步骤中可能出现梯度异常,导致损失出现大幅跳跃。
专家权重的初始化:不同专家的初始化需要保持差异性,完全相同的初始化会导致所有专家走向相同的收敛点,浪费参数多样性。
学习率调优:路由器参数( W g \mathbf{W}_g Wg)和专家FFN参数可能需要不同的学习率策略。过高的路由器学习率会导致路由决策剧烈震荡,专家来不及适应。
DeepSeek-V3的稳定训练实践:在整个14.8T token的训练过程中,未出现任何不可恢复的损失峰值,无需回滚,得益于:
- FP8混合精度训练(配合精细量化策略)
- 无辅助损失均衡(消除梯度冲突)
- 偏置更新与主梯度更新完全分离
- Z-Loss辅助约束(防止logits过大)
8、技术趋势与总结
8.1 MoE 发展的六大趋势
回顾从2021年到2025年的MoE发展,可以提炼出以下清晰趋势:
趋势1:专家粒度持续细化
专家数量从8 → 64 → 128 → 256 → 384,专家越来越小、越来越多,知识分工越来越精细。这一趋势背后的理论支撑是:更细粒度的专家分割可以在相同激活参数量下,提供更大的知识组合灵活性和更高的参数效率。
趋势2:激活比例持续下降
K / N K/N K/N 比值从25%(Mixtral)→ 8.9%(DS-V2)→ 5.5%(DS-V3)→ 3.1%(Kimi K2)。越来越多的参数"沉睡",越来越少的参数被激活,但总体性能持续提升。这证明了稀疏激活的可扩展性极限远未到达。
趋势3:负载均衡从硬约束走向软调节
从强制性辅助损失(梯度干扰主任务)→ 动态偏置(DeepSeek-V3,无梯度干扰)→ 全局批次均衡(Qwen3),负载均衡机制越来越轻量、越来越对模型性能无侵入。
趋势4:共享专家设计分歧
DeepSeek系列引入共享专家,实验证明有效;Qwen3取消共享专家,通过更精细的全局均衡实现同样效果;Mixtral从未引入共享专家。这表明共享专家是解决通用知识问题的一种方案,而非唯一方案,未来可能还有更优雅的设计。
趋势5:MoE与其他技术的深度融合
- MoE + MLA(Multi-head Latent Attention):DeepSeek-V2/V3、Kimi K2,同时压缩KV Cache和FFN计算
- MoE + RoPE长上下文:Llama 4 Scout支持10M token上下文
- MoE + 多模态:Llama 4系列原生多模态训练
- MoE + 强化学习推理:DeepSeek-R1基于V3架构,通过RL获得推理能力
趋势6:开源生态繁荣
Mixtral系列、Grok-1、DeepSeek-V2/V3、Kimi K2等顶级MoE模型相继开源,推动技术民主化。2025年,万亿参数级MoE模型已可在开源社区获取,三年前这是不可想象的。
8.2 MoE vs Dense:如何选择
对于实际工程决策,可以参考如下框架:
选 MoE 的场景:
- 需要追求最强绝对性能,不在乎显存成本
- 训练算力受限但希望最大化模型容量
- 多语言、多领域混合任务(受益于专家专业化)
- 有能力部署专家并行的基础设施
选 Dense 的场景:
- 部署显存/内存严格受限(如端侧、边缘设备)
- 单GPU推理场景(MoE通常需要多GPU)
- 需要确定性低延迟(批处理局部性差的MoE可能延迟更高)
- 工程团队缺乏MoE系统优化经验
8.3 一张图看懂 MoE 核心公式体系
输入 x │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ MoE Layer │ │ │ │ 路由 logits: H(x)ᵢ = x·Wg_ᵢ + ε·Softplus(x·Wn_ᵢ) │ │ │ │ │ 稀疏化: G(x) = Softmax(KeepTopK(H(x), K)) │ │ │ │ │ 专家计算: Eᵢ(x) = W₂ᵢ·Act(W₁ᵢ·x) for i ∈ TopK │ │ │ │ │ 加权聚合: y = Σᵢ∈TopK G(x)ᵢ · Eᵢ(x) │ │ │ │ │ 负载均衡: L_balance = α·N·Σᵢ fᵢ·Pᵢ (或 Bias-Based) │ └─────────────────────────────────────────────────────────────┘ │ ▼ 输出 y(维度与 x 相同) 8.4 总结
MoE架构用"分而治之"的思想,解决了大模型扩展中最核心的矛盾:如何在有限算力预算下最大化模型能力。从Shazeer 2017年的136B参数实验,到今天1.04T参数的Kimi K2,MoE用十年时间证明了这条路的正确性。
理解MoE不仅仅是理解几个数学公式——它背后是对"计算与存储分离"这一系统设计哲学的深刻实践:让参数存储容量(决定知识上限)与计算量(决定推理成本)各自独立扩展。这一思想,在整个计算机体系结构的历史中,都是极为普适的设计原则。
随着MoE架构走向成熟,下一个前沿可能是:如何让路由本身变得更智能? 现有路由器都是简单的线性变换,未来是否可以引入更复杂的路由网络,根据任务类型、推理阶段动态调整专家激活模式?MoE的故事,还远未结束。
参考文献Shazeer et al. (2017). Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer. arXiv:1701.06538Lepikhin et al. (2020). GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding. arXiv:2006.16668Fedus et al. (2021). Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity. arXiv:2101.03961Zoph et al. (2022). ST-MoE: Designing Stable and Transferable Sparse Expert Models. arXiv:2202.08906Jiang et al. (2024). Mixtral of Experts. arXiv:2401.04088DeepSeek-AI (2024). DeepSeek-V3 Technical Report. arXiv:2412.19437Qwen Team (2025). Qwen3 Technical Report. arXiv:2505.09388Moonshot AI (2025). Kimi K2 Technical Report. arXiv:2507.20534Jacobs et al. (1991). Adaptive Mixtures of Local Experts. Neural Computation, 3(1):79-87