简短总结:混合专家模型(MoEs)
-
与稠密模型相比,预训练速度更快
-
与具有相同参数数量的模型相比,具有更快的推理速度
-
需要大量显存,因为所有专家系统都需要加载到内存中
-
混合专家模型进在指令调优具有很大的潜力
什么是混合专家模型?
作为一种基于 Transformer 架构的模型,混合专家模型主要由两个关键部分组成:
稀疏MoE层:这类特殊结构替代了标准Transformer架构中的全连接前馈层。MoE模块的核心由多个并行的子网络构成(典型配置为8个),每个子网络称为"专家"。
虽然这些专家通常采用基础的前馈神经网络结构,但设计上允许灵活替换为卷积网络、循环网络等复杂架构。专家模块本身可采用MoE结构,这种递归设计可形成多层级的专家系统。
门控网络或路由:该模块包含可学习的决策系统,负责将输入序列中的各个语义单元(如示例中的"More"和"Parameters"词元)智能分配至不同专家。
其核心技术是路由网络,通过实时计算每个token与各专家的匹配度权重,实现灵活的分流决策。
某些先进设计允许单个token同时激活多个专家处理,这种多路径处理机制能显著提升模型表达能力。路由参数并非预先设定,而是通过端到端训练与整个模型共同优化,这种协同学习机制是MoE技术成功的关键。
模型规模是提升模型性能的关键因素之一。在有限的计算资源预算下,用更少的训练步数训练一个更大的模型,往往比用更多的步数训练一个较小的模型效果更佳。
总结来说,在混合专家模型(MoE)中,我们将传统 Transformer 模型中的每个前馈网络(FFN)层替换为 MoE层,其中 MoE 层由两个核心部分组成:一个门控网络和若干数量的专家。
最近两年,大家都可以看到AI的发展有多快,我国超10亿参数的大模型,在短短一年之内,已经超过了100个,现在还在不断的发掘中,时代在瞬息万变,我们又为何不给自己多一个选择,多一个出路,多一个可能呢?
与其在传统行业里停滞不前,不如尝试一下新兴行业,而AI大模型恰恰是这两年的大风口,整体AI领域2025年预计缺口1000万人,其中算法、工程应用类人才需求最为紧迫!
学习AI大模型是一项系统工程,需要时间和持续的努力。但随着技术的发展和在线资源的丰富,零基础的小白也有很好的机会逐步学习和掌握。【点击蓝字获取】
【2025最新】AI大模型全套学习籽料(可白嫖):LLM面试题+AI大模型学习路线+大模型PDF书籍+640套AI大模型报告等等,从入门到进阶再到精通,超全面存下吧!
训练挑战: 尽管混合专家架构(MoE)在预训练阶段展现出显著的计算效能优势,但其在迁移学习场景中常遭遇模型适应力瓶颈。
研究数据显示,MoE模型在特定下游任务微调时,验证集准确率波动幅度较传统模型高出38%,这种现象长期存在可能导致模型在特定任务上表现出明显的过拟合倾向。
其根本原因可能在于专家网络的协同训练机制未能充分建立有效的正则化约束,导致知识迁移过程中专家间的决策边界产生重叠冗余。
推理挑战: 从计算架构层面分析,MoE系统通过动态路由机制实现了参数激活的智能选择,这种稀疏化特性使得其推理吞吐量较同等规模的稠密模型提升约2.3倍。
以典型的Switch Transformer结构为例,其实际运行时的显存需求约等于参数总量的1/3,这是因为模型仅需加载当前推理路径所需的专家模块。
更具体地说,当采用Top-2专家选择策略时,其浮点运算量仅相当于基准模型的1.8倍,这种计算增益源于共享嵌入层和注意力机制带来的参数复用效益。
由于门控网络和路由逻辑带来的额外计算开销,实际推理延迟会比理论值增加约15-20%。
混合专家模型简史
混合专家模型(MOE): 系统中,每个网络(被称为“专家”)处理训练样本的不同子集,专注于输入空间的特定区域。
1.组件专家: 在传统的 MOE 设置中,整个系统由一个门控网络和多个专家组成。在支持向量机(SVMs)、高斯过程和其他方法的研究中,MoE 通常被视为整个模型的一部分。
然而,Eigen、Ranzato 和 llya 的研究 探索了将 MOE 作为更深层网络的一个组件。这种方法允许将 MOE 嵌入到多层网络中的某一层,使得模型既大又高效。
2.条件计算: 传统的神经网络通过每一层处理所有输入数据。在这一时期,Yoshua Bengio等研究人员开始探索基于输入令牌动态激活或停用网络组件的方法。
什么是稀疏性?
稀疏性的概念采用了条件计算的思想。在传统的稠密模型中,所有的参数都会对所有输入数据进行处理。
相比之下,稀疏性允许我们仅针对整个系统的某些特定部分执行计算。这意味着并非所有参数都会在处理每个输入时被激活或使用,而是根据输入的特定特征或需求,只有部分参数集合被调用和运行。
例如,在混合专家模型(MoE)中,尽管较大的批量大小通常有利于提高性能,但当数据通过激活的专家时,实际的批量大小可能会减少。
比如,假设我们的输入批量包含10个令牌,可能会有五个令牌被路由到同一个专家,而剩下的五个令牌分别被路由到不同的专家。
这导致了批量大小的不均匀分配和资源利用效率不高的问题。在接下来的部分中,将会讨论让MOE 高效运行 的其他挑战以及相应的解决方案。
那我们应该如何解决这个问题呢?一个可学习的门控网络(G)决定将输入的哪一部分发送给哪些专家(E):
在这种设置下,虽然所有专家都会对所有输入进行运算,但通过门控网络的输出进行加权乘法操作。
但是,如果G(门控网络的输出)为0会发生什么呢?如果是这种情况,就没有必要计算相应的专家操作,因此我们可以节省计算资源。
那么一个典型的门控函数是什么呢?一个典型的门控函数通常是一个带有 softmax 函数的简单的网络。这个网络将学习将输入发送给哪个专家。
Shazeer 等人的工作还探索了其他的门控机制,其中包括带噪声的TopK门控 (Noisy Top-K Gating)。这种门控方法引入了一些可调整的噪声,然后保留前k个值。具体来说:
1.添加一些噪声:
2.选择保留前 K个值:
3.应用 Softmax 函数:
这种稀疏性引入了一些有趣的特性。通过使用较低的k值(例如1或2),我们可以比激活多个专家时更快地进行训练和推理。
为什么不仅选择最顶尖的专家呢?最初的假设是,需要将输入路由到不止一个专家,以便门控学会如何进行有效的路由选择,因此至少需要选择两个专家。SwitchTransformers 就这点进行了更多的研究。
我们为什么要添加噪声呢?这是为了专家间的负载均衡!
混合专家模型中令牌的负载均衡
正如之前讨论的,如果所有的令牌都被发送到只有少数几个受欢迎的专家,那么训练效率将会降低在通常的 (MOE)训练中,门控网络往往倾向于主要激活相同的几个专家。
这种情况可能会自我加强,因为受欢迎的专家训练得更快,因此它们更容易被选择。为了缓解这个问题,引入了一个辅助损失,旨在鼓励给予所有专家相同的重要性。
这个损失确保所有专家接收到大致相等数量的训练样本,从而平衡了专家之间的选择。
接下来的部分还将探讨专家容量的概念,它引入了一个关于专家可以处理多少令牌的阈值。在 transformers 库中,可以通过 aux_loss 参数来控制辅助损失。
MoEs and Transformers
GShard 将在编码器和解码器中的每个前馈网络(FFN)层中的替换为使用 Top-2 门控的混合专家模型(MOE)层。
下图展示了编码器部分的结构。这种架构对于大规模计算非常有效:当扩展到多个设备时,MoE层在不同设备间共享,而其他所有层则在每个设备上复制。我们将在“让 MoE起飞”部分对这一点进行更详细的讨论。
为了保持负载平衡和训练效率,Gshard 除了引入了辅助损失外,还引入了一些关键变化:
随机路由: 在 Top-2 设置中,我们始终选择排名最高的专家,但第二个专家是根据其权重比例随机选择的。
专家容量:我们可以设定一个阈值,定义一个专家能处理多少令牌。如果两个专家的容量都达到上限,令牌就会溢出,并通过残差连接传递到下一层,或在某些情况下被完全丢弃。
专家容量是MoE 中最重要的概念之一。为什么需要专家容量呢?因为所有张量的形状在编译时是静态确定的,我们无法提前知道多少令牌会分配给每个专家,因此需要一个固定的容量因子。
注意:在推理过程中,只有部分专家被激活。同时,有些计算过程是共享的,例如自注意力(self-attention)机制,它适用于所有令牌。
这就解释了为什么我们可以使用相当于12B 稠密模型的计算资源来运行一个包含8个专家的 47B 模型。
如果我们采用 Top-2 门控,模型会使用高达 14B 的参数。但是,由于自注意力操作(专家间共享)的存在,实际上模型运行时使用的参数数量是 12B。
Switch Transformers
尽管混合专家模型 (MoE)显示出了很大的潜力,但它们在训练和微调过程中存在稳定性问题。
SwitchTransformers 是一项 1.6万亿参数的 MOE,拥有 2048 个专家,你可以使用 transformers 库来运行它。Switch Transformers 实现了与 T5-XXL相比4倍的预训练速度提升。
就像在 GShard 中一样,用混合专家模型 (MoE)层 替换了 前馈网络(FFN)层。提出了一个SwitchTransformer层,它接收两个输入(两个不同的令牌) 并拥有四个专家。
与最初使用至少两个专家的想法相反,采用了简化的单专家策略。这种方法的效果包括:
-
减少门控网络(路由) 计算负担
-
每个专家的批量大小至少可以减半
-
降低通信成本
-
保持模型质量
上述建议的容量是将批次中的令牌数量均匀分配到各个专家。如果我们使用大于1的容量因子,我们为令牌分配不完全平衡时提供了一个缓冲。
增加容量因子会导致更高的设备间通信成本,因此这是一个需要考虑的权衡。SwitchTransformers 在低容量因子(例如 1至 1.25)下表现出色。
这个 Jupyter Notebook 展示了如何对 Switch Transformers 进行微调以进行摘要生成的详细指南。
然而,在开始微调 Switch Transformers 之前,强烈建议您先阅读关于 微调混合专家模型 部分的内容。
用 Router z-loss 稳定模型训练
我们可以使用许多方法来稳定稀疏模型的训练,但这可能会牺牲模型质量。例如,引入dropout可以提高稳定性,但会导致模型质量下降。另一方面,增加更多的乘法分量可以提高质量,但会降低模型稳定性。
ST-MoE引入的 Router z-loss 在保持了模型性能的同时显著提升了训练的稳定性。
这种损失机制通过惩罚门控网络输入的较大 logits 来起作用,目的是促使数值的绝对大小保持较小,这样可以有效减少计算中的舍入误差。
这一点对于那些依赖指数函数进行计算的门控网络尤其重要。为了深入了解这一机制,建议参考原始论文以获得更全面的细节。
专家的数量对预训练有何影响?
增加更多专家可以提升处理样本的效率和加速模型的运算速度,但这些优势随着专家数量的增加而递减(尤其是当专家数量达到 256 或 512之后更为明显)。
同时,这也意味着在推理过程中,需要更多的显存来加载整个模型。SwitchTransformers 的研究表明,其在大规模模型中的特性在小规模模型下也同样适用,即便是每层仅包含2、4或8个专家。
微调混合专家模型
稠密模型和稀疏模型在过拟合的动态表现上存在显著差异。稀疏模型更易于出现过拟合现象,因此在处理这些模型时,尝试更强的内部正则化措施是有益的,比如使用更高比例的dropout 。
例如,我们可以为稠密层设定一个较低的 dropout率,而为稀疏层设置一个更高的 dropout 率,以此来优化模型性能。
在微调过程中是否使用辅助损失是一个需要决策的问题。ST-MOE的作者尝试关闭辅助损失,发现即使高达 11% 的令牌被丢弃,模型的质量也没有显著受到影响。令牌丢弃可能是一种正则化形式,有助于防止过拟合。
一种可行的微调策略是尝试冻结所有非专家层的权重。实践中,这会导致性能大幅下降,但这符合我们的预期,因为混合专家模型 (MOE)层占据了网络的主要部分。
我们可以尝试相反的方法:仅冻结 MoE 层的参数。实验结果显示,这种方法几乎与更新所有参数的效果相当。这种做法可以加速微调过程,并降低显存需求。
在微调稀疏混合专家模型 (MOE)时需要考虑的最后一个问题是,它们有特别的微调超参数设置–例如,稀疏模型往往更适合使用较小的批量大小和较高的学习率,这样可以获得更好的训练效果。
此时,您可能会对人们微调 MoE中遇到的这些挑战而感到沮丧,但最近的一篇论文《MoEs MeetsInstruction Tuning》(2023年7月)带来了令人兴奋的发现。这篇论文进行了以下实验:
-
单任务微调
-
多任务指令微调
-
多任务指令微调后接单任务微调
稀疏 VS 稠密,如何选择?
稀疏混合专家模型(MOE)适用于拥有多台机器且要求高吞吐量的场景。在固定的预训练计算资源下,稀疏模型往往能够实现更优的效果。相反,在显存较少且吞吐量要求不高的场景,稠密模型则是更合适的选择。
注意: 直接比较稀疏模型和稠密模型的参数数量是不恰当的,因为这两类模型基于的概念和参数量的计算方法完全不同。
让 MoE 起飞
最初的混合专家模型 (MOE)设计采用了分支结构,这导致了计算效率低下。
这种低效主要是因为 GPU并不是为处理这种结构而设计的,而且由于设备间需要传递数据,网络带宽常常成为性能瓶颈。
在接下来的讨论中,我们会讨论一些现有的研究成果,旨在使这些模型在预训练和推理阶段更加高效和实用。我们来看看如何优化 MOE 模型,让 MOE起飞。
并行计算
让我们简要回顾一下并行计算的几种形式:
数据并行: 相同的权重在所有节点上复制,数据在节点之间分割。
模型并行: 模型在节点之间分割,相同的数据在所有节点上复制。
模型和数据并行: 我们可以在节点之间同时分割模型和数据。注意,不同的节点处理不同批次的数据。
专家并行: 专家被放置在不同的节点上。如果与数据并行结合,每个节点拥有不同的专家,数据在所有节点之间分割。
在专家并行中,专家被放置在不同的节点上,每个节点处理不同批次的训练样本。对于非 MOE层,专家并行的行为与数据并行相同。对于MOE层,序列中的令牌被发送到拥有所需专家的节点。
容量因子和通信开销
提高容量因子(Capacity Factor,CF)可以增强模型的性能,但这也意味着更高的通信成本和对保存激活值的显存的需求。在设备通信带宽有限的情况下,选择较小的容量因子可能是更佳的策略。
一个合理的初始设置是采用 Top-2 路由、1.25 的容量因子,同时每个节点配置一个专家。在评估性能时,应根据需要调整容量因子,以在设备间的通信成本和计算成本之间找到一个平衡点。
可以在 Inference Endpoints 部署mistralai/Mixtral-8x7B-Instruct-v0.1。
部署混合专家模型 (MOE)的一个关键挑战是其庞大的参数规模。对于本地使用情况,我们可能希望使用更小的模型。为了使模型更适合部署,下面是几种有用的技术:
预先蒸馏实验: Switch Transformers 的研究者们进行了预先蒸馏的实验。他们通过将MoE 模型蒸馏回其对应的稠密模型,成功保留了 30-40%的由稀疏性带来的性能提升。
预先蒸馏不仅加快了预训练速度,还使得在推理中使用更小型的型成为可能。
任务级别路由: 最新的方法中,路由器被修改为将整个句子或任务直接路由到一个专家。这样做可以提取出一个用于服务的子网络,有助于简化模型的结构。
专家网络聚合: 这项技术通过合并各个专家的权重,在推理时减少了所需的参数数量。这样可以在不显著牺牲性能的情况下降低模型的复杂度。
高效训练
FasterMoE(2022年3月)深入分析了 MoE在不同并行策略下的理论性能极限,并且探索了一系列创新技术。
包括用于专家权重调整的方法、减少延迟的细粒度通信调度技术,以及一个基于最低延迟进行专家选择的拓扑感知门控机制。这些技术的结合使得 MOE 运行速度提升高达 17 倍。
Megablocks(2022年11月)则专注于通过开发新的 GPU kernel 来处理 MOE 模型中的动态性,以实现更高效的稀疏预训练。
其核心优势在于,它不会丢弃任何令牌,并能高效地适应现代硬件架构(支持块稀疏矩阵乘),从而达到显著的加速效果。
Megablocks的创新之处在于,它不像传统 MOE 那样使用批量矩阵乘法 (这通常假设所有专家形状相同且处理相同数量的令牌),而是将 MoE 层表示为块稀疏操作,可以灵活适应不均衡的令牌分配。
对于开源的混合专家模型(MOE),你可以关注下面这些:
NLLB MOE(Meta): NLLB 翻译模型的一个 MoE 变体
OpenMoE: 社区对基于 Llama 的模型的 MoE 尝试。
Mixtral 8x7B(Mistral): 一个性能超越了 Llama270B 的高质量混合专家模型,并且具有更快的推理速度。
Switch Transformers (Google): 基于T5 的 MoE 集合,专家数量从8名到 2048 名。最大的模型有 1.6 万亿个参数。
一些有趣的研究方向:
首先是尝试将稀疏混合专家模型(SMOE)蒸馏 回到具有更少实际参数但相似等价参数量的稠密模型。
MoE 的 量化 也是一个有趣的研究领域。例如,QMoE(2023年 10 月)通过将 MoE 量化到每个参数不到1位,将1.6万亿参数的 Switch Transformer 所需的存储从 3.2TB压缩到仅 160GB。
简而言之,一些值得探索的有趣领域包括:
将 Mixtral蒸馏成一个稠密模型。
探索合并专家模型的技术及其对推理时间的影响。
尝试对 Mixtral进行极端量化的实验。
未来已来,只是尚未普及。
最近两年,大家都可以看到AI的发展有多快,我国超10亿参数的大模型,在短短一年之内,已经超过了100个,现在还在不断的发掘中,时代在瞬息万变,我们又为何不给自己多一个选择,多一个出路,多一个可能呢?
与其在传统行业里停滞不前,不如尝试一下新兴行业,而AI大模型恰恰是这两年的大风口,整体AI领域2025年预计缺口1000万人,其中算法、工程应用类人才需求最为紧迫!
学习AI大模型是一项系统工程,需要时间和持续的努力。但随着技术的发展和在线资源的丰富,零基础的小白也有很好的机会逐步学习和掌握。【点击蓝字获取】
【2025最新】AI大模型全套学习籽料(可白嫖):LLM面试题+AI大模型学习路线+大模型PDF书籍+640套AI大模型报告等等,从入门到进阶再到精通,超全面存下吧!