加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 模式 > 正文

深2.5至4倍,参数和计算量更少,DeLighT怎么做到的?

发布时间:2020-09-03 08:26:46 所属栏目:模式 来源:51cto
导读:深度学习的参数太多、模型太大、部署不方便、消耗的计算资源过多,种种原因加大了深度学习爱好者的「贫富差距」。然而算法优化一直在路上 Google 团队提出的 NLP 经典之作 Transformer 由 Ashish Vaswani 等人在 2017 年发表的论文《Attention Is All You

深度学习的参数太多、模型太大、部署不方便、消耗的计算资源过多,种种原因加大了深度学习爱好者的「贫富差距」。然而算法优化一直在路上……

深2.5至4倍,参数和计算量更少,DeLighT怎么做到的?

Google 团队提出的 NLP 经典之作 Transformer 由 Ashish Vaswani 等人在 2017 年发表的论文《Attention Is All You Need》 中提出。但由于模型参数量过大,该模型训练困难、部署不方便,研究人员一直在探究如何优化 Transformer。近日,来自华盛顿大学和 FAIR 的 Sachin Mehta 等人提出了一个网络结构较深但轻量级的 Transformer——DeLighT。

深2.5至4倍,参数和计算量更少,DeLighT怎么做到的?

论文链接:https://arxiv.org/abs/2008.00623

代码链接:https://github.com/sacmehta/delight

论文简介

在这篇文章中,作者提出了一个网络较深但轻量级的 Transformer——DeLighT,与之前基于 transformer 的模型相比,它的参数更少,但性能相当甚至更好。

DeLighT 能够更高效地分配参数,主要表现在:1)每个 Transformer 块使用结构较深但参数较少的 DExTra;2)在所有块上使用逐块缩放(block-wise scaling),使靠近输入的 DeLighT 块比较浅且窄,靠近输出的 DeLighT 块比较宽且深。总的来说,DeLighT 的网络深度是标准 transformer 模型的 2.5 到 4 倍,但参数量和计算量都更少。

DeLighT 的核心是 DExTra 变换(DExTra transformation),该变换使用组线性变换和扩展 - 缩小(expand-reduce)策略来有效地改变 DeLighT 块的宽度和深度。由于这些变换本质上是局部的,因此 DExTra 利用特征 shuffling(类似于卷积网络中的通道 shuffling)在不同组之间共享信息。这种宽且深的表示有助于用单头注意力和轻量级前馈层替换 transformer 中的多头注意力和前馈层,从而减少网络参数量。重要的是,与 transformer 不同,DExTra 模块可以独立于输入大小进行缩放。通过使用靠近输入的较浅和窄的 DeLighT 块以及靠近输出的较深和宽的 DeLighT 块,在各个块之间更高效地分配参数。

DeLighT 三大特点

改进 transformer:与之前的工作不同,该论文展示了对每个 Transformer 块使用 DExTra 以及基于所有块使用逐块缩放时,能够实现参数的高效分配。结果显示,DeLighT 在参数更少的情况下,能达到相同的效果甚至更好。

模型压缩:为了进一步提高序列模型的性能,该研究引入了逐块缩放,允许每个块有不同的尺寸,以及更高效地进行参数分配。

改进序列模型:与 DeLighT 最接近的工作是 DeFINE 单元,它使用扩展 - 缩减策略学习模型表示。DeFINE 单元(图 1a)和 DExTra(图 1b)之间的关键区别是,DExTra 能更高效地在扩展 - 缩减层中分配参数。DeFINE 在组线性变换中使用较少的组来学习更宽的表示,而 DExTra 使用较多的组和较少的参数来学习更宽的表示。

深2.5至4倍,参数和计算量更少,DeLighT怎么做到的?

图 1:(a, b) DeFINE 单元和 DExTra 之间的对比。(c, d) 标准 transformer 模块与 DeLighT 模块中的 block-wise 对比。

DeLighT:网络很深但参数较少的 Transformer

DExTra

DExTra 变换由五个配置参数控制:1)深度 N,2)宽度乘数 m_w,3)输入维数 d_m,4)输出维数 d_o,5)组线性变换中的最大组 g_max。

在扩展阶段,DExTra 使用「N/2」层线性地将 d_m 维输入投影到高维空间,d_max = m_wd_m。在缩减阶段,DExTra 使用剩余的 N − 「N/2」层,将 d_max 维向量投影到 d_o 维空间。在数学上,每一层 l 的输出 Y 可定义为:

每一层 l 的组数则按照以下公式计算:

DeLighT 模块

Transformer 块:标准 transformer 块(图 1c)由多头注意力组成,使用查询 - 键 - 值(query-key-value)分解来建模序列 token 之间的关系,并使用前馈网络(FFN)来学习更宽的表示。

DeLighT 块:图 1d 展示了如何将 DExTra 集成到 transformer 块中以提高效率。首先将 d_m 维输入馈入 DExTra 变换,产生 d_o 维输出,其中 d_o < d_m。然后将这些 d_o 维输出馈送至单头注意力,紧接着使用轻量级 FFN 来建模它们的关系。

DExTra 单头注意力:假设输入序列有 n 个 token,每个 token 的维数为 d_m。首先将这 n 个 d_m 维输入馈送到 DExTra 变换,以生成 n 个 d_o 维输出,其中 d_o

DeLighT 块通过 DExTra 学习到较宽的输入表示,这就使得单头注意力能够代替多头注意力。标准 transformer 以及 DeLighT 块中注意力的计算成本分别为 O(d_mn^2 )、O(d_on^2 ),d_o

轻量级 FFN:与 transformer 中的 FFN 相似,该模块也由两个线性层组成。由于 DeLighT 块已经使用 DExTra 变换集成了较宽的表示,因此我们可以反转 transformer 中 FFN 层的功能。第一层将输入的维数从 d_m 减小到 d_m / r,第二层将输入维数从 d_m / r 扩展到 d_m,其中 r 是减小因子(见图 1d)。该研究提出的轻量级 FFN 将 FFN 中的参数和计算量减少到原来的 rd_f / d_m。在标准 transformer 中,FFN 维度扩大了 3 倍。而在该研究实验中,维度缩小了 3 倍。因此,轻量级 FFN 将 FFN 中的参数量减少到了原来的 1/16。

逐块缩放

改善序列模型性能的标准方法包括增加模型维度(宽度缩放)、堆叠更多块(深度缩放),或两者兼具。为了创建非常深且宽的网络,该研究将模型缩放扩展至块级别。下图 2 比较了均匀缩放与逐块缩放:

深2.5至4倍,参数和计算量更少,DeLighT怎么做到的?

缩放 DeLighT 块:DeLighT 块使用 DExTra 学习深且宽的表示,DExTra 的深度和宽度由两个配置参数控制:组变换层数 N 和宽度乘数 m_w(图 2a)。这些配置参数能够在独立于输入 d_m 和输出 d_o 维度的情况下,增加 DeLighT 块内的可学习参数数量。此处,该论文使用逐块缩放来创建具有可变大小的 DeLighT 块网络,在输入附近分配较浅且窄的 DeLighT 块,在输出附近分配更深且宽的 DeLighT 块。

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读