Mixture-of-Experts (MoE): 条件计算的诞生与崛起【下篇】

news2024/9/30 6:44:53

将 Mixture-of-Experts 应用于 Transformers

既然我们已经研究了条件计算的早期工作,那么我们就可以看看 MoE 在变换器架构中的一些应用。 如今,基于 MoE 的 LLM 架构(如 Mixtral [13] 或 Grok)已广受欢迎,但 MoE 在语言模型方面的探索还处于几个阶段。 在此,我们将探讨如何将 MoE 应用于编码器-解码器转换器架构。 这项工作与现代 LLM 应用息息相关,并为在实践中有效使用 MoE 提供了无数经验。 这些研究为以后探索基于模拟引擎的生成式 LLM 的工作奠定了基础。

Switch Transformers: 以简单高效的稀疏性扩展到万亿参数模型 [5]

在[1]中提出稀疏门控 MoE 之后,有关转换器和语言模型的工作尚未开始使用这些想法–MoE 的普遍复杂性以及高通信成本和训练不稳定性等问题阻碍了这些想法的采用。 为了解决这些问题,作者在 [5] 中提出了一种基于 MoE 的编码器-解码器转换器架构,称为 Switch Transformer,它使用简化的门控机制使训练更加稳定,从而使 MoE 成为语言建模应用中更现实、更实用的选择。

“简单的架构–在宽裕的计算预算、数据集大小和参数数量的支持下–胜过更复杂的算法”–摘自 [5]

斯维奇变换器提出时,研究人员刚刚开始研究神经缩放定律[6],该定律表明,语言模型的性能会随着模型规模的增大而平滑提高10。 有鉴于此,MoE 模型允许我们为神经缩放定律的分析增加另一个维度–我们可以在保持模型前向传递的计算复杂度不变的情况下增加模型的大小–这一事实推动了 [5] 的工作。

在这里插入图片描述
将 MoE 应用于transformers 要创建编码器-解码器 transformers 的 MoE 变体,我们只需将模型的前馈子层转换为 MoE 层即可;见上文。 前馈变换是以点对点的方式进行的,这意味着每个标记都要单独通过前馈网络。 因此,序列中的每个标记都会被单独传送到相应的专家集。 例如,序列[“I”、“love”、“LLM”、“#s”]中的每个标记都会通过路由函数,形成一个专家概率分布。 然后,我们为每个单个标记选择前 K 名专家–同一序列中的标记并不总是发送给相同的专家。

更好的路由选择。 在之前的研究中,任何 MoE 层中活跃专家的最少数量为两个。 人们认为至少要有两名专家才能在路由函数中产生非三角梯度11。 在文献[5]中,作者建议只将每个标记路由到一个专家–这被称为交换层。 通过路由到单个专家,我们简化了路由功能,减少了计算开销,降低了通信成本,同时提高了模型的性能。

在这里插入图片描述
Switch Transformer 使用的路由函数(如上图所示)只是一种软最大门控机制。 我们将每个标记向量通过一个线性层,产生大小为 N(即专家人数)的输出,然后应用 softmax 转换将该输出转换为专家的概率分布。

在这里插入图片描述
在此基础上,我们通过以下方法计算交换层的输出:i) 选择一个专家;ii) 根据路由函数分配给该专家的概率缩放该专家的输出;见上文。 值得注意的是,这种方法不同于 [1],因为它计算的是所有专家的分布,而不是只考虑 K 级专家的分布。 换句话说,我们仍然在路由函数中计算所有 N 个专家的概率分布,然后通过对所选专家的输出进行概率缩放来计算层的输出;见上文。 这种方法使我们在 K=1 时也能训练 MoE 模型。

简单的负载平衡。 在 [1] 中,作者采用了多个辅助损失函数来平衡重要性得分,并在专家之间进行负载平衡(即每个专家从批次中获得大致相同数量的代币)。 我们在 [5] 中看到,只需在模型的每个交换层应用一个辅助损失函数,就能实现这两个目标;见下文。

在这里插入图片描述
这种损失相对于 P 是可微分的,可以很容易地纳入到训练中,它促使分配给每个专家的代币分数和分配给每个专家的路由器概率分数都是 1/N,这意味着专家们同等重要,获得的代币数量也是均衡的。

