一文图解混合专家模型(Mixture of Experts, MoE)

混合专家模型(Mixture of Experts,MoE)的理念起源于1991年的论文:《Adaptive Mixture of Local Experts》,这个概念与集成学习方法相似,旨在为由多个单独网络组成的系统建立一个监管机制,在这种系统中,每个网络 (被称为"专家") 处理训练样本的不同子集,专注于输入空间的特定区域。

许多具有代表性的模型,比如Mixtral-8x7B, DeepSeek, GPT-4, Gemini 1.5, Grok-1等都采用MoE的架构,同时看了一些MoE相关的文献和资料,所以总结一下啊。

要点:

  • 与稠密模型相比, MoE预训练速度更快。

  • 与具有相同参数数量的模型相比,具有更快的推理速度。

  • 需要大量显存,因为所有专家系统都需要加载到内存中。

  • MoE主要包括两个核心部分:专家和门控网络。

1、什么是MoE?

MoE是一种机器学习方法,它将人工智能(AI)模型划分为多个独立的子网络(或"专家"),每个专家专门处理输入数据的某个子集,并共同完成任务。

MoE架构使得即使是包含数十亿参数的大模型,也能在预训练阶段大幅降低计算成本,并在推理时实现更快的性能,总体而言,其高效性来源于"选择性激活"机制,即MoE并不会在每个任务中激活整个神经网络,而是仅激活完成该任务所需的特定专家。

一般来说,参数数量越多,模型的容量就越大,也就是吸收信息和模式的能力越强,然而,更多的参数也意味着更高的计算成本,无论是在训练还是推理阶段。在典型的深度学习模型中(即所谓的"稠密模型"),整个网络都会被执行,以处理所有输入数据,这就导致了模型容量与计算可行性之间的权衡。

与传统的稠密模型不同,MoE 采用条件计算(conditional computation)来实现稀疏性:它不会在每次输入时调用整个网络,而是学习一种计算成本较低的映射函数,以确定网络的哪一部分(即哪些专家)最适合处理特定输入,例如在自然语言处理(NLP)任务中用于表示单词或单词片段的单个token。这样一来,模型的总体参数规模可以增加(从而提升容量),但计算负担不会相应增长,因为在任何特定时刻,模型只会使用一部分参数,而非全部参数。所以,作为一种基于 Transformer 架构的模型,混合专家模型主要由两个关键部分组成:

  • 稀疏 MoE 层,也称为专家: 这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。MoE 层包含若干"专家"(例如 8 个),每个专家本身是一个独立的神经网络。在实际应用中,这些专家通常是前馈网络 (FFN),但它们也可以是更复杂的网络结构,甚至可以是 MoE 层本身,从而形成层级式的 MoE 结构。每个前馈神经网络(FFNN)层现在包含一组"专家",其中一部分会被选中进行计算。这些"专家"本质上也是前馈神经网络。
  • 门控网络或路由: 负责决定每个token(token)应该被分配到哪个专家进行处理。有时,一个token甚至可以被发送到多个专家,token的路由方式是 MoE 使用中的一个关键点,因为路由器由学习的参数组成,并且与网络的其他部分一同进行预训练。

总结来说,在混合专家模型 (MoE) 中,将传统 Transformer 模型中的每个前馈网络 (FFN) 层替换为 MoE 层,其中 MoE 层由两个核心部分组成: 一个门控网络和若干数量的专家。

2、MoE工作原理

MoE模型的工作方式是设置多个"专家"------每个专家都是一个更大神经网络中的子网络,并且每个输入token只会激活其中一个或少数几个专家,为了让每个token被正确分配到最合适的专家,模型需要选择并优化一个门控网络或路由器来激活最适合处理特定输入的专家,MoE 方法的主要优势在于,它通过强制稀疏化来提高模型容量,而不是让整个神经网络对每个输入token都全量激活,这样一来,计算成本基本保持不变的同时,模型的能力却能大幅提升。

