首页 > 其他分享 >【译】稀疏混合专家模型的崛起: Switch Transformers

【译】稀疏混合专家模型的崛起: Switch Transformers

时间:2024-02-19 23:22:27浏览次数:34  
标签:Transformer Transformers MoE 稀疏 专家 Switch token 路由

原作: 塞缪尔·弗兰德

引言:为最强大的语言模型铺平道路的核心技术

 

使用 Dall-E 生成的图像

稀疏混合专家模型 (MoE) 已成为最新一代 LLMs 的核心技术,例如 OpenAI 的 GPT-4、Mistral AI 的 Mixtral-8x7 等。简而言之,稀疏MoE是一种非常强大的技术,因为理论上,它允许我们以 O(1) 的计算复杂度扩展任何模型的容量!

然而,正如通常的情况一样,问题在于细节,要让稀疏的 MoE 正常工作就需要确保这些细节完全正确。

在本文中,我们将深入探讨稀疏MoE领域的一个核心贡献,即Switch Transformer(Fedus等人,2022年),它首次展示了利用这项技术实现了令人印象深刻的扩展特性,在Transformer模型的训练中实现了7倍以上的加速。我们将讨论以下内容:

  • 硬路由:仅针对每个token执行单个专家模型所带来的有利扩展特性,
  • Switch Transformer 架构:MoE 如何适应更广泛的 Transformer 架构背景,
  • token动态路由:如何使用容量因子来权衡计算效率和建模精度,以及
  • 实验结果:Switch Transformer的令人印象深刻的扩展特性。

 让我们开始吧。

 硬路由

回顾一下,MoE 的关键思想是使用专家的线性组合 E(x) 对给定输入 x 的输出 y 进行建模,每个专家的权重由门控 G(x) 控制,

其中门控是输入x与可学习的权重矩阵W相乘后的softmax函数:


因此,在训练 MoE 模型时,学习目标有两个:

  1. 专家将学习将给定的输入处理成最佳的输出(即预测)
  2. 门控将通过学习矩阵W来将正确的训练样本分配给正确的专家。

MoE 的这种原始表述可以追溯到30多年前 Geoffrey Hinton 在 90 年代的原创作品,如今已被称为软路由(soft routing)。之所以称为“软”,是因为尽管不同的专家可能具有非常不同的权重(其中一些几乎不明显),我们仍然将所有专家的输出组合在最终结果中,无论他们的贡献多么小。

相比之下,在硬路由(hard routing)中,我们只对由门控决定的单个最合适的专家进行向前传递,也就是说,我们近似地


其中I是使G取得最大值的索引。

这种方法的动机是在计算成本上进行建模精度的权衡:如果一个专家的权重只有0.01,那么是否真的值得对该专家进行向前传递呢?

顺便说一句,硬路由实际上是 top-k 路由的一种特殊情况,最初由 Shazeer 等人 (2017) 提出,其中 k=1。虽然Shazeer等人假设k=1在实践中可能效果不佳,因为这会严重限制通过专家反向传播的梯度,但Switch Transformer证明并非如此。

(注意,“gate”和“router”这些术语通常可以互换使用——在稀疏MoE的背景下,它们实际上意味着相同的东西。)


(Fedus 等人 2022)

具有 5 个专家和 3 个token的硬路由插图,每个token都有一个 3 维嵌入。此处,路由器将token 1 分配给专家 1,将token 2 分配给专家 4,将token3 分配给专家 2。图片来自 Fedus et al 2022

Switch Transformer架构

在常规的(密集)Transformer块中,我们将一个前馈神经网络(FFN)层堆叠在一个自注意力层之上,并在它们之间添加残差连接。在高层次上,自注意力层选择模型关注的输入,而FFN层处理该输入并将输出传递到下一个块,依此类推。例如,BERT-Large是一个将24个这些Transformer块堆叠起来的Transformer模型。

这是这个密集的 Transformer 块的可视化效果:


(Fedus 等人 2022)

密集的变压器块。图片来源:Fedus 等人 2022。

在 Switch Transformer 中,我们用多个 FFN“专家”替换单个 FFN 模块,并让硬路由器向专家分配token,如下所示:


(Fedus 等人 2022)

Switch Transformer 中的稀疏Transformer块。图片来源:Fedus 等人 2022。

