Transformer

论文:《Attention Is All Y ou Need》

论文链接:1706.03762.pdf (arxiv.org)icon-default.png?t=M7J4https://arxiv.org/pdf/1706.03762.pdf

代码链接:GitHub - huggingface/transformers: 🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. - GitHub - huggingface/transformers: 🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.https://github.com/huggingface/transformers李宏毅讲解视频:
第4讲-自注意力机制 (Self-attention) (上)_哔哩哔哩_bilibiliicon-default.png?t=M7J4https://www.bilibili.com/video/BV1m3411p7wD?p=26&vd_source=9eb01910d747b1607c1167137cb7ebb9第5讲-Transformer-1_哔哩哔哩_bilibiliicon-default.png?t=M7J4https://www.bilibili.com/video/BV1m3411p7wD?p=32&vd_source=9eb01910d747b1607c1167137cb7ebb9

 李沐论文精读:

Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibiliicon-default.png?t=M7J4https://www.bilibili.com/video/BV1pu411o7BE?spm_id_from=333.999.0.0&vd_source=9eb01910d747b1607c1167137cb7ebb9

参考:Attention Is All You Need论文阅读笔记 - 知乎 (zhihu.com)icon-default.png?t=M7J4https://zhuanlan.zhihu.com/p/440365294

摘要

之前采用:主流序列转录模型基于复杂的循环神经网络RNN或卷积神经网络CNN架构,这些神经网络包含一个编码器和一个解码器。 性能最好的模型还通过attention机制将编码器和解码器连接起来。

本文提出:一种新的简单的网络架构Transformer,仅基于attention机制并完全避免循环和卷积,Transformer模型在质量上更加优越,并行性更好并且需要的训练时间显著减少。

1 Introduction

循环模型通常是对输入和输出序列的符号位置进行因子计算。 通过在计算期间将位置与步骤对齐,它们根据前一步的隐藏状态ht-1和输入产生位置t的隐藏状态序列ht。这种固有的顺序特性阻碍样本训练的并行化,这在更长的序列长度上变得至关重要,因为有限的内存限制样本的批次大小。尽管我们后面做出了很多的改进,但是,顺序计算的基本约束依然存在。

RNN能够有效处理时序信息的关键:给出一个序列,从左向右一步一步处理。处理句子时,对第t个词输出为 h_t(隐藏状态),h_t 由 h_{t-1}(历史信息)和当前词 t 计算,这样就可以将前面学到的历史信息通过 h_{t-1} 放到当下。但问题是:难以并行,当时序比较长的时候,容易丢掉前面的时序信息,即使用一个大的 h_t 存历史信息,每一个计算步都需要存储,内存开销大。

但是在各种任务中,attention机制已经成为序列建模和转导模型不可或缺的一部分,它可以建模依赖关系而不考虑其在输入或输出序列中的距离。 多数情况,这种attention机制都与循环网络一起使用。

卷积可以做到多输出通道的效果,一个输出通道可以认为是它可以识别不一样的模式。提出Multi-Head Attention机制模拟 CNNs多通道输出的效果。Transformer的attention mechanism每一次看到所有的像素,一层能够看到整个序列。

因此,我们提出了Transformer架构,这种模型架构避免循环并完全依赖于attention机制来绘制输入和输出之间的全局依赖关系, Transformer还允许进行更多的并行化。

2 Background

主流的序列转换模型都是基于复杂的循环神经网络或卷积神经网络,且都包含一个encoder和一个decoder。表现最好的模型还通过attention机制把encoder和decoder联接起来。减少序列计算的目标也成就了 Extended Neural GPU,ByteNet,和ConvS2S的基础,它们都使用了卷积神经网络作为基础模块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将来自两个任意输入或输出位置的信号关联起来所需的操作数,随置间的距离而增长,ConvS2S为线性增长,ByteNet为对数增长。这使得学习远距离位置之间的依赖性变得更加困难。在Transformer中,这种情况被减少到了常数次操作,虽然代价是由于平均注意力加权位置信息降低了有效分辨率,事实上我们可以通过使用多头注意力来抵消这种影响。

Transformer是第一个完全依靠self-attention来计算输入和输出表示而不使用序列对齐RNN或卷积的转导模型。

3 Model Architecture

