文 | Sherry
自从17年Attention is all you need发出,继而18年BERT刷新各大榜单,大型预训练Transformer似乎已经成为自然语言处理的标准基准模型,甚至进一步渗透到图像领域。各路大神基于Transformer提出了海量改进方法。这些改变是否对大多数任务有效?谷歌的研究人员对大量的设定在统一的代码库和硬件环境下进行了实验比较。出乎意料的是,大多数“高大上”的改进都不能拓展到所有数据集,反而是一些简单或细节的改动则可以“大力出奇迹”。
论文题目:
Do Transformer Modifications Transfer Across Implementations and Applications?
论文链接:
https://arxiv.org/pdf/2102.11972.pdf
Github:
https://github.com/google-research/google-research/tree/master/transformer_modifications
也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0329】 下载论文PDF~
为什么要比较不同版本的BERT?
一个真正有效的方法应该可以推广到其他任务。比如说一个改动是针对Transformer编码器的,那么无论下游任务是简单的分类还是NER都应该有效,你不能说我有一把牛刀但它不能用来杀鸡吧。这也是为什么在CNN的各类改进被提出之后图像研究者们总是会用一个最新的版本作为基准实验。然而,即使BERT已经提出了近3年,在实验中大家普遍使用的基准仍然是和一开始的BERT设定非常相似的实验设定。难道最初提出的Transformer是完美的?或者这些魔改都不是本质的,各路大神只是调参让实验刷榜,之后再想办法圆故事发文章。
于是谷歌大佬们就做了一个实验,把所有针对Transformer的变化放到同一个实验环境下进行比较,看看谁才是最强王者。有了这份实验结果,我们在拿到一个全新的任务的时候,再也不用纠结辣么多高级的Transformer变种到底应该用哪一个好了。
回顾Transformer结构
首先我们回顾同时包含编码器-解码器的Transformer结构,输入输出分别是长度为T和U的词序列。
嵌入词向量
输入序列 经过嵌入词向量的映射矩阵 同时加上位置嵌入向量 构成了编码器的输入, 是正弦绝对位置嵌入。我们分别用 表示编码器和解码器的第 层的输出,同时也是 层的输入。
编码器
编码器的每一层从一个多头自注意力网络(Multi-headed Self-attention)开始, 第 层第 位的第 个头的注意力机制由以下方式构成:
其中Q,K,V是权重矩阵。
然后我们将所有头得到的向量连接在一起,并且通过残差连接(Residual connection)和层规范化(Layer Normalization):
这里 LayerNorm具体可以展开为:
然后多头注意力的输出通过使用ReLU激活函数的全连接网络(dense feedforward network)和残差以及LayerNorm层:
解码器
解码器和编码器结构类似,区别在于:
自注意力机制是因果的--后面的词只能关注到前面的词。通过注意力的下三角掩码(mask)实现。
解码器中还包含一个交叉注意力机制--在每一层解码器的自注意力机制之后,我们将最后一层编码器的K和V,以及前一层解码器的Q做一次多头注意力。
解码器的最后一层输出通过一个解码嵌入映射 得到最后的输出。
开启疯狂实验
本文的实验以T5为基础,全都采用同时包含编码器和解码器的网络。因而所有任务都采用T5中的格式转化为了序列输入输出。不同于最原始的Transformer结构,由于前置LayerNorm层和使用相对位置编码已经得到学术界的广泛认可,实验中默认采用这两个设定。
下面实验性能结果分为四个部分:
模型效率:分别用参数量(Params),运算单例所需操作数(Ops),训练速度(Step/s).
预训练效果:在预训练65,536步(Early loss)之后的困惑度(Perplexity)和训练完全524,288步之后(Final loss)的困惑度。
在SuperGLUE, XSum 和 WebQuestion上微调后的得分。
用WMT-14 EnDe从头训练后测试的得分。
现在让我们看看到底Transformer技术哪家强。
激活函数
对于全连接层的激活函数ReLU,我们可以替换成GeLU, Swish, ELU, SeLU, Sigmoid, Softplus和若干GLU(Gated Linear Unit)的变种(ReGLU, GeGLU, LiGLU)。实验结果显示,GeGLU和SwiGLU获得了最大的效果提升。
正则化
对于LayerNorm的正则化方法我们可以替换成RMS(root mean square) norm, 或者使用带有正则化效果的Rezero或者Fixup初始化方法。实验结果发现高大上的初始化方法并不起效,反而是RMS--直接把LayerNorm中对均值的偏置去除有更好的效果。
模型深度
那么全连接网络的宽度和深度哪个更重要呢?实验中我们保持总参数量不变,探究 的关系。从表格中可看出,总体上更深的全连接层更有效。
![](https://i-blog.csdnimg.cn/blog_migrate/f1eb56a3dd371696a80b0394e84d86f1.png)
词向量嵌入和参数共享
模型中一共在编码器的输入,解码器的输入和输出3次用到了 维的词向量嵌入矩阵,原始Transformer中共享了这三个嵌入矩阵的参数。这里分别实验了只共享两个输入端、只共享解码器两端,或者不共享所有词向量的参数。
另外,作者还研究了将词向量嵌入分解成低维矩阵的影响:将 维的分解为 和 的两个矩阵。在这个实验中固定编码器和解码器输入端共享参数。
最后,作者还探究了适应性输入嵌入(Adaptive input embeddings)的作用。他们将词根据频率排序,常见词使用更高维的嵌入向量。
除了词向量嵌入可以共享之外,实验中还分析了共享编码器和解码器其他参数的作用。
![](https://i-blog.csdnimg.cn/blog_migrate/aa61daecd5ec803903725f0b2edd22a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6e767e59c3784a8ce26c2612a337eb9c.png)
实验表明,参数共享或者是分解词向量嵌入矩阵对模型效果有损伤,但是将编码器和解码器的词向量嵌入解绑可以对效果有略微提升。
Softmax
在解码器最后生成序列的时候需要经过Softmax函数,实验中将其替换为其他激活函数:Adaptive softmax利用词表的不均匀分布形成的聚类分级选词从而提高运算速度。Mixture of Softmaxes:则把多个softmax函数通过不同的比例加起来,从而提高softmax部分的表达能力。实验表明Mixture of softmaxes可以提高效果但是比正常的Transformer慢了40%。
模型结构
重头戏来了,除了上述的简单改进之外,本文还对多种模型结构的改变进行了在统一环境下的实验,我们在此简略地给出各种模型的介绍,对细节感兴趣的读者可以参考原论文。
Transparent Attention18年Google AI提出,在编码器深度方向建立带权重的残差连接,从而使促进梯度的流动。
Evolved Transformer19年,Google Research提出用自动算法搜索最佳Transformer结构。本文也将搜索出的最佳结构加入实验。
Synthiesizer20年5月,Google Research又提出Synthiesizer: 用学习的方法获得注意力权重。在Synthiesizer(Random)的设定下,他们直接学习注意力权重然后用来做值向量的线性组合。
Funnel Transformer 则采用类似卷积池化的方式,逐层减少编码器中的序列长度从而更有效地得到句子编码。
Lightweight and Dynamixc convolutions 使用简化的网络代替Transformer,Lightweight Convolutions的本质可以看作是在深度维度上的卷积网络,只不过每m个频道会共享参数。而Dynamic Convolutions则是核会根据当前步输入改变的卷积网络。
![](https://i-blog.csdnimg.cn/blog_migrate/da795be41682773d82cb882b4944a29d.png)
Sparse Expert TransformersMixture of Experts (MoE) Transformer 和 Switch Transformer 都将全连接层替换成了多个小网络组成的专家们,对于不同的输入,模型会自动选择最终通过哪个网络进行最后的预测。
![](https://i-blog.csdnimg.cn/blog_migrate/f587e27b22a4afa69991b4a746a9821f.png)
Product Key Memory 同样用可选的多个小网络替换全连接层,区别在于这里最后的预测函数是k-近邻的带权平均得到。
Universal Transofrmer 中为了处理更长的序列,设计了类似序列级别循环网络
![](https://i-blog.csdnimg.cn/blog_migrate/a2c139cb2f71ed880f3afe58fb635329.png)
但出乎所有人意料的是,这些花里胡哨的改动很少有显著提高模型效果的。在这些实验中,Synthesizer,对模型效果有显著提高。Switch Transformer, mixture of experts 和 Product Key memory虽然有效但都增加了更多的模型参数。
总结一下
文章中尝试了Transformer的许多变种,他们发现这里面最有效的变化反而是那些简单而细节的变化:比如替换成GeGLU激活函数,使用RMS正则化等。而反观模型上的改进,很少的方法可以推广到所有任务中。
但当然,还有许多模型改进本文没有涉及,比如Longformer,Linformer, Performer, Nystromformer等等,那又是针对提升Transformer运算效率的另外一个故事了...
萌屋作者:Sherry。
本科毕业于复旦数院,转行NLP目前在加拿大滑铁卢大学读CS PhD。经历了从NOIer到学数学再重回CS的转变,却坚信AI的未来需要更多来数学和自认知科学的理论指导。主要关注问答,信息抽取,以及有关深度模型泛化及鲁棒性相关内容。
作品推荐:
后台回复关键词【入群】
加入卖萌屋NLP/IR/Rec与求职讨论群
后台回复关键词【顶会】
获取ACL、CIKM等各大顶会论文集!
![]()
[1] Training Deeper Neural Machine Translation Models with Transparent Attention. (https://arxiv.org/pdf/1808.07561.pdf)
[2] The Evolved Transformer. (https://arxiv.org/pdf/1901.11117.pdf)
[3] SYNTHESIZER: RETHINKING SELF-ATTENTION FOR TRANSFORMER MODELS. (https://arxiv.org/pdf/2005.00743.pdf)
[4] Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing. (https://arxiv.org/pdf/2006.03236.pdf)
[5] PAY LESS ATTENTION WITH LIGHTWEIGHT AND DYNAMIC CONVOLUTIONS. (https://arxiv.org/pdf/1901.10430.pdf)
[6] SWITCH TRANSFORMERS: SCALING TO TRILLION PARAMETER MODELS WITH SIMPLE AND EFFICIENT SPARSITY. (https://arxiv.org/pdf/2101.03961.pdf)
[7] Large Memory Layers with Product Keys. (https://arxiv.org/pdf/1907.05242.pdf)
[8] Universal transformers. (https://arxiv.org/pdf/1807.03819.pdf)
[9] GLU Variants Improve Transformer. (https://arxiv.org/pdf/2002.05202.pdf)