Transformer | All You Need Is —— Attention

别说谁变了你拦得住时间么 提交于 2020-12-05 09:26:24

点击关注上方AI深度视线”,并“星标”公号

技术硬文,第一时间送达!

AI视线


来源知乎:咫尺小厘米

https://zhuanlan.zhihu.com/p/153329513

1. self-attention代替了cnn和rnn很厉害

2. 人感觉李宏毅老师的视频也讲得挺清楚的,

https://www.bilibili.com/video/BV1JE411g7XF?p=23

原文链接:https://arxiv.org/abs/1706.03762v5

官方开源代码:https://github.com/tensorflow/tensor2tensor



1. 摘要


The dominant sequence transduction models are based on complex recurrent or convolutional neural networks that include an encoder and a decoder. The best performing models also connect the encoder and decoder through an attention mechanism.

目前占据主导的序列转换模型主要基于复杂的递归或卷积神经网络,包括编码器和解码器。表现最佳的模型还通过注意力机制连接编码器和解码器。

We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two machine translation tasks show these models to be superior in quality while being more parallelizable and requiring significantly less time to train.

我们提出了一种新的简单网络架构,即Transformer它完全基于注意力机制,没有使用循环或者卷积操作。在两个机器翻译任务上进行的实验表明,这些模型在质量上具有优势,同时具有更高的可并行性,并且所需的训练时间明显更少。

Our model achieves 28.4 BLEU on the WMT 2014 English-to-German translation task, improving over the existing best results, including ensembles, by over 2 BLEU. On the WMT 2014 English-to-French translation task, our model establishes a new single-model state-of-the-art BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small fraction of the training costs of the best models from the literature.

我们的模型在WMT 2014 English-to-German翻译任务上获得了28.4 BLEU,包括集成在内,比现有的最好结果高2 BLEU。在WMT 2014 English-to-French翻译任务上,我们的模型创建了单模型的41.8 BLEU的记录,在八卡GPU训练了3.5天之后,仅有之前最优模型的一小部分训练代价。

We show that the Transformer generalizes well to other tasks by applying it successfully to English constituency parsing both with large and limited training data.

我们展示了Transformer通过将其成功应用于具有大量训练数据和有限训练数据的英语选区解析,将其很好地应用到了其他任务。


2. 引言


递归神经网络、LSTM和GRU,已被牢固地确立为序列建模和转换问题(例如语言建模和机器翻译)中的最新技术。此后,人们一直在不断努力以扩大循环语言模型和编码器-解码器体系结构的界限。
循环模型通常沿输入和输出序列的符号位置考虑计算。将位置与计算时间中的步骤对齐,它们会根据先前的隐藏状态 和位置 的输入生成一系列隐藏状态 。这种固有的顺序性质阻止了训练内的并行化,这在较长的序列长度上变得至关重要,因为内存限制了样本之间的批处理。最近的工作已经通过分解技巧和条件计算在计算效率上取得了显着提高,同时在有条件的情况下还提高了模型性能。但是,顺序计算的基本约束仍然存在。
注意力机制已成为各种任务中引人注目的序列建模和转换模型不可或缺的一部分,允许对依赖项进行建模,而无需考虑它们在输入或输出序列中的距离。但是,除了少数情况外,在所有情况下,此类注意力机制都与循环网络结合使用。
在这项工作中,我们提出了一种Transformer,一种避免重复的模型体系结构,而是完全依赖于注意力机制来绘制输入和输出之间的全局依存关系。在八个P100 GPU上进行了长达12个小时的训练之后,该Transformer可以实现更多的并行化,并在翻译质量方面达到新的水平。

3. 背景

减少顺序计算的目标也构成了扩展神经GPU、ByteNet和ConvS2S的基础,它们全部使用卷积神经网络作为基本构建块,可以并行计算所有输入和输出位置的隐藏表示。在这些模型中,关联来自两个任意输入或输出位置的信号所需的操作数在位置之间的距离中增加,对于ConvS2S线性增长,而对于ByteNet则对数增长。这使得学习远处位置之间的依赖性变得更加困难。在Transformer中,此操作被减少为恒定的操作次数,尽管这是由于平均注意力加权位置而导致有效分辨率降低的代价,我们Multi-Head注意力抵消了这种效果。

Self-attention,有时也称为内部注意力,是一种与单个序列的不同位置相关的注意力机制,目的是计算序列的表示形式。Self-attention已成功用于各种任务中,包括阅读理解、抽象概括、文本蕴涵和学习与任务无关的句子表示。
端到端记忆网络基于循环注意力机制,而不是序列对齐的循环,并且已经证明在简单语言问答和语言建模任务中表现良好。据我们所知,Transformer是第一个完全依靠Self-attention来计算其输入和输出表示的转导模型,而无需使用序列对齐的RNN或卷积