容量系数。 在斯维奇转换器中,我们设置了一个全局 "专家容量 "变量,它决定了在任何 MoE 层中可路由给每位专家的最大令牌数。 专家容量公式如下所示。

在这里插入图片描述
在交换层,每个令牌都会被路由机制分配给概率最高的专家。 如果发送给单个专家的令牌过多(即超过专家容量),这些令牌的计算将被跳过。 这些被 "放弃 "的令牌将通过剩余连接直接传递到下一层。 将容量因子设置为大于 1 时,MoE 可以处理各专家之间令牌不完全平衡的情况;请参阅下文。

在这里插入图片描述
必须对专家容量进行调整,以避免出现过多丢弃令牌的情况–负载平衡损耗也可以通过将令牌平均路由到专家来帮助解决这个问题–同时不浪费计算量或内存。 除了交换变压器,容量因子也是任何 MoE 模型的一个重要超参数,我们可以对其进行调整,通过平衡专家之间的计算来提高硬件利用率。

实际评估。 作者在 [5] 中评估了基于 T5 [8] 的开关变换器模型。 该模型在 C4 上使用屏蔽语言建模 (MLM) 目标和混合精度策略进行预训练,在某些操作中使用 bfloat16 格式。 通过只在特定操作中使用低精度(例如,路由函数选择以全精度执行),我们可以提高效率,而不会造成训练不稳定。 有趣的是,作者指出,他们提高了 MoE 层的丢弃率,以避免过度拟合。

“Switch Transformers 的指导原则是以简单、计算效率高的方式最大限度地增加变压器模型的参数数量”。 - 摘自 [5]

利用这种方法,我们可以训练出参数高达 1.6T 的开关变压器模型。 为了创建这些模型,我们从 T5 架构开始,将每个前馈子层转换为 MoE,并增加每个 MoE 层中专家的数量! 尽管这些模型的规模很大,但用于每个标记的计算量却没有太大变化。 事实上,在某些情况下,斯维奇转换器的训练速度比基础 T5 模型快 7 倍。 与 T5 模型相比,MoE 模型具有更高的统计学习效率 ,在计算量或训练时间固定的情况下表现更好;见下文。

在这里插入图片描述
与标准MoE模型[1]相比,斯维奇变换器的计算足迹更小–因为它的活跃专家更少–而且在速度-质量基础上实现了更好的性能。 换句话说,斯维奇变换器的性能优于使用相同计算量或相同时间训练的同类 MoE 模型。 我们还可以看到,与 MoE 相比,Switch Transformer 在容量因子较低的情况下表现更好,这让我们可以通过更好地平衡专家之间的负载来提高训练效率。

在这里插入图片描述
扩展特性。 [5]中的结果向我们表明,MoE 模型–尤其是 Switch Transformer 变体–有利于语言建模应用。 为什么 MoE 在语言建模中如此流行? 原因很简单,MoE 模型允许我们以稳定的计算成本扩大模型的规模。 如上图所示,LLM 的性能随着专家数量的增加而不断提高,其扩展趋势与密集模型的扩展趋势相当。 MoE 模型可以让我们获得更大模型的性能,同时保持合理的训练和推理成本。

ST-MoE: 设计稳定且可转移的稀疏专家模型 [24]

尽管斯维奇变换器使 MoE 模型更加实用/可用,但它仍然存在一些问题。 该模型存在训练不稳定的问题,作者在论文[5]中指出,尽管 Switch Transformer 的预训练速度比密集模型快,但在 SuperGLUE 等流行基准上进行微调时,其性能却落后于之前的先进模型。 简单地说,这些基于 MoE 的语言模型只有在数据集非常大时才能表现出色,否则其性能就会因过拟合而下降。 在 [24] 中,作者深入研究了 MoE 模型的不稳定性和微调困难,为实用可靠地训练稀疏模型提供了一个设计指南(如上所述)。 利用这一指南,作者训练了一个稀疏的 269B 参数编码器-解码器模型,这是第一个基于 MoE 的模型,取得了最先进的迁移学习结果。

