大模型的研究新方向:混合专家模型(MoE)
大家可能注意到了,GPT-4、DeepSeekMoE这些模型的发布,都绕不开一个话题——混合专家模型(MoE)。可以说,MoE已经成为AI社区最炙手可热的技术路线之一。2023年6月,知名黑客George Hotz透露了一个相当震撼的消息:GPT-4由8个220B的专家模型组成。如果把这8个专家模型比作比GPT-3还大的脑袋,那GPT-4就是一个八个头的超级大怪兽。
GPT-4(MoE)相比GPT-3(Transformer)和GPT-3.5(RLHF)的性能提升了一个数量级,关键很可能就在MoE架构上。过去给大模型增加参数,是在一个模型上堆层数;现在,思路变了——开始堆模型数。可以预见,未来大语言模型的研究方向,可能不再是单纯增大单一模型的向量维度和层数,而是转向增大整体架构中的模型数量。GPT-4引入MoE,几乎是一个必然选择:无论是算力、数据还是稳定性,训练一个万亿级参数的单一模型都极为困难,推理成本更是居高不下——跑万亿个参数才能算出下一个token,这笔账怎么算都不划算。所以,把若干个模型堆成一个MoE大模型,看起来是必由之路。
那么,究竟什么是MoE大模型?它又具备哪些独特的优势?
MoE,全称Mixed Expert Models,混合专家模型,说白了就是把多个专家模型混合在一起,形成一个新的模型。要理解MoE,有两个思想前提能帮上大忙。其一,现实生活里碰上一个横跨多领域知识的复杂问题,该怎么办?最简单的办法就是拆解任务,把不同领域的专家召集起来,各自攻克自己擅长的部分,最后汇总结论。这个思路跟集成学习有点像,但又有实质区别:集成学习不需要把任务拆成子任务,它是训练多个基学习器来解决同一个问题,最后简单组合它们的预测结果;而MoE是把大问题先拆开,再逐个解决小问题,然后汇总结论。其二,模型规模是提升性能的关键因素之一。在有限的计算资源下,用更少的训练步数训练一个更大的模型,往往比用更多步数训练一个较小的模型效果更好。

MoE正是基于这些理念,由多个专业化的子模型(也就是“专家”)组合而成,每个专家都有自己的擅长领域。而决定哪个专家来回答特定问题的,是一个叫“门控网络”的机制。说到门控,很多人可能先想到LSTM里的门控,但这里的门控完全不一样:LSTM的门控制信息流动,这里的门更像我们日常中的门——选择进门还是不进门,是一个控制是否启用某个专家模型的概率分布值。