4. 模型架构

大多数有竞争力的神经序列转导模型具有编码器-解码器结构。在此,编码器将符号表示形式 的输入序列映射到连续表示形式 的序列。给定 ,则解码器然后一次生成一个元素的符号的输出序列 。在每个步骤中,模型都是自动回归的,在生成下一个时,会将先前生成的符号用作附加输入。
Transformer遵循这种总体架构,对编码器和解码器使用堆叠式自注意力和逐点、全连接层,分别如下图的左半部分和右半部分所示。

  • Encoder and Decoder Stacks

Encoder:编码器由 个相同层的堆栈组成,每层都有两个子层(如图)。第一个是multi-head self-attention机制,第二个是简单的位置全连接的前馈网络。我们在两个子层中的每个子层周围采用残差连接,然后进行LN。也就是说,每个子层的输出是 ,其中 是由子层本身实现的功能。为了有效利用这残差连接,模型中的所有子层以及嵌入层均产生尺寸为 的输出。

Decoder:解码器还由 个相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器还插入第三子层,该第三子层对编码器堆栈的输出执行multi-head self-attention。与编码器类似,我们在每个子层周围采用残差连接,然后进行LN。我们还修改了解码器堆栈中的self-attention子层,以防止位置出现在后续位置。这种mask,加上输出嵌入被一个位置偏移的事实,确保了对位置i的预测只能依赖于小于i位置的已知输出。

  • Attention

注意力的功能可以被描述为将query和一组key-value对映射到输出,其中query、key、value和output都是向量。将output计算为value的加权总和,其中分配给每个值的权重是通过query与相应key的compatibility function来计算的。

  • Scaled Dot-Product Attention

我们称我们特殊的注意力为Scaled Dot-Product Attention,其输入有一系列queries、通道数为 的keys和通道数为 的values。我们计算query和每个key的dot product,除以 ,然后再进行softmax获得对values的权重。
在操作过程中,我们计算一系列query的attention function是同时的,打包成一个 。Keys和values也被打包成 中。矩阵计算公式为 :

两种主要的attention function是加法注意力和乘法注意力。除了除以
,乘法注意力和我们的算法是相同的。加法注意力使用具有单个隐藏层的前馈网络来计算compatibility function。虽然两者在理论上的复杂度相似,但由于可以使用高度优化的矩阵乘法代码来实现,因此dot-product的注意力在实践中要快得多并且节省空间。
尽管对于 较小的值,这两种机制的执行方式相似,但加法注意力要优于点积注意力,不需要缩放较大的 值。我们怀疑对于较大的 值,dot product会增大幅度,从而将softmax函数推入梯度极小的区域。为抵消这种影响,我们将点积缩放 。关于为什么dot product会变大,我们假定 都是独立随机变量,均值为0,方差为1。Dot product, ,其均值为0,方差为

  • Multi-Head Attention

比起单次attention function对 -dimensional keys、valuesh和queries,我们发现线性投影 次,学习不同维度的q、k和v的投影方式是很有益的。然后,在q、k和v的每个这些预计的版本上,我们并行执行attention function,从而产生 维输出值。将它们连接起来并再次投影,得到最终值,如上图所示。
Multi-Head Attention使模型可以共同关注来自不同位置的不同表示子空间的信息。对于一个注意力的head,平均会抑制这种情况。

在这项工作中,我们采用 个平行注意力层或head。对于这些中的每一个,我们使用 。由于每个head的维度减小,因此总的计算成本类似于具有全维度的single-head注意力的计算成本。

  • Applications of Attention in our Model

Transformer有以下三种使用mutil-head attention的方式:
  1. 在“编码器-解码器注意”层中,q来自先前的解码器层,而存储k和v来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置,这模仿了seq2seq模型中的典型编码器-解码器注意力机制;
  2. 编码器包含self-attention层。在Self-attention层中,所有k、v和q都来自同一位置,在这种情况下,是编码器中上一层的输出。编码器中的每个位置都可以覆盖编码器上一层中的所有位置;
  3. 类似地,self-attention允许解码器中的每个位置关注直到并包括该位置的解码器中的所有位置。我们需要防止解码器中向左流动信息,以保留自动回归的属性。我们使用带有mask的scaled dot-product attention,从而屏蔽掉一些对应的非法连接。


  • Position-wise Feed-Forward Networks