在这里插入图片描述
解决训练不稳定性问题。 尽管稀疏 MoE 模型有很多优点,但它们在训练过程中更容易出现不稳定性;见上文。 在 [24] 中,作者考虑了几种缓解这种训练不稳定性的技术,并根据 i) 模型性能和 ii) 稳定的训练运行比例对它们进行了比较。 研究发现,有几种技术能以降低模型性能为代价提高稳定性,例如

  • 通过掉线或输入抖动向模型注入噪音(即路由器的对数乘以[0.99, 1.01]范围内的随机值)。
  • 在反向传播过程中,根据固定阈值对梯度或权重更新进行剪切,以解决梯度爆炸问题。
  • 从架构中移除具有乘法交互作用的组件(如 GeGLU 激活[27] 或 RMSNorm [28] 中的缩放因子)。

我们在 [24] 中了解到,限制路由器的 logits 值(即应用 softmax 之前路由器的输出值)对训练稳定性的影响最大。 在之前的工作 [5] 中,我们已经看到,由于 MoE 模型对舍入误差很敏感,因此路由机制无法以低精度计算。 由于路由函数是指数型的(如下图所示),路由器中可能会出现这种舍入误差,从而导致训练不稳定。

在这里插入图片描述
因此,路由器对数值过大可能会对训练的稳定性产生负面影响。 然而,简单地剪切(即应用硬阈值去除大值)路由器对数可能会损害模型性能。 相反,[25] 提出了路由器 z 损失(如下所示),作为一种辅助损失,鼓励在路由机制中使用较小的数值(以及较少的舍入误差)。

在这里插入图片描述
这种损失只是对 MoE 门控机制中的大对数进行惩罚。 为了将路由器 z 损失纳入 MoE 模型的训练过程,我们可以简单地将其与正常训练损失和辅助负载平衡损失(见下文)结合起来,并根据其相对重要性对每种损失进行加权。 路由器 z 损失大大提高了训练的稳定性,而不会导致模型质量的明显下降。

在这里插入图片描述
调试微调问题。 虽然稀疏模型在大型数据集上表现良好,但我们已经看到,对这些模型进行微调可能很困难。 在 [24] 中,作者通过研究预训练的稀疏模型和密集模型在小型(CommitmentBank)和大型(ReCoRD)训练数据集14 的下游任务中的表现,证实了这些微调问题是由于过拟合造成的。 在这些实验中,我们发现稀疏模型在两种情况下都比密集模型收敛得更快。 然而,在数据较少的下游任务中,稀疏模型的验证质量比密集模型差很多。 换句话说,稀疏模型由于缺乏足够的数据而过度拟合;见下文。

在这里插入图片描述
为了减少过拟合,作者首先尝试只对 MoE 模型的某些参数进行微调。 有趣的是,只对 MoE 层进行微调会导致性能急剧下降,而有选择地对其他参数组进行微调的性能与对所有参数进行微调的性能相当;见下文。

在这里插入图片描述
进一步来看,我们发现稀疏模型和密集模型往往需要不同的超参数设置来进行有效的微调。 特别是,MoE 模型受益于较高的学习率和较小的批次规模,这两者都能通过在训练过程中引入更多噪声来提高泛化效果。 此外,我们还发现,容量因子不会对微调结果产生重大影响。 事实上,我们可以在微调过程中移除辅助负载平衡损耗,而不会出现任何问题–稀疏模型对多达 10-15% 的令牌丢弃具有鲁棒性;见下文。

在这里插入图片描述
然而,[24]并没有提供明确的解决方案来解决微调 MoE 模型的困难。 作者确认这些问题是由于过拟合造成的,并分析了有助于解决过拟合问题的不同选择。 然而,即使是 [24] 中实验部分分析的优化设计模型,在较小的下游任务中仍会出现过拟合! 用于微调 MoE 的改进正则化形式仍是一个活跃的研究领域。

最佳移动教育设计。 在广泛分析的基础上,作者在 [24] 中概述了有效设计和使用移动专家模型的高层次启示(如上图所示)。 这一分析的重点主要在于选择正确的容量系数和移动设备内专家的数量。 简单地说,我们在 [24] 中看到,MoE 模型的最佳设置取决于硬件。 例如,作者建议每个 TPU/GPU 内核最多使用一个专家,并指出容量因子和专家数量的最佳值与硬件有关。 容量因子的变化会导致发送给每位专家的令牌数量上限增加,并产生若干下游影响:

  • 对激活内存的要求更高。
  • 通信费用增加。
  • 增加每个专家前传的计算量。

