在看apple 最近发布的OpenELM 模型,其论文中提到 block-wise scaling 模型结构优化方法,(论文见: OpenELM: An Efficient Language Model Family with Open-source Training and Inference Framework),这里记录下DeLighT论文中的 block-wise scaling,翻译整理下以便对照代码实现,了解背景和原理。DeLighT论文中的实验任务主要是在两个标准的序列建模任务上评估了DeLighT的性能:机器翻译(machine translation)任务 encoder-decoder architecture 和 语言建模( language modeling)decoder architecture,论文中机器翻译任务未对En-Zh(英文译中文)进行实验,可以作为一个复现练习,根据源码实操一下论文中的实验;而语言建模可以作为openELM的来源延伸~ 结合cornet进行复现(也有mxl示例,mxl针对Apple Silicon 硬件进行的优化深度学习框架)。
论文主作者:Sachin Mehta
论文地址:https://arxiv.org/pdf/2008.00623
论文代码: https://github.com/sacmehta/delight (基于当时facebook的 fairseq seq2seq工具库开发)
该论文研究是在作者以前的DeFINE: DEep Factorized INput Token Embeddings for Neural Sequence Modeling 进行改进,模型结构引入更多的GLTs,来学习更宽的权重,并且减少了参数数量。
摘要
我们介绍了一种深度且轻量级的Transformer,名为DeLighT,它在参数数量显著减少的情况下,提供了与标准基于Transformer的模型相似或更好的性能。DeLighT更有效地在每个Transformer块内部(通过DeLighT变换)以及跨块(通过块级缩放)分配参数,允许输入端使用较浅较窄的DeLighT块,输出端使用较宽较深的DeLighT块。总体而言,DeLighT网络比标准Transformer模型深2.5到4倍,但参数和运算量更少。在基准机器翻译和语言建模任务上的实验表明,DeLighT在平均参数数量减少2到3倍的情况下,达到或提高了基线Transformer的性能。
1 引言
基于注意力的Transformer网络(Vaswani et al., 2017)广泛用于序列建模任务,包括语言建模和机器翻译。为了提高性能,模型通常通过增加隐藏层的维度(变得更宽)或堆叠更多的Transformer块(变得更深)来进行扩展。例如,T5(Raffel et al., 2019)使用了65K的维度,而GPT-3(Brown et al., 2020)使用了96个Transformer块。然而,这种扩展显著增加了网络参数的数量(例如,T5和GPT-3分别拥有110亿和1750亿参数),并使学习过程复杂化,即这些模型要么需要非常大的训练语料库(Raffel et al., 2019; Devlin et al., 2019; Brown et al., 2020),要么需要仔细的正则化(Hinton et al., 2012; Wan et al., 2013; Merity et al., 2018a)。在本文中,我们介绍了一种新的参数高效注意力基础架构,可以轻松地扩展为宽和深。 我们的深度轻量级Transformer架构,DeLighT,扩展了Vaswani et al.(2017)的Transformer架构,并在参数和运算量显著减少的情况下提供了相似或更好的性能。DeLighT的核心是DeLighT变换,它使用Mehta et al.(2018)的组线性变换(GLTs)和扩展-缩减策略,有效地变化DeLighT块的宽度和深度。由于GLTs本质上是局部的,DeLighT变换使用特征洗牌,类似于卷积网络(Zhang et al., 2018)中的通道洗牌,以在不同组之间共享信息。这种宽和深的表示促进了用单头注意力和轻量级前馈层替代Transformer中的多头注意力和前馈层,从而减少了总网络参数和运算量。重要的是,与Transformer不同,DeLighT变换将深度和宽度与输入大小解耦,允许我们通过在输入端使用较浅较窄的DeLighT块,在输出端使用较深较宽的DeLighT块,更有效地跨块分配参数。 我们证明了DeLighT模型在两个常见的序列建模任务上,即(i)机器翻译和(ii)语言建模,实现了与Transformer模型相似或更好的性能,同时显著减少了参数和运算量。在资源较少的WMT’16 En-Ro机器翻译数据集上,DeLighT使用2.8倍更少的参数达到了Transformer的性能。在资源充足的WMT’14 En-Fr数据集上,DeLighT以1.8倍更少的参数提供了比基线Transformer更好的性能(+0.4 BLEU分数)。同样,在语言建模方面,DeLighT在WikiText-103数据集上与Transformer-XL(Dai et al., 2019)的性能相当,但参数数量减少了1.5倍。
2 相关工作
改进Transformer(Improving transformers):已经引入了几种方法来改进Transformer架构。第一条研究线索解决了在长输入序列上计算自注意力的挑战(Child et al., 2019; Kitaev et al., 2020; Beltagy et al., 2020)。这些方法可以与我们的架构结合使用。第二条研究线索集中在解释多头注意力(Raganato and Tiedemann, 2018; Brunner et al., 2020)。他们表明,增加Transformer头的数量可能会导致冗余表示(Voita et al., 2019a; Michel et al., 2019),并且使用具有预定义模式的固定注意力头(Raganato et al., 2020)或合成注意力矩阵(Tay et al., 2020)可以提高性能。第三条研究线索集中在通过学习更好的表示来改进Transformer(Wu et al., 2019; 2020; So et al., 2019)。这些工作旨在通过使用不同的变换来提高Transformer的表达能力——例如,使用卷积(Wu et al., 2019; Gehring et al., 2017)、门控线性单元(Dauphin et al., 2017)或多分支特征提取器(So et al., 2019; Wu et al., 2020)。我们的工作属于这一类。与之前的工作不同,我们展示了如何有效地在块级别使用DeLighT变换以及跨块使用块级缩放来分配参数。
模型缩放(Model scaling):模型缩放是提高序列模型性能的标准方法(Vaswani et al., 2017; Raffel et al., 2019; Lan et al., 2020; Devlin et al., 2019; Shoeybi et al., 2019; Tan and Le, 2019; Brown et al., 2020)。在宽度缩放中增加模型维度(Vaswani et al., 2017; Devlin et al., 2019),而在深度缩放中堆叠更多的块(例如,Transformer块)(Shoeybi et al., 2019; Brown et al., 2020; Wang et al., 2019)。在这两种情况(及其组合)中,网络中每个块内的参数是相同的,这可能导致次优解决方案。为了进一步提高序列模型的性能,本文引入了块级缩放,允许不同大小的块并有效地在网络中分配参数。我们的结果表明,(1)输入端的DeLighT块较浅较窄,输出端的DeLighT块较深较宽,能提供最佳性能,以及(2)与单独的模型缩放相比,结合块级缩放的模型缩放实现了更好的性能。我们注意到,卷积神经网络(CNNs)也在输入端学习较浅较窄的表示,在输出端学习较深较宽的表示。与CNNs(例如,He et al. 2016的ResNet)在每个卷积层执行固定数量的操作不同,所提出的块级缩放在每层和块中使用可变数量的操作。
改进序列模型(Improving sequence models):最近还有大量关于改进序列模型的相关方法的工作,包括(1)使用更好的Token级表示提高准确性——例如,使用BPE(Sennrich et al., 2016)、自适应输入(Baevski and Auli, 2019)和输出(Grave et al., 2017a),以及DeFINE(Mehta et al., 2020),以及(2)提高效率——例如,使用压缩(Chen et al., 2018; Sun et al., 2020)、剪枝(Han et al., 2016; Voita et al., 2019b)和蒸馏(Hinton et al., 2015; Sanh et al., 2019)。与我们的工作最接近的是DeFINE变换,它也使用扩展-缩减策略学习表示。DeFINE变换(图1c)和DeLighT变换(图1d)之间的关键区别在于,DeLighT变换在扩展和缩减层中更有效地分配参数。与DeFINE不同,后者在组线性变换中使用较少的组来学习更宽的表示,DeLighT变换使用更多的组以更少的参数学习更宽的表示。DeLighT变换实现了与DeFINE变换相当的性能,但参数数量显著减少。
3 DeLighT: 深度轻量级Transformer
图1. (a, b)标准Transformer块与DeLighT块之间的块级别比较。在DeLighT中,计算注意力的操作数量减少了一半,而FFN中的参数数量(和操作)减少了 |
标准的Transformer块(图1a)由多头注意力组成,使用查询-键-值分解来建模序列标记之间的关系,并且由一个前馈网络(FFN)来学习更宽的表示。多头注意力通过对输入应用三个投影来获取查询
本文扩展了Transformer架构,引入了一个深度轻量级的Transformer,DeLighT。我们的模型使用深度轻量级的扩展-减少变换,DeLighT(第3.1节),有效地实现了学习更宽的表示(representations)。它还允许用单头注意力和轻量级FFN(第3.2节)替换多头注意力和前馈网络(FFN)层。DeLighT将注意力维度与深度和宽度解耦,使我们能够使用块级别缩放而不是均匀堆叠Transformer块来有效地学习表示(第3.3节)。
3.1 DeLighT
DeLighT将一个
增加Transformer的表达能力和容量的标准方法是增加输入维度
形式上,DeLighT由五个配置参数控制:(1)GLT层数
其中
然后,
在DeLighT中,第
图2.示例说明了DeLighT变换中的扩展阶段,该阶段使用GLTs、特征洗牌和输入混合器连接,以有效地学习更深和更宽的表示(representations)。为了说明,我们使用了相同的输入和输出维度。 |
3.2 DeLighT Block/Layer
图1 b展示了我们如何将DeLighT集成到Transformer块中以提高其效率。首先将
DeLighT层和单头注意力(DeLighT layer and single head attention): 假设我们有一个长度为
轻量级(Light-weight) FFN :与Transformer中的FFN类似,这个块也由两个线性层组成。由于DeLighT块已经通过DeLighT集成了更宽的表示,它允许我们反转Transformer中FFN层的功能。第一层将输入的维度从
block/layer深度:DeLighT块堆叠了(1)具有
3.3 Block/Layer wise scaling
提高序列模型性能的标准方法包括增加模型维度(宽度缩放)、堆叠更多的块(深度缩放)或两者兼有。然而,这种缩放在小型数据集上并不是非常有效。例如,当在WMT’16 En-Ro语料库上将Transformer-Base(
图3: 块级缩放(block-wise scaling) 有效地分配参数和操作到各个块中,导致接近输入的DeLighT块更浅更窄,接近输出的DeLighT块更深更宽。在(b)中,具有统一缩放( |
缩放DeLighT块: DeLighT块使用DeLighT学习深度和宽度可变的表示,其深度和宽度由两个配置参数控制:GLT层的数量
为此,我们引入了两个网络范围的配置参数:最小
网络深度: Transformer块的深度是固定的,即4。因此,先前的工作(Raffel et al., 2019; Brown et al., 2020; Wang et al., 2019)已经将基于Transformer的网络的深度与Transformer块的数量联系起来。在DeLighT中,我们提出了一种不同的视角来学习更深层次的表示,其中每个块的大小是可变的。为了计算网络深度,我们使用不同领域(包括计算机视觉,例如He等人2016年的ResNet,以及理论机器学习,例如Telgarsky, 2016)的标准定义。这些工作将网络深度定义为连续可学习层的数量(例如,卷积、线性或组线性)。类似地,具有
4 实验结果
我们在两个标准的序列建模任务上评估了DeLighT的性能:(1)机器翻译(第4.1节)和(2)语言建模(第4.2节)。
4.1 机器翻译(machine translation)
数据集和评估:我们在四个数据集上对DeLighT模型进行了基准测试:(1)IWSLT’14 德语-英语(De-En),(2)WMT’16 英语-罗马尼亚语(En-Ro),(3)WMT’14 英语-德语(WMT’14 En-De),以及(4)WMT’14 英语-法语(WMT’14 En-Fr)。对于IWSLT’14 De-En数据集,我们复制了Wu等人(2019)和Edunov等人(2018)的设置,使用160K/7K/7K句子对进行训练、验证和测试,以及大约10K个令牌的联合BPE词汇表。对于WMT’14 En-De数据集,我们遵循了Vaswani等人(2017)的设置。数据集包含3.9M/39K/3K句子对,分别用于训练、验证和测试,以及44K的联合BPE词汇表大小。对于WMT’14 En-Fr数据集,我们复制了Gehring等人(2017)的设置,使用36M/27K/3K句子对进行训练、验证和测试,以及44K的联合BPE词汇表大小(我们使用的是与Tensor2Tensor库(Vaswani等人,2018)兼容的训练和验证数据,以便与最近的工作(例如,进化Transformer)进行公平比较)。性能是根据测试集上的BLEU分数(Papineni等人,2002)(分数越高越好)来评估的。我们遵循Wu等人(2019)的束搜索相关超参数设置。
架构:我们采用了Vaswani等人(2017)的对称编码器-解码器架构,并使用了正弦位置编码。编码器和解码器都包含了
训练:对于IWSLT’14 De-En模型,我们遵循了Wu等人(2019)的设置,并在单个NVIDIA GTX 1080 GPU上,以4K令牌的批量大小对所有模型进行了50K次迭代的训练。对于WMT’16 En-Ro,我们遵循了Ghazvininejad等人(2019)的训练设置,并在16个NVIDIA Tesla V100 GPU上进行了100K次迭代的训练,有效批量大小为64K令牌。对于WMT’14 En-De和WMT’14 En-Fr,我们遵循了Wu等人(2019)的训练设置,并在16个V100 GPU上分别进行了30K和50K次迭代的训练。我们使用Adam(Kingma和Ba,2015)在训练期间最小化交叉熵损失,并使用了标签平滑值为0.1。为了公平比较,我们训练基线Transformer模型时使用了相同的训练设置。
4.1.1 结果
与基线Transformer的比较:表1比较了DeLighT与Vaswani等人(2017)在不同语料库上的基线Transformer的性能。DeLighT在不同语料库上都以更少的参数实现了更好的或相似的性能。具体来说,在资源较少(WMT’16 En-Ro)和资源丰富(WMT’14 En-De & WMT’14 En-Fr)的语料库上,DeLighT分别以2.8倍和1.8倍更少的参数实现了相似或更好的性能。当参数数量增加时,DeLighT的性能超过了Transformer。例如,在WMT’14 En-Fr数据集上,DeLighT比Transformer深3.7倍,提高了1.3个BLEU分数,但参数数量少了1300万,操作数量少了30亿(见表2)。
小型语料库结果
WMT’14 En-De | WMT’14 En-Fr | ||||||||
---|---|---|---|---|---|---|---|---|---|
模型 | 参数数量 | 比率 | BLEU | BLEU变化 | 参数数量 | 比率 | BLEU | BLEU变化 | |
Transformer (Vaswani et al., 2017) | – | – | 34.4 |
– | 62 M | – | 34.3 |
– | |
Transformer (我们的实现) | 42 M | 34.3 | – | 62 M | 34.3 | – | |||
DeLighT | 14 M | 33.8 | -0.5 | 22 M | 34.3 | 0.0 | |||
DeLighT | 30 M | 35.3 | +1.0 | 53 M | 34.7 | +0.4 |
大型语料库结果
WMT’14 En-De | WMT’14 En-Fr | ||||||||
---|---|---|---|---|---|---|---|---|---|
模型 | 参数数量 | 比率 | BLEU | BLEU变化 | 参数数量 | 比率 | BLEU | BLEU变化 | |
Transformer (Vaswani et al., 2017) | 62 M | – | 27.3 | – | – | 62 M | 38.1 | – | |
Transformer (我们的实现) | 67 M | 27.7 | – | 67 M | 39.2 | – | |||
DeLighT | 37 M | 27.6 | -0.1 | 37 M | 39.6 | +0.4 | |||
DeLighT | 54 M | 28.0 | +0.3 | 54 M | 40.5 | +1.3 |
表1:与基线Transformer在机器翻译语料库上的比较。DeLighT模型需要显著较少的参数来达到类似的性能。这里,
模型 | 深度 | 参数数量 | MAC数 | BLEU |
---|---|---|---|---|
Transformer | 60 | 67 M | 11.1 B | 39.2 |
DeLighT | 222 | 37 M | 5.6 B | 39.6 |
DeLighT | 222 | 54 M | 8.1 B | 40.5 |
表2:与Transformer相比,DeLighT网络是深度、轻量级且高效的。BLEU分数是在WMT’14 En-Fr数据集上报告的。为了计算网络深度,我们统计了网络中顺序层的数量(第3.3节)。我们使用了20个源Token和20个目标Token来计算乘加操作(MACs)。详细信息见附录C。
特别值得关注的是在WMT'14 En-De语料库上(如图4),DeLighT与Vaswani等人(2017年)的基准Transformer以及其神经搜索变体——So等人(2019年)的Evolved Transformer在两种不同参数设置下的性能比较。对于小型模型(小于1千万参数),DeLighT模型提供了更好的性能,并且要达到与这些模型相同的性能水平,DeLighT模型需要更少的参数。
图4:在WMT'14 En-De语料库上,DeLighT与Transformer和Evolved Transformer在两种不同设置下的比较:(1)参数数量相同,(2)性能相同。 |
与最先进方法的比较:大多数最先进的方法都在WMT’14 En-De上评估了性能,一些也在IWSLT’14 De-En上进行了评估。表3比较了DeLighT与这些语料库上最先进方法的性能。DeLighT实现了与现有方法相似或更好的性能。重要的是要注意,现有方法通过不同的设计选择改进了基线Transformer——例如,不对称的编码器-解码器结构(Wang et al., 2019)和神经架构搜索(So et al., 2019)。我们相信,DeLighT将来也会从这些设计选择中受益。
IWSLT’14 De-En | ||
---|---|---|
模型 | 参数数量 | BLEU |
Transformers (Vaswani et al., 2017) | 42 M | 34.3 |
Variational Attention (Deng et al., 2018) | – | 33.1 |
Dynamic convolutions (Vaswani et al., 2017) | 43 M | 35.2 |
Lite Transformer |
– | 33.6 |
DeLighT(我们的模型) | 30 M | 35.3 |
WMT’14 En-De | ||
---|---|---|
模型 | 参数数量 | BLEU |
Transformer (Vaswani et al., 2017) | 62 M | 27.3 |
DLCL (Wang et al., 2019) | 62 M | 27.3 |
Evolved Transformer |
46 M | 27.7 |
Lite Transformer |
– | 26.5 |
DeLighT(我们的模型) | 37 M | 27.6 |
表3:与机器翻译语料库上的最新方法进行比较。DeLighT模型在参数较少的情况下提供了与最新模型相似或更好的性能。这里,
DeLighT模型的扩展:图5 显示了随着网络参数增加,DeLighT模型的性能提高;表明它们能够在不同语料库上学习表示,包括资源较少的语料库。
图5: DeLighT模型的规模扩展。随着网络参数数量的增加,DeLighT在不同语料库(包括低资源语料库WMT'16 En-Ro)上的性能都有所提高。 |
4.2 语言建模(language modeling)
数据集和评估:我们在WikiText-103数据集上进行评估(Merity et al., 2017),该数据集有103M/217K/245K个Token用于训练、验证和测试。它有一个大约260K个Token的词级词汇表。按照最近的工作(Baevski和Auli,2019;Dai等人,2019),我们在测试集上以困惑度(越低越好)报告性能。
架构:我们使用Baevski和Auli(2019)的基于Transformer的解码器架构,带有B个DeLighT块。我们使用
训练:我们遵循Baevski和Auli(2019)的训练设置,只是我们所有的模型都在8个NVIDIA Tesla V100 GPU上进行了100K次迭代的训练,上下文长度为512,有效批量大小为64K令牌。我们使用Adam进行训练,并在测试期间使用480的上下文长度。
结果:表4b比较了DeLighT与之前方法在WikiText-103上的性能。表4a绘制了DeLighT和Transformer-XL(Dai et al., 2019)的困惑度随参数数量变化的图表——后者超过了其他基于Transformer的实现(例如,Baevski和Auli 2019)。两个表格都表明,DeLighT以更少的参数提供了比最先进的方法(包括Transformer-XL)更好的性能,并且使用了更短的上下文长度,表明DeLighT变换有助于学习强大的上下文关系。
表4:在WikiText-103数据集上的结果。与Transformer-XL相比,DeLighT在参数较少的情况下提供了相似或更好的性能(更低的困惑度)。† 对于Transformer-XL,我们使用官方源代码复现结果。对于使用上下文长度为480评估Transformer-XL,我们在官方评估脚本中将mem_len超参数设置为480。 |
5 计算效率的分析与讨论
训练时间和内存消耗:表5比较了DeLighT与基线Transformer在训练时间和内存消耗方面的情况。为了进行公平比较,我们实现了一个没有NVIDIA专用CUDA内核的Transformer单元,并在16个NVIDIA V100 GPU上对全精度网络进行了30K次迭代的训练。Transformer和DeLighT模型的训练时间分别约为37小时和23小时,GPU内存消耗分别约为12.5 GB和14.5 GB(R1 vs. R2)。当我们启用APEX库3为多头注意力提供的专用CUDA内核时,Transformer模型的训练时间从37小时减少到16小时,而我们没有观察到内存消耗的显著变化。受到这一观察结果的启发,我们为GLT中的分组和反分组函数实现了专用的CUDA内核(见附录E)。这些更改使得DeLighT的训练时间和GPU内存消耗分别减少了约4小时和3 GB。我们强调,分组、线性变换、特征洗牌和反分组可以通过单个CUDA内核高效实现。未来,我们期望为这些操作提供专用的CUDA内核,这将进一步减少内存消耗以及训练/推理时间。
Row # | Model | # Params (百万) | BLEU (WMT'14 En-Fr) | 训练时间 | 内存 (GB) |
---|---|---|---|---|---|
R1 | Transformer (未优化) | 67 M | 39.2 | 37小时 | 12.5 |
R2 | DeLighT(未优化) | 54 M | 40.5 | 23小时 | 14.5 |
R3 | Transformer (使用Apex优化) | 67 M | 39.2 | 16小时 | 11.9 |
R4 | DeLighT(使用优化的分组) | 54 M | 40.5 | 19小时 | 11.5 |
表5:与基线Transformer在训练速度和内存消耗方面的比较。在R4中,我们仅为分组和取消分组功能实现了CUDA内核(见附录E)。我们预计DeLighT将更有效率,因为它有一个专用的CUDA内核用于分组、转换、特征洗牌和取消分组。内存消耗是在一台单个的NVIDIA GP100 GPU(16GB内存)上测量的,每个批次最多有4096个标记,并且没有任何梯度积累。
正则化:表6显示,DeLighT在参数数量较少的情况下,与基线Transformer相比,需要更少的正则化就能达到相似的性能。这表明,使用更好的变换函数学习表示可以减少对dropout的需求。
Model | Dropout | BLEU |
---|---|---|
Transformer (62 M) | 0.10 | 27.3 |
Transformer (62 M) | 0.30 | 27.7 |
DeLighT(37 M) | 0.05 | 27.6 |
表6:与基线Transformer相比,DeLighT需要更少的正则化(数据集:WMT'14 En-De)
6 结论
本文介绍了一种深度且轻量级的Transformer架构,DeLighT,它在DeLighT块内部以及跨DeLighT块有效地分配参数。与最先进的Transformer模型相比,DeLighT模型(1)深度且轻量级,并且(2)提供了相似或更好的性能。未来,我们计划将DeLighT应用于其他任务,包括语言模型预训练、问答和语言生成。
致谢:本研究得到了ONR N00014-18-1-2826、DARPA N6600119-2-403、NSF (IIS-1616112, IIS1252835)以及Allen杰出研究者奖的支持。作者还要感谢华盛顿大学UW-NLP和H2Lab的成员提供的宝贵反馈和评论。
参考文献
-
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, 和 Illia Polosukhin. “Attention is all you need.” 在《神经信息处理系统进展》中,第5998–6008页,2017年。
-
Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, 和 Peter J. Liu. “Exploring the limits of transfer learning with a unified text-to-text transformer.” arXiv预印本 arXiv:1910.10683, 2019.
-
Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, 和 Dario Amodei. “Language models are few-shot learners.” arXiv预印本 arXiv:2005.14165, 2020.
-
Jacob Devlin, Ming-Wei Chang, Kenton Lee, 和 Kristina Toutanova. “BERT: Pre-training of deep bidirectional transformers for language understanding.” 在《北美计算语言学协会2019年会议论文集:人类语言技术》中,第1卷(长论文和短论文),2019年。
-
Geoffrey E. Hinton, Nitish Srivastava, Alex Krizhevsky, Ilya Sutskever, 和 Ruslan R. Salakhutdinov. “Improving neural networks by preventing co-adaptation of feature detectors.” arXiv预印本 arXiv:1207.0580, 2012.
-
Li Wan, Matthew Zeiler, Sixin Zhang, Yann LeCun, 和 Rob Fergus. “Regularization of neural networks using dropconnect.” 在《国际机器学习会议》中,第1058–1066页,2013.
-
Stephen Merity, Nitish Shirish Keskar, 和 Richard Socher. “Regularizing and optimizing LSTM language models.” 在《学习表示国际会议》中,2018a. URL: https://openreview.net/forum?id=SyyGPP0TZ.
-
Sachin Mehta, Rik Koncel-Kedziorski, Mohammad Rastegari, 和 Hannaneh Hajishirzi. “Pyramidal recurrent unit for language modeling.” 在《自然语言处理的实证方法会议》中,2018年。
-
Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, 和 Jian Sun. “Shufflenet: An extremely efficient convolutional neural network for mobile devices.” 在《IEEE计算机视觉与模式识别会议》中,第6848–6856页,2018.
-
Zihang Dai, Zhilin Yang, Yiming Yang, Jaime Carbonell, Quoc V. Le, 和 Ruslan Salakhutdinov. “Transformer-xl: Attentive language models beyond a fixed-length context.” 在《计算语言学协会》中,2019年。
-
Rewon Child, Scott Gray, Alec Radford, 和 Ilya Sutskever. “Generating long sequences with sparse transformers.” arXiv预印本 arXiv:1904.10509, 2019.
-
Nikita Kitaev, Lukasz Kaiser, 和 Anselm Levskaya. “Reformer: The efficient transformer.” 在《学习表示国际会议》中,2020年。
-
Iz Beltagy, Matthew E. Peters, 和 Arman Cohan. “Longformer: The long-document transformer.” arXiv:2004.05150, 2020.
-
Alessandro Raganato 和 Jörg Tiedemann. “An analysis of encoder representations in transformer-based machine translation.” 在《2018 EMNLP BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP》研讨会论文集中,2018年。
-
Gino Brunner, Yang Liu, Damian Pascual, Oliver Richter, Massimiliano Ciaramita, 和 Roger Wattenhofer. “On identifiability in transformers.” 在《学习表示国际会议》中,2020年. URL: https://openreview.net/forum?id=BJg1f6EFDB.
-
Elena Voita, Rico Sennrich, 和 Ivan Titov. “The bottom-up evolution of representations in the transformer: A study with machine translation and language modeling objectives.” 在《2019年自然语言处理和计算语言学第九届国际联合会议(EMNLP-IJCNLP)》论文集中,2019a。
-
Paul Michel, Omer Levy, 和 Graham Neubig. “Are sixteen heads really better than one?” 在《神经信息处理系统进展》中,第14014–14024页,2019年。
-
Alessandro Raganato, Yves Scherrer, 和 Jörg Tiedemann. “Fixed encoder self-attention patterns in transformer-based machine translation.” arXiv预印本 arXiv:2002.10260, 2020.
-
Yi Tay, Dara Bahri, Donald Metzler, Da-Cheng Juan, Zhe Zhao, 和 Che Zheng. “Synthesizer: Rethinking self-attention in transformer models.” arXiv预印本 arXiv:2005.00743, 2020.
-
Felix Wu, Angela Fan, Alexei Baevski, Yann Dauphin, 和 Michael Auli. “Pay less attention with lightweight and dynamic convolutions.” 在《学习表示国际会议》中,2019年。
-
Zhanghao Wu, Zhijian Liu, Ji Lin, Yujun Lin, 和 Song Han. “Lite transformer with long-short range attention.” 在《学习表示国际会议》中,2020年。
-
David So, Quoc Le, 和 Chen Liang. “The evolved transformer.” 在《第36届国际机器学习会议论文集》中,第5877–5886页,2019年。
-
Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, 和 Yann N. Dauphin. “Convolutional sequence to sequence learning.” 在《第34届国际机器学习会议论文集-第70卷》中,第1243–1252页。JMLR. org, 2017.
-
Yann N. Dauphin, Angela Fan, Michael Auli, 和 David Grangier. “Language modeling with gated convolutional networks.” 在《第34届国际机器学习会议论文集-第70卷》中,第933–941页。JMLR. org, 2017.
-
Zhenzhong Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, 和 Radu Soricut. “Albert: A lite bert for self-supervised learning of language representations.” 在《学习表示国际会议》中,2020年。
-
Mohammad Shoeybi, Mostofa Patwary, Raul Puri, Patrick LeGresley, Jared Casper, 和 Bryan Catanzaro. “Megatron-lm: Training multi-billion parameter language models using gpu model parallelism.” arXiv预印本 arXiv:1909.08053, 2019.
-
Mingxing Tan 和 Quoc V. Le. “Efficientnet: Rethinking model scaling for convolutional neural networks.” 在Kamalika Chaudhuri和Ruslan Salakhutdinov编辑的《第36届国际机器学习会议论文集》中,第9-15页,2019年6月9-15日,加利福尼亚州长滩,美国。
-
Qiang Wang, Bei Li, Tong Xiao, Jingbo Zhu, Changliang Li, Derek F. Wong, 和 Lidia S. Chao. “Learning deep transformer models for machine translation.” 在《第57届计算语言学协会年会论文集》中,2019年。
-
Kaiming He, Xiangyu Zhang, Shaoqing Ren, 和 Jian Sun. “Deep residual learning for image recognition.” 在《IEEE计算机视觉与模式识别会议》中,第770–778页,2016年。
-
Rico Sennrich, Barry Haddow, 和 Alexandra Birch. “Neural machine translation of rare words with subword units.” 在《第54届计算语言学协会年会论文集》第1卷(长论文)中,8月2016年。
-
Alexei Baevski 和 Michael Auli. “Adaptive input representations for neural language modeling.” 在《学习表示国际会议》中,2019年。
-
Édouard Grave, Armand Joulin, Moustapha Cissé, David Grangier, 和 Hervé Jégou. “Efficient softmax approximation for GPUs.” 在《国际机器学习会议》中,2017a。
-
Sachin Mehta, Rik Koncel-Kedziorski, Mohammad Rastegari, 和 Hannaneh Hajishirzi. “DeFINE: Deep Factorized Input Token Embeddings for Neural Sequence Modeling.” 在《学习表示国际会议》中,2020年。
-
Patrick Chen, Si Si, Yang Li, Ciprian Chelba, 和 Cho-Jui Hsieh. “Groupreduce: Block-wise low-rank approximation for neural language model shrinking.” 在《神经信息处理系统进展》中,2018年。
-
Zhiqing Sun, Hongkun Yu, Xiaodan Song, Renjie Liu, Yiming Yang, 和 Denny Zhou. “Mobilebert: a compact task-agnostic bert for resource-limited devices.” 在《计算语言学协会(ACL)》中,2020年。
-
Song Han, Huizi Mao, 和 William J. Dally. “Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding.” 在《表示学习国际会议》中,2016年。
-
Elena Voita, David Talbot, Fedor Moiseev, Rico Sennrich, 和 Ivan Titov. “Analyzing multi-head self-attention: Specialized heads do the heavy lifting, the rest can be pruned.” 在《第57届计算语言学协会年会论文集》中,2019b。
-
Geoffrey Hinton, Oriol Vinyals, 和 Jeff Dean. “Distilling the knowledge in a neural network.” 在NIPS深度学习和表示学习研讨会中,2015。
-
Victor Sanh, Lysandre Debut, Julien Chaumond, 和 Thomas Wolf. “Distilbert, a distilled version of bert: smaller, faster, cheaper and lighter.” 在第5届能源效率机器学习与认知计算NeurIPS研讨会中,2019。
-
Matus Telgarsky. “Benefits of depth in neural networks.” COLT, 2016.
-
Sergey Edunov, Myle Ott, Michael Auli, David Grangier, 和 Marc’Aurelio Ranzato. “Classical structured prediction losses for sequence to sequence learning.” 在《北美计算语言学协会2018年会议论文集:人类语言技术》第1卷(长论文)中,2018年。
-
Ashish Vaswani, Samy Bengio, Eugene Brevdo, Francois Chollet, Aidan N. Gomez, Stephan Gouws, Llion Jones, Łukasz Kaiser, Nal Kalchbrenner, Niki Parmar, Ryan Sepassi, Noam Shazeer, 和 Jakob Uszkoreit. “Tensor2tensor for neural machine translation.” CoRR, abs/1803.07416, 2018. URL: http://arxiv.org/abs/1803.07416.
-
Kishore Papineni, Salim Roukos, Todd Ward, 和 Wei-Jing Zhu. “BLEU: a method for automatic evaluation of machine translation.” 在计算语言学协会第40届年会论文集中,第311–318页,计算语言学协会,2002。
-
Myle Ott, Sergey Edunov, Alexei Baevski, Angela Fan, Sam Gross, Nathan Ng, David Grangier, 和 Michael Auli. “Fairseq: A fast, extensible toolkit for sequence modeling.” 在NAACL-HLT 2019: Demonstrations会议论文集中,2019年。
-
Marjan Ghazvininejad, Omer Levy, Yinhan Liu, 和 Luke Zettlemoyer. “Mask-predict: Parallel decoding of conditional masked language models.” 在2019年自然语言处理和计算语言学第九届国际联合会议(EMNLP-IJCNLP)论文集中,第6114–6123页,2019年。
-
Diederik P. Kingma 和 Jimmy Ba. “Adam: A method for stochastic optimization.” 在学习表示国际会议中,2015年。
附录A DeLighT架构用于语言建模和机器翻译
DeLighT架构用于语言建模和机器翻译的示意图展示在图6中。对于语言建模,我们遵循了Baevski和Auli(2019)的架构;而对于机器翻译,我们遵循了Vaswani等人(2017)的架构。
**语言建模:**图6a展示了语言建模的架构。该架构堆叠了
**机器翻译:**图6b展示了机器翻译的架构。编码器堆叠了B个DeLighT块,每个块的配置也是使用块级缩放确定的。与语言建模类似,每个编码器块也有三个子层。第一层是DeLighT变换,它在高维空间中学习表示。第二层是单头注意力,它编码上下文关系。第三层是位置感知的轻量级前馈网络。与Vaswani等人(2017)相似,我们采用了残差连接(He等人,2016)。我们使用可学习的查找表将Token映射为向量。与编码器类似,解码器也堆叠了
图6:使用DeLighT进行序列建模。这里,绿色六边形代表了DeLighT转换。 |
附录B 带有输入混合器连接的组线性变换
组线性转换(group linear transformation GLT)
图7a展示了DeLighT变换扩展阶段中GLT的一个例子。为了说明,我们在这个例子中使用了相同的维度。回想一下,当我们在扩展阶段深入时,组的数量会增加。在这个例子中,第一层有一组,第二层有两组,第三层有四组。GLT学习特定于组的表示,并且是局部的。为了允许GLT学习全局表示,我们使用了特征洗牌。图7b展示了带有特征洗牌的GLT的一个例子。此外,仅通过堆叠线性或组线性(无论是否带有特征洗牌)来训练深度神经网络是具有挑战性的,因为梯度消失问题。He等人(2016)引入的残差连接缓解了这个问题,并有助于训练深度神经网络。然而,当输入和输出维度不同时(例如,在DeLighT变换的扩展和缩减阶段),就不能使用这样的连接。为了稳定训练并学习更深层次的表示,我们使用了Mehta等人(2020)的输入混合器连接。图7c展示了带有特征洗牌和输入混合器连接的GLT的一个例子。
图 7:本图展示了DeLighT转换中使用的不同变体的组线性转换(group linear transformations GLTs)。 |
附录C DeLighT中的乘加操作
DeLighT块是使用线性变换、组线性变换(GLTs)和缩放点积注意力构建的。网络中的总乘加操作(MACs)数量是这些单独操作的累积。
让
组线性变换(GLT):GLT
重要的是,当
DeLighT中的自注意力:DeLighT中的缩放点积自注意力定义为:
其中
注意机制涉及两个点积。第一个点积是在
在源-目标注意力中(比如在机器翻译中),
附录D WikiText-103 数据集的消融(ablation)研究
表7 研究了 WikiText-103 数据集上 DeLighT块参数的影响,即 (1) GLT 的最小数量
DeLighT 块:总的来说,表7 显示了使用DeLighT和块级缩放(block-wise scaling)来缩放深度和宽度的效果。我们得出以下观察结果:
- 块级缩放(R4,R5)相比统一缩放(R1-R3)提供了更好的性能。例如,具有
和 的 DeLighT(R4)比具有 和 的 DeLighT更浅 ,但性能更好,而且参数和操作数量相似。缩放 可以提高性能(R2 vs. R3),但改进幅度明显低于块级缩放模型(R3 vs. R5)。这表明跨块的参数的非均匀分布使网络能够学习更好的表示。 - 不同的
和 之间的比率产生不同的结果。当比率大于或等于两倍时,我们观察到性能显著提升。例如,当我们将 从 2 缩放到 3 时(R6 vs. R8),困惑度提高了约 5 个点,而网络参数仅适度增加。另一方面,当 接近 1 时(R6 vs. R7),性能变化不明显。这可能是因为跨块的参数分配接近于均匀(Eq. )。这与我们之前的观察一致。 - 在输入附近学习更深更宽的表示,以及在输出附近学习更浅更窄的表示,可以实现更好的性能。例如,当我们将
从 8 缩放到 12 并且 时(R6,R8),与具有 的模型相比,DeLighT以相似数量的参数交付了更好的性能(R7,R9)。这可能是因为当 时, 和 的比率较高,有助于更有效地分配每个块的参数。 - 在输入附近学习更深更宽的表示,而在输出附近学习更浅更窄的表示会损害性能(R13 vs. R16)。
- 使用
和 缩放宽度可以提高性能(R10-R15),但它们的影响是不同的。例如,当我们将 和 缩放两倍时,与 相比,参数和操作数量的增加速度更快。 DeLighT以不同的方式学习更宽的表示可能在选择应用程序特定模型时很有用。
Row # | Depth | Parameters | MACs | Perplexity | ||||
---|---|---|---|---|---|---|---|---|
R1 | 4 | 4 | 2 | 256 | 43 | 14.1 M | 2.96 B | 56.19 |
R2 | 8 | 8 | 2 | 256 | 115 | 16.6 M | 3.49 B | 48.58 |
R3 | 8 | 8 | 4 | 256 | 115 | 22.1 M | 4.64 B | 45.10 |
R4 | 4 | 8 | 2 | 256 | 92 | 16.7 M | 3.51 B | 46.30 |
R5 | 4 | 12 | 2 | 256 | 158 | 21.0 M | 4.41 B | 41.18 |
R6 | 4 | 8 | 2 | 256 | 92 | 16.7 M | 3.51 B | 46.30 |
R7 | 6 | 8 | 2 | 256 | 102 | 16.5 M | 3.46 B | 46.68 |
R8 | 4 | 12 | 2 | 256 | 158 | 21.0 M | 4.41 B | 41.18 |
R9 | 6 | 12 | 2 | 256 | 172 | 20.0 M | 4.20 B | 42.26 |
R10 | 4 | 12 | 2 | 256 | 158 | 21.0 M | 4.41 B | 41.18 |
R11 | 4 | 12 | 3 | 256 | 158 | 23.8 M | 4.99 B | 39.92 |
R12 | 4 | 12 | 4 | 256 | 158 | 27.1 M | 5.69 B | 39.10 |
R13 | 4 | 12 | 2 | 256 | 158 | 21.0 M | 4.41 B | 41.18 |
R14 | 4 | 12 | 2 | 384 | 158 | 29.9 M | 6.28 B | 35.14 |
R15 | 4 | 12 | 2 | 512 | 158 | 43.8 M | 9.20 B | 30.81 |
R16 | 12 | 4 | 2 | 256 | 158 | 21.0 M | 4.41 B | 43.10 |
表7 展示了对DeLighT块的不同方面进行的消融研究,包括统一缩放与块级缩放、深度缩放和宽度缩放。部分突出显示的行具有相同的配置(重复以说明结果)。我们的实验设置类似于第 4节,但我们将模型训练了 50K 次迭代。乘法和加法操作(MACs)是针对 20 个时间步进行计算的。
DeLighT变换的影响:我们将DeLighT块中的DeLighT变换替换为(1)DeFINE变换和(2)线性层堆叠。图8显示,与DeFINE单元和线性层相比,DeLighT变换以显著更少的参数提供了相似的性能。
图 8: 不同变换的影响。DeLighT 变换比 DeFINE 和线性变换更具参数效率。更低的困惑度值意味着更好的性能。 |
特征洗牌:图9显示特征洗牌通过1-2个困惑度点提高了DeLighT的性能。这里,我们使用了与R13-R15(表7)相同的设置。
图 9: 特征重排的影响。特征重排使我们能够从全局信息中学习表示,并提高了性能。更低的困惑度值意味着更好的性能。 |
轻量级FFN:图10展示了变化轻量级FFN中缩减因子r的影响。我们使用了与R13(表7)相同的设置。我们没有观察到性能有任何显著下降,直到
图 10: 轻量级FFN中减少因子 |
我们还测试了去除轻量级FFN,虽然它减少了
均匀缩放与块级缩放:图11比较了DeLighT在均匀缩放和块级缩放下的性能。对于给定的模型维度dm,具有块级缩放的DeLighT模型提供了更好的性能。
图 11: 均匀(uniform)尺度与分块(block-wise)尺度对比。(a)对比了均匀尺度和分块尺度方法。(b)比较了WikiText-103数据集上DeLighT与均匀尺度和分块尺度方法的结果。带有分块尺度的DeLighT网络在不同设置下提供更好的性能。更低的困惑度值意味着更好的性能。 |
DeLighT变换的位置:我们在WikiText-103验证集上研究了DeLighT变换的三种配置:(1)DeLighT变换后跟单头注意力和轻量级FFN,(2)单头注意力后跟DeLighT变换,以及(3)单头注意力后跟DeLighT变换和轻量级FFN。对于相似数量的参数,我们发现(2)和(3)显著降低了(1)的性能。这表明更深和更宽的表示有助于学习更好的上下文表示;使我们能够用单头注意力替代多头注意力。
扩展DeLighT:图12展示了在变化DeLighT变换的配置参数(
图 12: DeLighT的规模扩展。在保持其他配置参数恒定(例如, |
这项工作通过手动调整参数
附录E 组线性变换的源代码
在PyTorch中实现组线性变换(Group Linear Transformation, GLT)的源代码如下所示。为了在GLT中高效地实现分组功能,我们用专用的CUDA内核替换了PyTorch中简单的reshape和transpose操作,从而减少了内存占用并加快了训练速度。
列表1: “在Pytorch中GLT的简单实现”
import torch
def glt_function(x, n_groups, weights, bias=None):
''''
:param x: 输入张量,大小为 [B x N],其中B是批量大小,N是输入维度
:param n_groups: GLT中的组数
:param weights: glt权重 [g x N/g x M/g]
:param bias: GLT偏置(可选),大小为 [g x 1 x M/g]
:return: 输出张量,大小为 [B x M]
'''
bsz = x.size(0)
# 分组函数:将 [B x N] 张量转换为 [g x B x N/g]
x = x.contiguous().view(bsz, n_groups, -1) # [B x N] --> [B x g x N/g]
x = x.transpose(0, 1) # 转置,使组成为第一个维度
# 变换函数:将 N/g 维空间变换为 M/g 维空间
x = torch.bmm(x, weights) # 与权重相乘
# 如果提供了偏置,则添加偏置
if bias is not None:
x = torch.add(x, bias)
# 重新分组函数:将 [g x B x M/g] 张量转换回 [B x M]
x = x.transpose(0, 1) # 再次转置,使批量大小成为第一个维度
x = x.contiguous().view(bsz, -1) # [B x g x M/g] --> [B x M]
return x
列表2: “CUDA中的分组内核”
/* 分组内核:将输入从 [B x N] 转换为 [g x B x N/g] */
template<typename scalar_t>
__global__ void grouping_kernel_forward(const scalar_t* input,
const int groups,
const int total_elements,
const int input_features,
const int group_features,
const int batch_size,
scalar_t* output) {
const int index = IMUL(blockIdx.x, blockDim.x) + threadIdx.x;
if (index >= total_elements) {
return;
}
const int b_idx = index / group_features;
const int g_f_idx = index % group_features;
int in_offset, out_offset;
#pragma unroll
for (int g = 0; g < groups; g++) {
in_offset = (b_idx * input_features) + (g * group_features) + g_f_idx;
out_offset = ((g * batch_size + b_idx) * group_features) + g_f_idx;
output[out_offset] = input[in_offset];
}
}