导读:本文是“数据拾光者”专栏的第九十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要分享了DeepSeek模型中用到的非常重要的一个技术混合专家模型MoE,对MoE感兴趣的可以多交流。
欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。
知乎专栏:数据拾光者
公众号:数据拾光者
01 MoE发展历程
Mixture of Experts(MoE,混合专家模型)是一种通过组合多个专家网络来完成复杂任务的机器学习架构。它的发展历程可以追溯到20世纪90年代,并在近年来随着深度学习和大规模模型的发展得到了广泛应用。以下是MoE的发展历程及其在不同领域的应用,结合相关论文进行介绍:
1.1 早期起源与基础理论(20世纪90年代)
MoE的概念最早可以追溯到1991年,由Jacobs等人在论文《Adaptive Mixtures of Local Experts》中提出。他们将MoE定义为一种将多个“专家”网络组合起来的架构,每个专家网络负责处理输入数据的一个子集,而一个“门控网络”则负责分配输入到各个专家。这种架构的设计初衷是为了提高模型的灵活性和适应性,同时减少计算负担。下面是Mixture of Experts的原型框架:
一直到今天,MoE的框架仍然是这样,MoE框架由以下三个关键部分组成:
专家(Experts):这些是独立的子网络,每个专家专注于处理输入数据的特定子集或任务。例如,在自然语言处理中,一个专家可能擅长处理语法,另一个专家可能擅长语义理解。
门控网络(Gating Network):门控网络的作用是决定每个输入样本应该由哪个专家或哪些专家来处理。它根据输入样本的特征计算出每个专家的权重,并将输入数据分配给相应的专家。
选择器(selector):根据专家权重来做专家选择的策略。可以选择权重最高的Top1专家或选择TopK专家来融合得到最终的结果。
1.2 深度学习时代的复兴(2010年代)
随着深度学习的兴起,MoE在神经网络中的应用逐渐受到关注。2017年,Google Brain团队在论文《Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer》中提出了一种稀疏门控的MoE层。这种架构将MoE与深度神经网络结合,显著提高了模型的扩展性和效率,同时保持了较低的计算开销。该研究为MoE在大规模模型中的应用奠定了基础。
1.3 大规模模型中的应用(2020年代)
近年来,MoE在大规模语言模型和多模态模型中得到了广泛应用。Transformer架构提出之后,Google在2020年发表了论文《GShard: Scaling Giant Models with Conditional
Computation and Automatic Sharding》,提出了经典的在Transformer架构上做MoE的经典设计如下图所示:
基于Transformer的MoE架构中,主要是使用Top-2 门控的MoE网络来替换Transformer Encoder中的FFN层。不仅如此,还可以在不同设备间共享MoE层,其他所有层则在每个设备上进行复制。GShard主要做了两个重要优化:基于Transformer架构的MoE层设计和辅助负载均衡损失函数Auxiliary Loss。基于Transformer架构的MoE层设计就是使用Top-2 门控的MoE网络来替换Transformer Encoder中的FFN层,具体的计算流程是对于一个token分别经过门控网络和专家网络来计算门控制和专家输出,然后用门控制加权多个专家来输出最终结果。
在MoE模型中,输入数据会被动态地分配到不同的专家网络中进行处理。每个输入样本通常只被分配到少数几个专家(例如,通过“Top-k”选择机制)。然而,如果没有适当的约束,可能会出现以下问题:
某些专家被分配过多的输入样本,导致过载。
其他专家则可能几乎没有输入样本,导致训练不足。
辅助负载均衡损失函数Auxiliary Loss的主要作用是通过优化目标来平衡专家的负载,确保每个专家都能得到足够的训练样本,从而提高模型的整体效率和性能。辅助损失通常是基于专家的负载分布来设计的。具体来说,它会惩罚那些负载不均衡的情况,从而鼓励模型更均匀地分配输入样本到各个专家。GShard作者提出了一个具体的辅助损失公式:
在实际实现中,辅助损失通常会与主损失函数(如交叉熵损失)结合在一起。具体来说,模型的总损失函数可以表示为:
辅助损失通过惩罚负载不均衡的情况,间接影响门控网络(Gating Network)的输出,从而调整输入样本的分配策略;通过调整 λ 的值,可以平衡负载均衡和模型性能之间的关系。
除此之外,2021年FastMoE团队提出了一种高效的MoE训练系统,能够支持大规模分布式训练;2023年,Stable AI团队在SDXL 1.0模型中引入了MoE潜在扩散过程,用于文本到图像的合成。这种架构不仅提高了生成图像的质量和多样性,还展示了MoE在多模态任务中的潜力。
1.4 多任务学习与自适应优化(2023-2024年)
MoE在多任务学习中的应用也取得了显著进展。例如,2023年,Mod-Squad团队将MoE层集成到视觉Transformer模型中,并引入新的损失函数。这种设计允许模型在训练过程中动态匹配专家和任务,从而实现高效的多任务视觉识别。此外,AdaMV-MoE框架能够自适应地确定每个任务所需的专家数量,进一步简化了模型优化过程。
1.5 工业与实际应用(2023-2025年)
MoE在工业领域的应用也逐渐增多。例如,在智能制造中,MoE被用于预测工业设备的剩余使用寿命(RUL)。通过将不同类型的专家网络与门控网络结合,MoE能够根据实时数据动态选择合适的专家,从而提供高效的决策支持。
02 DeepSeek中MoE迭代
2.1 DeepSeekMoE
DeepSeek2024年1月在论文《DeepSeekMoE: Towards Ultimate Expert Specialization in
Mixture-of-Experts Language Models》中指出了传统Mixture-of-Experts(MoE)架构在大规模语言模型中存在的一些问题,这些问题限制了专家(Experts)的专业化程度和模型的整体性能。具体问题如下:
1.知识混合(Knowledge Hybridity):在传统的MoE架构中,每个专家网络(Expert)通常需要处理多种不同类型的输入数据。例如,在一个包含有限数量专家(如8个或16个)的MoE模型中,分配给某个专家的输入token可能涵盖多种不同的知识领域(如数学、编程、语言理解等)。这种情况下,单个专家需要在其参数中同时学习和存储多种不同类型的知识,这导致了以下问题:知识泛化不足:专家无法专注于特定领域的知识,导致其在特定任务上的表现不如专门针对该任务训练的模型;参数效率低下:由于专家需要存储多种知识,其参数可能不够高效,无法充分利用有限的资源。
2.知识冗余(Knowledge Redundancy):在传统的MoE架构中,不同专家之间可能存在知识冗余。具体来说,不同专家可能会学习到相似的知识,导致专家之间的参数重叠度较高。例如,多个专家可能都学习了语言模型中的基本语法知识,而这些知识在实际应用中可能是重复的。这种冗余导致了以下问题:参数浪费:多个专家存储相同的知识,导致模型的整体参数量增加,但实际的有效知识并没有相应增加;训练效率低下:由于专家之间存在冗余,模型在训练时需要花费更多的时间和计算资源来学习这些重复的知识。
3.专家激活策略的局限性(Limitation of Activation Strategies):传统的MoE架构通常采用Top-k激活策略(如Top-1或Top-2),即每个输入token只被分配到少数几个专家(通常是1个或2个)。这种策略虽然计算效率高,但也存在以下问题:知识覆盖不足:由于每个token只能激活少数专家,可能导致某些特定领域的知识没有被充分利用。例如,在复杂的多领域任务中,单个token可能需要多个专家的协同处理才能获得最佳效果;训练稳定性问题:Top-k激活策略可能导致模型训练过程中的不稳定现象。例如,某些专家可能因为缺乏足够的训练样本而无法得到充分的训练,而其他专家则可能过度训练。
4.大规模训练的挑战(Challenges in Large-Scale Training):随着模型规模的增加,传统的MoE架构在大规模训练中面临以下挑战:
计算资源需求高:大规模MoE模型需要大量的计算资源来支持模型的训练和推理,特别是在激活多个专家时,计算成本显著增加。
内存占用大:MoE模型中的专家网络数量和参数量增加,导致模型在训练和推理时对内存的需求大幅增加,这可能限制模型的可扩展性。
训练效率低下:由于专家网络的动态激活机制,模型在训练时需要频繁地进行数据交换和通信,这可能导致训练效率低下。
5. 专家负载不均衡(Expert Load Imbalance):在传统的MoE架构中,某些专家可能被频繁激活,而其他专家则很少被激活。这种负载不均衡会导致以下问题:
训练不均衡:某些专家可能因为缺乏足够的训练数据而无法得到充分的训练,而其他专家则可能过度训练,导致模型性能不稳定。
计算瓶颈:负载过高的专家可能会成为计算瓶颈,影响模型的整体训练和推理效率。
为了解决上述问题,DeepSeek MoE提出了以下优化方案:
细粒度专家分割(Fine-Grained Expert Segmentation):通过将专家网络进一步细分为更小的单元,并增加激活的专家数量,使模型能够更灵活地组合专家,从而提高知识的分解和学习精度。
共享专家隔离(Shared Expert Isolation):通过将部分专家设置为共享专家,并始终激活这些共享专家,来捕获和巩固跨不同上下文的共同知识,减少其他专家中的冗余。
优化激活策略:通过改进激活策略(如动态调整激活专家数量),提高模型对不同输入的适应性,减少知识覆盖不足的问题。
负载平衡机制:通过引入负载平衡损失函数,确保专家之间的负载更加均衡,避免某些专家过载或欠载。
下图展示了DeepSeek MoE将专家数从N增加到2N从而更细粒度的分割专家,同时还添加了一个共享专家隔离:
除此之外,DeepSeek MoE在数据处理、训练方法和推理性能上也进行了优化:
(1)数据处理优化:
多源异构数据融合:DeepSeek MoE 能够整合来自不同源和异构形式的海量数据。它将多样化的数据源,包括文本、图像、音频等,融合到模型的训练过程中。这种融合不仅增加了数据的多样性和丰富性,还使得模型能够从不同的角度和维度学习知识,从而提高模型的泛化能力和适应性。
数据增强:通过数据增强技术,如对输入数据进行微小的随机扰动或变换,可以增加数据的数量和多样性,提高模型的鲁棒性和泛化能力。例如,在文本数据上,可以采用同义词替换、语句重组等方法;在图像数据上,可以使用旋转、缩放、裁剪等变换。
数据预处理:DeepSeek MoE 对输入数据进行高效的预处理,包括数据清洗、格式化、标准化等。例如,在文本数据中,去除噪声、标准化文本格式、分词等预处理步骤。这些预处理步骤有助于提高数据的质量和一致性,从而提高模型的训练效率和性能。
(2)训练方法优化:
GPrefix 调优法:DeepSeek MoE 采用 GPrefix 调优法,在高效稀疏的 MoE 架构上仅调优 Prefix 层。这种方法在 1750B 的 LLM 推理中,只需要 1.2G 的参数量即可达到目标效果。通过加载不同领域的少量 Prefix 参数,模型可以快速完成微调,适配新领域,降低训练成本和资源消耗。
有监督调优法:利用来自不同专业回答网站的优质数据,以指令微调的方式训练模型。这些数据具有多样性(涵盖百科、科技、数学、编程等类别)和高质量(基于人工评分),通过人工反馈对数据进行清洗和标注。模型通过预测下文进行训练,并根据预测结果与实际数据的差异来优化参数,从而提高模型的准确性和可信度。
高质量数据监督调优法:DeepSeek MoE 采用精心筛选的高质量数据来进行有监督的微调。这些数据经过严格的质量控制和筛选,确保其准确性和可靠性。在训练过程中,模型通过对比预测结果与实际数据来调整参数,从而提高模型的性能和鲁棒性。
(3)推理性能优化:
MoE 架构相比于传统的密集模型,在推理性能上具有一些优势。首先,由于只有一部分专家网络被激活,计算资源可以得到更高效的利用,从而提高推理速度。其次,专家网络的动态路由机制可以根据输入数据的特征选择最合适的专家,这使得模型能够更好地适应不同的输入,提高推理的准确性。此外,通过优化专家网络的分布和激活策略,可以进一步降低推理延迟,提高吞吐量。 Intervention Parrot、ExpertCore 和 NEZHA-MoE 等技术也进一步增强了 MoE 架构的推理性能,实现了高吞吐量和低延迟推理。
2.2 DeepSeek V2中MoE
2024年1月在论文《DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model》采用了DeepSeekMoE架构,并进行了多项优化,以实现更高效的训练和推理,同时保持模型的强大性能。以下是优化项:
(1)设备限制路由(Device-Limited Routing):在训练过程中,DeepSeek-V2采用了设备限制路由机制,以减少MoE相关的通信开销。具体来说:
限制目标专家的设备数量
:在训练时,每个token的目标专家被限制在最多分布在3个设备上。这意味着,尽管模型可能包含大量的专家,但每个token的计算任务只会涉及有限的设备,从而减少了跨设备通信的频率和开销。
优化通信效率
:通过这种方式,DeepSeek-V2能够在保持高效计算的同时,显著降低通信成本,特别是在大规模分布式训练场景中。
(2)辅助损失函数(Auxiliary Losses):为了确保训练过程中的负载平衡和通信效率,DeepSeek-V2引入了三种辅助损失函数:
专家级负载平衡损失
(LExpBal):该损失函数旨在减少路由崩溃的风险,确保所有专家都能得到充分的训练和利用。它通过优化专家的选择概率,使得每个专家能够均匀地处理输入数据。
设备级负载平衡损失
(LDevBal):该损失函数确保不同设备之间的计算负载保持平衡。通过优化设备之间的负载分配,可以提高整个训练过程的效率。
通信平衡损失
(LCommBal):该损失函数旨在优化设备之间的通信负载,确保每个设备在发送和接收数据时都能保持平衡。这有助于减少通信瓶颈,提高分布式训练的整体效率。
(3)Token丢弃策略(Token-Dropping Strategy):为了进一步减少计算浪费,DeepSeek-V2在训练过程中引入了设备级Token丢弃策略。具体来说:
动态调整计算负载:在训练时,模型会计算每个设备的平均计算预算,并根据需要丢弃一些负载较低的Token。这种策略可以灵活地调整每个设备的计算负载,确保训练过程的高效性。
保留关键Token:为了保证模型的性能,DeepSeek-V2确保大约10%的训练序列中的Token不会被丢弃。这使得模型在训练过程中能够保留关键信息,同时提高训练效率。
(4)推理效率优化::在推理阶段,DeepSeek-V2通过以下方式进一步优化MoE的效率:
稀疏激活:DeepSeek-V2在每个token上只激活21B参数,而不是激活所有236B参数。这种稀疏激活机制显著减少了计算资源的需求,提高了推理速度。
KV缓存优化:结合Multi-head Latent Attention(MLA)机制,DeepSeek-V2在推理时能够显著减少KV缓存的大小。与传统的多头注意力机制相比,MLA通过低秩压缩技术减少了KV缓存的存储需求,从而提高了推理效率。
通过这些优化,DeepSeek-V2在MoE架构上实现了显著的改进:
训练成本降低:与DeepSeek 67B相比,DeepSeek-V2的训练成本降低了42.5%。
推理效率提升:推理时的最大生成吞吐量提高了5.76倍,KV缓存减少了93.3%。
性能提升:尽管激活的参数数量较少,DeepSeek-V2在多个基准测试中仍然表现出色,成为开源MoE模型中的佼佼者。
这些优化不仅提高了DeepSeek-V2的训练和推理效率,还使其在性能上达到了新的高度,为大规模语言模型的开发和应用提供了新的思路和方法。
2.3 DeepSeek V3中MoE
DeepSeek-V3在《DeepSeek-V3 Technical Report》中继续使用DeepSeekMoE架构,并进行了以下优化:
(1)辅助损失自由的负载平衡策略:DeepSeek-V3引入了一种辅助损失自由的负载平衡策略,以避免传统辅助损失对模型性能的负面影响。具体来说:通过监控每个专家的负载情况,DeepSeek-V3能够动态调整每个专家的偏置项,以确保负载均衡。这种方法使得模型在训练过程中能够有效地利用所有专家,避免某些专家过载而导致的训练崩溃;与依赖于辅助损失的传统方法相比,辅助损失自由的策略能够在保持负载平衡的同时,减少对模型性能的影响,从而实现更好的训练效果。
(2)多令牌预测训练目标::DeepSeek-V3采用了多令牌预测(Multi-Token Prediction, MTP)训练目标,这一策略旨在增强模型的预测能力。具体来说:MTP允许模型在每个位置预测多个未来的令牌,而不仅仅是下一个令牌。这种方法不仅增加了训练信号的密度,还可能提高模型对上下文的理解能力;与一些研究不同,DeepSeek-V3在每个预测深度保持完整的因果链,以确保模型在生成多个令牌时能够充分利用上下文信息。
(3)设备限制路由:DeepSeek-V3继续使用设备限制路由机制,以减少MoE训练中的通信开销。具体来说:限制目标专家的设备数量,每个token的目标专家被限制在最多4个设备上,这样可以减少跨设备的通信频率,从而提高训练效率。通过这种方式,DeepSeek-V3能够在保持高效计算的同时,显著降低通信成本,尤其是在大规模分布式训练中。
(4)不丢弃Token::DeepSeek-V3在训练过程中不采用丢弃Token的策略,这与其有效的负载平衡策略相辅相成。具体来说:保持Token完整性,在训练和推理阶段,DeepSeek-V3确保所有Token都被处理,这有助于模型在各类任务中保持较高的性能。通过不丢弃Token,DeepSeek-V3在推理时能够更全面地利用上下文信息,从而提高生成的准确性和连贯性。
通过这些优化,DeepSeek-V3在MoE架构上实现了显著的改进:
训练效率提升:DeepSeek-V3在每万亿个训练Token上仅需180K H800 GPU小时,显著低于同类模型的训练成本。
推理性能增强:DeepSeek-V3在多个基准测试中表现出色,尤其是在数学和编程任务上,成为开源模型中的佼佼者。
负载平衡优化:辅助损失自由的负载平衡策略和多令牌预测训练目标的结合,使得DeepSeek-V3在训练过程中能够更好地利用专家的能力,提升模型的整体性能。
这些优化不仅提高了DeepSeek-V3的训练和推理效率,也为大规模语言模型的发展提供了新的思路和方法。
2.4 DeepSeek R1中MoE
DeepSeek-R1继承了DeepSeek-V3的架构设计和训练策略上,DeepSeek-R1的核心优化重点在于通过强化学习(Reinforcement Learning, RL)提升模型的推理能力,但其基础架构仍然依赖于MoE的设计来实现高效的训练和推理,通过多阶段训练和冷启动数据来提升推理能力。具体来说:
冷启动数据的作用:在DeepSeek-R1的训练中,使用少量高质量的冷启动数据对DeepSeek-V3-Base进行微调,作为RL训练的起点。这些冷启动数据包括长链推理(Chain-of-Thought, CoT)样本,有助于模型在推理任务中表现出更好的性能。
多阶段训练流程:DeepSeek-R1的训练流程包括多个阶段:
冷启动阶段:使用冷启动数据对DeepSeek-V3-Base进行微调,为后续的RL训练提供一个良好的起点。
推理导向的RL训练:在冷启动数据的基础上,进行大规模的RL训练,专注于提升模型在推理任务中的表现。
拒绝采样和监督微调(SFT):在RL训练接近收敛时,通过拒绝采样生成新的SFT数据,并结合其他领域的数据(如写作、事实问答等)对模型进行进一步微调。
全场景RL训练:最后,对模型进行全场景的RL训练,确保模型在各种任务中都能表现出色。
总结
本篇主要分享了混合专家模型MoE,首先介绍了MoE的发展历程,从1991年最早由Jacobs等人提出MoE架构,到深度学习时代复兴,再到大模型中的应用,再到多任务学习与自适应化到最后工业与实际应用;然后重点介绍了DeepSeek对MoE进行的各项优化,从DeepSeekMoE提出,到应用到DeepSeek V1、V2和当前最火爆的DeepSeek V3和DeepSeek R1模型中。不仅提升了模型的性能,还为未来大规模语言模型的发展提供了宝贵的参考。
参考文献
【1】Adaptive Mixtures of Local Experts
【2】GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding
【3】DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models
【4】DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
【5】DeepSeek-V3 Technical Report
【6】DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
领取专属 10元无门槛券
私享最新 技术干货