Attention Is All Y ou Need

一、相关算法介绍

1.1 BP(反向传播算法)

  BP(反向传播算法)对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。

1.2 GRU(门控循环单元)

  GRU的输入输出结构与普通的RNN是一样的。有一个当前的输入x (t),和上一个节点传递下来的隐状态(hidden state)h(t−1) ,包含之前节点的相关信息。结合x(t)和 H^{t-1},GRU会得到当前隐藏节点的输出y(t)和传递给下一个节点的隐状态h(t)。

1.3 LSTM(长短期记忆)

  长短期记忆(Long short-term memory, LSTM)是一种特殊的 RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的 RNN,LSTM能够在更长的序列中有更好的表现。

1.4 FFNN(前馈神经网络)

  前馈神经网络采用一种单向多层结构。其中每一层包含若干个神经元。在此种神经网络中,各神经元可以接收前一层神经元的信号,并产生输出到下一层。

1.5 FCNN(全卷积神经网络)

  通常CNN网络在卷积层之后会接上若干个全连接层,将卷积层产生的特征图映射成一个固定长度的特征向量。
  以AlexNet为代表的经典CNN网络结构适合于图像级的分类和回归任务,因为它们最后都期望能得到整个输入图像的一个数值描述,比如AlexNet的ImageNet模型最后会输出一个1000维的向量来表示输入图像属于每一类的概率。
  FCNN网络,顾名思义,就是神经网络全部由卷积层构成。与经典CNN网络的区别在于,它将CNN网络中的全连接层全部用卷积层替换。  Lonjong等发表在CVP2015的论文提出了FCNN网络对图像进行像素级的分类,从而解决了语义级别的图像分割问题。与经典的CNN网络在卷积层后使用全连接层得到固定长度的特征向量进行分类(全连接层+SoftMax输出)不同,FCNN网络可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样,使它恢复到与输入图像想通的尺寸,从而可以对每个像素都产生了一个预测,同时保留了原始输入图像的空间信息,最后在上采样的特征图上进行逐像素分类。最后逐个像素计算softmax分类的损失,相当于每一个像素对应一个训练样本。
  经典的CNN神经网络得益于其多层结构,能够自动学习特征,得到输入图像的更深层次特征,对于图像分类很有帮助,但是在学习过程中会丢失一些物体的细节,不能很好地给出物体的具体轮廓,指出每个像素具体属于哪个物体,因此很难做到精确的分割。并且,传统的基础CNN的分割方法存在以下缺点:
(1)所需存储空间大
(2)计算效率低下
(3)感知区域的大小受像素块限制
  而FCNN网络则是从抽象的特征中会付出每个像素所属的类别,即从图像级别的分类进一步延伸到像素级别的分类。

1.6 AR(自回归)

  自回归预测法(Autoregression,AR)是指,利用预测目标的历史时间数列在不同时期取值之间存在的依存关系(即自身相关),建立起回归方程进行预测。

  具体说,就是用一个变量的时间数列作为因变量数列,用同一变量向过去推移若干期的时间数列作自变量数列,分析一个因变量数列和另一个或多个自变量数列之间的相关关系,建立回归方程进行预测。

  再通俗一点讲,就是用过去时间点的数据预测未来时间点的数据。

二、Transformer

2.1 综述

  传统的机器翻译模型一般是结合RNN和Attention。虽然RNN+Attention的组合取得了不错的效果,但依然存在一些问题。由于RNN是序列依赖的模型,难以并行化,训练时间较长;且当句子很长时由于梯度消失难以捕捉长距离依赖关系。虽然相继推出的LSTM和GRU能一定程度上缓解梯度消失的问题,但这个问题依然存在。
  Transformer的思想很激进,它完全抛弃了RNN,只保留Attention。RNN无法并行化的根本原因是它的正向和反向传播是沿着句子方向(即水平方向),要想实现并行化,肯定不能再走水平方向了。于是,Transformer完全抛弃水平方向的RNN,而是在垂直方向上不断叠加Attention。由于每一层的Attention计算只和其前一层的Attention输出有关,所以当前层的所有词的Attention可以并行计算,互不干扰,这就使得Transformer可以利用GPU进行并行训练。
  Transformer的结构如下图所示。end2end的机器翻译模型一般都是Encoder+Decoder的组合,Encoder对源句子进行编码,将编码信息传给Decoder,Decoder翻译出目标句子。Transformer同样如此,下图左边即为Encoder,右边即为Decoder。在这里插入图片描述
  Encoder的每一层有两个子层组成,包括Self-Attention和Feed-forward neural network (FFNN)。FFNN就是常规的全连接网络。

