跳转至

CS336 Lecture 4: Mixture of Experts

LaTeX 源码 · 备用 PDF · 观看视频

字段 内容
作者/整理 基于 Tatsu Hashimoto 授课内容整理
来源 Stanford Online
日期 2025年4月29日

CS336 Lecture 4: Mixture of Experts

引言:为什么要学习 Mixture of Experts

Mixture of Experts(MoE,混合专家模型)是当今最高性能大语言模型的核心架构之一。GPT-4(据 NVIDIA 泄露信息)很可能是 MoE 架构,DeepSeek、Grok、Mixtral、Qwen 以及最新的 Llama 4 都采用了 MoE。2025 年,MoE 相对于 Dense 架构的优势已经非常明确——几乎在所有计算规模上,训练 MoE 模型都能获得比 Dense 模型更好的性能。

MoE 在现代大模型中的广泛应用:GPT-4、Grok、DeepSeek、Llama 4、Mixtral、OLMoE 等均采用 MoE 架构

来源:Slides 第2页。

MoE 的核心思想

MoE 是一种稀疏激活的架构:模型拥有大量参数(experts),但每次前向传播只激活其中一小部分。这意味着可以在不增加计算量(FLOPs)的前提下,大幅增加模型的总参数量。更多参数 \(\rightarrow\) 更强的知识存储能力 \(\rightarrow\) 更好的性能。

“Experts” 并不真正“专家”

MoE 这个名字极具误导性。你可能会以为有一个“编程专家”、一个“英语专家”、一个“数学专家”,它们各自处理对应领域的内容。但实际情况远非如此——experts 更像是一种稀疏激活的子网络,它们之间的“专业化”程度远没有名字暗示的那么高。甚至用哈希函数随机分配 token 到 expert 都能获得增益。

MoE 架构概述

MoE 的基本思路非常简单:将 Transformer 中的 FFN(Feed-Forward Network)层替换为多个 FFN(即 experts)加上一个路由器(Router)。

Dense Model vs Sparse Model:左侧是标准 Transformer(单一 FFN),右侧是 MoE(多个 FFN + 选择层)。稀疏模型可以在不增加 FLOPs 的情况下增加 expert 数量

来源:Slides 第3页。来自 Fedus et al. 2022。

MoE 与 Dense 的关键区别

MoE 架构和非 MoE 架构在绝大多数组件上是相同的——Self-Attention、LayerNorm、Embedding 等都不变。唯一的区别在于 FFN 层:

  • Dense:一个大的 FFN 处理所有 token
  • MoE:多个小的 FFN(experts)+ 路由器,每个 token 只被路由到少数几个 expert

如果只激活一个 expert,且 expert 大小与 dense FFN 相同,那么两者的 FLOPs 完全一致。

MoE 的性能优势

大量实验表明,在相同的训练 FLOPs 下,MoE 模型显著优于 Dense 模型。

Fedus et al. 2022 实验结果:左图——相同 FLOPs 下,更多 experts 带来更低的 Test Loss;右图——128 experts 的 Switch Transformer 训练速度远快于 T5-Base

来源:Slides 第4页。来自 Fedus et al. 2022。

左:Switch Transformer 实现约 7 倍训练加速(Fedus et al.);右:OLMoE 对比实验,MoE(粉色)在训练损失、验证损失和 HellaSwag 上均优于 Dense(青色),节省约 3 倍 FLOPs

来源:Slides 第5页。左图来自 Fedus et al. 2022,右图来自 OLMoE。

DeepSeek-V2 在 Activated Parameters vs MMLU Performance 图上表现突出:极少的激活参数,极高的性能,远超同等规模的 Dense 模型

来源:Slides 第6页。来自 DeepSeek-V2 论文。

MoE 的三重优势

  1. 训练效率:相同 FLOPs 下,MoE 的 loss 下降更快(约 7x 加速)
  2. 推理效率:只激活部分参数,推理时的 FLOPs 远低于等效 Dense 模型
  3. 并行化:experts 天然适合分布到不同设备上(Expert Parallelism)

为什么 MoE 没有更早普及?