模型结构如下图所示:

如上图所示,Transformer本质上仍然是一个Seq2Seq模型,一个encoder-decoder结构,左边的ecoder读进输入,右边的decoder得到输出。从图中可以看出该模型的基本结构是由self-attention和Feed Forward NN堆叠而成。

(1)Inputs:Input Embedding
         输入经过一个 Embedding层,一个词进来之后表示成一个向量,得到的向量值和 Positional Encoding 相加。
(2)Encoder 的核心架构:
         Nx:N个 Transformer 的 block 叠在一起。
         Transformer 的block:
        1)Multi-Head attention。
        2)Add & Norm: 残差连接 + Layer-normalization。
        3)Feed Forward: 前馈神经网络 MLP。
        4)encoder 的输出 作为 decoder 的输入。
   decoder 多了一个 Masked Multi-Head Attention,decoder的输出进入一个 Linear 层,做一个 softmax,得到最后输出。
(3)Encoder 结构:重复6个layer
         每个layer有2个sub-layers(子层):
        1)multi-head self-attention。
        2)MLP。
(5)每个 sub-layer 的输出做残差连接,然后再LayerNorm,即LayerNorm(x+Sublayer(x))
Sublayer(x)指self-attention或者MLP。
(6)残差连接residual connections需要输入输出维度一致,不一致则需要做投影。为简单起见,固定每一层的输出维度dmodel=512。
(7)Decoder 是auto-regressive自回归。当前时刻的输入集是之前一些时刻的输出。在做预测时,decoder不能看到之后时刻的输出。但attention mechanism 每一次能看到完整的输入,所以要避免这个情况的发生。在decoder训练的时候,在预测第t个时刻的输出的时候,decoder不应该看到t时刻以后的那些输入。它的做法是通过一个带掩码 masked 的注意力机制,保证训练和预测时的行为一致。

大部分神经序列转导模型都有一个编码器-解码器结构。 这里,编码器映射一个用符号表示的输入序列(x1,...,xn) 到一个连续的表示z = (z1,...,zn)。 根据z,解码器生成符号的一个输出序列(y1,...,ym) ,一次一个元素。 在每一步中,模型都是自回归的,当生成下一个时,使用先前生成的符号作为附加输入

3.1 Encoder and Decoder Stacks

encoder:

文中使用的encoder由N(N=6)个完全相同的layer堆叠而成,每层有俩个子层,第一层是multi-head self-attention机制,第二层是一个简单的、位置全连接的前馈神经网络。在每个sub-layer我们都模拟了残差网络,每个sub-layer的输出都是:

其中Sublayer(x) 表示Sub-layer对输入 x 做的映射,为了确保连接,所有的sub-layers和embedding layer输出的维数都相同 dmodel=512 。

decoder:

decoder同样是6层,但是每层包含3个子层:

        1)第一个是Masked multi-head self-attention,也是计算输入的self-attention,但是因为是生成过程,因此在时刻 i 的时候,大于 i 的时刻都没有结果,只有小于 i 的时刻有结果,因此需要做Mask。

        2)FFNN,与Encoder相同。

        3)对encoder-decoder进行attention计算。

3.2 Attention

在Transformer中使用的Attention是Scaled Dot-Product Attention,对于每个单词向量,都会计算出三个不同的向量,分别是query,keys,values。这些向量都是通过模型参数(三个不同的映射)计算得出来的。

Scale操作是为了防止内积过大,通过该操作更利于收敛。Mask是可选的操作,如果能够获得所有时刻的输入(K,V),那么就不使用Mask;如果是不能获取到,那么就需要使用Mask。

如果只对Q、K、V做一次这样的权重操作是不够的,这里提出了Multi-Head Attention,操作包括:

        1)使用h个进行线性变换,得到h个不同的Q,K,V矩阵。

        2)采用Scaled Dot-Product Attention计算出结果。

        3)将得到的结果进行合并且进行线性变换。

 总结来说公式如下:

 其中,映射为参数矩阵{W_{i}}^Q\epsilon \mathbb{R}^{d_{model}\times d_k}{W_{i}}^K\epsilon \mathbb{R}^{d_{model}\times d_k}{W_{i}}^V\epsilon \mathbb{R}^{d_{model}\times d_v}{W_{i}}^O\epsilon \mathbb{R}^{d_{model}\times hd_v}。在论文中取 d_{model} = 512, 表示每个时刻的输入维度和输出维度,h = 8 表示8次Attention操作,d_k = d_v = d_{model/h} = 64 表示经过线性变换之后、进行Attention操作之前的维度。那么进行一次Attention之后输出的矩阵维度是  , 然后进行h = 8次操作合并之后输出的结果是 ,因此输入和输出的矩阵维度相同。

