DeepSeek核心技术(二) MoE(混合专家模型)| 近4千字翻译+解释
DeepSeek核心技术(二) MoE(混合专家模型)| 近4千字翻译+解释
DeepSeek-V3是DeepSeek公司推出的第三代AI大模型,其核心技术之一是混合专家模型(MoE)。相比传统的稠密模型,MoE通过引入多个小型专家网络,实现了计算效率和模型性能的双重提升。本文将详细介绍DeepSeekMoE的核心技术,包括MoE的基本原理、DeepSeekMoE的创新架构以及负载均衡策略等关键内容。
在DeepSeek-V2的基础上,采用MLA(多头潜在注意力)和DeepSeekMoE进行高效的推理和经济的训练。下图说明了DeepSeek-V3的基本架构。
一 稠密和稀疏
在神经网络中,“稠密”和“稀疏”是用来描述参数或激活模式的术语。
■ 稠密(Dense)
在传统的神经网络中,稠密通常指每一层的神经元都与前一层的所有神经元相连,即全连接层。这种连接方式是“稠密”的,因为每个输入都会影响到所有的输出,参数数量较多,计算开销也较大。在传统的前馈网络(FFN)中,所有的输入都会经过整个网络的处理,每个神经元都会参与计算,因此这种结构是“稠密”的。
■ 稀疏(Sparse)
稀疏则指只有部分神经元或参数被激活或使用。
在稀疏MoE(混合专家模型)层中,稀疏性体现在每次前向传播时,只有部分专家(即部分神经网络)被激活并参与计算,而不是所有的专家都参与。这种稀疏激活策略显著减少了计算开销,因为每次只需要计算被激活的专家,而不是所有的专家。这种机制使得模型能够在保持高维特征空间中表达复杂模式的同时,降低计算成本。
Dense 模型在深度学习中通常指的是一种全部神经元都参与计算的网络结构。这种结构使得模型能够充分利用数据特征,并且训练过程中参数共享,减少了计算量和过拟合的风险。一般来说,Dense 模型可以视为仅有一个专家的MoE 模型。在大模型领域,Dense 模型和 MoE 各有各的应用场景和优势,MoE 还无法代替 Dense 模型的行业应用。
二 稀疏MoE层
■ MoE的核心思想
MoE的核心思想是利用多个较小的神经网络模型(称为专家),每个模型专注于处理数据的一个特定方面。在预测时,首先通过一个共享的“gate”网络(也称为路由网络或选择网络)来决定每个输入数据应该由哪个专家模型处理。这种机制允许系统动态地选择最适合当前输入数据的专家,从而提高整体的预测准确性和效率。
■ MoE的优点
- 灵活性和可扩展性:可以根据任务需要增加或减少专家数量,灵活调整模型复杂度。
- 效率提升:通过并行处理不同的专家,可以显著提高处理速度,尤其是在大规模数据和高维度数据上。
- 更好的泛化能力:每个专家专注于特定任务,可以更好地处理特定类型的输入数据,从而提高模型的泛化能力。
■ 稀疏MoE层
稀疏MoE层是混合专家模型的核心组件,通常用于替代传统Transformer中的前馈网络(FFN)层。
这些层由多个"专家"构成,每个专家本质上是一个独立的神经网络。在典型实现中,这些专家是简单的前馈网络,但根据实际需求,它们也可以采用更复杂的结构,甚至嵌套 MoE 层,从而形成多层次的专家体系。
值得注意的是,每个专家FFN的结构都比传统FFN更简单,因为单个专家只需要处理特定类型的输入,而传统FFN则需要处理所有情况。这种专业化分工使得每个专家可以使用更少的参数来完成其特定任务。
MoE 层的工作原理基于稀疏激活策略:在每次前向传播中,仅部分专家会被激活并参与计算。这种机制显著降低了计算开销,同时保留了模型在高维特征空间中表达复杂模式的能力。见下图,图中显示两组专家系统,每组4个FFN专家(FFN 1-4)。
◎ 结构特点
包含多个FFN专家网络。每个专家都是独立的前馈神经网络。采用稀疏激活机制,即每个token只会激活少数专家。
◎ 稀疏性体现
不是所有专家都会被同时使用。每个token只会路由到最相关的专家。专家之间相互独立,可以并行计算。
三 门控网络/路由机制( Router)
门控网络(或路由机制)负责动态分配输入token到特定的专家。该机制的目标是根据输入特征,选择最适合处理这些特征的专家。在某些情况下,一个token甚至可以被分配到多个专家以提高鲁棒性。
路由机制的实现依赖于一个由参数化学习驱动的路由器。该路由器通常是一个小型神经网络或逻辑模块,其输出为一组概率或分配权重,用于指引令牌分发过程。路由器的参数通过与主模型共同优化,使其在不同训练阶段能够动态适应数据分布和任务需求。
双重机制(路由概率 + 门控值)使得模型既能够选择合适的专家,又能够灵活地控制专家输出的影响程度。见下图。
四 DeepSeekMoE(DeepSeek-V3的核心架构)
DeepSeek-V3/DeepSeek_V3.pdf at main · deepseek-ai/DeepSeek-V3 · GitHub
■ DeepSeekMoE 的基本结构
DeepSeekMoE 的基本架构建立在 Transformer 框架之上,在前馈网络(FFN)层引入了创新的 MoE 机制。DeepSeekMoE 采用了更细粒度的专家划分方式,使每个专家能够负责更具体的任务,从而提高模型的灵活性和表达能力。
令ut表示第t个令牌的FFN输入,我们计算FFN输出h′t如下:
其中,Ns和Nr分别表示共享专家和路由专家的数量;
和
分别表示第i个共享专家和第i个路由专家;
表示被激活的路由专家的数量;
是第i个专家的门限值;
为Token-To-Expert亲和力;
是第i个路由专家的质心向量;
Topk( · , K)表示由第t个代号和所有路由专家计算的亲和力得分中包含K个最高得分的集合。
与DeepSeek-V2略有不同的是,DeepSeek-V3使用sigmoid函数计算亲和度得分,并在所有选择的亲和度得分之间进行归一化处理以产生门控值。
综上,在专家机制设计上,DeepSeekMoE 进行以下创新:
◎ 共享专家与路由专家
不同于传统 MoE 中专家都是独立的设计,DeepSeekMoE引入了共享专家的概念。共享专家始终会被路由,在训练中重点确保路由专家的路由均衡。共享专家负责处理所有 token 的通用特征,而路由专家则根据 token 的具体特征进行动态分配。这种分工不仅减少了模型的冗余、提高了计算效率,还使得模型能够更好地处理不同领域的任务。
◎ 稀疏激活机制
与传统的稠密模型不同,DeepSeekMoE 采用了稀疏激活机制,即每个 token 只会激活少数专家。这种机制不仅降低了计算开销,还使得模型能够更灵活地处理不同类型的输入。
细粒度的专家划分和共享专家机制的结合,使得模型能够更精确地处理专业任务,同时保持计算效率。
■ 无辅助损失的负载均衡:动态负载均衡
在传统的 MoE 模型中,负载均衡是一个关键问题。
相比 Dense 模型,MoE 主要增加了专家路由,通过门控(开或关)的方法,负责将数据流引向不同的专家模块。专家路由事实上引入了一个不连续的门控函数,这导致梯度下降优化方法在 MoE 训练中表现不佳,甚至出现“路由崩溃”,即模型容易陷入始终为每个 Token 激活相同的少数专家的窘境,而不是将计算合理的传播到所有的可用专家。这也是 MoE 模型训练的难点。
传统 MoE通常使用辅助损失(auxiliary loss)来鼓励负载均衡,但这种策略可能会对模型性能产生负面影响。DeepSeekMoE 提出了无辅助损失的负载均衡策略,通过动态调整每个专家的偏置项来实现负载均衡。
无辅助损失策略是指在训练过程中,不需要引入额外的损失函数来强制负载均衡,而是通过动态调整专家的偏置项来自然实现负载均衡。通过动态调整,DeepSeek-V3在训练过程中保持了均衡的专家负载,取得了比单纯通过辅助损失鼓励负载均衡的模型更好的性能。
无辅助损耗负载均衡(Auxiliary-Loss-Free Load Balancing)方法是将特定于专家的偏差项添加到路由机制和专家亲和力中。偏差项不会通过梯度下降进行更新,而是在整个训练过程中持续监控并进行调整以确保负载平衡。如果训练中某个专家没有获得合理的命中次数,可以在每个梯度步骤中微调偏差项增加命中概率。
简言之,在训练过程中,DeepSeekMoE 会监控每个专家的负载情况。如果某个专家的负载过高,系统会自动降低其偏置项,从而减少该专家的激活频率;反之,如果某个专家的负载过低,系统则会增加其偏置项,使其更容易被激活。
与传统的辅助损失相比,无辅助损失的负载均衡策略不会对模型性能产生负面影响,同时能够有效避免路由崩溃现象。
■ 互补序列级辅助损失:防止单个序列内的极端不平衡
虽然DeepSeek-V3主要依靠无辅助损失的策略进行负载均衡,但是为了防止单个序列内的极端不平衡,还采用了一种互补的序列平衡损失:
平衡因子α是一个超参数,它将为DeepSeek-V3分配一个极小的值;序列平衡损失鼓励专家在每个序列上的负载是平衡的。
在 MoE 模型中,负载均衡可以在不同粒度上进行控制。
除了全局的负载均衡(即针对整个数据集的专家分配情况)和局部级负载均衡(即针对单个 batch 或单个节点的专家分配情况),DeepSeekMoE 还引入了序列级负载均衡。序列级负载均衡专门针对单个输入序列内的 token 分配情况进行优化,防止单个序列内的 token 过度集中在少数专家上,从而避免极端不平衡的情况。这种细粒度的均衡策略是对全局和局部负载均衡的补充,确保即使在单个序列中,专家的负载也能保持相对均衡。这些不同级别的负载均衡策略共同作用,确保模型在不同粒度上都能高效运行。
■ 节点限制路由:减少跨节点的通信开销
在分布式训练环境中,跨节点的通信成本较高,尤其是在专家并行的情况下。为了减少训练过程中的通信开销,DeepSeekMoE 采用了节点限制的路由机制。每个 token 最多被发送到最多M个节点(显著减少跨节点的通信开销,从而提高训练效率),这些节点是根据每个节点上专家的亲和度得分选择的。在这个约束条件下,MoE训练框架几乎可以实现完全的计算-通信重叠。使得在模型规模进一步扩展时,通信开销几乎可以忽略不计。
■ 无 token 丢弃:确保推理负载均衡
在传统的 MoE 模型中,由于专家处理容量有上限,负载不均衡可能导致某些 被丢弃,从而影响模型的性能。得益于有效的负载均衡策略,DeepSeek-V3在充分训练的过程中保持了较好的负载均衡。因此,DeepSeek-V3在训练过程中不会丢弃任何token。此外,我们还实施了特定的部署策略(通过冗余专家部署策略,确保每个 GPU 的负载均衡。具体来说,系统会检测高负载的专家,并将这些专家冗余部署在不同的 GPU 上,从而平衡每个 GPU 的负载)来保证推理负载均衡,因此DeepSeek-V3在推理过程中也不会丢弃token。
因此,DeepSeekMoE 通过有效的负载均衡策略,确保了在训练和推理过程中不会丢弃任何 token。