另一方面,更高的容量系数可以提高模型质量! 对于拥有快速互连和强大 GPU 的系统来说,计算和通信成本的飙升可能是值得的。 然而,MoE 参数的选择在很大程度上取决于可用的硬件。

实用启示 文献[24]的作者利用上述经验训练出了一个 269B 参数的编码器-解码器变压器模型–其计算复杂度与基于 T5-Large [8] 的 32B 参数密集模型相同。 与之前的 MoE 模型相比,ST-MoE-32B 模型的参数更少,计算复杂度更高。 每个 MoE 层的专家数量更少,但规模更大。 以前,这种高FLOP MoE 在训练过程中不稳定,但增加路由器 z 损失后,ST-MoE-32B 模型就能成功训练。 与之前的 MoE 模型相比,ST-MoE-32B 的参数更少,因此更易于微调和部署。

“我们寻求 FLOP 与参数之间的平衡。 在我们的设置中,高 FLOP 稀疏模型以前是不稳定的(即编码器-解码器模型、Adafactor 优化器),但路由器的 z 损失使我们能够继续前进”。 - 摘自[24]

该模型在来自 C4 和用于训练 GLaM 的数据集[25]的 1.5 万亿字节数据上进行预训练。 然后,在评估之前,对所有下游任务的混合数据进行微调,其中每个任务根据其训练集的大小按比例采样。 该模型的结果如下所示,我们看到它在广泛的 NLP 任务中创造了新的一流性能。 值得注意的是,ST-MoE-32B 是第一个在迁移学习领域取得最先进结果的稀疏模型,而之前的模型在微调过程中都存在严重的过拟合问题。

在这里插入图片描述

其他著名的 MoE 论文

在 MoE 风格 LLM 普及之前,除了我们在 [5] 和 [24] 中探讨的研究之外,还有许多关于这一主题的论文。 下文概述了这一领域的一些著名论文,以便更全面地介绍语言建模领域中关于 MoE 的研究。

在这里插入图片描述
GShard [9] 提出了一个框架和一套工具,用于在神经网络中轻松实现并行计算模式,如稀疏门控 MoE 层。 该框架随后被用于将基于变压器的神经机器翻译模型扩展到超过 600B 参数的规模。 使用 GShard,该模型可在 4 天内在超过 2048 个 TPU 上进行高效训练,并在将 100 多种不同语言翻译成英语方面超越了之前模型的质量。 在 GShard 中有效训练 MoE 模型的一些有用启示包括

  • 编码器-解码器 transformer 中的每个其他前馈子层都被 MoE 层取代。
  • 编码器和解码器均采用 Top-2 路由。
  • 路由机制总是选择排名第一的专家,但第二位专家是随机选择的,概率与其权重成正比。

"在 Mesh-TensorFlow 中,用户可以指定在多维网状处理器的任何维度上分割的任何张量维度。 - 摘自[31]

Mesh-Tensorflow [31] 大大简化了对神经网络高效、模型并行分布式训练策略的探索,这种策略将模型本身分割到多个设备(即 GPU 或 TPUS)。 在此之前,数据并行策略是神经网络分布式训练的主流方法,它将输入的数据批量分割到多个设备上,但数据并行训练有几个缺点:例如,训练大型模型比较困难,因为每个设备都必须在内存中保留模型的完整副本,而且批量越小,效率越低。 简单地说,Mesh-Tensorflow 只是一种可用于指定分布式计算的通用语言。 该工具发布后,由于数据并行和模型并行训练策略的编程变得非常简单,MoE 层被重新引入变换器架构。 在 [31] 中,作者使用 Mesh-Tensorflow 训练了一个 5B 参数的转换器模型,该模型在机器翻译任务上超越了最先进的结果。

