混合专家系统(MoE)概述

 MoE概述

神经网络的学习能力受限于它的参数规模,因此寻找更有效的方法来增加模型的参数已成为深度学习研究的趋势。混合专家系统 (MoE) 可以大幅增加模型参数规模且不会等比例地增加模型计算量,对于单个样本,神经网络只有某些部分被激活。在混合专家系统的稀疏变体(如 Switch Transformer, GLaM, V-MoE)中,会根据 token 或样本来选择专家子集,从而在网络中产生稀疏性。此类模型在多个领域表现出更好的扩展性,并在持续学习的设置下表现出更好的记忆力。然而,糟糕的专家路由策略可能会导致某些专家训练不足,从而导致专家不够专业或过于专业。

在 NeurIPS 2022 的“Mixture-of-Experts with Expert Choice Routing”一文中,谷歌提出了一种称为专家选择 (EC) 的新型 MoE 路由算法。这种方法在 MoE 系统中实现了最佳负载平衡,同时允许 token 到专家映射的异构性。与传统 MoE 网络中基于 token 的路由或其他路由方法相比,EC 表现出了非常强的训练效率,在下游任务取得了很好的成绩。

MoE 路由概述

混合专家系统包含多个专家,每个专家是一个子网络,当输入一个符号 (token) 时,一个或一些专家子网络会被激活。混合专家系统中有一个门控网络 (Gating Network),它的目标是将每个符号路由给最合适的专家网络。根据符号被映射到专家的方式,混合专家系统可以是稀疏的,也可以是密集的。稀疏混合专家系统在路由每个符号时只选择专家集合的一个子集,与密集混合专家系统相比减少了计算成本。稀疏混合专家系统有很多实现方式,例如 k-means 聚类,哈希等。谷歌提出了 GLaM 和 V-MoE,它们都通过稀疏门控混合专家系统推进了自然语言处理和计算机视觉领域的技术进步,证明了稀疏激活的混合专家网络有更好的扩展性能。许多先前的工作都使用的是一种符号选择 (token choice) 的路由策略,这种路由算法为每个输入符号选择最合适的一到两个专家。

图片

符号选择路由示例。路由选择为每个输入符号依据匹配度 (affinity scores) 选择 top-1 或 top-2 的专家。匹配度与模型的其它参数一起参与训练。

但是为每个符号独立地选择专家往往会导致专家负载不均衡或者利用率不足。为了缓解这种情况,之前的稀疏门控网络会引入额外的辅助损失函数作为正则项,来防止太多符号被路由到相同的专家,但这种方法效果有限。因此,符号选择路由需要大幅增加专家容量(计算容量的2倍到8倍)来避免在缓冲区溢出时丢弃输入符号。

除了负载不均衡这个问题,先前的大多数工作会为每个输入符号通过 top-k 函数分配固定数量的专家,而不考虑不同输入符号的相对重要性。谷歌的研究人员认为,不同的符号应该基于符号的重要性或者难度被不同数量的专家处理。

专家选择路由

为了解决上述问题,谷歌研究人员提出了一种异构混合专家系统,它采用如下所示的专家选择 (Expert Choice) 路由方法。它没有让输入符号选择 top-k 的专家,而是将预定缓冲容量的专家分配给了 top-k 的输入符号。这种方式保证了负载均衡,允许每个输入符号被不同数量的专家处理,并在训练效率和下游性能方面取得了显著的进步。与 Switch Transformer、GShard 和 GLaM 中的 top-1 及 top-2 门控模型相比,专家选择路由在 8B/64E(80 亿激活参数,64 位专家)模型中将训练收敛速度提高了 2 倍以上。

图片

专家选择路由。预定缓冲容量的专家被分配给了 top-k 的输入符号。每个输入符号被不同数量的专家处理。

在专家选择路由中,容量 k 被设置成了每个专家在一批输入序列中处理的平均符号数乘以一个容量因子,这决定了每个符号可被接收的平均专家数量。为了学习符号到专家的匹配度,该方法生成了一个符号到专家的得分矩阵,用于做出路由决策。该得分矩阵表示一批输入序列中的给定符号被路由到指定专家的概率。

与 Switch Transformer 和 GShard 类似,MoE 和门函数使用了全连接前馈神经网络 (Dense Feedforward Layer),这是基于 Transformer 的网络中计算成本最高的部分。在生成符号到专家的得分矩阵后,每个专家使用 top-k 函数来选择与它最相关的输入符号。数据被分配给了多个专家,这样所有的专家可以在输入符号的子集上并行计算。由于专家的容量是固定的,因此不会因负载不平衡而过度配置专家容量,从而与 GLaM 相比,显著减少了约 20% 的训练和推理步骤时间。

