在探索大语言模型的边界上,混合专家模型(MoE)的最新研究成果显得尤为亮眼。数据驱动策略为MoE模型的构建和优化提供了新思路。这一方法不仅提升了模型训练的效率,更在多个方面实现了性能的显著提升,展现了其广泛的应用潜力。期望这一成果能够给相关读者带来启发。本文已在International Conference on Intelligent Computing (ICIC 2024) 发表。
MoE(混合专家)模型的设计理念是将不同领域的专家知识整合起来,以解决用户的多样化查询,每个专家专注于特定类型的问题。这类模型通常包含一个gate层和多个“专家”网络。gate层作为选择机制,根据用户查询内容挑选最合适的专家来处理,并由这些专家生成响应。随着MoE技术的发展,Eigen、Ranzato和Ilya将其纳入深度神经网络(DNN)的核心部分,使DNN既具可扩展性又高效。在生成式大型语言模型(LLM)中,MoE模型包含两个基本组件:
• 稀疏MoE层:这一层替代了传统LLM解码器中的FFN层。每个稀疏MoE层都由多个专家组成,每个专家都是一个独立的MLP网络。
• Gate层:Gate层负责确定哪些专家子集将被激活以处理用户输入的令牌。它通常是一个FFN,通过处理输入令牌并使用softmax函数来计算选择每个专家的概率。随后,模型会识别概率最高的前K个专家,并将它们激活来处理用户输入。
由于MoE(混合专家)模型的架构主要由稀疏MoE层和gate层两个核心组件构成,其构建方法主要分为以下三种:
• 从头开始构建:这种方法类似于从零开始构建传统的语言模型。在MoE模型中,包括稀疏MoE层和gate层在内的所有神经网络层都需要进行随机初始化。随后,通过大量的语料库进行预训练、监督式微调以及强化学习,以训练出性能良好的MoE模型。
• LLaMA-MoE方法:LLaMA-MoE研究提出了一种新方法,通过将小型语言模型的FFN层分割来构建稀疏MoE层。这一过程采用神经元共享和神经元无关两种分裂策略。这两种策略都能有效地将FFN层分割成多个专家网络。值得注意的是,生成的专家网络参数量少于原始的密集FFN。为了保持专家网络的表示能力并确保输出有效性,引入了比例因子和重新缩放操作。Gate层的权重则是通过随机初始化获得。最终,通过持续的预训练来完善MoE模型。
• Sparse Upcycling:该方法提出了一种基于已训练的深度密集神经网络模型来构建MoE模型的技术。在构建过程中,将原密集模型中的layer-norm、attention、lm_head等层的参数直接应用于MoE模型对应层。同时,将MLP层复制并扩展为稀疏MoE层的权重。Gate层同样采用随机初始化。通过一系列训练步骤,最终得到训练完善的MoE模型。
相对于前面提到的现有MoE构建方法,存在一个显著的不足:某些MoE层,尤其是gate层,其参数权重需要随机初始化。这种随机初始化的gete层要求在训练高性能MoE模型时,必须经历一系列复杂的训练过程,并且在训练期间需要均衡地选择专家,这一训练过程不仅成本高昂,而且对错误容忍度较低。为了解决这些问题,我们提出了一种创新的数据驱动的MoE构建方法。该方法的核心在于利用“场景级监督数据”和一个基础的小规模语言模型来构建MoE模型。这里的“场景级监督数据”指的是一系列覆盖了MoE模型预期应用场景的监督数据集。构建流程分为四个阶段:数据驱动的gate层构建、稀疏MoE层的专家构建、MoE的监督式微调(SFT)以及针对通用任务的微调。
在探讨MoE模型中的gate层时,需关注矩阵
图1:数据驱动方法的初始化gate层的示例
为了更清晰地说明,图1展示了一个包含4位专家的MoE模型构建示例,该模型应用于医疗和法律两个不同的场景。在数据驱动gate层的权重初始化方面,我们以医疗场景为例,法律场景的初始化方式类似。对于医疗场景,我们指定了两位专家(E1和E2)来处理相关任务,他们在gate层M中对应的矩阵是M1和M2。
初始化M1和M2时,我们从“场景级监督数据”中提取了60个医疗监督数据,并分配给这两个矩阵。这60个数据中,20个被归类为通用数据,其余40个是非通用、复杂且专业化的“特定领域数据”。我们的数据驱动方法包括将这40个非通用医疗数据分成两个子集(每个专家分配2条“分配的领域特定数据”),并计算20个通用数据、1条“分配的领域特定数据”和5个来自法律的“负样本”的隐藏状态。这些计算结果用于初始化M1的权重。对另一条“分配的领域特定数据”重复相同过程以初始化M2的权重。
采用数据驱动的方法来初始化gate层中的所有矩阵,可以确保gate层在为特定问题选择最合适的专家时做出精准的决策。例如,面对医学相关查询时,gate层会优先选择专家E1和E2。这是因为矩阵M1和M2的权重是基于医疗数据的隐藏状态计算得出的,它们已经对这些数据表示进行了学习。通过结合这些隐藏状态,M1和M2能够有效地识别并区分不同类型的数据。当用户的查询与M1和M2初始化的数据表示相似时,gate层会通过最大化与输入查询的点积来优先考虑M1和M2,而不是其他矩阵。这样,通过M1和M2的点积结果,E1和E2将被选中来处理用户查询。与随机初始化的gate层相比,这种数据驱动的方法使得gate层能够学习各种输入表示,并理解每个矩阵所擅长的输入类型。这种方法最终确保了针对用户查询,能够选出最合适的专家进行响应。
(二)稀疏MoE 层
在监督式微调(SFT)阶段,如果稀疏MoE层中每个专家网络的权重相同,那么不同专家网络产生的输出结果将趋于相似。由于所有专家网络的结果相近,它们将拥有相似的反向传播梯度。这会导致在训练过程中,由于每个专家网络接收到的梯度相似且初始权重相同,更新后的权重也会趋于一致。为了解决这个问题,我们提出的方法在FFN层上引入了噪声,以增加专家网络之间的权重差异,从而优化MoE模型的表现。具体来说,我们为同一领域的专家网络分配了不同但相互关联的噪声值,而不同领域的专家网络则被分配了更容易区分的噪声值。这样,处理相同场景的专家子组将拥有不同的噪声值,而不同场景的专家子组之间的噪声值差异更大。这些噪声值被添加到原始FFN层的参数权重中,作为专家网络权重的初始化。
(三)MoE 监督微调
为了提升专家的处理能力,我们采用了领域数据监督微调过程。具体来说,我们使用“场景级监督数据”进行训练。得益于MoE模型中数据驱动的gate层能够精确地将输入令牌分配给相应的专家,因此无需额外的训练技术来平衡负载。微调过程与传统的LLM监督式微调(SFT)相似,监督数据被随机打乱,MoE模型根据交叉熵损失进行训练。经过一轮领域数据的SFT后,数据驱动的MoE模型在相关领域展现出了强大的推理能力。
(四)一般任务的监督微调
与使用“场景级监督数据”的训练过程不同,这一阶段的SFT数据仅包含一系列通用的问答任务。此外,训练在较小的数据集和学习率设置下进行。这样做的目的是在保留专家处理不同场景和领域任务能力的同时,增强其泛化能力。通过使用较小的训练数据和学习率,我们可以确保MoE模型的权重不会发生显著变化。
为了验证数据驱动MoE模型的效率和有效性,我们将其与现有的MoE模型构建方法进行了比较,并实施了对照实验。在此阶段,我们重点检验了数据驱动gate层和稀疏MoE层的性能。所有实验均遵循以下实验设置进行。
在实验中,Vicuna被选作构建MoE模型的基础模型。我们使用了四个开源的不同数据集来对MoE模型进行微调和评估,这些数据集包括:数学数据集(由MathGlm提供)、法律数据集(来源于law-gpt)、医学数据集(由Zhongjing开源)以及一个通用数据集——OpenOrca。
选择数学、法律和医学领域的开源数据集进行实验,旨在模拟这些领域中MoE模型的构建过程。在这些可用的开源数据集中,MathGlm和law-gpt提供了高质量的中文监督式微调(SFT)数据。Zhongjing开源的医学数据集包含了70,000条基于中文的真实医患对话,这些对话富含医学术语和专业知识。此外,OpenOrca数据集用于微调和验证MoE模型在通用任务中的表现。所有训练过程均在Nvidia A100 GPU设备上完成。
为了对比不同的MoE构建方法,我们分别采用了几种方法来构建不同类型的MoE模型进行比较。针对相关研究中提到的LLaMA-MoE和稀疏升级再造方法,我们通过神经元独立、神经元共享以及传统的FFN层复制技术在LLaMA-MoE和稀疏升级再造MoE模型中构建了稀疏MoE层。同时,gate层的权重是随机初始化的。
在构建过程完成后,我们进行了两个阶段的SFT训练。第一阶段使用特定领域的数据进行微调,第二阶段则采用通用数据进行训练。此外,我们利用四个验证集对所有训练后的MoE模型进行了定量评估。如图2所示,表1详细列出了Rouge评分,清晰地展示了数据驱动的MoE模型在所有场景下相较于llama-moe和稀疏升级再造方法在Rouge评估指标上的优势。
图2:数据驱动的 MoE 与现有的 MoE对比
表1:基于四类数据的 Rouge 评估
为了全面评估数据驱动MoE模型中各个组件的效果,我们进行了一系列控制实验,重点考察了模型中的数据驱动gate层和稀疏MoE层。
在针对数据驱动gate层的控制实验中,我们保持了MoE模型的整体架构不变,仅对gate层的初始化方法进行了调整。这种设计使得我们能够在数据驱动策略与传统的随机初始化方法之间进行直接比较。根据表2的数据,采用数据驱动gate层的MoE模型在Rouge评估指标上展现了显著的性能优势。具体而言,在医学验证数据集上,模型在医学领域的得分为70.53,数学领域为81.35,法律领域为68.87,而在通用任务上的得分为73.29。这些成绩分别代表了相比传统方法在医学、数学、法律和通用任务上的2.96、4.08、3.45和4.25个百分点的显著提升。
表2:Gate层的对照实验(Rouge 评估)
图3:不同 MoE 模型选择概率
在评估稀疏MoE层构建中引入噪声的有效性时,我们采用了相似的方法。通过在稀疏MoE层的构建过程中加入噪声,并随后进行监督式微调,我们观察到数据驱动模型的性能超越了仅使用FFN层复制的模型。具体来说,根据表3的数据,数据驱动的模型在医学、数学、法律和通用场景中的Rouge评分分别比仅复制FFN层的模型高出2.19、1.14、2.12和0.95个百分点。
表3:稀疏 MoE 层的对照实验( Rouge 评估)
总的来说,我们提出了一种高效且有效的构建MoE模型的方法,这种方法被称作数据驱动的MoE。它在简单性、效率和有效性方面超越了传统的MoE构建方法。特别是在医学、数学、法律和通用域的验证集上,数据驱动的MoE模型在Rouge评估中分别实现了7.26、9.96、8.99和5.25的最大改进。
具体来说,我们使用数据驱动的方法来初始化gate层,这消除了在均匀选择专家并确保他们在MoE训练阶段得到充分培训时所需的额外负载平衡措施。与依赖随机初始化的传统方法相比,这大大简化了训练过程。此外,创建稀疏MoE层只需要一个小规模的LLM,并且可以通过复制FFN层并添加噪声来实现。最后,通过实施所提出的数据驱动方法,数据驱动的MoE模型可以在各个领域实现高性能,只需一个阶段的监督微调。此外,通过应用一般任务SFT,可以进一步提高模型在一般任务中的能力和泛化能力。由于初始化数据驱动的gate层和稀疏MoE层的简单性,它们也可以通过应用来自各种应用领域的预训练数据来初始化。
在未来的工作中,我们将通过使用预训练数据初始化gate层,专注于评估数据驱动的MoE模型在持续的预训练任务中的效率和有效性。总的来说,我们提出的数据驱动的MoE方法为构建MoE模型提供了一种更高效和有效的解决方案,可以帮助开发人员和研究人员通过一个阶段的领域数据SFT方便地部署有效的MoE模型。
[1] Chiang, W.L., Li, Z., Lin, Z., Sheng, Y., Wu, Z., Zhang, H., Zheng, L., Zhuang, S., Zhuang, Y., Gonzalez, J.E., et al.: Vicuna: An open-source chatbot impressing gpt-4 with 90% chatgpt quality. See https://vicuna. lmsys. org (accessed 14 April 2023) (2023)
[2] Yang, Z., Ding, M., Lv, Q., Jiang, Z., He, Z., Guo, Y., Bai, J., Tang, J.:Gpt can solve mathematical problems without a calculator. arXiv preprint arXiv:2309.03241 (2023)
[3]Hongcheng Liu, Yusheng Liao, Y.M.Y.W.: Lawgpt (2023), https://github.com/LiuHC0428/LAW_GPT
[4] Yang, S., Zhao, H., Zhu, S., Zhou, G., Xu, H., Jia, Y., Zan, H.: Zhongjing: Enhancing the chinese medical capabilities of large language model through expert feedback and real world multi-turn dialogue. arXiv preprint arXiv:2308.03549 (2023)
[5] Mukherjee, S., Mitra, A., Jawahar, G., Agarwal, S., Palangi, H., Awadallah, A.: Orca: Progressive learning from complex explanation traces of gpt-4. arXiv preprint arXiv:2306.02707 (2023)