点击下方 卡片 ,关注“ 慢慢学AIGC ”
由 DALL·E 3 生成,提示词:A group of experts engaged in a discussion in a modern conference room. The room has a large table with documents, laptops, and coffee cups scattered around. Two experts are intensely focused on their work, with one typing on a laptop and the other writing notes on a notepad. The atmosphere is collaborative and busy, with diverse individuals representing different fields such as technology, science, and business.
引言
你可能听说过专家混合(MoE)模型架构,尤其是关于 Mixtral 8x7B 的。一个常见的误解是,MoE 涉及多个“专家”(同时使用多个),每个专家都具有特定的能力或在特定的知识领域受过训练。例如,有人可能会认为对于代码生成,路由器将请求发送给一个独立处理所有代码生成任务的单一专家,或者另一个精通数学的专家处理所有与数学相关的推理任务。 然而,MoE 的实际工作方式却大不相同。 让我们深入了解一下,我将用更简单的术语来解释它。
专家混合(MoE)简介
专家混合(MoE)模型是一类 Transformer 模型。与传统的密集模型不同,MoE 采用“稀疏”方法,其中每个输入仅使用模型的部分组件(即“专家”)。这种设置允许更高效的预训练和更快的推理,同时管理更大的模型规模。
在 MoE 中,每个专家都是一个神经网络,通常是一个前馈网络(FFN),而一个门控网络或路由器决定将哪些标记发送给哪个专家。专家专注于输入数据的不同方面,使模型能够更高效地处理更广泛的任务。
一个理解 MoE 的类比是考虑一家拥有各种专科部门(专家)的医院。每个病人(输入标记)根据他们的症状(数据特征)由接待处(路由器)引导到适当的部门。正如并非所有部门都参与治疗每个病人,MoE 中的所有专家也并不用于每个输入。
相比之下,在标准的语言模型架构(密集模型)中,每个输入都会使用模型的每个部分,就像一个全科医生试图治疗每个病人的所有需求。
总而言之,MoE 通过为每个输入使用模型的专门子集,提供了一种更高效和潜在更快的模型训练和推理方法,但它们也有自己的挑战,特别是在内存需求和微调方面。不过,我们先暂且不谈这些。现在,让我们仔细看看“专家”这个术语。
“专家”是什么意思?
在专家混合(MoE)模型的上下文中,“专家”一词通常指模型的一个组件,它专门处理数据中的某种类型的任务或模式,而不是像金融、商业或 IT 这样的特定主题。这些专家更多地处理不同类型的计算模式或任务(如代码生成、推理、摘要),而不是专注于特定领域的知识。
MoE 模型中的每个专家本质上是一个较小的神经网络,专门有效地处理某些类型的操作或数据模式。模型学习将输入数据的不同部分路由到最相关的专家。例如,一个专家可能更擅长处理数值数据,而另一个可能专注于自然语言处理任务。
专家的专门化主要由他们接受训练的数据和模型本身的结构决定。它更多地是关于计算任务的性质(如识别某些模式、处理某些类型的输入),而不是关于领域特定的知识。
然而,理论上可以设计 MoE 模型,其中不同的专家在不同的知识领域(如特定主题)进行训练,但这更多是关于设计选择和训练方法,而不是 MoE 架构的固有特性。在实践中,MoE 模型更多地用于其计算效率和处理各种任务的灵活性。
专家混合(MoE)模型如何训练?
专家混合(MoE)模型的训练过程,其中每个专家变得更擅长特定类型的推理,是一个细致入微的过程。它不像直接在特定任务或领域上训练每个专家那样简单。相反,MoE 模型中的专家专门化通常在训练过程中自然形成,这是由于模型的架构和它接触的数据的组合。以下是这个过程的概述:
多样化的数据:模型在包含广泛任务或领域的多样化数据集上进行训练。这种多样性对于专家接触不同类型的数据和问题至关重要。
- 路由机制:MoE 模型具有一个路由机制(通常是一个可训练的门控),决定哪个专家处理输入数据的哪个部分。在训练过程中,这个门控学习将不同类型的数据路由到不同的专家,基于他们新兴的专长。
- 专家专门化:随着训练的进行,每个专家逐渐变得更擅长处理某些类型的数据或任务。这种专门化发生,因为专家接收并从他们最有效处理的数据类型中学习,由路由机制指引。
- 反馈循环:存在一个反馈循环——随着一个专家在某种类型的数据上变得更擅长,路由器更有可能在未来将类似的数据发送给该专家。这强化了每个专家的专门化。
- 正则化和损失函数:训练过程中通常包括正则化技术和专门的损失函数,以鼓励高效学习,避免一个专家成为“万事通”,从而确保分布式专门化。
- 容量限制:通过对专家施加容量限制,模型确保没有一个专家因任务过载,促进学习在所有专家之间的平衡分布。
- 微调和调整:模型可能会经历微调阶段,某些类型的任务被强调,进一步优化每个组件的专门化。
请记住,虽然专家会专门化,但他们通常不会专门处理某一种狭窄的任务。相反,他们的“专长”应被理解为对某些类型的数据或任务效率或效果的相对提高,而不是严格的领域限制。
那么问题来了,这些知识如何应用于 Mistral 发布的 Mixtral 8x7B?
Mixtral 8x7B
在“Mixtral of Experts”论文(https://arxiv.org/abs/2401.04088)中介绍的 Mixtral 8x7B 是一种稀疏专家混合(SMoE)语言模型,具有独特的特征:
- 它与 Mistral 7B 具有相同的架构,但每一层由 8 个前馈块(专家)组成。
- 对于每一层的每个标记,路由网络选择两个专家来处理当前状态并结合他们的输出。每个时间步选择的专家可能不同,这使得每个标记可以访问 47B 参数,但在推理过程中仅使用 13B 参数。
理解 Mixtral 8x7B 这一稀疏专家混合(SMoE)模型中的推理和标记处理过程,需要了解标记如何通过各种专家进行路由。
以下是逐步说明:
- 输入标记接收:想象一个输入标记流进入模型。每个标记可以代表一段文本、代码或其他数据类型。
- 路由决策:每个标记由路由网络评估。路由器决定哪两个可用的八个专家(前馈块)应该处理这个特定的标记。这个决定基于标记的特征和专家的专门功能。
- 专家处理:选定的专家独立处理标记。每个专家应用其专门处理某些类型数据或任务的神经网络层。例如,一个专家可能更擅长处理自然语言,而另一个可能更有效地处理数值数据。
- 输出组合:处理后,选定专家的输出会被组合。这可能涉及平均输出、连接它们或使用其他方法合并每个专家获取的信息。
- 层间处理:这个过程在模型的每一层重复。每一层,路由网络可以根据标记的当前状态选择不同的专家对。
- 最终输出生成:标记经过所有层后,生成最终输出。这可能是一个预测、一段生成的文本或其他形式的处理数据。
- 稀疏激活:重要的是要注意,在任何给定时间,仅使用总参数(专家)的一小部分。这使得模型在推理过程中‘稀疏’且高效。
在实际应用中,这个过程在许多标记和多个 GPU 之间并行化,特别是在云计算环境中。
“专家混合”模型的未来
目前是否有其他利用专家混合(MoE)方法的大型语言模型?是的,有很多。你可以在 LLM Explorer(https://llm.extractum.io/list/?moe=) 上找到它们,查看“专家混合”模型的列表。
在这里,你可以查看模型参数,评估基准测试,并将其性能与参考模型(如 GPT-4)进行比较。
点击下方 卡片 ,关注“ 慢慢学AIGC ”