尽管 MoE 优势明显,但直到最近才被广泛采用,原因有两个:

  1. 系统复杂性高:MoE 的最大优势在多节点训练时才充分体现。当模型必须跨设备切分时,expert parallelism 非常自然;但在小规模训练中,系统开销可能抵消 MoE 的收益。
  2. 路由决策不可微:选择哪个 expert 是一个离散决策,无法直接通过梯度下降优化。训练目标要么依赖启发式方法,要么不稳定。

MoE 的开源发展历程

MoE 的核心技术主要在 Google 内部发展(Shazeer 2017、Switch Transformer 2021、Fedus et al. 2022)。但在开源领域,中国的实验室走在前面——Qwen 1.5 MoE 是最早的大规模开源 MoE 之一,DeepSeek 从 V1 到 V3 的 MoE 架构演进为整个领域提供了重要参考。西方开源 MoE(如 Mixtral、Llama 4)出现较晚。

MoE 应用于哪些层?

几乎所有主流 MoE 模型都只对FFN 层做稀疏路由。虽然理论上也可以对 Attention 层做 MoE(即 Sparse Attention),但实践中非常少见——有报告称 Attention MoE 的训练更加不稳定,且目前没有大规模开源模型采用这种方案。

本章小结

MoE 通过将 FFN 层替换为多个稀疏激活的 experts,在不增加 FLOPs 的前提下大幅增加模型参数量。实验证据表明,MoE 在几乎所有规模上都优于 Dense 架构。课程接下来将深入讨论三个核心设计问题:如何路由、expert 的数量与大小、以及如何训练路由器。

路由机制(Routing)

路由机制是 MoE 的核心——它决定了每个 token 被分配到哪些 experts。本节将详细讨论路由的设计空间。

三种路由范式

三种路由方式:Token Choice(每个 token 选 top-K experts)、Expert Choice(每个 expert 选 top-K tokens)、Global Assignment(全局优化分配)

来源:Slides 第14页。来自 Fedus et al. 2022。

Token Choice Top-K 是事实标准

尽管早期 MoE 研究探索了多种路由方式,但几乎所有大规模部署的 MoE 模型都收敛到了 Token Choice Top-K 路由——DeepSeek V1/V2/V3、Qwen、Grok、Mixtral 等无一例外。

三种路由范式的对比:

路由方式 优点 缺点
Token Choice 每个 token 被路由到最合适的 expert,质量最优 可能导致 expert 负载不均衡
Expert Choice 天然负载均衡,每个 expert 处理相同数量的 token 某些 token 可能不被任何 expert 处理,或被不合适的 expert 处理
Global Assignment 理论最优分配 计算开销大,实践中收益不足以覆盖成本
三种路由方式的对比

OLMoE 对比实验:Token Choice(TC,粉色)vs Expert Choice(EC,青色),Token Choice 在验证损失和 HellaSwag 上均表现更好

来源:Slides 第16页。来自 OLMoE。

Top-K 路由的数学表达

Token Choice Top-K 路由的具体实现如下:

Top-K 路由的数学公式和前向传播流程

来源:Slides 第17页。

给定残差流输入 \(\mathbf{u}_t\),路由器首先计算每个 expert 的亲和分数:

\[ s_{i,t} = \text{Softmax}_i\left(\mathbf{u}_t^T \mathbf{e}_i\right) \]

其中:

  • \(\mathbf{u}_t \in \mathbb{R}^d\):第 \(t\) 个 token 的隐藏状态(残差流输入)
  • \(\mathbf{e}_i \in \mathbb{R}^d\):第 \(i\) 个 expert 的可学习向量(路由器参数)
  • \(s_{i,t}\):token \(t\) 对 expert \(i\) 的归一化亲和分数

然后通过 Top-K 选择构造门控权重:

\[ g_{i,t} = \begin{cases} s_{i,t}, & \text{if } s_{i,t} \in \text{TopK}(\{s_{j,t} \mid 1 \leq j \leq N_r\}, K_r) \\ 0, & \text{otherwise} \end{cases} \]

最终输出为所有 expert 输出的加权和加上残差连接:

