在当前快节奏的人工智能世界中,事物来来去去,一切变化都如此之快。
大模型一直在不断地更新,也一直在不断地改进,要找到大模型演进的方向,就要找那些无处不在的改变。而混合专家(MoE)就是其中之一。
MoE已经变得如此普遍,以至于现在很难找到一个不是MoE的新的型语言模型(LLM)。GPT -4、Gemini 1.5、Mixtral 8x7B或Jamba都是MoE模型。
那么混合模型(MoE)的底层原理是什么呢?为什么它现在如此重要?以及Moe模型是如何演进和学习的呢?
一、知识的稀疏性
简单来说,MoE即Mixture of Experts,是一种人工智能训练技术。它实质上是将神经网络的某些部分(通常是LLM)“分解”为不同的部分,我们将这些被分解的部分称为“专家”。
这种技术出现的原因有三个主要方面:
-
神经网络的稀疏性: 在特定层中,神经网络可能会变得非常稀疏,即某些神经元的激活频率远低于其他神经元。换句话说,很多神经元并非每次都会被使用到,这和人类大脑中的神经元是类似的。
-
神经元的多语义性: 神经元的设计使其具有多语义性,这意味着它们可以同时处理多个主题或概念。比如,一个神经元可能对“苹果”、“香蕉”和“橙子”都有反应,这些词代表着不同的实体。
-
计算资源的有限性:模型规模是提升模型性能的关键因素之一。而不管在什么阶段,资源一定是有限的,在有限的计算资源预算下,用更少的训练步数训练一个更大的模型,往往比用更多的步数训练一个较小的模型效果更佳。
1. 神经元的稀疏性
许多人不知道,神经网络实际上对于它们所做的大多数预测来说都太大了。
例如,我们让其帮忙总结一篇文章的内容,而模型训练的参数不仅仅“吸纳了”这些能力的数据,还包括了物理、数学,天文等等的知识内容。这意味着我们每次预测都要运行整个网络,但实际上模型中只有很小的一部分能够发挥作用。
例如,ChatGPT,尽管它被迫运行整个庞大的网络来预测每一个新词,这需要巨大的计算工作量,但对于用户当前的问题来说,只有网络中非常特定的部分会被激活,以帮助预测新词。
2022年的一篇论文,指出了 Transformer 模型中的 FFNs 也存在稀疏性激活问题。换句话说,对于单个输出,FFNs 中只有一小部分神经元被激活(引用 MoEfication: Transformer Feed-forward Layers are Mixtures of Experts”)。
在论文中,作者发现在使用ReLU等激活函数后,大部分的activation值都是0,即只有少数神经元的激活值是非零的,这导致FFNs的激活值非常稀疏。
而且模型的规模越大,其稀疏性也越强。大型模型在处理输入时激活的神经元占总体的比例更小,例如,大型模型中80%的输入只激活少于3%的神经元。这种现象与人类大脑的稀疏激活模式相似。
在实际使用中,即使是大型模型,其FFNs的参数也没有被充分利用,大部分参数对应的神经元在多数情况下不会激活。
为了解决稀疏性激活问题,该论文提出了MoEfication方法,即通过将FFNs分割成多个专家,并构建专家路由器(Expert routers)来决定对每个输入使用哪些专家,从而提高模型的效率和性能。
2. 神经元的多义性
如果你熟悉神经网络,你可能听说过神经网络是出了名的不透明,即黑盒。这意味着,要辨别出大多数预测背后的原因极其困难,甚至根本不可能,尤其是在提到像 LLM 这样的大型神经网络时。
如果要尝试弄清楚它们如何工作的,最常见方法是“探测”,即研究中间激活(网络内部的神经元对特定预测所取的值)并尝试分析它们是否给我们直觉,说明为什么神经网络会预测它所预测的内容。
可悲的是,通过这种方法,我们将遇到一个巨大的障碍:多义性。
这个奇怪的概念其实是一种非常奇特的说法,即神经元不是单义的,也就是说,它们不专注于一个单一的主题,而是专注于许多主题。而且重要的是,它们在语义上并不相关。
举个例子来说,神经网络的数十亿个神经元中的一个神经元可能每次在输入主题涉及“苹果”时被激活,而当输入主题涉及“电话”时,这个神经元也可能被激活。
他们之间没什么关系吧?
这不仅使神经网络难以解释,而且也不是一个理想的情况。因为单个神经元必须精通各种彼此几乎毫无关系的主题。想象一下,你必须同时成为神经科学和地质学的专家,这将是一项艰巨的任务。
因此,由于知识范围如此广泛,这些神经元很难获取知识。更糟糕的是,学习曲线可能相互矛盾,学习一个主题的更多知识可能会影响神经元获取另一个主题知识的能力。
想象一下,你被迫成为相互矛盾的理论专家,比如唯物主义和唯心主义。其中一个理论的许多信息会与另一个理论相矛盾,这可能会导致知识崩溃,导致你基本上无法谈论其中一个理论。
那么,如果我们能使用一种技术来拆分、消除或至少减少这两个问题,会怎么样呢?这就是Moe, Mixture-of-Experts 想要解决的问题。
3. 计算资源的有限性
由于神经网络的稀疏性,以及当前Transformer的二次障碍问题,大模型网络中进行了大量不必要的计算,使得我们更大的 LLM 成为世界上最低效和最耗能的系统之一。
如今,以LLM为主导的人工智能行业消耗的电力已经比整个小国还要多。
但除了不受控制的消耗之外,针对每个预测运行整个模型也会对性能产生重要影响。
二、条件计算的胜利
混合专家模型(MoE)的理念起源于 1991 年的论文 Adaptive Mixture of Local Experts,但真正的爆火是由于谷歌大脑和雅盖隆大学研究人员发表的这篇开创性论文(The Sparsely-Gated MIXTURE-OF-EXPERTS Layer),混合专家理论在人工智能领域变得突出。
这个想法很简单:假设神经网络的稀疏性,特别是在前馈层(FFN),像 Transformer ( ChatGPT、Gemini、Sora 等)这样的架构很常见,我们基本上将这些层“分解”成形状相同的小组,我们称之为“专家”。
此外,我们在该层前面添加了一个称为“路由器”的门,对于每个预测,它会选择向哪些专家进行查询,而其他专家保持沉默,如下图所示。
这种模型的一个非常著名的例子是法国公司Mistral的Mixtral of Experts(或称 Mixtral-8x7B)模型,尽管它有近 500 亿个参数,但每个预测只运行其中 12 个参数,从而实现了效率提升,使成本降低了 4 倍,推理速度提高了 6 倍。
在这个特殊情况下,它由八个不同的 70 亿参数模型组成,每个预测都会选择两个模型(因此效率提高了 4 倍)。但 Mistral 并不是唯一一家使用 Mixture-of-Experts 的公司,前面提到的例子有 Google、OpenAI、Meta 或 AI21。
那么,混合专家的主要好处是什么?
1. 混合专家的优势
基于我们之前描述的问题,MoE 模型存在的原因显而易见。我们的目标很简单,实现有条件的计算,这意味着我们可以对神经网络实际运行的程度拥有某种“决策权”。
一种非常新的条件计算方法是深度混合(MoD)。在这里,我们不是划分模型的深度,而是专注于让模型有能力决定每个输入的专用计算。它与 MoE 正交,因为它们不是互相替代,而是互补的技术,可以实现更高效和可扩展的推理。
首先,我们可以决定将模型划分为多少位专家。此外,我们还可以规定专家路由器为每个预测选择多少位专家。
但从技术角度来说,MoE 在实践中到底意味着什么?
我们来以当今神经网络中最常见的层之一的替代方案:前馈层(FFN),来举例分析。
正如我们之前讨论过的,像 ChatGPT 这样的 LLM 由两种类型的层组成:
-
Self-Attention 注意力层。
-
FFN 前馈层。
但是 FFN 的作用是什么?
FFN(前馈神经网络)在 Transformer 模型中的作用是将输入向量投射到更高维度的空间中,以便发掘数据中原本隐藏的细微差别。这一步骤是模型成功的关键之一,但也伴随着高昂的处理成本。
尽管FFN的作用是重要的,但根据论文的发现,它们的激活确实表现出极端的稀疏性。这意味着在处理大量参数的过程中,需要进行大量的计算。虽然FFN的功能是必不可少的,但它们的计算成本是需要考虑的因素,正所谓天下没有免费的午餐。
事实上,根据 Meta 的说法,它们可以占 LLM 前向传递(预测)中高达 98% 的总计算量。
除此之外,虽然FFN层虽然拥有大量的参数,但在每次预测过程中,只有一小部分参数会被实际激活并参与到计算中。
这种现象揭示了FFN的一个关键特性:尽管模型构建了庞大的参数网络,实际上只有其中的一个子集对于特定的预测任务有实质性的贡献。
这种稀疏性激活的特点,是混合专家模型(Mixture of Experts, MoE)的核心概念。在MoE架构中,FFN层被分解为多个“专家”(experts),每个专家实际上是FFN参数的一个子集。这些专家可以根据其特定的功能被设计成处理不同类型的输入或特征。在模型进行预测时,一个路由器(router)机制会决定哪些专家将被激活并参与到当前的计算中。
这种设计的优势在于它能够显著提高模型的效率和可扩展性。由于只有相关的专家被激活,因此可以减少不必要的计算,从而加快模型的推理速度并降低运算成本。同时,这也使得模型能够更加灵活地适应不同的任务,因为不同的任务可能需要不同专家的组合来达到最优的预测效果。
此外,MoE模型还提供了一种细粒度的方式来研究和理解模型内部的工作机制。通过观察哪些专家被激活以及它们如何随着时间变化,研究人员可以更深入地洞察模型是如何学习和泛化知识,以及它是如何处理不同的输入特征的。
2. 什么是混合专家?
首先的问题就是,为什么我们称他们为专家?他们的工作原理是什么呢?
路由器不会一次询问整个专家组,而只会得到少数人的回应,而是主动选择那些它预测会知道答案的人。而且,由于从一开始就这样做,不同的专家会专注于不同的主题。
用更专业的术语来说,输入空间被“区域化”了。如果你想象一下某个 LLM 可能收到的“可能请求的完整空间”,那么每位专家都会在某些主题上变得更加精通,而其他专家则会在其他主题上变得更加博学。
你不必聘请一位“无所不知”的专家,而是组建一个拥有特定专业领域的团队。然而,我们现在要深入探讨的问题之一是知识冗余或知识重叠。
因此,MoE 模型与其标准版本完全等同,但用 MoE 层替换了 FFN 层,如下所示:
在某些情况下,并非所有 FFN 层都被 MoE 取代,例如Jamba模型具有多个 FFN和MoE 层。
因此,它们的工作原理如下:
-
输入的门控选择:当输入数据进入模型时,首先会经过一个门控机制,该机制负责决定哪些专家将参与到当前的计算中。这个门控通常是一个softmax函数,它能够基于输入数据的特征,为每个专家计算一个概率分布,表明每个专家被激活的可能性。
-
专家的概率分布:以一个具有四位专家的MoE层为例,门控可能会输出如下的概率分布:[专家 1:25%,专家 2:14%,专家 3:50%,专家 4:11%]。这个分布反映了输入数据与各个专家相关性的大小,概率越高,表示该专家对于当前输入的预测任务越重要。
-
专家的激活:根据门控输出的概率分布,一部分专家将被选中并激活。在这个例子中,专家3和专家1因为具有较高的激活概率,将被选中参与到后续的计算中。这意味着,只有这两个专家的参数将被用于处理当前的输入数据。
但实际上,这样做我们能得到什么呢?
简单来说,由于这些专家从一开始就存在,在训练过程中,每个人都会在某些主题上变得更加专业,而其他主题则会被其他人学习。因此,每个专家都会在自己的专业主题上变得更加熟练。
除了计算效率更高这一明显优势之外,MoE 还为更高程度的神经元专业化打开了大门(“专家”这个名字是有原因的)。回到我们之前描述的问题,具有高度矛盾主题的神经元在被询问时可能会难以获取知识。
为此,拥有专门研究不同主题的专家可能会“促进工作”,使整个神经网络能够证明其知识。
总体而言,考虑到 MoE 的明显优势,似乎每个人都已经搭上了“MoE 炒作列车”。
然而,尽管取得了不可否认的成功,这些架构仍然存在两个弊端:知识混合和知识冗余。
-
由于专家数量有限,每个专家最终都要处理广泛的知识,这就产生了知识混合性。这种广泛性阻碍了专家们在特定领域进行深入的专业化。
-
当 MoE 模型中的不同专家学习相似的知识时,就会出现知识冗余,这首先就违背了对模型进行划分的意义。
三、走向更加专业化
在当前,混合专家模型(MoE)的概念已经成为提升模型性能和效率的有力工具。尽管在“宏伟计划”中相当新颖,但最近的趋势是寻找超专业化的模型。
随着对模型专业化能力需求的提升,研究者们开始探索拥有大量专家的MoE模型。这些超专业化的模型能够更精细地划分知识空间,每个专家可以专注于学习数据中的一种特定模式或特征。
MoE模型的专家数量可以根据具体任务和模型规模灵活调整。如今,标准方法是将模型划分为8个专家。在每次的预测过程中,从这些专家中选择2个来进行计算,这样的设计旨在平衡模型的性能和计算成本。
最近一个有趣的趋势是添加“共享专家”的概念,例如DeepSeek 的DeepSeekMoE 家族。
DeepSeek-MoE 引入了“细粒度/垂类专家”和“共享专家”的概念。
-
“细粒度/垂类专家” 是通过细粒度专家切分(Fine-Grained Expert Segmentation)将一个 FFN 切分成 m 份。尽管每个专家的参数量小了,但是能够提高专家的专业水平。
-
“共享专家”是掌握更加泛化或公共知识的专家,以减少每个细粒度专家中的知识冗余,共享专家的数量是固定的且总是处于被激活的状态。
在这里,“k”位专家是固定的,也就是说他们始终会针对每个预测运行。这些“共享专家”或专家掌握广泛的知识,而超专业专家(对于此特定模型最多可达 64 位) 掌握更细粒度的知识。
这样,您就可以“抵御”或至少最小化上述标准 MoE 问题,由于专家更加专业,知识冗余度降低,而“更广泛”的数据则由共享专家捕获。
尽管尚未完全大规模验证,但这些模型表现出非常有希望的结果,成为高于通常的 MoE 模型的标准,但现在下结论还为时过早。
四、让模型性能起飞
原始的混合专家模型(MoE)设计采用了分支结构,然而这种设计却带来了计算效率的困境。
其主要原因在于,GPU并非为处理这种复杂的分支结构而量身打造的,因此在实际运行过程中效率大打折扣。此外,由于设备间需要频繁传递数据,网络带宽往往成为制约性能的关键因素,导致计算速度无法达到预期。
1. 并行计算
在面对庞大而复杂的模型时,如何高效利用计算资源、提升训练速度,一直是研究者们关注的焦点。传统的做法通常是通过数据并行和模型并行的方式来进行加速计算,但这种方式在处理MoE模型时,我们有新的解决方案。
在当前的MoE并行计算架构中,专家们被精心地部署于各个节点之上,这种策略与数据并行相结合,形成了一种独特的并行处理模式。在这种模式下,每个节点都拥有独特的专家资源,并且数据也被巧妙地分割,确保在所有节点之间实现均衡分配。
专家并行策略更是为MoE模型的处理带来了革命性的变化。如上图所示,在这种并行方式中,专家们依然被分散部署在各个不同的节点之上,但每个节点所承担的任务却有所不同。它们各自处理着不同批次的训练样本,使得计算资源得到了更加充分的利用。对于非MoE层,专家并行的操作方式与数据并行相似,都遵循着基本的并行处理原则。
然而,当涉及到MoE层时,情况则变得更为复杂和精细。在MoE层中,序列中的每一个令牌都会被智能地发送到拥有所需专家的节点上进行处理。
这种精细化的操作确保了每个令牌都能得到最适合的专家进行处理,从而大大提高了处理的准确性和效率。通过这种方式,专家并行不仅充分发挥了各个节点的计算优势,还通过智能的数据分配和令牌路由,实现了更高效、更精确的并行处理,为MoE模型的训练带来了前所未有的速度提升。
2. 容量因子和通信开销
提高容量因子(Capacity Factor, CF)可以增强模型的性能,但这也意味着更高的通信成本和对保存激活值的显存的需求。在设备通信带宽有限的情况下,选择较小的容量因子可能是更佳的策略。
一个合理的初始设置是采用 Top-2 路由、1.25 的容量因子,同时每个节点配置一个专家。在评估性能时,应根据需要调整容量因子,以在设备间的通信成本和计算成本之间找到一个平衡点。
3. 部署技术
部署混合专家模型(MoE)时,一个主要难题在于其庞大的参数规模。在本地使用场景中,使用更小型的模型往往更为理想。为了使MoE模型更加适合实际部署,以下是一些有效的技术策略:
-
预先蒸馏实验:Switch Transformers的研究团队进行了深入的预先蒸馏实验。他们成功地将MoE模型蒸馏回其对应的稠密模型,同时保留了约30%~40%的由稀疏性带来的性能提升。这一策略不仅加速了预训练过程,还使得在推理阶段使用更小型的模型成为可能,显著提升了模型的实用性和部署效率。
-
任务级别路由:在最新的方法中,研究者们对路由器进行了改进,使其能够将整个句子或任务直接路由到特定的专家。这种做法有效地提取出一个用于服务的子网络,大大简化了模型的结构,使其更易于部署和管理。
-
专家网络聚合:此技术通过合并不同专家的权重,在推理阶段显著减少了所需的参数数量。这样可以在不牺牲太多性能的前提下,降低模型的复杂度,使其更加适合在资源有限的环境中进行部署。
4. 高效训练
FasterMoE(2022年3月)对MoE在不同并行策略下的理论性能极限进行了深入的剖析,并探索了一系列前沿技术。这些技术包括针对专家权重进行的精妙调整方法、旨在减少延迟的细粒度通信调度技术,以及一个基于最低延迟进行专家选择的拓扑感知门控机制。这些技术的综合运用使得MoE的运行速度实现了惊人的17倍提升,为深度学习领域带来了巨大的突破。
与此同时,Megablocks(2022年11月)则专注于通过开发新型的GPU kernel,高效处理MoE模型中的动态性,以实现更高效的稀疏预训练。其核心优势在于能够充分利用每个令牌的信息,并高效地适应现代硬件架构(特别是支持块稀疏矩阵乘的架构),从而达到显著的加速效果。Megablocks的创新之处在于,它摒弃了传统MoE使用批量矩阵乘法的做法(这种做法通常假设所有专家形状相同且处理相同数量的令牌),而是将MoE层表示为块稀疏操作,能够灵活适应不均衡的令牌分配,从而进一步提升了模型的训练效率和性能。
五、总结
混合专家模型(MoE)是一种高效的神经网络架构,它通过在模型中引入稀疏性来处理大量参数。这种模型由多个专家网络组成,每个专家专注于输入数据的不同部分,并通过一个门控网络动态地选择哪些专家参与计算。MoE模型在自然语言处理(NLP)和计算机视觉领域显示出了巨大的潜力,尤其是在处理大规模数据集和参数数量庞大的模型时。
MoE模型的关键优势包括:
-
计算效率:MoE模型能够在保持参数数量巨大的情况下,以恒定的计算成本运行,因为每次前向传播只激活一部分专家。
-
预训练速度:MoE模型在预训练阶段可以更快地达到相同的质量水平,与稠密模型相比,它们通常能够更快地完成训练。
-
推理速度:在推理时,MoE模型由于其稀疏性,可以比具有相同参数数量的稠密模型更快地完成任务。
然而,MoE模型也面临一些挑战:
-
训练稳定性:MoE模型在训练过程中可能会遇到稳定性问题,需要特别设计的技术和方法来解决。
-
内存需求:尽管MoE模型在推理时参数数量较少,但它们需要将所有专家的参数加载到内存中,这可能导致对显存的高需求。
-
微调难度:MoE模型在微调阶段可能面临泛化能力不足的问题,需要更精细的调整和策略。
为了解决这些挑战,研究者们提出了多种方法,包括:路由算法的改进、并行计算技术、预蒸馏、稀疏性量化等等。
总的来说,混合专家模型(MoE)通过将大型神经网络分解为专业化的子网络(专家),并利用条件计算来提高模型效率和性能。其关键优势在于能够减少不必要的计算,提升特定任务的性能,同时保持模型的可扩展性。
通过专家路由器的激活选择,MoE模型在专业化学习中不断优化,而超专业化MoE模型通过细粒度专家划分和共享专家的概念,进一步减少了知识冗余,提升了专业化水平。MoE模型的发展正推动着大型语言模型向更高效和专业化的方向发展。
本文来自微信公众号:Tim在路上(ID:CNSF-2016),作者:Pulsar planet