3.3 Position-wise Feed-forward Networks

在进行了Attention操作之后,encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出:

虽然不同位置的线性变换是相同的,但它们每一层使用不同的参数。另一种描述方法是两个内核大小为1的卷积。输入输出维度为 d_model = 512,内层维度为 d_{ff} = 2048

3.4  Embeddings and Softmax

与其他序列转导模型类似,我们使用学习过的嵌入将输入标记和输出标记转换为维度d_model的向量。我们还使用常用的线性变换和softmax函数来将解码器输出转换为预测的下一个令牌概率。在我们的模型中,我们在两个嵌入层之间共享相同的权值矩阵和前softmax线性变换,类似于[30]。在嵌入层中,我们将权重乘上\sqrt{d_{model}}。 

3.5 Positional Encoding

由于我们的模型不包含循环和卷积,为了让模型利用序列的顺序,我们必须注入序列中关于词符相对或者绝对位置的一些信息为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码和嵌入的维度dmodel相同,所以它们俩可以相加。有多种位置编码可以选择,例如通过学习得到的位置编码和固定的位置编码。在这项工作中,我们使用不同频率的正弦和余弦函数: 

其中pos 是位置,i 是维度。 也就是说,位置编码的每个维度对应于一个正弦曲线这些波长形成一个几何级数,从2π 到10000 *2π。 我们选择这个函数是因为我们假设它允许模型很容易学习对相对位置的关注,因为对任意确定的偏移k,PEpos+k可以表示为PEpos的线性函数。 我们还使用学习到的位置嵌入进行了试验,发现这两个版本产生几乎相同的结果。 我们选择了正弦曲线,因为它可以允许模型推断比训练期间遇到的更长的序列。

4 Why Self-Attention

论文将self-attention layers与常用的recurrent layers和convolutional layers进行各方面的比较,比较的方式是将一个可变长度的符号表示序列 (x_1,\cdot \cdot \cdot ,x_n) 映射到另一个等长序列(z_1,\cdot\cdot\cdot,z_n) 。然后从下面三个指标分析:

(1)每一层的计算复杂度;
(2)能够被并行的计算,用需要的最少的顺序操作的数量来衡量;
(3)网络中长距离依赖关系之间的路径长度。

结果如下表所示:

 5 Training

该训练在标准的WMT 2014英语-德语数据集上进行了训练,其中包含约450万个句子对,使用Adam优化器,其中 \beta _1 = 0.9 , \beta _2 = 0.98 , \epsilon = 10^{-9} 。在整个训练过程中,我们根据公式改变学习率:

其中,warmup_steps可理解为耐心系数。

实验结果如下:

如上图所示,Transformer比之前提出的最好的模型的BLEU高出2.0以上,达到28.4分。

为了评估Transformer不同组件的重要性,实验以不同的方式改变基础模型,观测在开发集newstest2013上英文-德文翻译的性能变化,结果如下:

最后,为了评估Transformer是否可以扩展到其他任务,论文进行了英语选区解析的实验。这项任务提出特别的挑战:输出受到很强的结构性约束,并且比输入要长很多。 结果表明,尽管缺少特定任务的调优,论文提出的模型表现得非常好,得到的结果比之前报告的Recurrent Neural Network Grammar之外的所有模型都好。

 6 Conclusion

 本论文主要是集中阐述了一个Transformer模型架构,它使用attention完全代替了传统的RNN和CNN结构,它完全基于注意机制,并且在两个机器翻译任务上的实验表明,这种模型在质量上优于其他模型,同时具有更高的并行性和更少的训练时间。

最后

看完Transformer的结构之后,有些问题需要进一步探讨,结构中的Residual部分的输入顺序和方式对实验结果有何影响,是否能进一步重复堆叠相关模块来提高准确率等等。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值