上一代的问题:传统 MoE 两大瓶颈 — 知识混杂(Knowledge Hybridity):同一个专家被迫学习不同类型的知识,因为专家数量太少,每个专家容量大但专注度不够;知识冗余(Knowledge Redundancy):多个专家各自学习相同的通用知识(语法、格式等基础模式),浪费参数容量。
这代改了什么:细粒度专家分割 — 把每个专家的 FFN 中间维度拆分为 1/m,专家总数增至 mN,激活数增至 mK(总计算量不变),路由组合空间从 C(16,2)=120 暴增至 C(64,8)≈4.4B;共享专家隔离 — Ks 个共享专家所有 token 均激活,专门吸收通用知识,路由专家专注于差异化的知识。
效果:DeepSeekMoE 145B(仅激活 ≈28B 参数)以 28.5% 的计算量达到 DeepSeek 67B 稠密模型的性能;DeepSeekMoE 16B 以 40% 计算量超越 LLaMA2 7B;DeepSeekMoE 2B 逼近理论上限(对应稠密模型)。该架构被 DeepSeek V2/V3 和 Qwen2 MoE 全面采用。
混合专家模型(Mixture-of-Experts, MoE)是现代大语言模型实现"万亿参数级容量 + 每次推理只激活一小部分"的核心范式。在 DeepSeekMoE 之前,主流 MoE 架构(GShard, Switch Transformer)遵循一个约定俗成的设计:从 N 个专家中选取 Top-K 激活(通常 N=8 或 16,K=1 或 2)。
每个 token 经过门控网络计算与所有专家的匹配分数,取最高的 K 个进行加权求和:
这个设计在 2017–2021 年间取得了巨大成功——Switch-C 达到 1.6T 参数,GLaM 达到 1.2T。但随着模型规模增长,两个深层问题开始暴露:
每个专家的 FFN 中间维度通常为 2048–4096,参数容量巨大。理想情况下,一个专家应该专注于某一类知识(如语法分析、实体识别、情感判断)。但实际上,因为专家总数很少(8 或 16 个),而训练数据中的知识类型非常多样,每个专家被迫同时学习多种不同类型的知识。
举个例子:同一个专家可能在参数空间的不同区域分别编码了"主谓一致"和"数值推理"两种完全不同的能力。这种"混杂"不仅降低每个专家的效率,也使路由变得更加困难——门控网络很难为一句话"挑对专家",因为每个专家都像是一个"杂货铺"而非"专卖店"。
更形式化地分析:设专家 i 的 FFN 的前向计算为 a = ReLU(xWi + bi),再投影 aVi。当中间维度很大时(如 2048),这个空间的不同子区域可以独立地编码完全不相关的知识模式。Sankaranarayanan et al.(2022)的实验发现,同一专家 FFN 的激活模式在不同类型的输入上差异很大,这印证了知识混杂的存在。
所有专家都需要学习基础语言能力——词法、句法、格式、常见搭配等。在没有专门机制的情况下,多个专家各自独立地学习同样的通用知识。想象一下:如果所有数学老师都要先自学一遍"加减乘除"才能教微积分,那就是大量的重复劳动。
论文通过实验量化了这个问题:分析路由专家的输出后发现,不同专家在底层表示上存在高度重叠——即使它们对应的路由模式完全不同。这说明传统 MoE 把"通用知识"和"专精知识"混在了同一个专家参数中,导致参数利用率低下。
知识冗余的另一个后果是路由退化:因为所有专家都掌握了通用知识,在通用知识主导的 token 上,门控网络可以"随便选"任何一个专家,导致专家的区分度不足,训练后期难以收敛到稳定的路由策略。
增加专家数量(N 从 8 升到 64+)看似可以缓解,但传统架构中每个专家的容量是固定的。盲目增加 N 会同时增加激活量 K(因为要保持计算量不变),路由组合空间仍然受限于"少数专家选少数"的模式。更本质地说:传统 MoE 缺乏"专业化"的架构诱导——没有激励机制让不同专家学习不同的知识。
解决这个问题需要从架构层面做两件事:1)让每个专家的容量变小,迫使它专注(而不是依赖优化器去"发现"专业化);2)把通用知识从路由专家的优化目标中剥离,让路由专家只需要关心差异化。
关键想法非常直接:把每个专家的 FFN 中间隐藏维度(intermediate dimension)压缩到原来的 1/m。这意味着:
但路由组合的灵活度发生了质变。原来从 16 个专家中选 2 个的组合数是 C(16,2)=120 种可能性;现在从 64 个专家中选 8 个的组合数是 C(64,8) ≈ 4.4B(44 亿种)。路由的选择空间从"几乎确定"变成了"几乎无限"——网络可以对每个 token 拼凑一个更加精确的"专家组合"。
设第 l 层有 mN 个细粒度专家,对于第 t 个 token 的隐藏状态 utl:
其中门控权重由 TopK 路由确定:
eil 是第 i 个专家的可学习路由中心(centroid)向量,si,t 是 token 与专家之间的相似度分数。TopK 将非 top-mK 的分数设为 −∞,Softmax 后这些专家权重为 0。
容量降低带来专业化。 每个专家的中间维度降到 1/m,其参数容量大幅缩减。一个"小容量"的专家无法同时学习太多不同类型的知识,被迫聚焦于某几个特定的模式。这类似于:一个大教室必须同时教数学、物理、化学;但分成小教室后,每个教室只能教一门课,自然就专业化了。
组合爆炸提升表达能力。 路由选择的本质是"在当前 token 需要哪些知识"的离散选择。组合数从 C(N,K) 增长到 C(mN,mK),门控网络可以精细地组合多个小专家来满足 token 的复杂需求——既需要语法分析,又需要领域知识,还需要特定格式——这在传统 MoE 中是难以做到的。
在 DeepSeekMoE 的实践中,论文选择了精细的分割比例。以 16B 模型为例:
重要的一点是,m 的取值需要平衡——过大的 m 会让每个专家过于碎片化,无法学到有意义的模式。论文的实验表明 m=8 是一个较好的折中点,在这个取值下专家既有足够的"容量窗口"来学习可识别的模式,又足够小来迫使专业化。
细粒度专家分割与"增加专家数量但不改变容量"(即单纯增加 N 和 K)不同。若保持每个专家容量不变而增加 N 和 K,总计算量线性增加,不符合稀疏激活的初衷。细粒度分割的关键在于保持计算量不变的前提下提升组合灵活性。这是 MoE 架构中第一个在"不增加 FLOPs"的前提下提升表达能力的系统设计。
在传统 MoE 中,"is" 和 "are" 的主谓一致规则,每个专家都要学一遍。这导致参数量浪费。更糟糕的是,它干扰了专家的专业化——路由专家的一部分容量被通用知识占据,留给真正专精知识的空间被压缩。
论文提出一个优雅的解决方案:设置 Ks 个共享专家(Shared Experts),对每一个 token 无条件激活。这些共享专家专门负责捕获所有 token 共享的通用知识——句法规则、格式规范、常见搭配、基础语义等。
结合共享专家和细粒度路由专家后,完整的前向传播公式为:
第一项:Ks 个共享专家的输出(无条件,所有 token 都经过这些专家)。
第二项:mN 个路由专家中选 mK 个的输出(条件性激活)。
第三项:残差连接。
由于共享专家已经提供了通用知识,路由专家的激活数量可以相应减少。实际上,论文在共享专家的设置下适当减少了 mK 的值,使得总计算量(激活参数量)不变甚至略有下降。以 DeepSeekMoE 16B 为例,配置为 Ks=2, mN=128, mK=16,与传统 MoE 的计算量持平。
在 DeepSeekMoE 16B 中,Ks = 2,即 2 个共享专家。每个共享专家的中间维度与路由专家相同(256)。共享专家不参与路由决策——它们始终在前向传播路径上。
训练过程中,共享专家收到所有 token 的梯度,因此它们学习的是整个数据分布中最稳定、最通用的特征。路由专家则因为只收到部分 token 的梯度(那些选中它的 token),更倾向于学习特定子集的特征。这种数据流量的差异自然导致了功能的分化:共享专家的参数在大量 token 上被更新,走向通用的表示;路由专家的参数只在小部分 token 上更新,走向专用的表示。
共享专家与"所有专家都被选中的全选模式"不同。在全选模式中,所有专家参与但没有分工——每个专家仍然在学习通用+专精混合的知识。共享专家的关键在于 功能隔离:一部分参数专门学习通用知识(共享专家),另一部分专门学习差异化知识(路由专家),两者优化目标不同。
一个类比是操作系统中的"内核态 vs 用户态":共享专家像是操作系统内核,提供每个程序(token)都需要的核心服务;路由专家像是用户态进程,按需加载。这种分离是现代复杂系统的核心组织原则。
论文实验显示,Ks 从 0 增加到 2 时收益递增明显,从 2 到 4 时收益变缓。这意味着 2 个共享专家已经足够捕获大部分跨 token 共享的通用知识。过多的共享专家会导致参数量浪费(因为它们每个 token 都激活,计算成本直接增加)。这是 DeepSeekMoE 选择 Ks=2 的依据。
MoE 训练中最棘手的工程问题之一是路由塌陷(Routing Collapse):门控网络倾向于把几乎所有 token 路由到少数几个"强"专家,而其他专家几乎不被训练,形成负反馈循环。在细粒度场景下(128+ 个专家),这个问题更严重——专家越多,路由塌陷的诱导因素越强。
同时,在大规模分布式训练中,专家分布在不同的 GPU/设备上。即使全局 token 到专家的分配是均匀的,每台设备上的计算负载也可能不均匀——因为 all-to-all 通信要求在设备间传输专家输入和输出,负载不均会导致某些设备成为瓶颈,拖慢整体训练速度。
其中:
fi 衡量实际路由分布,Pi 衡量门控的倾向性。最小化两者的乘积等价于鼓励 fi 和 Pi 都趋于均匀——即每个专家接收相近数量的 token,且门控对各专家给出相近的平均概率。这个损失的设计继承自 Switch Transformer 的可微辅助损失,但对细粒度专家做了一处关键调整:fi 的计算包含所有路由专家,而非仅被激活的专家。
定义与专家级类似,但聚合在设备层面。假设有 D 台设备,每台设备承载 mN/D 个专家。fd 是路由到设备 d 上所有专家的 token 比例,Pd 是设备 d 上门控概率的均值。这个损失确保 all-to-all 通信阶段没有设备成为瓶颈。
双层设计的原因是:单靠专家级损失可以保证全局专家间负载均匀,但在分布式场景下,如果某台设备上的所有专家恰好收到少量 token 但是高概率、另一台设备上的专家收到大量 token 但是低概率,计算和通信负载仍然不均衡。设备级损失直接针对这个问题。
论文中 α1 = 0.01(专家级)、α2 = 0.001(设备级)。设备级的系数更小,因为它已经隐含了一部分专家级均衡的效果,只需要做微调来调整设备间的细粒度不平衡。
论文在三个不同规模上验证了 DeepSeekMoE 架构的效果,每个规模都与对应的稠密模型或传统 MoE 基线进行对比:
| 模型 | 总参数 | 激活参数 | 对标模型 | 计算量比例 | 效果 |
|---|---|---|---|---|---|
| DeepSeekMoE 2B | ≈2B | ≈2B | Dense 2B | ≈100% | 逼近理论上限(密集模型下限) |
| DeepSeekMoE 16B | 16.3B | ≈2B | LLaMA2 7B | ≈40% | 超越 LLaMA2 7B 性能 |
| DeepSeekMoE 145B | 145B | ≈28.5B | DeepSeek 67B | ≈28.5% | 持平 DeepSeek 67B 稠密 |
这三个规模分别对应不同的科学目的:
论文对两个创新点分别做了系统性的消融分析,以确认每个组件的独立贡献:
细粒度专家分割消融:
共享专家隔离消融:
DeepSeekMoE 的训练吞吐量(training throughput)是同等参数规模稠密模型的 3–4 倍。这意味着在相同的训练时间和硬件预算下,可以训练更大规模的模型,或者用更少的时间达到相同的 loss。
更重要的是,训练吞吐量与专家总数的关系几乎是线性增长的——得益于细粒度专家的并行化潜力:更多的小专家可以更均匀地分布在更多设备上,all-to-all 通信的瓶颈被设备级平衡损失进一步缓解。在 145B 模型的训练中,模型 FLOPs 利用率(MFU)达到了令人满意的水平。
论文还训练了基于 DeepSeekMoE 的 Chat 模型(DeepSeekMoE Chat),使用 SFT(Supervised Fine-Tuning)微调。在多个对话基准(包括 MT-Bench、AlpacaEval)上,DeepSeekMoE Chat 在同等总参数量下显著优于传统 MoE 的 Chat 版本,进一步验证了该架构对下游任务(包括对话、指令遵循、生成)的通用适用性。
值得注意的是,Chat 模型的评估结果还揭示了一个"良性效应":因为共享专家已经提供了流畅的语言表达能力,路由专家可以专注于学习与任务相关的知识,因此在 SFT 阶段,针对路由专家做 LoRA 微调的效果比全参数微调的效果更可控。
GShard(Lepikhin et al., 2020)—首个在 Transformer 中大规模应用 MoE 的工作,提出了 Top-2 路由、专家分片到 TPU、辅助损失等基础方案。DeepSeekMoE 继承其框架,但通过细粒度+共享专家解决了其"专家混杂"的问题。
Switch Transformer(Fedus et al., 2021)—将路由简化到 Top-1,实现了首个万亿参数 Transformer。其可微辅助损失的设计也被 DeepSeekMoE 借鉴。但 Switch Transformer 的 K=1 路由使每个 token 只能接触一个专家,表达能力天然受限——细粒度专家分割通过激活 mK 个专家弥补了这个缺陷。
DeepSeek V2(2024)—在 DeepSeekMoE 基础上引入了 Multi-Head Latent Attention(MLA),进一步降低了 KV 缓存的参数量。DeepSeek V2 沿用了细粒度专家分割和共享专家隔离的设计,但将 FFN 中间维度做了进一步优化。DeepSeek V2 的最终激活参数量仅为总参数的 5% 左右,进一步压缩了推理成本。
DeepSeek V3(2025)—延续了 DeepSeekMoE 的架构路线,在更极致的规模(671B 总参数,37B 激活)下验证了细粒度设计在海量数据和超大规模训练中的稳定性。DeepSeek V3 的 MoE 部分几乎就是 DeepSeekMoE 架构的超大规模版本,证明了该设计在更大规模下的可扩展性。
Qwen2 MoE(2024)—阿里通义千问团队发布的 MoE 模型。在 Qwen2 的技术报告中明确引用了 DeepSeekMoE 的"细粒度专家分割"设计思路,采用了类似的架构:更多、更小的路由专家 + 共享专家。这侧面验证了该架构在业界的通用性和实用性。
DeepSeekMoE 处于 MoE 架构演进的一个关键节点:
读这篇论文最强烈的感受是:"细粒度"不是一个发明,而是一个自然演化。让每个专家的容量变小、数量变多——这就像经济体从"全能家庭作坊"演化为"专业分工工厂"的过程。论文的洞察在于:传统 MoE 的专家数量(8–16 个)在相对维度上还是"太少",远远没有达到"分工"的临界点。一旦跨过这个临界点(mN=64–128 个),专业化的质变就发生了。
这个思路让我想到 Transformer 中注意力头数的演变:从 8 头增加到 32、64、128 头,每个头也变得更"小"、更"专注"。DeepSeekMoE 把这个思路从注意力层推广到了 FFN 层,本质上都是"参数越多越好,但每次激活越少越精"的哲学体现。
共享专家隔离可能是整篇论文中最让我惊叹的设计——不是因为复杂,而是因为太显而易见了,却没人想到。"基础语言知识让所有专家共享"——这个想法回头看起来像常识,但在 DeepSeekMoE 之前,所有 MoE 工作都把"通用知识"和"专精知识"的分离任务隐含地扔给了门控网络和专家本身。把这个问题显式化、架构化,是典型的"好论文不是解决难问题,而是把难问题变简单"。
路由组合从 120 种提升到 44 亿种,这个量级变化是理解 DeepSeekMoE 能力的关键。但更重要的是要认识到:网络并不需要真正"探索"所有组合,它只需要有足够的容量来"表达"对不同 token 的不同需求。组合爆炸的本质是"表达能力的自由度"——当门控网络想为一个 token 组合 8 个小专家时,它几乎总能找到合适的组合,因为空间足够大。
就像在你的键盘上打字:你不需要尝试每个键的每一种组合,但 104 个键的组合空间保证了你可以表达任何语言。细粒度专家的组合空间保证了你可以为任何 token 找到合适的"知识组合"。
DeepSeekMoE 的成功暗示了一个更普遍的设计原则:在 Transformer 架构中,"单一化"往往是瓶颈,"专业化+组合"才是解药。注意力头从 8 头增加到 32–128 头也是类似的逻辑——更多、更专注的头组合出更丰富的表示。FFN 层的 MoE 化也是同样的道理。这个思路在后续研究中不断被验证:MLA 中的低秩共享 KV 缓存、Hyper-Connections 中的多分支残差,都可以看作"专业化+组合"原则的不同表现。
从工程实践看,DeepSeekMoE 证明了:好的架构设计可以大幅度压缩推理成本而不牺牲质量。145B 模型只需要 28.5% 的计算量就能达到 67B 稠密模型的水平——这意味着在相同的硬件上,推理速度可以快 3–4 倍,或者部署成本降低 3–4 倍。这对于实际应用(特别是大规模推理服务)具有巨大的商业价值。这也解释了为什么 DeepSeek 后续模型(V2/V3)坚定地持续迭代这个方向。
另外,细粒度专家的设计天然更适合分布式部署:128 个小专家可以灵活分配到多台 GPU 上,不像传统 MoE 中 16 个大专家难以均匀分片。这意味着 DeepSeekMoE 在工程上更容易扩展到大规模集群。