Attention Is All Your Need论文笔记

Abstract

主要的序列转导模型基于包括编码器和解码器的复杂递归或卷积神经网络。表现最好的模型也通过注意机制连接编码器和解码器。作者提出了一个新的简单的网络结构,变压器,完全基于注意机制,完全免除了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上是优越的,同时具有更好的并行性,并且需要更少的训练时间。

1 Introduction

针对nlp里的机器翻译问题,提出了一种被称为”Transformer”的网络结构,基于注意力机制。文章提出,以往nlp里大量使用RNN结构和encoder-decoder结构,RNN及其衍生网络的缺点就是慢,问题在于前后隐藏状态的依赖性,无法实现并行,而文章提出的”Transformer”完全摒弃了递归结构,依赖注意力机制,挖掘输入和输出之间的关系,这样做最大的好处是能够并行计算了。

2 Background

所有使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。将来自两个任意输入或输出位置的信号联系起来所需的运算数量随着位置之间的距离而增加,对于ConvS2S是线性的,对于ByteNet是对数的。这使得学习遥远位置之间的依赖关系更加困难。在Transformer中,这被减少到恒定的操作次数,尽管代价是由于平均注意力加权位置而降低了有效分辨率,可以使用多头注意力抵消。

Slef-attention是一种将单个序列的不同位置联系起来的注意机制,目的是计算序列的表示。

端到端记忆网络是基于一种循环注意机制,而不是序列对齐的循环,并已被证明在简单语言问答和语言建模任务中表现良好。Transformer是第一个完全依靠自我注意来计算其输入和输出表示的转导模型,而不使用序列比对的RNNs或卷积。

3 Model Architecture

大多数自然语言转换模型都包含一个encoder-decoder结构,模型的输入是一个离散符号序列(symbol)x=(x_1,x_2,\dots,x_n),encoder负责将它映射成连续值序列z=(z_1,z_2,\dots,z_n)。而给定z,decoder负责生成一个输出符号序列y=(y_1,y_2,\dots,y_m)。模型是自回归的,即之前生成的输出会作为额外的输入,用于生成下一个输出。

Transformer遵循编码器和解码器均采用堆叠式自我关注层和点状完全连接层。

3.1 Encoder and Decoder Stacks

Encoder:Transformer模型的Encoder由6个基本层堆叠起来,每个基本层包含两个子层,第一个子层是一个注意力机制,第二个是一个全连接前向神经网络。对两个子层都引入了残差边以及layer normalization。为了方便残差连接,模型中的所有子层以及嵌入层都产生尺寸d_{model} = 512的输出。

Decoder:解码器也由N = 6个相同的层组成。除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对encoder的输出执行多头注意力。与encoder类似,在每个子层周围使用残差连接,然后进行层标准化。我们还修改encoder中的自我关注子层,以防止位置影响后续位置。这种掩码,加上输出嵌入偏移一个位置的事实,确保了位置i的预测只能依赖于小于i的位置处的已知输出。

3.2 Attention

注意函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出计算为值的加权和,其中分配给每个值的权重由查询与相应键的兼容函数计算。

3.2.1 Scaled Dot-Product Attention

输入包含d_k维的query和key,以及d_v维的value。通过计算query和各个key的点积,除以\sqrt{d_k}归一化,然后经过softmax激活变成权重,最后再乘value。点积注意力机制的优点是速度快、占用空间小。

 3.2.2 Multi-Head Attention

用h(本文取8)个不同的线性变换分别将d_{model}维的key、value和query映射成d_k维、d_k维和d_v维,然后再代入注意力机制,产生总共h\times d_v维输出,然后拼起来,再用一个线性变换得到最终的输出。

其中h=8,即8个head,d_k = d_v = d_{model}/h = 64. 

3.2.3 Applications of Attention in our Model

  • 在“encoder-decoder attention”层中,query来自前一个decoder层,而key和value是encoder的输出。这允许decoder的每个位置都去关注输入序列的所有位置。
  • encoder包含self-attention层,在self-attention层中所有的key、value和query都来自前一层的encoder。这样encoder的每个位置都能去关注前一层encoder输出的所有位置。
  • decoder包含self-attention层,decoder中的self-attention层允许decoder中的每个位置关注decoder中的所有位置,直到并包括该位置。为了保持decoder的自回归特性,需要防止decoder中的左向信息流。通过屏蔽(设置为负无穷)softmax输入中对应于非法连接的所有值来实现这个内标度点积注意。

3.3 Position-wise Feed-Forward Networks

 这是一个 Position-wise 前向神经网络,encoder和decoder的每一层都包含一个前向神经网络,激活函数顺序是线性、RELU、线性。

虽然线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。描述这种情况的另一种方式是两个内核大小为1的卷积。输入和输出的维度是d_{model}=512,内层的维度d_{ff}=2048

3.4 Embeddings and Softmax

类似于其他序列转导模型,使用学习嵌入将输入标记和输出标记转换为维度为d_{model}的数据模型的向量。还使用通常学习的线性变换和softmax函数将decoder输出转换为预测的下一个令牌概率。在两个嵌入层和预softmax变换之间共享相同的权重矩阵。在嵌入层中,我们将这些权重乘以\sqrt{d_{model}}

3.5 Positional Encoding

由于本文的模型结构没有使用任何递归结构或卷积结构,为了让模型能利用输入序列的顺序信息,必须引入某种能表达输入序列每个部分的绝对或相对位置的信息才行。文章采取的方法是位置编码(positional encoding),在送入encoder和decoder之前,先对输入进行编码,编码后的向量维度是d_{model}。具体来说,采用正弦和余弦函数进行编码。

其中,pos是位置,i是维度。也就是说,位置编码的每个维度对应于正弦曲线。波长形成从2π到10000⋅2π的几何级数。选择了这个函数,因为我们假设它允许模型容易地学习相对位置,因为对于任何固定偏移k,PE_{pos+k}可以表示为PE_{pos}的线性函数。

4 Why Self-Attention

从三个方面去对比self-attention和递归结构、卷积结构的优劣性,首先是每一层的计算复杂度,其次是能够被并行的计算量,最后是网络中长期依赖的路径长度。对比显示,self-attention表现最好。\

这里写图片描述

5 Training

训练数据使用WMT English-German数据集,包含450w对语句。句子都被编码过了,使用了一个大小约37000个token的字典。样本被分为若干个batch,每个batch大概25000个token,每个batch中的句子长度保持基本一致。硬件上使用了8块GPU。Optimizer使用了Adam。过拟合方面使用了dropout和Label Smoothing。

6 Results

不论是英语-德语还是英语-法语的翻译任务,对比之前的一些模型,本文提出的模型都达到更好的BELU值,同时Training Cost也最低。

本文开源代码

https://github.com/tensorflow/tensor2tensor

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值