最重要的是,这两种架构具有相同的计算复杂度,但与前者相比,后者实际上具有4倍的建模容量(即神经元数量)!这要归功于稀疏 MoE 的硬路由:虽然我们现在有4个FFN而不是一个,但对于任何给定的token,只有其中一个会处于活动状态。

token动态路由和容量因子

到目前为止,我们只考虑了路由器如何在专家之间分配token,但没有具体说明这些专家位于何处。在实践中,我们通常将专家分布在多台机器上,这是一种模型并行化形式,也称为专家并行化。

专家并行化有一个重要的物理限制:我们不能将比专家所在机器的内存允许的更多token路由到该专家!


(Fedus 等人 2022)

token动态路由作为容量因子的函数。如果因子为 1,我们就必须丢弃一个token(红色箭头)。在容量因子为1.5的情况下,我们需要添加过多的填充(白色矩形)。来自 Fedus 等人 2022

在这种背景下,我们将专家容量定义为

capacity = f x T/E

其中T是token数量,E是专家总数,f是一个被称为容量因子的自由超参数。(如果我们使用k>1的top-k路由,则还会在方程的右侧添加k的因子——然而,在这里我们考虑的是使用硬路由的Switch Transformer,所以我们将使用k=1。)

例如,对于T=6,E=3和f=1,我们允许路由器向每个专家发送最多 2 个token,如上图左侧面板所示。如果我们发送更多token,我们就需要丢弃额外的token,如果我们发送较少token,我们就需要对输入进行填充,以确保一致性——毕竟,在GPU上可以运行的计算图必须是静态的,不能是动态的。

因此,容量因子f引入了一个权衡:如果太大,我们会通过过多的填充浪费计算资源(即上图中的白色矩形);如果太小,我们会因为token丢失而牺牲模型性能(如上图中的红色箭头所示)。

在Switch Transformer论文中,作者发现较低的容量因子可以获得更好的性能,例如,将 f 从 2.0 降低到 1.0,在 100k 步后,对数困惑度从 -1.554 提高到 -1.561。这表明我们因丢弃token而遭受的惩罚并不像计算资源利用不足所带来的惩罚那么严重。或者更简单地说:最好优化资源利用率,即使以丢弃token为代价。

Switch Transformer的可扩展性特征

最重要的是,只需增加专家数量,Switch Transformer可以以近似恒定的计算复杂度进行扩展。这是因为更多的专家不会导致更多的专家向前传递——得益于硬路由——而且与整个模型架构相比,添加更多专家时需要由门控完成的额外计算可以忽略不计,特别是与计算量大的 Transformer 块相比。

下图显示了通过用128个稀疏专家替换单个FFN模块,作者能够达到与T5语言模型相同的性能,但速度快了7倍!所有这些模型都在相同的机器上进行训练,使用32个TPUv3核心,并且每个训练样本具有相等的FLOPs。


(Fedus 等人 2022)

Switch Transformer通过硬路由实现了7倍的加速,同时保持了恒定的计算复杂度。

乍一看,这似乎像是魔法。在相同的FLOPs下,怎么可能更快呢?这就好像一辆汽车以相同的速度行驶,却比原来快7倍到达目的地!

答案就是,Switch Transformer 利用了稀疏性,特别是稀疏 MoE。虽然我们通过增加专家数量增加了建模容量,但由于硬路由,我们保持了恒定的FLOPs,也就是说,在每个训练迭代中我们并没有执行所有的专家,而是只选择适合每个token的最佳专家进行计算。

最后

 让我们回顾一下:

  • 稀疏MoE是一项突破性的技术,因为它使我们能够以近似O(1)的计算复杂度扩展建模容量,并实现了Google的Switch Transformer、OpenAI的GPT-4、Mistral AI的Mixtral-8x7b等重大突破。
  • 硬路由意味着我们只对最合适的专家运行向前传递,而不是所有专家,从而节省了FLOPs。
  • Switch Transformer 用使用硬路由的稀疏 MoE 层替换了 T5 Transformer 中的 FFN 层。
  • 容量因子决定了每个专家允许的token数量,是在token丢弃和机器利用率之间权衡的一个手段。实验证明,即使以牺牲token为代价,最大化机器利用率也是正确的目标。
  • 由于其良好的可扩展性特征,与T5(密集)Transformer模型相比,Switch Transformer在训练速度上实现了7倍的加速。