MoE基于Transformer架构,主要由两部分组成:
稀疏MoE层
门控网络或路由
MoE一个显著的优势是,它能在远少于稠密模型所需计算资源的情况下进行有效预训练。换句话说,在同样的计算预算下,可以显著扩大模型或数据集的规模。预训练阶段尤其明显:与稠密模型相比,混合专家模型通常能更快地达到相同的质量水平。比如Google的Switch Transformer,模型大小是T5-XXL的15倍,在相同计算资源下,它达到固定困惑度PPL的速度比T5-XXL快了4倍。
国内的DeepSeek团队开源了国内首个MoE大模型DeepSeekMoE,成绩单相当亮眼:
- DeepSeekMoE 2B可接近2B Dense,仅用了17.5%的计算量。
- DeepSeekMoE 16B性能比肩LLaMA2 7B,只用了40%的计算量。
- DeepSeekMoE 145B优于Google的MoE大模型GShard,仅用28.5%的计算量就匹配了67B Dense模型的性能。
除此之外,MoE大模型还有这些优点:
- 训练速度更快,效果更好。
- 相同参数量下,推理成本更低。
- 扩展能力强,允许模型在保持计算成本不变的情况下增加参数数量,从而扩展到万亿参数级别。
- 多任务学习能力突出,MoE在多任务学习中有很好的性能表现。
MoE和大模型的结合,可以说是老树发新芽。MoE的崛起,本质上是因为大模型的发展已经撞上了一堵墙——包括“幻觉”问题、逻辑理解能力、数学推理能力等瓶颈。要突破这些瓶颈,就必须继续增加模型的复杂度。随着应用场景越来越复杂、越来越细分,垂直领域的碎片化程度也在加剧,想要一个模型既能回答通识问题,又能解决专业问题,尤其是在多模态大模型浪潮下,每个数据集(文本、图像、语音等)的特征各不相同,MoE无疑是一种性价比更高的选择。国内大模型已经加速向MoE方向迈进,2024年,预计会有越来越多的大模型选择MoE架构。
接下来,我们会深入探讨MoE的主要原理,以此理解MoE大模型优势背后的逻辑。
一、Adaptive Mixtures of Local Experts
这是绝大多数MoE论文都会引用的一篇最早文章,发表于1991年。论文提出了一种新的监督学习过程——由多个独立网络组成一个系统,每个网络单独处理训练集合的一个子集。原因在于,对于多任务学习,如果使用常见的多层网络,各层之间的网络往往会产生强烈的干扰效应,导致学习变慢、泛化能力变差。为了解决这个问题,论文提出使用多个模型(即专家)来学习,同时用一个门控网络来决定每个数据应该由哪个模型来处理,从而减轻不同类型样本之间的干扰。
对于一个样本c,第i个专家的输出为,期望的输出向量为d_c,那么损失函数为:

其中是门控网络分配给第i个专家的权重。
但作者很快发现,这个损失函数可能导致专家网络之间出现强烈的耦合——所有专家的权重加在一起来计算损失,一个专家权重的变化会影响其他专家的loss。这种耦合导致多个专家被频繁用于处理同一条样本,而不是各自专注自己的子任务。为了解决这个问题,论文重新定义了损失函数,鼓励专家之间的竞争:先让不同专家单独计算loss,再加权求和。这意味着每个专家在处理特定样本时的目标独立于其他专家。如果门控网络和专家都使用这个新loss进行梯度下降训练,系统会倾向于把某类特定样本分配给特定的专家——当某个专家在给定样本上的loss小于所有专家的平均loss时,它对该样本的门控score会增加;反之则会减少。这种机制鼓励竞争而非合作,从而提高了学习效率和泛化能力。
二、Sparsely-Gated MoE
2010到2015年间,两个独立的研究领域为MoE的后续发展做出了重要贡献:
- :Eigen、Ranzato和Ilya探索了将MoE作为更深层网络的一个组件,使模型在保持大型化的同时提升效率。
组件专家
- :传统神经网络每一层都处理所有输入数据。Yoshua Bengio等人开始探索基于输入token动态激活或停用网络组件的方法。
条件计算
2017年,Shazeer等人将这些概念应用于137B的LSTM。通过引入稀疏性,在保持极高规模的同时实现了快速推理速度,仅在牺牲极少计算效率的情况下就把模型规模提升了1000多倍。这项工作发表在论文《Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer》中。与1991年的工作相比,这里的Sparsely-Gated MoE有两个关键区别:
- :不是所有专家都会起作用,只有极少数专家被用于推理。这种稀疏性使得我们能够使用海量专家,把模型规模成倍扩大。
Sparsely-Gated
- :不再是sample-level(不同样本使用不同专家),而是token-level——一个句子中不同的token使用不同的专家。
Token-level
如上图所示,每个token都会经过一层MoE Layer,每个MoE层包含多个专家,同时有一个门控网络会根据当前token选择少数几个专家来进行计算。
2.1 门控网络
门控网络的设计和实现是Sparsely-Gated MoE层的核心。它负责为每个输入token选择一个稀疏的专家组合。最简单的门控网络就是概率分布形式,让系统根据概率做出选择。在深度学习中,最简单的方式就是设定门控网络为一个简单的前馈神经网络,最后接一层softmax,作为每个专家的使用权重。
设G(x)和E_i(x)分别是门控网络和第i个专家的输出,那么在输入x下,输出就是所有专家的加权和:
典型的门控网络就是一个带softmax的简单网络,它学会将输入发送给哪个专家。但在这种设置下,所有专家都会对输入进行运算,再通过门控网络的输出加权求和。如果专家数量太大,计算量也会非常可观。如果能想办法让某些专家的门控网络输出为0,就无需对它们进行计算,从而节省资源。其中效果比较好的方法包括带噪声的TopK门控(Noisy Top-K Gating)。它引入可调整的噪声,然后保留前k个值。具体来说:先添加一些噪声,再选择保留前k个值,最后应用Softmax函数。对于非TopK的部分,值被设为负无穷,Softmax之后变成0,不会被选中。噪声的存在还能让不同专家的负载更加均衡。实际应用中,作者使用的k值为2到4。
在MoE模型中加入噪声,主要有以下几点原因:
- 提高模型的鲁棒性和泛化能力,尤其在面对不确定性或嘈杂数据时保持稳定。
- 减少过拟合风险。
- 实现负载均衡,使不同专家之间的任务量更加均匀。
2.2 辅助损失——均衡专家利用负载率
理解专家负载均衡,可以从batch size角度切入。一般来说,较大的batch size推理性能更好,但由于样本在MoE层激活专家时需要并行,每个专家的实际batch size会减少。举个例子:假设当前batch有10个token,其中5个被路由到某个专家网络,另外5个被路由到其他5个不同的专家网络,这就会导致各专家网络的batch size极不均匀——一个专家的计算量是另一个的5倍,算力利用率自然就低了。
更严重的是,如果把所有token都发给少数几个头部专家,训练效率会非常低下。因为在训练中,门控网络会逐渐收敛到只选择这些少数专家,进而形成自我强化的循环:受青睐的专家训练得更快,效果更好,所以被选中的频率越来越高。最终,这几个专家过度负载,每次要处理大量token,而其他专家则被闲置,导致模型失衡,性能下降。因此,控制专家均衡是MoE模型必须解决的问题。上文提到的噪声机制,某种程度上就是为了让门控在做出选择时跳过几个最优专家,去选择其他专家,从而让它们协同工作。
除此之外,还可以通过添加辅助损失来鼓励模型给予所有专家同等重视。论文提出了一种软约束方法:定义专家相对于一批训练样本的"重要性"Importance(X)——即该专家在这批样本中门控值的总和。然后定义一个额外的损失函数L_Importance(X),添加到模型的整体损失中。这个损失函数等于重要性集合的变异系数CV的平方,再乘以一个手动调整的缩放因子w_Importance。这个额外的损失鼓励所有专家具有相等的重要性,从而保证每个专家都能接收到大致数量相当的训练样本。
三、GShard
GShard是谷歌2021年在论文《GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding》中提出的方法,首次将MoE思想拓展到Transformer上。具体做法是:在Transformer的encoder和decoder中,每隔一个FFN层,就替换成使用Top-2门控的MoE层。
上图展示了编码器部分的结构。这种架构对大规模计算非常有效:当扩展到多个设备时,MoE层在不同设备间共享,而其他层则在每个设备上复制。GShard MoE层中的专家网络被分布在不同的设备上,每个专家处理一部分输入数据,每个token根据门控机制的输出被分配到一个或两个专家网络中。这样,整个MoE层的计算就被分散到多个设备上,每个设备只负责一部分。
实现MoE跨设备分片的关键在于结合模型并行化和数据并行化。在模型并行化中,模型的不同部分(MoE层的专家网络)被分配到不同设备;在数据并行化中,输入数据被分割成多个部分,每个部分分配给不同设备处理。由于专家被分配到不同设备,可以并行计算,大大提升了计算效率——这也就解释了为什么MoE能实现更大的模型参数和更低的训练成本。
为了保持负载平衡和训练效率,GShard的作者除了引入Sparsely-Gated MoE中的辅助loss外,还做了几个关键调整:
- :在Top-2设置中,GShard始终选择排名最高的专家,但第二个专家是根据权重比例随机选择的。
随机路由
- :设定一个阈值,定义一个专家最多能处理多少token。如果容量达到上限,token就会溢出,通过残差连接传递到下一层,或被完全丢弃。专家容量是MoE中最重要的概念之一。之所以需要它,是因为无法提前预知多少token会分配给每个专家。因此需要一个固定容量因子来防止专家过载。计算公式为:专家容量 = (总token数 / 专家数) × 容量因子。容量因子大于1.0,为每个专家提供额外的缓冲空间,以应对分配不均的情况。但如果设置过高,又会浪费计算资源和内存。研究表明,容量因子在1到1.25之间表现最佳。
专家容量
注意:推理过程中,有些计算是共享的,比如自注意力机制适用于所有token。这就解释了为什么Mixtral 8×7B不是56B,而是47B。同样,如果采用Top-2门控,模型会用14B的参数,但由于自注意力操作(专家间共享)的存在,实际运行时使用的参数数量是12B。
四、Switch Transformers
2022年,Google推出Switch Transformers,对MoE大模型的复杂性、通信成本以及训练微调过程中的不稳定性进行了优化。Switch Transformers是一个1.6万亿参数的MoE,拥有2048个专家,可以用transformers库运行。
Switch Transformers简化了MoE路由算法,设计了直观的改进模型,降低了通信和计算成本。它的训练方法减轻了不稳定性,并且首次展示了用较低精度(bfloat16)格式训练大型稀疏模型的可行性。
上图显示,模型参数随着专家数量的增加而增加,而在保持相同计算成本的条件下,loss逐渐降低。这表明模型在保持计算效率的同时,能够利用更多参数来提高性能。
上图比较了相同计算资源下,Switch Transformer和T5-Base的PPL。可以看到,Switch Transformer模型在相同计算资源条件下,相比T5-Base有显著提升,而且专家数越多(模型参数越多、越稀疏),效果越好。
4.1 Switch Transformer的主要优化
Switch Transformer在设计上有一个明确的指导原则:尽可能把Transformer模型的参数量做大!——也就是说加专家数量、堆叠专家模型!
与其他MoE模型的一个显著不同是,Switch Transformer的门控网络每次只路由到1个专家,即每次只选取Top1的专家。这样做的好处是,MoE层的计算效率最高,同时降低了通信成本。
4.2 改进预训练和Fine-Tuning技术
1. 改进预训练——精度选择
作者尝试了混合精度来改进预训练,因为较低的精度可以减少处理器间的通信成本、计算成本和存储tensor的内存。然而在最初实验中,当专家和门控网络都用bfloat16精度训练时,出现了训练不稳定的现象。这种不稳定性主要由门控计算引起,因为门控涉及指数函数等对精度要求较高的操作。为了保持稳定性,门控过程使用了全精度。下表显示了混合精度训练的效果:将路由器输入转换为float32,同时保持其他部分为bfloat16,使模型在几乎与bfloat16相同的训练速度下,实现了与float32相当的稳定性。
2. 改进预训练——更小的参数初始化
深度学习中,适当的权重初始化对训练成功至关重要。作者观察到,在Switch Transformer中这一点尤为明显。为了提高稳定性,他们建议减少默认的Transformer初始化规模。在Transformer中,权重矩阵通常从一个正态分布开始初始化。作者建议将这个初始化正态分布标准差的超参数s从默认值1.0减少10倍到0.1,模型的效果和稳定性都得到了提升。
3. 改进微调——Fine-Tuning过程正则化
为了解决Fine-Tuning过程中的过拟合问题,作者提出增加dropout的策略,特别是在专家层中,称之为"expert dropout"——在Fine-Tuning时只在专家层增加dropout率。通过这种策略,有效减少了过拟合风险,同时保持了模型在下游任务上的性能。这种正则化方法对于处理具有大量参数的稀疏模型特别有用。
五、ST-MOE——用Router z-loss稳定模型训练
在论文《ST-MOE: Designing Stable and Transferable Sparse Expert Models》中,作者提出了一种新的辅助损失函数,称为Router z-loss,用于提高稀疏模型的训练稳定性,同时保持或稍微提升模型质量。这个损失函数专门针对稀疏专家模型中的路由器设计,它鼓励路由器产生较小的logits值,因为较大的logits值会在softmax激活函数中导致较大的梯度,引发训练不稳定。
Router z-loss的定义如下:其中B是batch中的token数量,N是专家数量,x是门控的logits值。这个损失函数通过惩罚较大的logits值来工作,帮助减少训练过程中的不稳定性。它有两大作用:一是稳定梯度更新——过大的logits值可能导致梯度消失或爆炸,适当减小logits幅度能使梯度更新更平稳;二是提高泛化能力——过大的logits值可能导致模型对训练集中的某些特征过度敏感,惩罚机制能使模型更谨慎地做出预测,避免过拟合。
此外,ST-MOE的作者还提到了两个关于MoE模型的有趣现象:
- encoder层的专家倾向于专注于特定类型的token或浅层概念。例如,某些专家可能专门处理标点符号,而其他专家则处理专有名词。decoder中的专家通常专业程度较低。研究者还发现,即使在多语言训练中,模型也不会如人们期望的那样按语言分配专家——没有任何专家被指定专门处理某一种特定语言。
专家如何学习?
- 增加更多专家可以提升效率,但这种优势随着专家数量的增加而递减(尤其在专家数达到256或512之后更加明显),符合常见的边际效用递减现象。这种特性在小规模模型下同样存在。所以在设计MoE模型时,需要仔细权衡算力和模型质量,专家数量并非越多越好。
专家数量对模型有何影响?
六、微调MoE模型
稠密模型和稀疏模型在过拟合的动态表现上存在显著差异。稀疏模型更易于过拟合,因此在处理这些模型时,尝试更强的内部正则化措施是很有必要的,比如使用更高比例的dropout。举例来说,可以为稠密层设置一个较低的dropout率,而为稀疏层设置更高的dropout率,从而优化模型性能。
另一种可行的Fine-Tuning策略是尝试冻结所有非专家层的权重。但实验发现这会导致性能大幅下降。反过来,可以尝试只冻结MoE层的参数。实验结果显示,这种方法几乎与更新所有参数的效果相当,同时还能加速Fine-Tuning过程并降低显存需求。
Fine-Tuning时还需要注意一点:稀疏模型有需要特殊设置的超参数。例如,它们往往更适合使用较小的batch size和较高的学习率,这样可以获得更好的训练效果。
论文《MoEs Meets Instruction Tuning》(2023年7月)做了几个对比实验:非MoE模型微调、MoE模型微调、非MoE模型指令微调、MoE模型指令微调。结论是:MoE模型指令微调 > 非MoE模型指令微调 > 非MoE模型微调 > MoE模型微调。并且,子任务类型越多,MoE模型指令微调的效果就越好。
七、MoE模型后续研究方向
MoE模型有几个值得探索的方向:
- 。Switch Transformers的作者做了一些初步实验,通过蒸馏可以保留30-40%的稀疏性增益。
将MoE蒸馏成稠密模型
- 。该技术对专家的权重进行合并,从而减少参数量。
探索专家聚合技术
- 。QMoE(2023年10月)通过将MoE量化至每参数不足1比特,从而将1.6T的Switch Transformer模型的内存使用量从3.2TB压缩到了仅160GB。
对MoE执行极致量化
八、开源MoE模型
- :DeepSeek团队开源的DeepSeekMoE,模型、代码、论文均已同步发布。
国内的MoE大模型
- :Megablocks、Fairseq、OpenMoE。
国外的开源MoE模型(含训练代码)
- :Switch Transformers(基于T5,2048个专家,最大模型1.6万亿参数)、NLLB MoE(Meta)、OpenMoE(基于Llama的社区尝试)、Mixtral 8x7B(性能超越Llama 2 70B的高质量MoE,推理速度更快,已发布指令微调版本)。
开源了模型但未开源代码
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名