一、引言
最近非常火爆的DeepSeek-V3模型,是一个包含6710亿总参数的强大混合专家模型(MoE),其中每个token激活370亿参数。该模型在DeepSeek-V2验证有效的核心架构基础上,采用多头潜在注意力(MLA)机制 和DeepSeekMoE架构 ,显著提升推理效率并降低训练成本。DeepSeek-V3创新性地引入无辅助损失的负载均衡策略,并采用多标记预测训练目标以增强模型性能。
混合专家模型(MoE) 作为突破传统密集模型瓶颈的核心架构,通过任务分治理念实现计算效率与模型容量的双重突破。
DeepSeekMoE 的突破性表现印证了该技术的战略价值。MoE架构通过专家拆分、无辅助损失负载均衡等创新,使国产大模型首次在参数效率、训练稳定性等维度超越国际竞品,为构建多模态通用智能底座开辟新路径。
本文将采用图解的方式详细介绍一下混合专家模型(MoE) 的技术原理。
二、什么是混合专家MoE模型
混合专家(Mixture of Experts,简称 MoE)模型 ,是一种利用多个不同的子模型(或"专家")来提升大语言模型(LLM)质量的技术。
MoE模型的主要组成部分包括:
专家(Experts): 模型中的每个专家都是一个独立的神经网络,专门处理输入数据的特定子集或特定任务。例如,在自然语言处理任务中,一个专家可能专注于处理与语言语法相关的内容,而另一个专家可能专注于语义理解。
路由或者门控网络(Gating Network): 门控网络的作用是决定每个输入样本应该由哪个专家或哪些专家来处理。它根据输入样本的特征计算出每个专家的权重或重要性,然后根据这些权重将输入样本分配给相应的专家。门控网络通常是一个简单的神经网络,其输出经过softmax激活函数处理,以确保所有专家的权重之和为1。
"专家"并不是专门针对某个领域,如"心理学"或"生物学"。它只是语法层面的专家,具体来说,它们的专长是在特定的上下文中处理特定的标记。
路由器(门控网络)来选择最适合给定输入的专家(们):
每个专家并不是一个完整的 LLM,而是 LLM 架构中的子模型部分。
三、发展历程
-
早期探索:理论奠基与原型构建
混合专家模型(MoE)的起源可追溯至1991年Michael Jordan与Geoffrey Hinton的开创性研究。在论文《Adaptive Mixture of Local Experts》中,他们首次提出通过多个独立网络(专家)协同处理数据子集,并引入门控网络动态分配任务。这一架构突破性地解决了传统神经网络中不同任务间的干扰问题,为后续研究奠定基础。早期MoE模型虽受限于算力和数据规模,但已展现出任务分治思想的潜力------通过专家网络专业化分工,门控网络竞争性选择最优处理路径,显著提升了模型学习效率。
-
关键突破:稀疏计算与动态激活
2017年成为MoE发展的分水岭。谷歌团队在《Sparsely-Gated Mixture-of-Experts》中提出两项革命性创新:
其一,将稀疏门控机制引入LSTM网络,仅激活2-4个专家处理每个token,使模型参数量突破千亿级时仍保持高效推理;
其二,采用token级路由策略,实现细粒度计算资源分配。
这两项突破使MoE在自然语言处理领域大放异彩,Google的GShard项目更将MoE成功整合至Transformer架构,为后续大模型时代铺平道路。
-
当代演进:架构革新与国产突破
GPT-4的发布标志着MoE进入工业化应用阶段。其采用8个220B参数的专家模块,通过动态路由实现万亿级参数规模下的高效推理。这种"模型堆叠"策略突破单一模型扩展瓶颈,使推理成本降低至传统密集模型的1/8。而国产DeepSeekMoE进一步加速了MoE领域的技术创新。该架构通过三大技术创新实现跨越式发展:
首创无辅助损失的负载均衡策略 ,消除传统路由算法对平衡性约束的依赖;
采用多token预测训练目标 ,提升专家协作效率;
参数效率达到国际领先水平,6B模型以40%计算量实现LLaMA2 7B性能,145B版本更以28.5%资源匹配67B密集模型表现。
DeepSeekMoE的成功实践证明,通过专家专业化分工与智能路由机制的深度结合,MoE正在重塑大模型的技术范式,为通用人工智能时代的到来提供关键基础设施。
四、架构设计
4.1 专家架构
- 密集层 (Dense Layer)
为了探讨专家(MoE中的E)的代表意义和它们的工作方式,我们首先需要了解 MoE 原本要替代的密集层。
混合专家(MoE)起始于 LLM 相对基础的功能,即前馈神经网络(FFNN)。
密集层(Dense Layer)是前馈神经网络(FFNN)中的全连接层,每个神经元通过权重矩阵与前一层的所有输出相连,利用激活函数实现特征的非线性组合,用于学习输入数据的高阶抽象表示。
传统 Transformer 中的前馈神经网络(FFNN)被称为密集模型,因为所有参数(权重和偏置)都会被激活。没有任何参数被遗漏,所有参数都参与输出计算。
如果我们更仔细地观察这种密集模型,可以发现输入会在某种程度上激活所有参数:
- 稀疏层 (Sparse Layers)
与此相对,稀疏模型仅激活一部分参数,并且与混合专家(MoE)紧密相关。
可以将密集模型切割成多个部分(所谓的专家),重新训练它,并且在给定时间内只激活一组专家:
其底层思想是每个专家在训练过程中学习不同的信息。然后,在进行推理时,仅使用与给定任务最相关的特定专家。
- 专家的架构
将专家视为密集模型中的隐藏层并将其切分成块,它们通常本身就是完整的前馈神经网络(FFNN),
由于大多数 LLM 具有多个解码器块,因此给定文本将在多个专家之间传递,直到文本生成:
所选的专家很可能在标记之间有所不同,这就导致了不同的"路径"被选择:
如果我们更新解码器块的可视化,它现在会包含更多的 FFNN(每个专家一个):
解码器块现在有多个 FFNN(每个都是一个"专家"),可以在推理时使用。
4.2 路由机制
现在我们有了一组专家,那么模型是如何知道应该使用哪些专家的呢?
在专家之前,添加了一个路由器(也叫网关网络),它经过训练来选择哪个专家适合给定的标记。
- 路由器
路由器(或门控网络)也是一种前馈神经网络(FFNN),它根据特定的输入来选择专家。它输出概率,并利用这些概率来选择最匹配的专家:
专家层返回所选专家的输出,并乘以门值(选择概率)。
路由器与专家(其中只有少数几个被选中)一起构成了 MoE 层:
给定的 MoE 层有两种大小,分别是稀疏的混合专家或密集的混合专家模型。
这两者都使用路由器来选择专家,但稀疏 MoE 只选择几个,而密集 MoE 则选择所有专家,但可能以不同的分布进行选择。
给定一组标记,密集MoE 会将标记分配给所有专家,而稀疏 MoE 只选择少数专家。
- 专家的选择
门控网络可以说是任何 MoE 模型中最重要的组成部分,因为它不仅决定了在推理过程中选择哪些专家,还决定了在训练过程中选择哪些专家。
在最基本的形式中,我们将输入(x)与路由器权重矩阵(W)相乘:
然后,我们对输出应用 SoftMax 操作,为每个专家创建概率分布 G(x):
路由器使用这种概率分布来选择与给定输入最匹配的专家。
最后,我们将每个路由器的输出与每个选定的专家相乘,并对结果进行求和。