结果评估

为了说明专家选择路由的有效性,首先看训练效率和收敛性。使用容量因子为 2 (EC-CF2) 的专家选择路由,与 GShard top-2 门控相比较,并运行固定数量的步骤。EC-CF2 在不到一半的步骤内达到了与 GShard top-2 相同的 perplexity,此外,研究人员发现 GShard top-2 的每一步都比 EC-CF2 慢 20%。

研究人员还测试了不同的专家数量,这个过程将 EC 和 GShard top-2 的专家大小固定为 100M 参数。 结果发现,两者在预训练的 perplexity 的指标上表现得都很好——拥有更多的专家可以持续改善 perplexity。

图片

为了验证更好的 perplexity 是否可以为下游任务带来收益,研究人员对 GLUE 和 SuperGLUE 中的 11 个任务进行了微调。在比较了 Switch Transformer top-1 gating (ST Top-1),GShard top-2 gating (GS Top-2) 以及 EC-CF2 后发现,EC-CF2 始终比其他两种方法效果更好,在 8B/64E 的设置下准确率提升了2%以上。此外,与 EC-CF2 对应的密集模型相比,EC-CF2 将平均分数提高了 3.4 分。

实验结果还表明,限制输入符号的专家数量会使微调后的分数平均降低 1 分。这项研究证实,允许每个符号有不同数量的专家确实是有帮助的。另一方面,研究人员发现大多数符号被路由到一到两名专家,而 23% 的符号被路由到三到四名专家,只有约 3% 的符号被路由到四名以上的专家,从而验证了假设,即专家选择路由学会了将可变数量的专家分配给输入符号。

总结思考

专家选择 (EC) 路由为稀疏激活的混合专家系统提出了一种新的路由方法,该方法解决了传统 MoE 方法中的负载不平衡和专家利用率不足的问题,并能够为每个输入符号选择不同数量的专家。与 GShard 和 Switch Transformer 模型相比,该方法将训练效率提升了两倍以上,并且在 GLUE 和 SuperGLUE 基准测试中对 11 个数据集进行微调时取得了可观的收益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/439490.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python进行股票分析(1)

简介 Python具有非常好的数据分析和数据可视化的功能。在本文中,我们将通过使用Python获取股票的闭市价格,并且对股票价格进行分析从而向我们提供买卖股票的依据。 数据获取 需要说明的是在这里我们获取的是美国股票的数据。至于中国股市的数据大家可…

0环PEB断链

在操作系统层面上,进程本质上就是一个结构体,当操作系统想要创建一个进程时,就分配一块内存,填入一个结构体,并为结构体中的每一项填充一些具体值。而这个结构体,就是EPROCESS 在0x088 偏移处有一个指针Act…

windows安装Chocolatey方法注意事项,以及安装openssl方法

chock是一个很强大的软件包管理工具官方:Chocolatey Software | Installing Chocolatey 使用管理员打开powershell工具: 必须以管理员打开,不然安装失败,提示没有权限 然后输入: Get-ExecutionPolicy 如果返回&…

大模型笔记:最少到最多提示过程 (Least to Most prompting, LtM)

LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS 2023 ICLR 1 概述 进一步发展维链提示过程 (CoT prompting) 分为两个阶段: 第一阶段:向语言模型提出查询,将问题分解成子问题。第二阶段:再次向语…

表单提交 滚动到必填校验位置