在这里插入图片描述
M6 [10]提出了一个新的数据集(仅限中文),其中包含价值 1.9TB 的图片和 292GB 的文本,用于预训练多模态语言模型。 在这个数据集中,使用一种新颖的跨模态预训练策略对多个语言模型进行了预训练。 在 [10] 中训练的模型之一是一个 100B 参数的 MoE 模型,该模型用由 1024 个专家组成的 MoE 层取代了上述转换器中的所有前馈子层。

在这里插入图片描述
利用稀疏专家混合物扩展视觉[11]。 虽然 MoE 模型显然有利于语言建模,但目前还不清楚计算机视觉是否也能获得类似的好处。 在 [11] 中,作者探索了一种视觉 MoE(V-MoE)模型,它将视觉变换器架构与稀疏 MoE 层相结合;见上文。 简单地说,我们只是将视觉转换器中的前馈子层的一个子集(如每隔一层或最后 n 层)替换为 MoE 层。 这种方法能在性能和计算之间取得理想的平衡。 更进一步,[11] 中的作者提出了一种新的路由算法,可以在推理时为某些输入自适应地利用更多计算。

“V-MoE 的性能与最先进的网络不相上下,而在推理时只需一半的计算量”。 - 摘自 [11]

DeepSpeed-MoE [12] 认为,利用 MoE 模型进行高效推理是很困难的。 扩展密集 LLM 最终会遇到硬件限制,但 MoE 模型可以(几乎)任意扩展。 因此,MoE 模型是一种很有前途的架构进步,但其采用往往受到较大尺寸和独特架构的限制。 为了使条件计算在实践中更容易使用,作者在 [12] 中创建了 DeepSpeed-MoE 框架,用于 MoE 模型的端到端训练和推理。 该框架定义了多种 MoE 架构,提出了可将 MoE 大小减少 3.7 倍的模型压缩技术,并实现了可将延迟提高 7.3 倍的优化推理引擎。

在这里插入图片描述
超越以英语为中心的多语言机器翻译 [23]。 这项工作创建了一个多对多机器翻译模型,可以在任意一对 100 种语言之间直接翻译。 之前的模型高度以英语为中心,而 [23] 中的作者旨在创建一个能更好地反映全球翻译需求的模型。 首先,我们创建了一个开源训练数据集,其中包含成千上万语言对的有监督语言翻译示例。 要从这些数据中学习,我们需要一个容量足够大的模型。 文献[23]中的作者探索了高容量模型,该模型将密集扩展(或仅仅增加模型的大小)与使用稀疏的特定语言参数组相结合。

在这里插入图片描述
GLaM [25] 将 Switch Transformers 的工作(即应用于编码器-解码器转换器架构 [26])扩展到纯解码器语言模型。 这项工作的目标是更高效地训练 GPT-3 质量模型–使用的计算量减少一个数量级。 GLaM 是通用语言模型(Generalist Language Model)的简称,它提供了一套 LLM,使用 MoE 层来扩大模型容量,同时保持合理的训练成本。 这套模型中最大的模型总共有 1.2 万亿个参数(即比 GPT-3 大 7 倍),在近 30 个 NLP 任务中的表现优于 GPT-3,训练时使用的能量仅为 GPT-3 的 1/3,推理时所需的计算量仅为 GPT-3 的一半;见下文。

在这里插入图片描述
GLaM 模型使用前两层路由(即每层有两个活跃专家)。 文献[25]中的作者还探索了更大的容量因子,发现这一指标有助于控制训练或推理过程中的计算量。

最终想法

“在深度学习中,模型通常会对所有输入重复使用相同的参数。 而专家混合(MoE)模型则不同,它会为每个输入示例选择不同的参数。 其结果是一个稀疏激活的模型–参数数量多得离谱,但计算成本不变”。 - 摘自[5]

在研究了二十多年的 MoEs 研究之后,我们应该对这个想法、它的有效性以及如何应用它来训练更好的语言模型有了一定的了解。 有关这一主题的研究经历了几个阶段,但所有这些工作的主要启示可归纳如下。

核心理念。 MoE 背后的基本思想是将模型的参数数量与其使用的计算量脱钩。 要做到这一点,我们可以简单地将模型中的各层替换为多个稀疏激活的专家层。 然后,一个门控机制就能决定对给定输入应使用哪个专家。 通过这种方式,我们可以提高模型的容量,同时在前向传递中只使用模型总参数的一部分。

