1.概述

MoE代表“混合专家模型”(Mixture of Experts),这是一种架构设计,通过将不同的子模型(即专家)结合起来进行任务处理。与传统的模型相比,MoE结构能够动态地选择并激活其中一部分专家,从而显著提升模型的效率和性能。尤其在计算和参数规模上,MoE架构能够在保持较低计算开销的同时,扩展模型的能力,成为许多LLM的热门选择。

2.内容

本篇内容主要介绍MoE架构的两个核心组件:专家(Experts)和路由器(Router)。这两个组件在典型的基于LLM的架构中发挥着关键作用。专家是负责执行特定任务的子模型,而路由器则负责决定哪些专家需要在给定任务中被激活,从而优化计算效率和模型表现。

2.1 什么是专家混合

混合专家模型(MoE)是一种创新技术,通过将多个专门的子模型(即“专家”)集成进大型语言模型(LLM)中,显著提升了模型的性能和效率。

MoE架构的核心由以下两个部分构成:

  • 专家(Experts):每个前馈神经网络层都配备了一组专家,这些专家是模型中的独立子网络,每次计算时,只有一部分专家会被激活参与处理。专家通常是具备特定任务能力的神经网络。
  • 路由器(Router)或门控网络(Gate Network):该组件负责根据输入数据(如令牌)决定哪些专家会处理特定任务。路由器根据模型的输入动态地选择最适合的专家,从而提高计算效率。

通过这种结构,MoE架构不仅在保持较低计算成本的同时,能够处理更多样化、复杂的任务,也能够根据需求扩展模型规模,从而提升LLM的整体表现。

值得注意的是,MoE中的“专家”并非专注于某一特定领域,如“心理学”或“生物学”。相反,这些专家主要专注于学习词汇层面的句法结构,而不是领域知识。因此,每个专家的作用更偏向于捕捉语言的基本模式和结构,而非专业领域的深度理解。

更具体地说,MoE中的“专家”专注于在特定上下文中处理特定的令牌。路由器(门控网络)根据输入数据的特征,动态选择最适合处理该数据的专家。这种机制使得模型能够根据任务需求灵活地调用不同的专家,从而提高处理效率和准确性。

每个“专家”并不是独立的完整大型语言模型,而是嵌入在LLM架构中的一个子模型组件。它们与其他专家协同工作,共同提升整个模型的处理能力和效率。

2.2 密集层

为了更好地理解专家的作用以及它们的工作原理,我们首先需要了解MoE所替代的传统架构——密集层(Dense Layers)。

混合专家模型(MoE)构建于大型语言模型(LLM)的基本组成部分之一——前馈神经网络(FFNN)之上。需要注意的是,在标准的解码器-only Transformer架构中,FFNN通常在层归一化后被应用到每一层中。这是LLM处理信息的核心方式之一,而MoE的引入旨在通过引入多个专家模型替代传统的密集层,提升模型的表达能力和计算效率。

前馈神经网络(FFNN)使模型能够基于注意力机制提取的上下文信息,进一步处理并捕捉数据中的复杂关系。然而,FFNN的规模随着层数增加而迅速膨胀。为了能够学习这些复杂的关系,FFNN通常会在输入信息的基础上进行扩展,这可能导致计算开销的大幅增加。

2.3 稀疏层

在传统的Transformer架构中,前馈神经网络(FFNN)被称为密集模型,因为它的所有参数(包括权重和偏置)都会被激活并用于计算输出,没有任何信息被忽略。仔细分析密集模型时,我们可以看到,输入信息会激活所有的参数,每个参数在计算中都会发挥作用,从而导致计算复杂度和资源消耗较大。

与密集模型不同,稀疏模型只激活一部分参数,这种方式与混合专家模型(MoE)紧密相连。具体来说,我们可以将密集模型拆分为多个“专家”子模型,重新训练它们,并在每次任务中仅激活一部分专家进行计算。这种方法不仅能减少计算开销,还能提高模型处理特定任务时的效率。

这种方法的核心理念是,每个专家在训练过程中专注于学习不同的信息。到了推理阶段,根据任务的具体需求,系统只会激活最相关的专家。这样,面对不同的问题时,我们能够选择最适合的专家来进行高效处理。

2.4 专家学习的内容

如前所述,专家并非专注于学习某一完整领域的知识,而是专注于捕捉更细粒度的信息。因此,将它们称为“专家”有时会让人误解,因为这些专家并不具备传统意义上在某一领域的深度专业知识。

