NLPpaper精读(三)—— Attention Is All You Need


transformer是一个颠覆式的创造,开启了NLP的新时代

Abstract

主流的序列模型都是采用CNN和RNN来构造的,此外较好的编解码器模型都会采用Attention机制。
本文提出了一个简单的模型是Transformer,完全的基于注意力机制,而避免了使用CNN与RNN。
Transformer提供了并行计算的可能性,在训练过程中极大的缩短了训练时长。

Introduction

在序列建模和转换问题中,经常采用循环神经网络,构成编码器-解码器的框架。
由于循环神经网络的的计算与时间步有关,所以难以并行化。造成了计算效率低下的现象。虽然有因子分解和条件计算的方法,但是还是难以实现并行化。
几乎所有的序列建模任务中,Attention Mechanism已经成为了标配。由于Attention的引入可以解决长程依赖问题。
本文提出的Transformer完全避开了循环神经网络,而仅仅使用Attention 机制进行建模,在解决长距离依赖的基础上,进一步提高了并行效率。

Background

减少顺序计算也成为扩展神经网络GPU、ByteNet、ConvS2S的基础,为了并行计算都采用卷积神经网络作为基本的模块。
关联任意两个输入输出位置的信号的操作次数会随着距离的增加而增加。

本文提出的Transformer会将这种操作减少到固定的次数,尽管对用Attention权重化位置取平均降低了效果,但是本文使用了Multi-Head Attention进行抵消。

self-Attention有时又被称为intra-Attention,它是由单个序列计算得来的。self-Attention已经成功用于各类任务,阅读理解、自动摘要、文本含义和学习与任务无关的句子表达。

本文的Transformer模型就是完全依赖于Self-Attention的模型构建的。

Model Architecture

Transformer的整体架构图

在这里插入图片描述
Transformer也是标准的encoder-decoder架构,encoder对输入序列 { x 1 , x 2 , . . . , x n } \{x_1,x_2,...,x_n\} {x1,x2,...,xn}进行编码形成一个最终的向量context vector。最后在解码器采用自回归的方式进行顺序解码。

编码器和解码器堆栈

编码器由6个完全相同的encoder layer依次层叠而成。每一层都拥有2个子层,分别是一个multi-head attention layer和一个全连接前馈神经网络构成。针对每个子层进行残差连接,再进行层标准化。 o u t p u t = L a y e r N o r m ( x + S u b l a y e r ( x ) ) output=LayerNorm(x+Sublayer(x)) output=LayerNorm(x+Sublayer(x))

解码器同样是采用6个完全相同的decoder layer层叠而成。每层除了编码器拥有的2层结构以外,还额外插入了第三个子层。修改了self-attention子层,以防止当前位置可以观测到未来时刻的信息。

Attention

本文采用的Attention,本质与点积Attention和加法Attention没有区别,但是在dot attention的基础上提出了缩放点积Attention。

缩放点积Attention的公式如下:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
其中 d k d_k dk代表V的维度。

d k d_k dk较小时,加法attention和乘法attention的性能没有差别,当 d k d_k dk变大时,加法attention的性能优于乘法attention。但是相同规模下的点积attention比加法attention,速度更快,更加节省空间。
所以文章提出了缩放点积的操作,原因是对于较大的 d k d_k dk值,点积大幅度增加,使得 s o f t m a x softmax softmax推向了梯度较小的区域。
在这里插入图片描述
多头注意力机制(multi-head attention)

类似于多核卷积操作,本文提出了一种多头注意力机制的操作,具体的公式如下
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d n ) W O MultiHead(Q,K,V)=Concat(head_1,...,head_n)W^O MultiHead(Q,K,V)=Concat(head1,...,headn)WO 其 中 h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) 其中 head_i=Attention(QW_i^Q,KW_i^K,VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)
其中 W i Q , W i K , W i V W_i^Q,W_i^K,W_i^V WiQ,WiK,WiV都是对原始的数据进行一个缩放的操作, W O W^O WO代表将缩放后的向量转变为缩放前的维度。

在本文中,由于使用了8和Attention,所以将其缩放为原来的1/8。同时计算量与只有一个attention的相同。

Attention在Transformer中的应用

  1. 编码器-解码器attention层。query来自于前一层的解码器,key和value来自于编码器的输出。这模仿了传统的encoder-decoder模型的框架。
  2. 编码器中的self-attention层。所有的query,key,value均来自于上一层的编码器。
  3. 解码器中的self-attention层。允许解码器中每个位置都关注从开始到当前位置的所有信息,防止解码器中想做信息流来保持自回归属性。通过将非法位置的连接值设置为 − ∞ -\infty

位置编码

本文提出了正弦、余弦函数的位置编码(固定形式),其与模型学习的position_embedding效果相同,但是它可以允许模型推断比训练期间遇到的更长的序列。
在这里插入图片描述

Why Self-Attention

encoder-decoder模型中经常使用CNN和RNN作为基础的单元,将一变长的Input_sequence通过映射转变为同样长度的output_sequence。
往往这样的模型需要考虑三个方面的问题:

  1. 每一层的计算复杂度
  2. 可并行计算的量
  3. 长距离依赖的路径数

从表中可以看出
在这里插入图片描述
Self-Attention的表现要优于其他的模型,每个attention head都学习到了不同的任务,有的学习到了语法和语义的信息。

Training

本文使用了Adam优化器的变种,在前4000步时,学习率线性增加(此过程称为warmup_steps)。过后,学习率以平方根的比例减小。

本文采用了三种正则化:

  1. 残差正则化:位置在每个子层的输出,且在残差和规范化之后。
  2. embedding正则化:在编码器和解码器的embeddings和positional encodings求和部分采用。
  3. 标签平滑:在训练的过程中以一定概率随机的将错误的预测值给到模型,让模型学的不稳定,缓解了过拟合的问题。

Result

本文提出的模型在机器翻译的数据集上进行测试,在基础模型和大模型中均显示出最好的水平,在时间的花费上都比任何一个模型要好很多。
结果如下表:
在这里插入图片描述

为了明确每个参数对模型的影响,做了一系类实验,如下表所示:
在这里插入图片描述
发现:

  1. 多头在一定程度的增加会对效果有正向的影响,在过大时效果较差。
  2. key的维度对效果影响较大,key的维度较大时,效果较好。这说明了在Attention的点积操作中复杂的表示更有利于模型。
  3. 模型越大效果越好
  4. dropout对于模型防止过拟合很有效
  5. 学习的位置向量和位置向量的函数效果类似。

为了验证Transformer是否适用于其他任务,对英文语法分析做了相关实验。
这项任务的挑战在于:输出受限于强的结构限制,并且比起输入序列更长。
RNN的Seq2Seq模型并不能在较小的数据集上获得较好的表现。
在这里插入图片描述
上表显示了Transformer的较好表现,除了Recurrent Neural Network Grammar(递归神经网络文法)。

Conclusion

本文提出的Tramsformer模型,完全的依赖于多头自注意力机制,采用了传统的编码器-解码器的架构,在WMT2014语料上取得了最好的成绩,并且与RNN和CNN对比训练更加快速。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值