handleCommit(flag) {this.$refs["form"].validate((valid, object) > {if (valid) {this.form.checkState flag;this.form.checkLevel 1;this.form.type 1; //规划this.form.filingsId this.form.id;checkFilings(this.form).then((response) > {this.$mo…

nestjs10.x使用jwt生成token

1 安装依赖: pnpm install --save nestjs/jwtpnpm install passport passport-jwt nestjs/jwtpnpm install types/passport-jwt --save-dev 2 可以使用命令新建auth鉴权文件夹 nest g mo auth // auth.module.ts nest g s auth // auth.service.ts nest g co …

香橙派AIpro外设接口样例大全(附源码)

Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇腾 AI 处理器,可提供 8TOPS INT8 的计算能力,内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算,可广泛用于教育、机器…

备忘 clang diagnostic 类的应用示例 ubuntu 22.04

系统的ncurses环境有些问题 通过源码安装了ncurses6.3后,才可以在 llvmort-18.1.rc4中编译通过示例: 1,折腾环境 ncurses-6.3$ ./configure ncurses-6.3$ make -j ncurses-6.3$ sudo make install sudo apt install libtinfo5 sudo…

机器学习的魔法(一)从零开始理解吴恩达的精炼笔记

一、机器学习是什么? 1、机器学习的概念 机器学习是一种人工智能领域的技术和方法,旨在使计算机系统能够从经验数据中自动学习和改进,而无需显式地进行编程。它涉及开发算法和模型,使计算机能够自动分析和理解数据,并…

MES组件车间解决方案:提高生产管理效率和质量的关键

市场环境的变化得越来越恶劣,现代生产管理理念不断更新,制造型企业是否进入管理的良性循环,关键在于“计划”与“执行”的密切配合,企业和车间管理人员必须在最短的时间内掌握生产现场的变化,并做出准确的判断和应对措…

龙芯第四代3A6000主板与龙芯3A500龙架构兼容,具备丰富的接口和扩展性

龙芯 3A6000 处理器完全自主设计、性能优异,代表了我国自主桌面 CPU 设计领域的最新里程碑成果。龙芯 3A6000 处理器的推出,说明国产 CPU 在自主可控程度和产品性能上已双双达到新高度,也证明了国内有能力在自研 CPU 架构上做出一流的产品。 …

洗车行业小程序源码系统 带完整的安装代码包以及搭建教程

大家好!今天来给大家分享一款洗车行业小程序源码系统,通过小程序,用户可以方便地预约洗车服务、查看服务进度,洗车店也可以实时管理订单、安排人员,从而提高服务效率。同时,小程序界面简洁明了,…

蓝牙耳机什么牌子好?全价位段盘点,真人实测带你避开雷区!

​无线耳机已经成为现代生活中的必备数码产品,尤其在感受到无线带来的自由后,很难再适应有线耳机的束缚。因此,耳机市场竞争激烈,各种类型和外观的耳机层出不穷。在此,我为大家总结了五款使用体验很不错的蓝牙耳机&…

VsCode搭建Spring Boot项目环境

VsCode搭建Spring Boot项目环境 1、前提条件:配置Java环境 下载安装JDK配置环境变量 2、VsCode配置SpringBoot环境 安装扩展 配置Maven 找到Maven配置文件,进行打开settings.json,添加如下代码: "workbench.iconThem…

工具 | 解决IDEA每次git拉取远程代码 default changelist 都会出现 .idea文件修改记录

问题描述: 每次我在拉取远程代码的时候,git都会默认将 .idea当中的文件(例如:compiler.xml or workspace.xml)都会莫名其妙的自动修改。 这里吐槽一下很离谱的一个现象,仔细看下修改的内容,最离…

邮件营销新手必读指南?怎样做好邮件营销?

邮件营销的全流程及步骤?做好邮件营销有哪些注意点? 邮件营销作为一种传统却依然高效的推广手段,被众多企业所青睐。对于新手来说,如何开展邮件营销,却是一个值得探讨的话题。AokSend将为你提供一份邮件营销新手必读指…

盘点热门的5个AI视频工具(上):附保姆级教程,居然还有免费的?(建议收藏)

一条完全使用 AI 做出的短视频,点赞上万,转发上万! 你敢信,这是我在前几天刷视频的时候,看到的一个 AI 视频案例。 这种 AI 视频为什么会火? AI 虽然不是什么新的领域,但 2023 年&#xff0c…

mini-spring|把AOP动态代理,融入到Bean的生命周期

本文完成 AOP 核心功能与 Spring 框架的整合,最终能通过在 Spring 配置的方式完成切面的操作。 解决问题: 怎么借着 BeanPostProcessor 把动态代理融入到 Bean 的生命周期中,以及如何组装各项切点、拦截、前置的功能和适配对应的代理器。 …

c++ 中const

对于基础类型直接赋值 void test01(){const int data10;cout<<"data"<<data<<endl;int * p (int*)&data;*p 1000;cout<<"*p"<<*p<<endl;cout<<"after data"<<data; } c中&#xff0c;对于…

Github 2024-03-02 开源项目日报Top9

根据Github Trendings的统计&#xff0c;今日(2024-03-02统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量非开发语言项目2Rust项目1JavaScript项目1Shell项目1C项目1TypeScript项目1C#项目1Python项目1 任天堂Switch模…