虽然Switch Transformer已经在语言模型领域取得了突破,但我相信我们才刚刚开始看到它对行业的全面影响。稀疏 MoE 带来的强大扩展特性有可能为跨领域的应用带来巨大的建模改进,而不仅仅局限于LLMs。这是机器学习领域激动人心的时刻!

标签:Transformer,Transformers,MoE,稀疏,专家,Switch,token,路由
From: https://www.cnblogs.com/Leap-abead/p/18021972

相关文章

  • 稀疏数组
    稀疏数组的一些常见问题1.什么是稀疏数组?1.1what?稀疏数组是一种针对大部分元素值为相同或者默认值的数组进行优化存储的方法。在稀疏数组中,只存储那些不同于默认值的元素及其对应的位置信息,从而节省存储空间。1.2why?稀疏数组通常用于处理大规模数组中大部分元素值相......
  • e、Switch开关主键
    Switch开关主键 classSwitchPageextendsStatefulWidget{constSwitchPage({super.key});@overrideState<SwitchPage>createState()=>_SwitchPageState();}class_SwitchPageStateextendsState<SwitchPage>{lateboolflag=true;//......
  • 基于稀疏表示的小波变换多光谱图像融合算法matlab仿真
    1.算法运行效果图预览小波变换融合   PCA融合   基于稀疏表示的小波变换多光谱图像融合算法   性能指标对比   2.算法运行软件版本matlab2022a 3.算法理论概述       随着遥感技术的飞速发展,多光谱图像融合在地球观测、环境监测、......
  • 基于双树复小波变换和稀疏表示的多光谱和彩色图像融合算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述     基于双树复小波变换(Dual-TreeComplexWaveletTransform,DT-CWT)和稀疏表示的多光谱和彩色图像融合算法是一种先进的图像融合技术,旨在将多光谱图像(MultispectralImages,MSI)和彩......
  • Switch选择结构
    publicclassswitch01<grade>{//switch:匹配一个具体的值publicstaticvoidmain(String[]args){chargrade='F';switch(grade){//case穿透现象必须加break匹配,不然会全部输出case'A':Sy......
  • Hugging Face-Transformers中的AutoModelForCausalLM 和 AutoTokenizer
    AutoModelForCausalLM 和 AutoTokenizer 是HuggingFace的Transformers库中的两个类,用于处理自然语言处理(NLP)任务。AutoModelForCausalLM 是用于因果语言建模的模型的自动类,它可以加载不同的预训练模型进行文本生成任务。AutoTokenizer 用于加载与这些模型相对应的预训练分......
  • 微信小程序页面跳转:wx.switchTab、wx.reLaunch、wx.redirectTo、wx.navigateTo、wx.na
    引言在微信小程序开发中,页面跳转是一项基础且常用的功能。本文将介绍微信小程序中五种常见的页面跳转方式,并分析它们的使用场景和区别。1.wx.switchTab(跳转主页)wx.switchTab方法用于跳转到tabBar页面,并关闭其他所有非tabBar页面,通常用于跳转到小程序的主页。特点:关闭......
  • FreeSWITCH在session上执行定时挂机与取消
    操作系统:CentOS7.6_x64 FreeSWITCH版本:1.10.9 日常开发中,会遇到需要在已存在的session上执行定时挂机和取消挂机的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:实验场景环境描述定时挂机描述如何使用定时挂机如何取消定时挂机提供示例代码及运行效果视......
  • FreeSWITCH在session上执行特定dialplan
    操作系统:CentOS7.6_x64 FreeSWITCH版本:1.10.9日常开发中,会遇到需要在已存在的session上执行特定拨号方案的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:实验环境准备基于transfer实现基于execute_extension实现基于transfer和execute_extension实现......
  • switch 安装 moonlight 教程
    ​准备工作:破解的switch能进行串流,支持moonlight的电脑(nvdiashiled功能/sunshine软件)比较好的网络环境:5Ghz频段wifi的稳定链接去下载moonlight的nro包GitHub-rock88/moonlight-nx使用破解switch的DBI工具-MTP连接连到电脑上(switch比较挑数据......