除了注意力子层之外,我们的编码器和解码器中的每个层都包含一个完全连接的前馈网络,该网络分别独立地、相同地应用于每个位置。这由两个线性变换组成,两个线性变换之间具有ReLU激活。 虽然线性变换在不同位置上相同,但是它们使用不同的参数。另一种描述方式是两个卷积,其内核大小为1。输入和输出的维数为 ,内层的维数为


  • Embeddings and Softmax

与其他序列转导模型相似,我们使用学习的嵌入将输入标记和输出标记转换为尺寸为 的向量。我们还使用通常学习的线性变换和softmax函数将解码器输出转换为预测的下一个短语概率。在我们的模型中,我们在两个嵌入层和pre-softmax线性变换之间共享相同的权重矩阵。在嵌入层中,我们将这些权重乘以
  • Positional Encoding

由于我们的模型不包含循环和卷积,因此为了使模型能够利用序列的顺序,我们必须注入一些在序列中的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加“位置编码”。位置编码的维数 与嵌入的维数相同,因此可以将两者相加。位置编码有很多选择,可以学习或者固定。
在这项工作中,我们使用不同频率的正弦和余弦函数:
其中pos是位置,i是维度。也就是说,位置编码的每个维度都选择了此函数,因为我们假设它将允许模型轻松地学习对应于正弦曲线的参量。波长形成从2π到10000·2π的几何级数。我们相对的位置,因为对于任何固定的偏移量k, 可以表示为 的线性函数。
我们还尝试使用学习的位置嵌入代替,发现这两个版本产生了几乎相同的结果。我们选择正弦曲线版本是因为它可以使模型外推到比训练过程中遇到的序列长度更长的序列长度。

5. Why slef-attention


在本节中,我们将self-attention的各个方面与循环层和卷积层进行比较,通常用于将一个可变长度的符号表示序列 映射到另一个长度相等的序列 ,带有 ,例如典型序列转导编码器或解码器中的隐藏层。为了激发我们的self-attention,我们考虑了三个愿望。
一种是每层的总计算复杂度。另一个是可以并行化的计算量,以所需的最少顺序操作数来衡量。第三个是网络中远程依赖关系之间的路径长度。在许多序列转导任务中,学习远程依赖性是一项关键挑战。影响学习这种依赖性的能力的一个关键因素是前向和后向信号必须在网络中穿越的路径长度。输入和输出序列中位置的任何组合之间的这些路径越短,学习远程依赖关系就越容易。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
如下表所示,self-attention层使用恒定数量的顺序执行的操作连接所有位置,而循环层需要 个顺序操作。计算复杂度方面,当序列长度 小于表示维数 时,self-attention层比循环层要快,这在机器翻译中由最新模型使用的句子表示形式最常见,例如词段和字节对表示形式。为了提高涉及非常长序列的任务的计算性能,可以将self-attention限制为仅考虑输入序列中以各个输出位置为中心的大小为 的邻域。这会将最大路径长度增加到 。我们计划在以后的工作中进一步研究这种方法。
内核宽度 的单个卷积层无法连接所有成对的输入和输出位置。这样做需要在连续内核的情况下堆叠 个卷积层,在扩张卷积的情况下则需要 ,从而增加了网络中任意两个位置之间最长路径的长度。卷积层通常比循环层贵 倍。可分离的卷积,然而,降低复杂度卷积等于self-attention层和逐点前馈层的组合,相当地等于 。然而,即使 ,我们在模型中采用的可分离方法的复杂性也是如此。


6. 训练 && 7.实验结果

主要关注transformer的结构设计,略过实验部分。


8.总结

在这项工作中,我们提出了Transformer,这是完全基于注意力的第一个序列转导模型,用multi-headed self-attention代替了编码器-解码器体系结构中最常用的循环层。
对于翻译任务,与基于循环层或卷积层的体系结构相比,可以大大加快Transformer的训练速度。在WMT 2014英语到德语和WMT 2014英语到法语翻译任务上,我们都达到了最高水平。在前一项任务中,我们最好的模型甚至胜过所有先前报告。
我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及除文本之外的输入和输出方式的问题,并研究局部受限的注意力机制,以有效处理大型输入和输出,例如图像、音频和视频。使epoches相继减少是我们的另一个研究目标。




潮水自会来去,但心志得坚若磐石。即便成不了那根定海神针,也至少不是那随意被拍上岸的野鬼游魂。 

长按关注 "AI深度视线"
最新人工智能、深度学习、SLAM干货奉上!






本文分享自微信公众号 - AI深度学习视线(AI_DeepSight)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!