4.3 混合专家模型流程图
下图显示了输入是如何通过路由器和专家进行流动的。
五、技术优势详解
5.1 计算效率:条件计算带来的FLOPs优化
混合专家模型(MoE)通过稀疏激活机制实现计算效率质的飞跃。每个token仅激活2-4个专家(总专家量可达数千),避免传统密集模型的全参数计算。例如,DeepSeekMoE 16B模型激活参数仅6.5B,却以40%计算量达到LLaMA2 7B的性能。这种效率源于:
-
动态路由 :门控网络实时筛选相关性最高的专家
简单的函数常常导致路由器会选择相同的专家,因为某些专家可能比其他专家学习得更快:
选择的专家分布不均,会导致一些专家几乎不会被训练到,这导致在训练和推理过程中都会出现问题。
因此,希望在训练和推理过程中,专家之间具有相等的重要性,这就是我们所说的负载均衡。从某种意义上说,这是为了防止对同一专家的过拟合。
-
负责均衡 :KeepTopK
为了平衡专家的重要性,我们需要关注路由器,因为它是决定在特定时刻选择哪些专家的主要组成部分。
负载均衡路由器的一种方法是通过一个简单的扩展,叫做 KeepTopK。通过引入可训练的(高斯)噪声,我们可以防止总是选择相同的专家:
然后,除了你想激活的前 k 个专家(例如 2 个)之外,其余专家的权重将被设置为 -∞:
通过将这些权重设置为 -∞,这些权重上的 SoftMax 输出将导致概率为 0:
-
辅助损失
为了在训练期间获得更均匀的专家分布,辅助损失(也称为负载均衡损失)被添加到网络的常规损失中。
这个辅助损失的第一个组成部分是对整个批次中每个专家的路由器值进行求和:
这给出了每位专家的重要性分数,表示无论如何输入,某位专家被选择的可能性。
我们可以使用这个来计算变异系数(CV),它告诉我们不同专家之间的重要性分数差异有多大。
使用这个 CV 分数,我们可以在训练过程中更新辅助损失,目的是尽可能降低 CV 分数(从而给每个专家相等的重要性):
5.2 扩展能力:模型容量与计算成本的解耦
MoE架构突破参数规模与计算资源的线性关系。DeepSeekMoE 145B模型通过专家拆分策略,在保持计算成本28.5%的情况下,性能超越Google GShard。关键技术包括:
- 专家并行 :将专家分布在不同计算节点
不平衡不仅存在于被选择的专家中,也存在于分配给专家的 token 分布中。
例如,如果输入 token 不成比例地分配给某个专家,而忽视了其他专家,那么也可能导致训练不足:
这里的问题不仅是哪些专家被使用,而是它们被使用的频率。
解决这个问题的一种方法是限制每个专家可以处理的 token 数量,即专家容量。当一个专家的容量达到上限时,剩余的 token 会被发送到下一个专家:
如果两个专家的容量都已满,那么 token 将不会被任何专家处理,而是被发送到下一层,这就是 token 溢出。
- 容量因子调节:动态调整专家处理token上限
- Token 选择
KeepTopK 策略是将每个 token 路由发送到少数几个选定的专家。这种方法称为 Token Choice,允许将给定的 token 发送到一个专家(top-1 路由):
或发送到多个专家(top-k 路由):
六、训练优化技术解析
1. 联合训练策略
专家-路由器协同优化 采用双路径反向传播:
DeepSeek创新的多token预测目标 :
- 同时预测当前token及后续n个token
- 迫使专家学习长程依赖关系
- 训练效率提升30%(相同epoch数下困惑度降低18%)
6.2 分布式训练实践
专家并行架构实现超大规模训练:
输入数据 Split into Shards GPU1: Expert A GPU2: Expert B GPU3: Expert C Gather Outputs Final Output
DeepSeek关键参数:
- 通信压缩:采用1-bit梯度量化,通信量减少83%
- 流水线并行:重叠计算与通信,GPU利用率达92%
- 检查点策略:每30分钟自动保存,恢复训练仅需2分钟
资源消耗:
- 145B模型全量训练消耗278.8万H800 GPU小时
- 同等规模密集模型需920万GPU小时(成本降低67%)
七、技术突破总结
MoE架构通过计算稀疏化 与参数专业化的双重革新,正在重塑大模型技术路线。DeepSeek系列实践证明,国产模型在专家拆分策略(如将单个专家拆分为两个子专家而不增加参数量)、动态路由算法等领域已形成独特技术优势。未来随着万亿级MoE模型的出现,这种架构将成为突破算力瓶颈的核心解决方案。
【参考文献】
本文参考了 Maarten Grootendorst的文章,其是"袋鼠书"Hands-On Large Language Models 的作者,你可以在《袋鼠书》中查看更多关于大语言模型可视化的内容。
英文版封面,中文版封面
《图解大模型》
Jay Alammar,Maarten Grootendorst | 著
李博杰 | 译
美亚 4.7 星评,畅销书 Hands-on 系列新作。只要具备 Python 基础,就可以通过本书学习大语言模型,并将大语言模型的能力应用到真正的 AI 实践中。
本书将为 Python 开发人员提供使用大模型的实用工具和概念,帮助大家掌握实际应用场景。你将学习如何利用预训练的大型语言模型进行文案撰写、文本摘要、语义搜索等任务,构建超越关键词匹配的智能系统。