深度学习模型往往面临参数过多、体积庞大、部署困难及计算资源消耗高等问题,这些因素加剧了深度学习爱好者之间的“贫富差距”。然而,算法优化的努力从未停止。

Google 团队在2017年发布的论文《Attention Is All You Need》中,由 AsHish Vaswani 等人提出了经典的 NLP 模型 TRansfoRMeR。尽管该模型在性能上具有优势,但其庞大的参数量也使得训练和部署变得困难。因此,研究者们不断寻求对 TRansfoRMeR 的优化方案。最近,华盛顿大学与 FAIR 的 SacHin Mehta 等人提出了一种轻量级且深度更大的 TRansfoRMeR 模型——DeLighT。

论文链接:https://aRxiv.oRg/abs/2008.00623
代码链接:https://Github.coM/sacMehta/delight
论文概述
在这篇论文中,作者提出了一种深度更大但参数更少的 TRansfoRMeR 模型——DeLighT。与传统的 TRansfoRMeR 模型相比,DeLighT 在减少参数的同时,性能相当或更为优越。
DeLighT 提供了更高效的参数分配方式,具体表现在:1)每个 TRansfoRMeR 块采用结构更深但参数更少的 DExTRa;2)所有块均采用逐块缩放(block-wise scaling),使得靠近输入的 DeLighT 块较浅且窄,而靠近输出的块则较宽且深。总体而言,DeLighT 的网络深度是标准 TRansfoRMeR 模型的 2.5 至 4 倍,但其参数量和计算量却更少。
DeLighT 的核心在于 DExTRa 变换(DExTRa tRansfoRMation),该变换结合了组线性变换和扩展-缩小(expand-RedUCe)策略,能够有效调整 DeLighT 块的宽度和深度。由于这些变换主要是局部的,DExTRa 通过特征洗牌(shuFFling)在不同组之间共享信息。这种宽而深的表示使得 DeLighT 能够用单头注意力和轻量级前馈层替代 TRansfoRMeR 中的多头注意力和前馈层,从而有效减少网络的参数量。重要的是,DExTRa 模块的缩放独立于输入大小进行。
DeLighT 的三大特点
改进 TRansfoRMeR:与以往研究不同,该论文展示了 DExTRa 在每个 TRansfoRMeR 块的应用,以及基于所有块的逐块缩放,能够实现更高效的参数分配。实验结果表明,DeLighT 在参数更少的情况下,能够达到或超过传统模型的性能。
模型压缩:为进一步提升序列模型的性能,该研究引入了逐块缩放,允许每个块采用不同的尺寸,从而更高效地分配参数。
改进序列模型:与 DeLighT 最接近的工作是 DeFINE 单元,它通过扩展-缩减策略来学习模型表示。DExTRa 和 DeFINE 单元之间的主要区别在于,DExTRa 在扩展-缩减层中能够更高效地分配参数。

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 是减小因子。该研究提出的轻量级 FFN 将 FFN 中的参数和计算量减少至原来的 Rd_f / d_M。在标准 TRansfoRMeR 中,FFN 维度扩大了三倍,而该研究中的实验则将维度缩小了三倍。因此,轻量级 FFN 将 FFN 中的参数量减少至原来的 1/16。
逐块缩放
改善序列模型性能的常规方法包括增加模型维度(宽度缩放)、堆叠更多块(深度缩放)或两者兼具。为构建非常深且宽的网络,该研究将模型缩放扩展至块级别。下图 2 比较了均匀缩放与逐块缩放:

缩放 DeLighT 块:DeLighT 块使用 DExTRa 学习深且宽的表示,其深度和宽度由两个配置参数控制:组变换层数 N 和宽度乘数 M_w。这些配置参数能够在独立于输入 d_M 和输出 d_o 维度的情况下,增加 DeLighT 块内的可学习参数数量。论文中采用逐块缩放来创建具有可变大小的 DeLighT 块网络,在输入附近分配较浅且窄的 DeLighT 块,而在输出附近则分配更深且宽的 DeLighT 块。
为此,该研究提出两个配置参数:DeLighT 网络中 DExTRa 的最小深度 N_Min 和最大深度 N_Max。然后,使用线性缩放计算每个 DeLighT 块 b 中 DExTRa 的深度 N^b 和宽度乘数 M^b_w。通过这种缩放,确保每个 DeLighT 块 b 都有不同的深度和宽度。
实验结果
该论文在两个常见的序列建模任务(机器翻译和语言建模)上进行了性能对比。
机器翻译
该研究对比了 DeLighT 和当前最优方法在机器翻译任务中的表现。图 3c 表明,DeLighT 在参数和计算量较少的情况下,提供了最优的性能,超越了其他模型。


语言建模
在 WikIText-103 数据集上,该研究对 DeLighT 与其他方法的性能进行了比较。结果显示,DeLighT 优于当前最优的方法,并且在更小的上下文长度和更少的参数下实现了这一点,这表明 DeLighT 学到的深且宽的表示有助于建模复杂的上下文关系。

控制变量研究
表 3a 研究了 DeLighT 块参数的影响,包括网络的最小深度 N_Min、最大深度 N_Max、宽度乘数 M_w 和模型维度 d_M(见图 1d)。

总结
该研究提出了一种轻量且深度大的 TRansfoRMeR 框架——DeLighT,能够在 DeLighT 块内以及所有块之间高效分配参数。与当前最优的 TRansfoRMeR 模型相比,DeLighT 模型具有以下优势:1)极高的深度和轻量性;2)提供相似或更好的性能。