2.2 Self Attention

  Encoder Self-Attention的结构如下图所示,由于此时是Encoder阶段,对于每个词,都能看到句子中所有其他的词(对应到RNN里面就是可以用双向的RNN)。假设我们想要抽取第二个词"represent"的特征表示。首先,对第二个词的词向量 e 2 e_2 e2进行线性变换,即乘以矩阵 m a t m u l Q matmul_Q matmulQ,得到Query,这就是标准Attention中的Query。其次,对周围所有的其他词,比如 e 1 e_1 e1,也进行线性变换,变换矩阵为 m a t m u l K matmul_K matmulK,得到很多的Key。然后,Query和所有Key做点积,并用softmax归一化,得到了Query在周围词上的Attention score distribution。接着,周围词乘以另一个线性变换矩阵 m a t m u l V matmul_V matmulV,变换为Value。最后,Value和Attention score distribution进行加权求和,并加上 e 2 e_2 e2自己,送给FFNN。图中右下角的公式中的分母只是个缩放因子。
  回顾一下,一个标准的Attention包括三个向量:Q、K、V,其中Q为用来查询的Query,K表示被查询的Key,V表示被查询的Value。其中的K和V来源相同,只是经过了不同的变换。形象描述就是:计算Q在K上分配的注意力 Q K T QK^T QKT,然后从V中取出这部分注意力的值 s o f t m a x ( Q K T d k ) softmax(\frac{QK^T}{\sqrt{d_k}}) softmax(dk QKT)
在这里插入图片描述
  Self-Attention的优点。因为每个词都和周围所有词做attention,所以任意两个位置都相当于有直连线路,可捕获长距离依赖。而且Attention的可解释性更好,根据Attention score可以知道一个词和哪些词的关系比较大。易于并行化,当前层的Attention计算只和前一层的值有关,所以一层的所有节点可并行执行self-attention操作。计算效率高,一次Self-Attention只需要两次矩阵运算,速度很快。
  Transformer的Decoder部分每一层有三个子层组成,包括Self-Attention、Encoder-Decoder Attention和FFNN。Decoder的Self-Attention如下图所示,和Encoder的Self-Attentoin非常像,只不过当要Decoder第二个词时,用黑框蒙住了第三、四个词的运算(设置值为-1e9)。因为对于机器翻译来说,Encoder时能看到源句子所有的词,但是翻译成目标句子的过程中,Decoder只能看到当前要翻译的词之前的所有词,看不到之后的所有词,所以要把之后的所有词都遮住。所以这个Attention也叫Masked Self-Attention。这也说明Transformer只是在Encoder阶段可以并行化,Decoder阶段依然要一个个词顺序翻译,依然是串行的。
在这里插入图片描述
  Decoder Self-Attention只用到了翻译出来的目标句子的前缀信息,还没用到源句子的信息,这部分就在Encoder-Decoder Attention中。前面说了对于源句子,通过Encoder的Self-Attention+FFNN,源句子的每个词都有一个输出向量,这些输出向量作为Encoder-Decoder Attention的Keys和Values,而从目标句子当前要翻译的词的Decoder Self-Attention出来的向量就是Encoder-Decoder Attention的Query。从下图可以看到,Encoder上面出来指向右边Multi-Head Attention的两个箭头就是Keys和Values,而从下面出来指向Multi-Head Attention的一个箭头就是Query。Encoder-Decoder Attention的作用就是看看当前要翻译的词在源句子中各个词上的注意力情况。在这里插入图片描述
  Attention机制是位置无关的,因为对于每个词,它都和句子中的所有词直连求Attention score,跟词在句子中的位置没有关系。但是句子作为一种线性结构,词在句子中的顺序对句子的含义至关重要。为了考虑词的位置信息,词在输入Attention前,把词向量和词在句子中的位置Positional Encoding加起来,得到一个新的向量,输入到Attention中,如上图所示。这个Positional Encoding可通过公式计算得到,这里不展开。