管理机构的组成部分。 移动设备有两个主要组成部分:i) 专家;ii) 路由机制。 每一层都有几个结构类似的专家,可用于处理输入数据。 给定一组令牌作为输入,我们使用路由机制(稀疏地)选择每个令牌应发送给的专家。 然后,我们为每个标记计算相应专家的输出,并将他们的结果结合起来,得出 MoE 层的输出。 许多 MoE 模型都使用某种变体的 softmax 门控机制作为路由器。

将 MoE 应用于转换器。 在语言建模领域,我们通常根据变换器架构创建 MoE 模型。 为此,我们会考虑变换器中的每个前馈子层,或这些层的某个较小子集,例如,每个其他层,然后用 MoE 层代替它们。 MoE 中的每个专家都是一个前馈神经网络,具有与初始前馈子层结构相匹配的独立参数集。 在大多数情况下,变压器 MoE 模型采用前一或前二路由。

好与坏 正如我们在这篇文章中所看到的,与密集模型相比,MoE 模型有很多优点,但也有很多缺点! 如果有足够大的预训练数据集,MoE 模型的学习速度往往比计算匹配的密集模型更快。 我们还可以大幅提高 MoE 模型的容量,从而以较小的计算负担实现更大模型的性能。 在有大量训练数据的情况下,MoE 的这一特性非常有用,因此 MoE 在语言建模领域很受欢迎。 然而,MoE 模型也存在以下问题

  • 消耗更多内存(即我们必须将所有专家存储在内存中)。
  • 在训练稳定性方面存在困难(尽管 [24] 中的工作有助于解决这一问题)。
  • 如果没有足够的训练数据,在微调过程中容易出现过拟合。

综上所述,是否使用 MoE 在很大程度上取决于应用。 如果我们拥有几乎无限量的训练数据(大多数现代语言模型都是如此),那么 MoE 就会大有裨益,可以让我们大幅提升模型的容量,甚至超越硬件限制。 然而,在较小规模的应用中,与密集模型相比,MoEs 的应用并不那么直接,甚至可能表现得更糟!

[1] Shazeer, Noam, et al. “Outrageously large neural networks: The sparsely-gated mixture-of-experts layer.” arXiv preprint arXiv:1701.06538 (2017).

[2] Eigen, David, Marc’Aurelio Ranzato, and Ilya Sutskever. “Learning factored representations in a deep mixture of experts.” arXiv preprint arXiv:1312.4314 (2013).

[3] Bengio, Emmanuel, et al. “Conditional computation in neural networks for faster models.” arXiv preprint arXiv:1511.06297 (2015).

[4] Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.

[5] Fedus, William, Barret Zoph, and Noam Shazeer. “Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity.” Journal of Machine Learning Research 23.120 (2022): 1-39.

[6] Kaplan, Jared, et al. “Scaling laws for neural language models.” arXiv preprint arXiv:2001.08361 (2020).

[7] Hoffmann, Jordan, et al. “Training compute-optimal large language models.” arXiv preprint arXiv:2203.15556 (2022).

[8] Raffel, Colin, et al. “Exploring the limits of transfer learning with a unified text-to-text transformer.” The Journal of Machine Learning Research 21.1 (2020): 5485-5551.

[9] Lepikhin, Dmitry, et al. “Gshard: Scaling giant models with conditional computation and automatic sharding.” arXiv preprint arXiv:2006.16668 (2020).

[10] Lin, Junyang, et al. “M6: A chinese multimodal pretrainer.” arXiv preprint arXiv:2103.00823 (2021).

[11] Riquelme, Carlos, et al. “Scaling vision with sparse mixture of experts.” Advances in Neural Information Processing Systems 34 (2021): 8583-8595.

[12] Rajbhandari, Samyam, et al. “Deepspeed-moe: Advancing mixture-of-experts inference and training to power next-generation ai scale.” International conference on machine learning. PMLR, 2022.

[13] Jiang, Albert Q., et al. “Mixtral of experts.” arXiv preprint arXiv:2401.04088 (2024).

[14] Jiang, Albert Q., et al. “Mistral 7B.” arXiv preprint arXiv:2310.06825 (2023).