\[ \mathbf{h}_t' = \mathbf{u}_t + \sum_{i=1}^{N_s} \text{FFN}_i^{(s)}(\mathbf{u}_t) + \sum_{i=1}^{N_r} g_{i,t} \cdot \text{FFN}_i^{(r)}(\mathbf{u}_t) \]

路由器出奇地简单

路由器本质上就是一个线性内积 + Softmax——与 Attention 的 Query-Key 内积非常相似。\(\mathbf{e}_i\) 可以理解为每个 expert 的“名片”,与 token 的隐藏状态做内积来衡量亲和度。没有人使用 MLP 路由器或更复杂的设计,因为:(1)路由器本身的 FLOPs 也要计算在内;(2)路由器的学习信号本身就很间接,即使增加复杂度也不一定能学到更好的路由。

K 值的选择

\(K\)(每个 token 激活的 expert 数量)是一个关键超参数:

  • \(K = 1\)(Switch Transformer):最稀疏,FLOPs 最少,但探索不足——router 可能永远只利用最好的 expert,而忽视其他潜在更好的选择
  • \(K = 2\)(经典选择):第二个 expert 提供探索信息,有助于学习更好的路由。Mixtral、早期 DeepSeek 使用
  • \(K > 2\):更多 FLOPs 但更丰富的梯度信号。DeepSeek V3 使用 \(K = 8\)(配合细粒度 expert)

\(K\) 的增加意味着 FLOPs 的增加

\(K = 2\) 意味着每个 token 要经过两个 expert 的 FFN,FLOPs 翻倍。因此,谈论 MoE 模型时通常使用“激活参数”(activated parameters)而非总参数来衡量计算成本。例如 DeepSeek-V3 有 671B 总参数但只有 37B 激活参数。

Softmax 的位置:一个微妙的设计选择

不同 MoE 模型的路由变体对比:Softmax 在 Top-K 之前 vs 之后,是否归一化门控权重

来源:Slides 第18页。

不同的 MoE 实现对 Softmax 的位置有不同选择:

  • DeepSeek V1/V2、Qwen、Grok:先 Softmax 后 Top-K(Softmax 在底部)
  • DeepSeek V3、Mixtral、DBRX:先 Top-K 后 Softmax(Softmax 在 gate 上)

先 Softmax 后 Top-K 意味着门控权重不再严格归一化到 1(因为被丢弃的 expert 权重不为零)。但这并不是问题——LayerNorm 可以在后续层补偿尺度变化。部分模型选择在 Top-K 之后重新归一化,但这也是可选的。

令人惊讶的发现:随机路由也有效

Hash 路由也能带来增益

多个研究表明,即使使用哈希函数(完全不含语义信息)来将 token 分配到 expert,MoE 仍然能获得相对于 Dense 模型的性能增益。这说明 MoE 的优势不仅仅来自“智能路由”,而是更根本地来自参数量的增加和稀疏激活本身。这应该深刻影响你对 MoE 本质的理解。

其他路由方法

除了 Top-K 路由外,研究者还尝试过多种其他方法:

  • RL 路由:最早期的方法之一,将路由决策视为策略,用强化学习优化。理论上最原则化,但实践中计算开销大、梯度方差高,效果不如更简单的方法。
  • 线性分配/最优传输:优雅但计算代价高于收益,未被广泛采用。
  • 随机采样:Google 的一篇论文提出“top-1 确定性 + top-2 按概率采样”的方案,增加探索但导致 train-test mismatch。

本章小结

路由机制的设计空间很大,但行业已经收敛到一个简单的方案:线性内积 + Softmax + Top-K 选择。路由器参数量极小(每个 expert 只有一个 \(d\) 维向量),训练通过标准反向传播的间接梯度进行。即使是随机路由也能带来增益,这暗示 MoE 的核心优势来自稀疏参数扩展本身。

Expert 的数量与结构设计

确定了路由方式后,下一个问题是:应该有多少个 expert?每个 expert 应该多大?

细粒度 Expert(Fine-Grained Experts)

从标准 MoE 到细粒度 Expert 的演进:将大 expert 切分为更小的 expert,同时增加数量

来源:Slides 第19页。

早期 MoE 的逻辑演进:

  1. 基础 MoE:将 Dense FFN 复制为多份,每份与原始 FFN 大小相同,Top-2 路由 \(\rightarrow\) 激活参数翻倍
  2. 更多 experts 更好:实验表明增加 expert 数量能持续降低 loss
  3. 但不想付出参数代价:因此将每个 expert 切小——例如将 FFN 的中间维度从 \(4d\) 缩小到 \(2d\) 或更小,同时 expert 数量翻倍
  4. FLOPs 不变:因为激活的总 FFN 参数量保持不变

细粒度 Expert 是目前最重要的 MoE 创新之一

DeepSeek 最早系统性地提出并验证了细粒度 expert 的优势。以 DeepSeek MoE V1 为例:64 个细粒度 routed experts(中间维度为标准的 \(1/4\)),激活其中 6 个。总 expert 数量增加的同时,每个 expert 更小,带来更灵活的组合能力。这已经被所有主流 MoE 模型采纳。

共享 Expert(Shared Experts)

DeepSeek 的另一个重要创新是共享 expert:在 routed experts 之外,额外设置 1--2 个始终激活的 expert(不经过路由器)。

共享 Expert 的设计动机

不管输入是什么 token,可能都有一些“通用处理”是必须做的。如果把这些通用计算也交给 routed experts,会浪费路由和参数资源。共享 expert 的作用类似于一个“公共基础设施”,处理所有 token 都需要的通用变换,让 routed experts 专注于差异化处理。

DeepSeek MoE 消融实验:从 GShard(蓝色)到加入共享 expert(橙色)到细粒度 expert(绿色、红色),性能逐步提升,尤其在 TriviaQA 和 NaturalQuestions 上

来源:Slides 第21页。来自 DeepSeek MoE 论文。

不过,关于共享 expert 的价值,业界仍有分歧:

  • DeepSeek V1/V2/V3 使用 2 个共享 expert
  • OLMoE 的消融实验表明,1 个共享 expert 的增益并不总是显著
  • 一些中国 LLM 公司曾尝试多个共享 expert,后来又回到 0 或 1 个
  • 共享 expert 的实际价值可能在于让所有 expert 大小一致,简化系统实现

OLMoE 消融:更多 experts vs 更大 experts

OLMoE 消融实验:细粒度 experts(8\(→\)32\(→\)64)持续带来增益;共享 expert 的效果则取决于任务

来源:Slides 第22页。来自 OLMoE。

OLMoE 的系统性消融验证了以下结论:

  • 从 8 到 64 个细粒度 experts:持续降低验证 loss
  • 共享 expert:在某些任务上有帮助,但不如细粒度 expert 那样一致
  • 增加 activated experts:当 expert 更细粒度时,增加 \(K\) 是“免费”的(因为每个 expert 更小)

本章小结

  • 细粒度 expert 是 MoE 最重要的设计创新——将 expert 切小、数量增多,在不增加 FLOPs 的前提下获得更灵活的组合能力
  • 共享 expert 捕获通用处理需求,但其边际收益仍有争议
  • 更多 experts 几乎总是更好,只要系统能高效支持

MoE 的训练挑战

MoE 的训练远比 Dense 模型复杂。核心挑战在于:训练时必须保持稀疏激活(否则 FLOPs 与 Dense 无异),但稀疏路由决策不可微。

三种训练策略

MoE 训练的三种策略:强化学习(RL)、随机近似、启发式损失

来源:Slides 第24页。

  1. 强化学习(RL):最原则化——将路由视为策略,用 policy gradient 优化。但计算开销大、梯度方差高,实践中效果不如更简单的方法。
  2. 随机近似(Stochastic Approximation):在路由分数上添加噪声,实现探索-利用权衡
  3. 启发式辅助损失(Heuristic Auxiliary Loss):添加额外的损失项鼓励负载均衡——这是目前所有主流系统使用的方法

随机路由:Shazeer 2017

Shazeer et al. 2017 的随机路由方案:在 affinity 分数上添加可学习的高斯噪声

来源:Slides 第26页。来自 Shazeer et al. 2017。

Shazeer 2017 的方案在标准路由分数上添加可学习幅度的高斯噪声

\[ H(x)_i = (x \cdot W_g)_i + \text{StandardNormal}() \cdot \text{Softplus}((x \cdot W_{\text{noise}})_i) \]
\[ G(x) = \text{Softmax}(\text{KeepTopK}(H(x), k)) \]

其中 \(W_{\text{noise}}\) 控制噪声的幅度,可以通过学习来调节探索-利用权衡。

随机路由的权衡

  • 优点:噪声使每个 expert 随机接收一些“意外” token,减少过度专业化,增强鲁棒性
  • 缺点:随机性降低了专业化程度,导致效率损失;如果训练时有随机性但测试时没有,会产生 train-test mismatch

辅助损失(Auxiliary Loss):负载均衡的启发式方法

辅助损失是目前最广泛使用的训练策略。核心问题是:如果没有负载均衡约束,MoE 训练会发生什么?

没有负载均衡时的 expert 分配情况(OLMoE):少数 expert 垄断大量 token(Expert Collapse),训练和验证 loss 都更差

来源:Slides 第31页。来自 OLMoE。

Expert Collapse:MoE 训练的最大敌人

没有负载均衡约束时,路由器会进入正反馈循环:某个 expert 获得更多 token \(\rightarrow\) 获得更多训练 \(\rightarrow\) 变得更好 \(\rightarrow\) 吸引更多 token。最终只有 2--3 个 expert 处理所有 token,其余 expert “死亡”。这被称为 Expert Collapse,会严重浪费模型容量。

标准辅助损失(Load Balancing Loss)

辅助损失的数学定义:通过 \(f_i\)(expert \(i\) 的实际负载)和 \(P_i\)(expert \(i\) 的路由概率)的内积来惩罚不均衡

来源:Slides 第28页。来自 Fedus et al. 2022。

标准负载均衡损失的形式为:

\[ \mathcal{L}_{\text{balance}} = \alpha \cdot N \sum_{i=1}^{N} f_i \cdot P_i \]

其中:

  • \(f_i = \frac{1}{T} \sum_{t=1}^{T} \mathbf{1}(\text{Token } t \text{ selects Expert } i)\):expert \(i\) 被选中的频率
  • \(P_i = \frac{1}{T} \sum_{t=1}^{T} s_{i,t}\):expert \(i\) 的平均路由概率
  • \(\alpha\):辅助损失权重(超参数)

辅助损失权重 \(α\) 需要精心调节

\(\alpha\) 过大会过度干扰语言模型的主损失,降低模型质量;\(\alpha\) 过小则无法有效防止 Expert Collapse。这是 MoE 训练中最需要调参的超参数之一。

Z-Loss:稳定路由器

Z-Loss 的效果:没有 Z-Loss(青色)的训练极不稳定,出现剧烈的 loss 尖峰;加入 Z-Loss(粉色)后训练显著平稳

来源:Slides 第36页。来自 OLMoE。

Z-Loss(来自 ST-MoE)通过惩罚路由器 logits 的绝对值来防止数值不稳定:

\[ \mathcal{L}_z = \frac{1}{T} \sum_{t=1}^{T} \left(\log \sum_{i=1}^{N} e^{x_{i,t}}\right)^2 \]

Z-Loss 对训练稳定性至关重要

OLMoE 的实验表明,去掉 Z-Loss 会导致训练出现灾难性的 loss 尖峰——Validation loss 骤升、HellaSwag 性能暴跌。Z-Loss 是 MoE 训练的“安全网”。

DeepSeek V3 的创新:Auxiliary-Loss-Free Balancing

DeepSeek V3 的 Auxiliary-Loss-Free Balancing:通过可学习的偏置项 \(b_i\) 进行在线负载均衡,无需辅助损失

来源:Slides 第34页。来自 DeepSeek V3 论文。

DeepSeek V3 提出了一种优雅的替代方案:

  1. 在路由分数上添加一个per-expert 偏置 \(b_i\)\(s'_{i,t} = s_{i,t} + b_i\)
  2. \(s'_{i,t}\) 做 Top-K 路由决策,但门控权重仍然使用原始的 \(s_{i,t}\)
  3. \(b_i\) 通过简单的在线学习更新:如果 expert \(i\) 的 token 不足,增大 \(b_i\)\(b_i \mathrel{+}= \gamma\));如果过多,减小 \(b_i\)\(b_i \mathrel{-}= \gamma\)

DeepSeek V3 的“非完全无辅助损失”

尽管 DeepSeek V3 论文大力宣传 Auxiliary-Loss-Free Balancing 的稳定性优势,但细读论文会发现他们仍然保留了一个 sequence-level 的辅助损失来实现序列级别的负载均衡。因此这个方法并非完全“loss-free”。

多层次负载均衡

DeepSeek 实践中使用多层次的负载均衡:

  1. Per-Expert Balancing(每批次):确保每个 expert 在每个 batch 中获得大致相同数量的 token
  2. Per-Device Balancing:确保每个设备上的 expert 总共获得大致相同数量的 token,优化硬件利用率
  3. Per-Sequence Balancing(DeepSeek V3):确保在序列级别也保持均衡

Token Dropping 与容量因子

Token Dropping 机制:当某个 expert 的 token 超过容量上限时,多余的 token 通过残差连接“跳过” MoE 层

来源:Slides 第37页。

当某个 expert 接收到过多 token 时,超出容量的 token 会被“丢弃”——它们不经过任何 expert,直接通过残差连接传递。这引入了一个容量因子(Capacity Factor)超参数,控制每个 expert 能接受的最大 token 数。

Token Dropping 会导致推理时的非确定性

在推理时,如果请求被 batch 处理,不同请求的 token 可能竞争同一个 expert 的容量。这意味着相同的输入在不同 batch 中可能产生不同输出——这可能是 GPT-4 在 temperature=0 时仍然非确定性的原因之一。

本章小结

MoE 训练的核心挑战是平衡路由质量负载均衡。行业共识是使用辅助损失 + Z-Loss 的组合。DeepSeek V3 的 bias-based balancing 是一个有趣的替代方案,但并非完全取代辅助损失。Expert Collapse 是最需要警惕的问题——没有负载均衡约束的 MoE 训练几乎必然失败。

系统优化与推理

MoE 模型的系统实现涉及独特的挑战和优化机会。

Expert Parallelism

Expert Parallelism:每个 expert 放在不同设备上,通过 All-to-All 通信分发和收集 token

来源:Slides 第38页。

Expert Parallelism 是 MoE 特有的并行化方式:

  1. 每个 expert(或一组 expert)放在不同设备上
  2. 路由器决定 token 的 expert 分配后,通过 All-to-All 通信将 token 发送到对应设备
  3. 各设备独立计算 FFN
  4. 再通过 All-to-All 通信将结果收集回来

Expert Parallelism 是 MoE 流行的系统原因

当模型大到必须分布在多个设备上时,Expert Parallelism 提供了一种非常自然的切分方式。与 Tensor Parallelism(需要在每步都同步)不同,Expert Parallelism 只在路由点和聚合点需要通信。它与 Data Parallelism、Pipeline Parallelism、Tensor Parallelism 可以自由组合,为大规模训练提供了更多灵活性。

Grouped GEMM:设备级稀疏计算

当多个 expert 位于同一设备上时,可以利用 Grouped GEMM(分组矩阵乘法)来高效处理稀疏的 expert 计算。现代库(如 Meta 的 Megablocks)可以将多个小矩阵乘法合并为一个大的 grouped operation,避免浪费 GPU 计算资源。

MoE 的推理特性

MoE 在推理时有独特的优势和挑战:

MoE 推理的核心特性

  • 优势:每个 token 只需要激活部分 expert 的参数,FLOPs 远低于等效 Dense 模型
  • 挑战:所有 expert 的参数都需要存储在内存中,内存需求远高于激活参数暗示的水平
  • 权衡:MoE 是“用内存换 FLOPs”的典型例子——更多参数、更少计算

MoE 与后训练(Post-Training)

MoE 模型在后训练(SFT/RLHF)中可能面临过拟合风险

来源:Slides 第42页。

MoE 模型在微调(SFT)和 RLHF 阶段面临特殊挑战:

MoE 更容易在后训练中过拟合

MoE 的总参数量远大于激活参数量。在后训练数据量有限的情况下,大量未充分训练的参数容易导致过拟合。DeepSeek 的解决方案很务实:使用大量 SFT 数据(1.4M 样本)来缓解过拟合问题。

Upcycling:从 Dense 到 MoE 的低成本转换

Upcycling:将 Dense 模型的 MLP 复制多份(加少量扰动),添加随机初始化的路由器,继续训练

来源:Slides 第44页。

Upcycling 是一种将现有 Dense 模型转换为 MoE 模型的技巧:

  1. 取 Dense 模型的 MLP 权重
  2. 复制多份(每份加少量随机扰动)
  3. 随机初始化路由器
  4. 以 MoE 模式继续预训练

成功案例:

  • MiniCPM:Dense \(\rightarrow\) MoE upcycling,显著提升性能
  • Qwen 1.5 MoE:从 Qwen 1.5 Dense 模型 upcycle,2.7B 激活参数达到 7B Dense 模型水平

本章小结

MoE 的系统实现需要精心设计的 Expert Parallelism、高效的 Grouped GEMM、以及多种并行策略的组合。推理时 MoE 用内存换 FLOPs,后训练时需注意过拟合。Upcycling 提供了一条从 Dense 到 MoE 的低成本升级路径。

案例分析:DeepSeek MoE 架构演进

本节追溯 DeepSeek 从 V1 到 V3 的 MoE 架构变化,展示一个现代高性能 MoE 系统是如何逐步构建的。

DeepSeek MoE V1(16B, 2.8B active)

DeepSeek MoE V1 架构:2 个共享 expert + 64 个细粒度 routed experts(激活 4 个),标准 Top-K 路由 + Auxiliary-Loss 均衡

来源:Slides 第41页。来自 DeepSeek MoE 论文。

V1 的关键设计:

  • 16B 总参数,2.8B 激活
  • 2 共享 expert + 64 细粒度 routed expert,激活 \(K_r = 4\)
  • 标准 Top-K 路由:Softmax 在 Top-K 之前
  • 标准辅助损失:Expert-level + Device-level 均衡

DeepSeek V2(236B, 21B active)

V2 是 V1 的直接放大版本:

  • 236B 总参数,21B 激活——规模增长一个数量级
  • MoE 架构完全不变——同样的共享+细粒度 expert 结构、同样的路由、同样的辅助损失
  • 唯一变化是 expert 数量和模型规模的增大
  • 新增 Multi-head Latent Attention (MLA)——一种压缩 KV Cache 的注意力机制

架构的稳定性

从 V1 到 V2,DeepSeek 在 MoE 部分没有做任何架构修改——他们在 V1 时就已经找到了正确的架构。这说明好的架构设计可以在小规模验证后直接放大,体现了 DeepSeek 团队扎实的工程和研究能力。

DeepSeek V3(671B, 37B active)

DeepSeek V3 架构:671B 参数、37B 激活,新增 Auxiliary-Loss-Free Balancing 和 Multi-Token Prediction

来源:Slides 第47页。来自 DeepSeek V3 论文。

V3 相对于 V2 的变化:

  1. 规模继续放大:671B 总参数,37B 激活
  2. Auxiliary-Loss-Free Balancing:用 per-expert bias + 在线学习替代部分辅助损失(但保留了 sequence-level 辅助损失)
  3. Multi-Token Prediction (MTP):使用轻量级单层 Transformer 同时预测下一个 token(虽然论文展示了预测多个 token 的框架,实际只预测了 1 个额外 token)
  4. Multi-head Latent Attention (MLA):继承自 V2 的 KV Cache 压缩技术

DeepSeek V3 在多个基准上的表现:在 MMLU-Pro、MATH 500、AIME 2024、Codeforces 等多项评测中显著领先

来源:Slides 第11页。来自 DeepSeek V3 论文。

Multi-head Latent Attention (MLA)

MLA 是 DeepSeek V2/V3 中的另一个重要创新,虽然不直接属于 MoE 范畴,但值得简要介绍:

Multi-head Latent Attention:将 KV 投影到低维潜在空间 \(c\),缓存 \(c\) 而非全维度 KV,推理时上投影回 KV

来源:Slides 第45页。来自 DeepSeek V2 论文。

MLA 的核心思路:

  1. 将隐藏状态 \(\mathbf{h}_t\) 投影到低维 latent vector \(\mathbf{c}_t = W_{\text{DKV}} \mathbf{h}_t\)
  2. 只缓存 \(\mathbf{c}_t\)(维度远小于 \(\mathbf{h}_t\)
  3. 需要 K/V 时,从 \(\mathbf{c}_t\) 上投影恢复:\(\mathbf{k}_t = W_{UK} \mathbf{c}_t\)\(\mathbf{v}_t = W_{UV} \mathbf{c}_t\)
  4. 利用矩阵乘法结合律,将 \(W_{UK}\) 合并到 Q 的投影矩阵中,不增加额外的矩阵乘法

MLA vs GQA

GQA(Grouped Query Attention)通过减少 KV head 数量来压缩 KV Cache。MLA 采取完全不同的思路——保持所有 head 但将 KV 投影到低维空间。两者目标相同(减少 KV Cache),但 MLA 在理论上可以保留更多信息。

MLA 与 RoPE 不兼容

标准 MLA 中,因为 RoPE 的旋转矩阵夹在 Q 投影和 K 上投影之间,矩阵乘法不能自由交换顺序,导致无法合并矩阵。DeepSeek 的解决方案是在非压缩维度上应用 RoPE,或为 RoPE 添加专门的非压缩维度。

Multi-Token Prediction (MTP)

Multi-Token Prediction 架构:主模型预测 next token,轻量级 MTP 模块预测更远的 token。实际中 DeepSeek V3 只预测 1 个额外 token

来源:Slides 第46页。来自 DeepSeek V3 论文。

MTP 的思路简单但有效:

  • 在主模型的隐藏状态基础上,添加一个轻量级单层 Transformer
  • 这个小模型预测下一个 token 之后的 token(即 “next-next token”)
  • 额外的预测损失可以为主模型提供更丰富的梯度信号
  • 推理时,MTP 模块还可以用于 speculative decoding(类似 EAGLE)

本章小结

V1 V2 V3
总参数 16B 236B 671B
激活参数 2.8B 21B 37B
共享 Expert 2 2 2
Routed Expert 64 160 256
Top-K 6 (4 routed) 6 8
路由方式 Top-K + Softmax Top-K + Softmax Top-K + Sigmoid
均衡策略 Aux Loss Aux Loss Bias + Seq Aux Loss
注意力 MHA MLA MLA
MTP 1 token ahead
DeepSeek MoE V1-V2-V3 关键参数对比

总结与延伸

讲者的核心总结

Tatsu Hashimoto 在课程结尾强调了以下几点:

  1. MoE 已成标配:在 FLOP 约束的设置下,MoE 几乎总是优于 Dense 模型。这一结论在 2025 年已经有大量经验证据支持。
  2. 稀疏性是关键:MoE 的核心优势来自“不需要所有参数同时工作”——这使得模型可以拥有大量参数而不按比例增加计算成本。
  3. 离散路由是核心挑战:Top-K 路由决策的不可微性使得训练变得复杂,但启发式方法(辅助损失、bias balancing)在实践中表现良好。
  4. 架构变化有限:DeepSeek 从 V1 到 V3,核心 MoE 架构几乎未变——好的架构在小规模验证后可以直接放大。

全课知识图谱

TikZ diagram

关键 Takeaways

六条核心原则

  1. MoE 用参数换 FLOPs:更多参数、更少计算,是当前最高效的 scaling 方式
  2. 路由器越简单越好:线性内积 + Softmax + Top-K 已经足够,复杂路由器收益有限
  3. 细粒度 Expert 是关键创新:将 expert 切小、数量增多,是提升 MoE 性能的最有效手段
  4. 负载均衡是训练成败的关键:没有均衡约束,Expert Collapse 几乎不可避免
  5. 好的架构在小规模就能验证:DeepSeek V1 的架构直接放大到 V3,证明了小规模实验的价值
  6. Expert 并不真正“专业化”:随机路由也有效,MoE 的核心优势来自稀疏参数扩展本身

拓展阅读