在解码器模型中,专家似乎并未表现出相同类型的专业化。尽管如此,这并不意味着所有专家在作用上是相同的。一个很好的例子可以参考《Mixtral 8x7B》论文,其中每个令牌都被标注为其首选专家,从而展示了专家选择的多样性和灵活性。

上图还展示了专家们更倾向于关注句法结构,而非特定领域的知识。因此,尽管解码器中的专家没有明确的专业化,它们在处理某些类型的令牌时却表现出一致性和特定的应用模式。

2.5 专家架构

虽然将专家看作是密集模型中的隐藏层并将其拆分成若干部分进行可视化是一个有趣的方式,但实际上,专家通常是独立的、完整的前馈神经网络(FFNN)。每个专家在模型中扮演着独立的角色,执行特定的计算任务。

由于大多数大型语言模型(LLM)包含多个解码器层,一个输入文本通常会在生成过程中经过多个专家的处理,每个专家负责不同的任务或处理不同的特征。这样,模型可以更有效地捕捉复杂的语言模式和语境信息。

由于每个令牌可能会激活不同的专家,这导致模型在处理每个令牌时可能会选择不同的“路径”。这种动态选择使得模型能够灵活地根据不同的上下文需求进行优化。

更新后的解码器模块可视化将显示更多的前馈神经网络(FFNN),每个FFNN代表一个专家。这样,每个专家都拥有独立的计算路径,以便在处理不同任务时提供更具针对性的计算能力。

3.路由

有了专家模型后,模型如何确定使用哪些专家呢?在专家之前,加入了一个路由器(或称门控网络),其作用是根据输入令牌的特征来决定激活哪个专家。路由器是一个前馈神经网络(FFNN),它会输出一组概率值,根据这些概率值来选择最适合当前任务的专家。

有了专家模型后,模型如何确定使用哪些专家呢?在专家之前,加入了一个路由器(或称门控网络),其作用是根据输入令牌的特征来决定激活哪个专家。路由器是一个前馈神经网络(FFNN),它会输出一组概率值,根据这些概率值来选择最适合当前任务的专家。

MoE层有两种实现方式:稀疏型和密集型混合专家模型。两者都依赖路由器来选择专家,但稀疏型MoE只激活少数几个专家,而密集型MoE则激活所有专家,只不过激活的比例和分布可能不同。这种设计使得模型在处理不同任务时可以灵活调节计算资源的分配。

例如,给定一组令牌,普通的MoE会将令牌分配给所有专家,而稀疏型MoE则只激活少数几个专家。在现有的LLM中,提到“MoE”时,通常指的是稀疏型MoE,因为它通过仅激活一部分专家来减少计算开销,这对于大型语言模型的高效运行至关重要。

门控网络可以说是MoE中最为重要的部分,因为它不仅在推理时决定选择哪些专家,而且在训练过程中也起着关键作用。在最简单的形式下,输入(x)与路由器的权重矩阵(W)相乘,生成一个加权的输出,用于决定激活哪些专家。

然后,我们对输出应用SoftMax函数,将其转化为每个专家的概率分布G(x)。这个概率分布决定了每个专家被选中的可能性,从而指导路由器选择最合适的专家进行处理。

路由器根据概率分布选择最匹配的专家来处理给定的输入。最终,模型将每个选定专家的输出与相应的路由器概率相乘,并将所有结果相加,得到最终的输出。

然而,这种简单的机制可能会导致路由器频繁选择相同的专家,因为某些专家的学习速度可能快于其他专家,从而使得它们在选择过程中占据主导地位。

这种不均衡的选择不仅会导致某些专家被频繁激活,而其他专家几乎没有机会参与训练,还会引发训练和推理阶段的问题。因此,我们希望在训练和推理过程中保持专家间的平衡,这就是所谓的负载均衡。负载均衡有助于避免某些专家过度拟合,提高模型的多样性和泛化能力。

4.小节

至此,我们的混合专家模型(MoE)之旅圆满结束!希望这篇文章能帮助你更好地理解这种创新技术的潜力。如今,几乎所有的模型架构都包含了至少一种MoE变体,MoE看起来将成为未来技术中的重要组成部分。

5.结束语

这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

另外,博主出新书了《深入理解Hive》、同时已出版的《Kafka并不难学》和《Hadoop大数据挖掘从入门到进阶实战》也可以和新书配套使用,喜欢的朋友或同学, 可以在公告栏那里点击购买链接购买博主的书进行学习,在此感谢大家的支持。关注下面公众号,根据提示,可免费获取书籍的教学视频。