2.3 Multi-Head

  上图的Attention前面都有一个修饰词Multi-Head,也就是下图的Parallel attention heads。前面提到一个标准的Attention包括三个向量Q、K、V,它们分别由原始的查询向量和特征向量乘以矩阵 m a t m u l Q matmul_Q matmulQ m a t m u l K matmul_K matmulK m a t m u l V matmul_V matmulV得到。如果一个词在计算Attention时,选用多个不同的 m a t m u l Q matmul_Q matmulQ m a t m u l K matmul_K matmulK m a t m u l V matmul_V matmulV,得到的Attention输出向量也就不同了,这正好可以用来表示一个词在句子中的不同作用。比如句子“华为是一家中国的公司”中的“华为”,它的语义是一家公司,它在句子中的成分是主语,也就是说一个词至少有其语义信息和句法信息,如果只用一套 m a t m u l Q matmul_Q matmulQ m a t m u l K matmul_K matmulK m a t m u l V matmul_V matmulV,则只能得到一种含义,如果设置多套 m a t m u l Q matmul_Q matmulQ m a t m u l K matmul_K matmulK m a t m u l V matmul_V matmulV,则能提取到这个词更多的信息。于是,在对每个词进行Attention时,都会设置多套 m a t m u l Q matmul_Q matmulQ m a t m u l K matmul_K matmulK m a t m u l V matmul_V matmulV,提取多个Attention输出向量,然后拼接起来,这就是Multi-Head Attention,或者说Parallel attention heads。我个人理解多套 m a t m u l Q matmul_Q matmulQ m a t m u l K matmul_K matmulK m a t m u l V matmul_V matmulV相当于CNN中不同的kernal,相当于不同的特征提取器。在这里插入图片描述

三、训练

3.1 Training Data and Batching(训练数据和batch)

  我们在标准的WMT 2014英语-德语数据集上进行了训练,其中包含约450万个句子对。 这些句子使用byte-pair编码[3]进行编码,源语句和目标语句共享大约37000个词符的词汇表。 对于英语-法语翻译,我们使用大得多的WMT 2014英法数据集,它包含3600万个句子,并将词符分成32000个word-piece词汇表[38]。 序列长度相近的句子一起进行批处理。 每个训练批次的句子对包含大约25000个源词符和25000个目标词符。

3.2 Hardware and Schedule(硬件和时间)

  我们在一台具有8个 NVIDIA P100 gpu的机器上训练我们的模型。对于paper中描述的使用超参数的基础模型,每个训练步骤大约需要0.4秒。我们对基础模型进行了总共100000步或12小时的训练。对于我们的大型模型(见表3的底线),步进时间为1.0秒。大模型 使用了30万步(3.5天)的训练。

3.3 Optimizer(优化器)

  我们使用Adam优化器[20],其中β1 = 0.9, β2 = 0.98及ϵ= 10-9。 我们根据以下公式在训练过程中改变学习率:

KaTeX parse error: Expected ‘EOF’, got ‘&’ at position 77: …_steps^{−1.5})&̲emsp; &ems…

这对应于在第一次warmup_steps 步骤中线性地增加学习速率,并且随后将其与步骤数的平方根成比例地减小。 我们使用w a r m u p _ s t e p s = 4000 warmup_steps = 4000warmup_steps=4000。

3.4 Regularization(正则化)

  训练中我们采用三种正则化:

  Residual Dropout 我们在对每个子层的输出上执行dropout操作,这个操作在additive操作(子层的输出加上子层的输入)和 normalized操作之前。 此外,在编码器和解码器堆栈中,我们将丢弃应用到嵌入和位置编码的和。 对于基础模型,我们使用 P d r o p P_drop Pdrop = 0.1丢弃率。
在这里插入图片描述
  Label Smoothing 在训练过程中,我们采用了值ε l s = 0.1 ε_{ls} = 0.1ε
ls =0.1[36]的标签平滑。这会影响ppl,因为模型学习到了更多的不确定性,但提高了准确率和BLEU评分。

四、结果

4.1 Machine Translation(机器翻译)

在WMT 2014英语-德语翻译任务中,大型Transformer模型(表2中的Transformer (big))比以前报道的最佳模型(包括整合模型)高出2个以上的BLEU评分,以28.4分建立了一个全新的SOTA BLEU分数。 该模型的配置列在表3的底部。 在8 个P100 GPU上花费3.5 天进行训练。 即使我们的基础模型也超过了以前发布的所有模型和整合模型,且训练成本只是这些模型的一小部分。