根据token如何映射到专家,MoE可以是稀疏的(sparse)或密集的(dense)。稀疏 MoE 只在路由时选择一部分专家进行计算,相比于密集 MoE,大幅降低了计算成本。

从架构上看,这种方法是通过用稀疏MoE层(或模块)替换传统的密集前馈网络(FFN)层来实现的。在神经网络的术语中,"模块"(block)指的是执行特定功能的重复结构。在稀疏MoE(SMoE)模型中,这些专家模块可以是单层结构、自包含的 FFN,甚至可以是嵌套的 MoE 结构。

许多早期研究采用了"token选择路由"策略,即路由算法会为每个token挑选最合适的一个或两个专家进行计算;不过,这种独立的token选择方式往往会导致专家负载不均,部分专家过度使用,而其他专家利用率不足。为了解决这个问题,以往的稀疏门控网络引入了额外的辅助损失作为正则化手段,以防止过多token被路由到同一个专家。但这种方法的效果有限,因此,采用token选择路由的模型通常需要大幅增加专家的计算容量(是实际需求的 2 到 8 倍),以避免缓冲区溢出导致token丢失。

以 Mistral 的 Mixtral 8x7B 语言模型为例,它的每一层由 8 个前馈模块(即专家)组成,每个专家包含 70 亿个参数。对于每个token,每一层的路由网络都会从这 8 个专家中挑选 2 个来处理数据。然后,它会将这两个专家的输出结合起来,并将结果传递到下一层。而且,每一层选中的专家可能会有所不同,不一定与前一层或后一层选中的专家相同。

3、挑战

尽管混合专家模型 (MoE) 提供了若干显著优势,例如更高效的预训练和与稠密模型相比更快的推理速度,但它们也伴随着一些挑战:

  • 训练挑战: 虽然 MoE 能够实现更高效的计算预训练,但它们在微调阶段往往面临泛化能力不足的问题,长期以来易于引发过拟合现象。
  • 推理挑战: MoE 模型虽然可能拥有大量参数,但在推理过程中只使用其中的一部分,这使得它们的推理速度快于具有相同数量参数的稠密模型。然而,这种模型需要将所有参数加载到内存中,因此对内存的需求非常高。以 Mixtral 8x7B 这样的 MoE 为例,需要足够的 VRAM 来容纳一个 47B 参数的稠密模型。之所以是 47B 而不是 8 x 7B = 56B,是因为在 MoE 模型中,只有 FFN 层被视为独立的专家,而模型的其他参数是共享的。此外,假设每个token只使用两个专家,那么推理速度 (以 FLOPs 计算) 类似于使用 12B 模型 (而不是 14B 模型),因为虽然它进行了 2x7B 的矩阵乘法计算,但某些层是共享的。

参考文献及资料

相关推荐
微学AI3 小时前
详细介绍:MCP(大模型上下文协议)的架构与组件,以及MCP的开发实践
前端·人工智能·深度学习·架构·llm·mcp
加班挖坑4 小时前
本地部署graphRAG
llm·openai
Feel_狗焕4 小时前
transformer架构详解由浅入深-大模型入坑笔记真的很详细
chatgpt·llm
商汤万象开发者5 小时前
一文讲透“MCP协议+LazyLLM”实战:零基础秒建Agent分身!
llm
Awesome Baron6 小时前
《Learning Langchain》阅读笔记2-基于 Gemini 的 Langchain PromptTemplate 实现方式
jupyter·chatgpt·langchain·llm
云逸001~8 小时前
Kubeflow 快速入门实战(二) - Pipelines / Katib / KServer
云原生·kubernetes·大模型·llm·mlops·kubeflow·kserver
AI大模型顾潇11 小时前
[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
前端·人工智能·llm·微调·prompt·编程·ai大模型
袋鼠云数栈UED团队12 小时前
AI 大模型科普-概念向
人工智能·llm·aigc
Q同学12 小时前
字节ReTool:大模型也要学会善于利用工具
llm·nlp·强化学习