大语言模型中的MoE的更多相关文章

  1. 本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT

    OpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿.130亿.330亿 ...

  2. Hugging News #0324: 🤖️ 黑客松结果揭晓、一键部署谷歌最新大语言模型、Gradio 新版发布,更新超多!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  3. 使用 LoRA 和 Hugging Face 高效训练大语言模型

    在本文中,我们将展示如何使用 大语言模型低秩适配 (Low-Rank Adaptation of Large Language Models,LoRA) 技术在单 GPU 上微调 110 亿参数的 F ...

  4. pytorch在有限的资源下部署大语言模型(以ChatGLM-6B为例)

    pytorch在有限的资源下部署大语言模型(以ChatGLM-6B为例) Part1知识准备 在PyTorch中加载预训练的模型时,通常的工作流程是这样的: my_model = ModelClass ...

  5. 保姆级教程:用GPU云主机搭建AI大语言模型并用Flask封装成API,实现用户与模型对话

    导读 在当今的人工智能时代,大型AI模型已成为获得人工智能应用程序的关键.但是,这些巨大的模型需要庞大的计算资源和存储空间,因此搭建这些模型并对它们进行交互需要强大的计算能力,这通常需要使用云计算服务 ...

  6. java 11-8 在大串中查找小串的案例

    1.统计大串中小串出现的次数 举例: 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun& ...

  7. 基于简单sql语句的sql解析原理及在大数据中的应用

    基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1 ...

  8. 大并发大数量中的MYSQL瓶颈与NOSQL介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...

  9. NoSQL在大数据中的应用

    一.序言 NoSQL是Not Only SQL的缩写,而不是Not SQL,指的是非关系型的数据库,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等.相比传统数据库 ...

  10. 在大负载中使用LoadRunner进行负载测试()

    在大负载中使用LoadRunner进行负载测试,需要配置一些环境来满足大负载下各种资源的充足: 1.为了避免出现“No Buffer Space Available”的错误,需要进行如下配置: 1)修 ...

随机推荐

  1. 论文阅读翻译之Deep reinforcement learning from human preferences

    论文阅读翻译之Deep reinforcement learning from human preferences 关于 首次发表日期:2024-09-11 论文原文链接:https://arxiv. ...

  2. CSS – W3Schools 学习笔记 (3)

    CSS Rounded Corners Link to W3Schools 它是用来画圆角的, 假设有 1 给正方形, 100px. border-top-left-radius: 30px; bef ...

  3. Flutter 不容错过的 7 大亮点 | Google I/O 精彩回顾

    Flutter 在今年的 Google I/O 上发布了许多重磅更新,欢迎大家和我们一起了解其中不容错过的 7 大亮点, 点击这里 观看 Flutter 不容错过的 7 大亮点 视频了解更多信息. F ...

  4. 系统编程-进程-ps命令、进程调度、优先级翻转、进程状态

    1.    ps详解 ps  : 只列出当前用户的进程 ps -ef : e表示有效, f 表示全面, 所以是列出后台的所有有效进程. ps -ef | more :   列出后台所有的有效进程,并且 ...

  5. 阿里云Centos7修改MariaDB数据库连接时间,解决连接mysql报Too many connection的问题

    在测项目的时候突然发现数据库连接不上了,提示Too many connection. 产生问题的原因是MySQL的Sleep进程占用了大量的连接,当时是重启mysql解决的这个问题!后来又配置了连接池 ...

  6. 怎么根据token的有⽆去控制路由的跳转?进度条跳转 - 白名单是否有token - 单独封装文件permission .js

    vue这边的路由⾃带了路由前置守卫,我们可以在前置守卫⾥拿到token数据,然后根据需求做分⽀判 断,要是token存在就使⽤next⽅法正常放⾏跳转,否则可以强制跳回到登录,让⽤户去获取token ...

  7. spring cloud openfeign 源码

    一.读取注解信息 入口 1 import org.springframework.boot.SpringApplication; 2 import org.springframework.boot.a ...

  8. Java面试题(持续更新中...)

    事务的四大特性 原子性,隔离性,持久性,一致性 事务的隔离级别和现象 读未提交:可能产生脏读,读取到未提交的数据 读已提交:可能产生不可重复读取问题,A事务中读取到B事务已提交的数据,导致两次读取数据 ...

  9. 中国移动基于 Kubernetes 的物联网边缘计算应用实践

    作者:何毓川,中移物联网,云计算开发高级工程师 EdgeBox简介 中移物联网是中国移动集团在物联网方向的专业研发子公司,在各个垂直行业都有非常丰富和完成的解决方案. 本文通过中移物联网的物联网边缘计 ...

  10. Elasticsearch倒排索引结构【转载】

    一切设计都是为了提高搜索的性能 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引.通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key. 先来回 ...