我们的模型在 WMT2014 英语-德语的翻译任务上取得了28.4的BLEU评分。在现有的表现最好模型的基础上,包括整合模型,提高了2个BLEU评分。
  
  在WMT 2014英语-法语翻译任务中,我们的大型模型的BLEU得分为41.0,超过了之前发布的所有单一模型,训练成本低于先前最先进模型的1 ∕ 4 。 英语-法语的Transformer (big) 模型使用P d r o p = 0.1 P_{drop} = 0.1P
drop=0.1,而不是0.3。

对于基础模型,我们使用的单个模型来自最后5个checkpoints的平均值,这些checkpoints每10分钟保存一次。 对于大型模型,我们对最后20个checkpoints进行了平均。 我们使用beam search,beam大小为4 ,长度惩罚α = 0.6 [38]。 这些超参数是在开发集上进行实验后选定的。 在推断时,我们设置最大输出长度为输入长度+50,但在条件允许时会尽早终止[38]。

表2总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型体系结构进行了比较。 我们通过将训练时间、所使用的GPU的数量以及每个GPU的持续单精度浮点能力的估计相乘来估计用于训练模型的浮点运算的数量5 。

4.2 Model Variations(模型变体)

为了评估Transformer不同组件的重要性,我们以不同的方式改变我们的基础模型,观测在开发集newstest2013上英文-德文翻译的性能变化。 我们使用前一节所述的beam search,但没有平均checkpoint。 我们在表中列出这些结果 3.

在表3的行(A)中,我们改变attention head的数量和attention key和value的维度,保持计算量不变,如3.2.2节所述。 虽然只有一个head attention比最佳设置差0.9 BLEU,但质量也随着head太多而下降。

在表3行(B)中,我们观察到减小key的大小d k d_kd
k

会有损模型质量。 这表明确定兼容性并不容易,并且比点积更复杂的兼容性函数可能更有用。 我们在行(C)和(D)中进一步观察到,如预期的那样,更大的模型更好,并且dropout对避免过度拟合非常有帮助。 在行(E)中,我们用学习到的positional encoding[9]来替换我们的正弦位置编码,并观察到与基本模型几乎相同的结果。
在这里插入图片描述

4.3 English Constituency Parsing(英文选区分析)

为了评估Transformer是否可以扩展到其他任务,我们进行了英语选区解析的实验。这项任务提出特别的挑战:输出受到很强的结构性约束,并且比输入要长很多。 此外,RNN序列到序列模型还没有能够在小数据[37]中获得最好的结果。

我们用dmodel= 1024 在Penn Treebank[25]的Wall Street Journal(WSJ)部分训练了一个4层的transformer,约40K个训练句子。 我们还使用更大的高置信度和BerkleyParser语料库,在半监督环境中对其进行了训练,大约17M个句子[37]。 我们使用了一个16K词符的词汇表作为WSJ唯一设置,和一个32K词符的词汇表用于半监督设置。

我们只在开发集的Section 22 上进行了少量的实验来选择dropout、attention 和residual(第5.4节)、learning rates和beam size,所有其他参数从英语到德语的基础翻译模型保持不变。在推断过程中,我们将最大输出长度增加到输入长度+300。 对于WSJ和半监督设置,我们都使用beam size = 21 和α = 0.3 。

表4中我们的结果表明,尽管缺少特定任务的调优,我们的模型表现得非常好,得到的结果比之前报告的Recurrent Neural Network Grammar [8]之外的所有模型都好。

与RNN序列到序列模型[37]相比,即使仅在WSJ训练40K句子组训练时,Transformer也胜过BerkeleyParser [29]。

五、结论

在这项工作中,我们提出了Transformer,第一个完全基于attention的序列转换模型,用multi-headed self-attention取代了encoder-decoder架构中最常用的recurrent layers。

对于翻译任务,Transformer比基于循环或卷积层的体系结构训练更快。 在WMT 2014英语-德语和WMT 2014英语-法语翻译任务中,我们取得了最好的结果。 在前面的任务中,我们最好的模型甚至胜过以前报道过的所有整合模型。

参考文章
transformer详解
self attention
原文翻译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值