NIPS 2017 | Attention is all you need | Transformer 阅读笔记(部分翻译)

Transformer提出了一种全新的基于注意力机制的网络架构,彻底摒弃了RNN和卷积,实现高效的并行计算和全局依赖捕捉。论文介绍了自注意力机制、多头注意力及其实现细节,展示了Transformer在机器翻译中的卓越性能和模型简化带来的优势。

Attention is all you need

Author Unit: Google Brain, Google Research, University of Toronto

Authors: Ashish Vaswani ∗ ^* , Noam Shazeer*, Niki Parmar*, Jakob Uszkoreit*, Llion Jones*, Aidan N. Gomez* † ^† , Łukasz Kaiser ∗ ^∗ , Illia Polosukhin ∗ ‡ ^{∗ ‡}

Code: https://github.com/ tensorflow/tensor2tensor

Conference: 31st Conference on Neural Information Processing Systems (NIPS 2017), Long Beach, CA, USA.

Email: mailto:avaswani@google.com, mailto:noam@google.com, mailto:nikip@google.com, mailto:usz@google.com, mailto:llion@google.com, mailto:aidan@cs.toronto.edu, mailto:lukaszkaiser@google.com, mailto:illia.polosukhin@gmail.com

Paper address: https://papers.nips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html

bilibili_limu: https://www.bilibili.com/video/BV1pu411o7BE?from=search&seid=8901226919527045603&spm_id_from=333.337.0.0

Abstract

我们提出了一种新的简单的网络架构,Transformer,它仅基于注意机制,完全抛弃了递归和卷积。

1 Introduction

之前主流的RNN:LSTM[12]、GRU[7];很多人努力推动RNN和编码器-解码器架构的边界(boundary)[31, 21, 13]。

RNN依据本身的序列性,虽然做到了可以记录历史信息,但是不能很好的并行化,存在比较强的顺序计算约束。

Attention已经用在了很多RNN与Transduction模型中,它可以允许对依赖项建模,而不考虑它们在输入或输出序列中的距离[2,16](可以将编码器的信息很好的传至解码器)。

Transformer,完全依赖于注意力机制来绘制输入与输出的全局依赖性。由于用了Attention,可以很好的做到并行化。

2 Background

这一章对应了 相关工作 的部分

在Transformer中,学习不同位置的依赖关系被减少到了常数级的操作(若是卷积的话,基本无法学到左上角的像素和右下角的像素之间的依赖),尽管由于平均注意力加权位置(averaging attention-weighted positions)降低了有效分辨率(effective resolution),我们使用Multi-Head Attention来抵消这一影响(在此对应了conv中的多个输出),如第3.2节所述。

Self-attention,有时也称为intra-attention,是一种将单个序列的不同位置联系起来以计算序列表征的注意机制。[4, 22, 23, 19].

End-to-end memory networks是基于重复注意机制而不是顺序排列的重复,并已被证明在简单语言问答和语言建模任务[28]中表现良好。

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

3 Model Architecuture

编码器将输入序列 ( x 1 , . . . , x n ) (x_1, ..., x_n) (x1,...,xn) 映射到连续表征的序列 z = ( z 1 , . . . , z n ) z= (z_1, ..., z_n) z=(z1,...,zn)。 给定 z,解码器生成一个输出序列 ( y 1 , . . . , y m ) (y_1, ..., y_m) (y1,...,ym),一次一个元素。 在每一步,模型都是自回归的 [9](auto-regressive),即在生成下一个时,将先前生成的符号作为附加输入使用。

Transformer遵循这种总体架构,为编码器和解码器使用了堆叠的self-attention层和point-wise的完全连接层,分别如图1的左、右两部分所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqglzdlD-1638157618947)(Attention%20is%20all%20you%20need%203f248429d0a24c1183e15b3addbb892e/Attention_is_all_you_need_fig1.png)]

3.1 Encoder and Decoder Stacks

Encoder: 编码器由 N=6 个相同层的堆栈组成。每层有两个子层。 第一个是多头自注意力机制,第二个是简单的、position-wise fully connected feed-forward network( 其实就是MLP )。 我们在两个子层的每一个周围都使用了一个残差连接 [10],然后是层归一化 Layer normalization[1]。 即每个子层的输出是LayerNorm(x+ Sublayer(x)),其中Sublayer(x)是子层自己实现的函数。 为了促进这些残差连接,模型中的所有子层以及embedding层产生维度 d m o d e l = 512 d_{model}=512 dmodel=512 的输出。( 输入x是512维,为了方便计算,子层的输出也设置为了512维 **大道至简啊!**之后调参的时候,只需要调 N N N d m o d e l d_{model} dmodel就可以了)

💡 为什么用LayerNorm而不是BatchNorm?
首先,BN是对一个Batch中的列(不同样本,同一特征)做Norm,而LN是一个Batch中的行(可以简单的理解为一哥样本)做Norm。由于一个序列中,每个样本的长度很可能不一样的,所以LN更适合!

Decoder: 解码器也由N = 6个相同的层组成。除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头注意(中间的那个)。与编码器类似,我们在每个子层周围使用残余连接,然后进行Layer Norm。我们还修改了解码器堆栈中的自注意子层,以防止当前位置关注后续的位置(即当前位置不能知道后续输出位置的结果)。这种掩蔽,再加上输出embedding被一个位置偏移,确保了对位置i的预测仅依赖于小于i位置的已知输出。

3.2 Attention

An attention function可以描述为将query和一组key-value pairs映射到一个output,其中query, keys, values, and output都是向量。The output是由value的加权和计算得来,其中给每个value的权重是由query与相应key的相似度(兼容函数,compatibility function)计算得来的。

💡 注意力机制,简单来说,在相同的多个key-value下,对应于不同的query,每个query与哪些ke

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值