[15] Jacobs, Robert A., et al. “Adaptive mixtures of local experts.” Neural computation 3.1 (1991): 79-87.

[16] Bengio, Yoshua, Nicholas Léonard, and Aaron Courville. “Estimating or propagating gradients through stochastic neurons for conditional computation.” arXiv preprint arXiv:1308.3432 (2013).

[17] Davis, Andrew, and Itamar Arel. “Low-rank approximations for conditional feedforward computation in deep neural networks.” arXiv preprint arXiv:1312.4461 (2013).

[18] Eigen, David, Marc’Aurelio Ranzato, and Ilya Sutskever. “Learning factored representations in a deep mixture of experts.” arXiv preprint arXiv:1312.4314 (2013).

[19] Cho, Kyunghyun, and Yoshua Bengio. “Exponentially increasing the capacity-to-computation ratio for conditional computation in deep learning.” arXiv preprint arXiv:1406.7362 (2014).

[20] Bengio, Emmanuel, et al. “Conditional computation in neural networks for faster models.” arXiv preprint arXiv:1511.06297 (2015).

[21] Almahairi, Amjad, et al. “Dynamic capacity networks.” International Conference on Machine Learning. PMLR, 2016.

[22] Denoyer, Ludovic, and Patrick Gallinari. “Deep sequential neural network.” arXiv preprint arXiv:1410.0510 (2014).

[23] Fan, Angela, et al. “Beyond english-centric multilingual machine translation.” Journal of Machine Learning Research 22.107 (2021): 1-48.

[24] Zoph, Barret, et al. “St-moe: Designing stable and transferable sparse expert models.” arXiv preprint arXiv:2202.08906 (2022).

[25] Du, Nan, et al. “Glam: Efficient scaling of language models with mixture-of-experts.” International Conference on Machine Learning. PMLR, 2022.

[26] Vaswani, Ashish, et al. “Attention is all you need.” Advances in neural information processing systems 30 (2017).

[27] Shazeer, Noam. “Glu variants improve transformer.” arXiv preprint arXiv:2002.05202 (2020).

[28] Zhang, Biao, and Rico Sennrich. “Root mean square layer normalization.” Advances in Neural Information Processing Systems 32 (2019).

[29] Clark, Aidan, et al. “Unified scaling laws for routed language models.” International conference on machine learning. PMLR, 2022.

[30] Jordan, Michael I., and Robert A. Jacobs. “Hierarchical mixtures of experts and the EM algorithm.” Neural computation 6.2 (1994): 181-214.

[31] Shazeer, Noam, et al. “Mesh-tensorflow: Deep learning for supercomputers.” Advances in neural information processing systems 31 (2018).

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++题目】7.双指针_和为 s 的两个数字

文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: LCR 179.查找总价格为目标值的两个商品 题目描述: 解法 解法一(暴力解法,会超时) 两层 for 循环列出所有两个数字的组合…

网络通信(学习笔记)

InputStreamReader 是 Java 中的一个类,它可以将字节输入流转换为字符输入流。它可以读取字节输入流,并使用指定的字符集将字节解码为字符。 InputStreamReader继承了Reader类 Scanner scanner new Scanner(System.in);//这是一个控制台输入的一个类&am…

巡检机器人室内配电室应用

智能巡检系统实施背景 电力系统发展已进入电气化、自动化、智能化建设加速推进的新阶段,设备规模大幅增长,新设备、新技术加快应用,装备水平取得长足发展,与此同时设备规模大幅增长,新设备、新技术加快应用&#xff0…

JAVA并发编程高级——JDK 新增的原子操作类 LongAdder

LongAdder 简单介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,…

C++ | Leetcode C++题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int> &nums) {int ans 0;int n nums.size();vector<unordered_map<long long, int>> f(n);for (int i 0; i < n; i) {for (int j 0; j < i;…

蒂森电梯变频器维修CPIK40 CPIK32

维修范围&#xff1a; 1、通力电梯变频器维修&#xff1a;V3F16L,通力V3F18维修,电梯变频器V3F25维修,KDL16,KDL32维修&#xff0c;通力电梯CPU主板维修&#xff0c;806板&#xff0c;电梯安全回路板&#xff0c;LCECCB&#xff0c;LCECEB&#xff0c;电梯显示板维修&#xff…

Python编码系列—Python状态模式:轻松管理对象状态的变化

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录

概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…

CleanMyMac X v4.12.1 中文破解版 Mac优化清理工具

在数字时代&#xff0c;我们的Mac设备承载着越来越多的重要信息和日常任务。然而&#xff0c;随着时间的推移&#xff0c;这些设备可能会变得缓慢、混乱&#xff0c;甚至充满不必要的文件。这就是CleanMyMac X发挥作用的地方。 CleanMyMac X是一款功能强大的Mac优化工具&#…

Gson将对象转换为JSON(学习笔记)

JSON有两种表示结构&#xff0c;对象和数组。对象结构以"{"大括号开始&#xff0c;以"}"大括号结束。中间部分由0或多个以”&#xff0c;"分隔的”key(关键字)/value(值)"对构成&#xff0c;关键字和值之间以":"分隔&#xff0c;语法结…

C语言 | Leetcode C语言题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; #define HASH_FIND_LONG(head, findint, out) HASH_FIND(hh, head, findint, sizeof(long), out) #define HASH_ADD_LONG(head, intfield, add) HASH_ADD(hh, head, intfield, sizeof(long), add)struct HashTable {long key;int val;UT_ha…

LeetCode 热题 100 回顾20

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

数据结构串的kmp相关(求next和nextval)

傻瓜版&#xff0c;用来演示手算过程&#xff0c;个人理解用的&#xff0c;仅供参考。

Linux之进程概念

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux专栏 创作时间 &#xff1a;2024年9月28日 基本概念&#xff1a; 进程说白了其实就是一个程序的执行实例&#xff0c;正在执行的程序。 在内核层面来说&#xff0c;就是一个担当分配资源&#xff08;CPU时间…

如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试?

本文首先讲述了什么是单元测试、单元测试的价值、一个好的单元测试所具备的原则&#xff0c;进而引入如何去编写一个好的单元测试&#xff0c;通义灵码是如何快速生成单元测试的。 通义灵码插件下载安装&#xff1a;通义灵码_智能编码助手_AI编程-阿里云 目录 什么是单元测试&…

CS 工作笔记:SmartEdit 里创建的是 CMS Component

下图是在 SmartEdit 里创建的 cms Component&#xff0c;在 Back-Office 里的截图&#xff1a; SAP Commerce Cloud 的 CMS Component 是其内容管理系统 (CMS) 的核心组成部分&#xff0c;它提供了对在线商店或平台内容的灵活管理。通过这些组件&#xff0c;用户能够在不涉及复…

MinIO使用客户端进行桶和对象的管理

MinIO使用客户端进行桶和对象的管理 minio安装完成后&#xff0c;除了自带的webui管理界面&#xff0c;还可以使用官方配套的客户端mc进行管理。除此之外&#xff0c;还可以使用第三方客户端s3browser也可以完成对象和桶的生命周期管理。 1. 官方客户端mc MinIO客户端 mc 命…

【STM32】TCP/IP通信协议--LWIP内存管理

五、LWIP内存管理 1.什么是内存管理&#xff1f; &#xff08;1&#xff09;内存管理&#xff0c;是指软件运行时对计算机内存资源的分配的使用的技术&#xff0c;其主要目的是如何高效、快速的分配&#xff0c;并且在适当的时候释放和回收内存资源&#xff08;就比如C语言当…

只申请一块sizeofimage的内存能否实现PE文件的拉伸

不能,别试了,浪费时间. 从最后一个节复制,也会被覆盖 BOOL StrechFileBuffer(__in char* m_fileName, __inout char** LPImageBuffer) {FILE* file (fopen(m_fileName, "rb"));if (file NULL){printf("error :%d", GetLastError());return FALSE;}// 从文…

【HyperWorks入门教程】HyperWorks的shrink warp meshing

在HyperWorks中&#xff0c;针对某些具有复杂几何特征的零部件的网格剖分&#xff0c;Altair HyperMesh 向用户提供了一种名为 Shrink Warp Meshing 的技术&#xff0c;快捷高效地完成有限元模型前处理工作。例如在车辆碰撞分析研究中&#xff0c;用户可以使用 Shrink Warp Mes…