赞
踩
论文地址:http://papers.nips.cc/paper/7181-attention-is-all-you-%0Aneed.pdf
源代码:https://github.com/tensorflow/tensor2tensor
分析: http://nlp.seas.harvard.edu/2018/04/03/attention.html
主要的序列转导模型是基于复杂的循环或卷积神经网络,包括编码器和解码器。性能最好的模型还通过一个注意机制连接编码器和解码器。我们提出了一种新的简单网络结构,即Transformer,它完全基于注意机制,完全不需要递归和卷积。对两个机器翻译任务的实验表明,这些模型在质量上更优,同时更具并行性,训练时间明显更少。模型在WMT 2014英语翻译任务中实现了28.4 BLEU,比现有的最佳效果(包括合奏)提高了2个点以上。在WMT2014英语到法语翻译任务中,我模型在8个GPU上训练3.5天后建立了一个新的单一模型,获得最先进的BLEU分数41.8,这只是文献中最佳模型训练成本的一小部分。结果表明,该Transformer可以很好地推广到其他任务中,并成功地应用于大样本和有限样本的英语用户分析。
循环神经网络(RNN), 特别是长期短期记忆(LSTM)[13]和门控复发性(Gate recurrent )[7]神经网络,已作为最先进的顺序建模和转导问题(如语言建模和机器翻译)方法而牢固地建立起来[35,2,5]。此后,许多工作继续扩大了循环神经网络和编码器-解码器体系结构的界限[38,24,15]。
循环模型通常是沿着输入和输出序列的符号位置进行因子计算。将位置与计算时间中的步骤对齐,它们生成一系列隐藏状态
h
t
h_{t}
ht,作为先前隐藏状态
h
t
−
1
h_{t−1}
ht−1的函数和位置
t
t
t的输入。这种固有的顺序性使得训练示例时候无法并行化,而训练示例在较长的序列长度下变得至关重要,因为内存约束限制了批处理。通过例子。最近的工作通过因子分解技巧[21]和条件计算[32]显著提高了计算效率,同时在后者的情况下也提高了模型性能。然而,顺序计算这一基本约束仍然存在。
注意力机制(Attention mechanisms)已经成为各种任务中引人注目的序列建模和转换模型的组成部分,允许在不考虑依赖项在输入或输出序列中的距离的情况下对依赖项进行建模[2,19]。然而,在除少数情况外的所有情况下[27],这种注意力机制常与循环网络结合使用。
在这项工作中,本文提出了Transformer,一个避免了循环的模型架构,它完全依赖一个注意机制来绘制输入和输出之间的全局依赖性。Transformer 允许更大程度的并行化,可以在8个p100 gpu上经过短短12小时的训练后,在翻译质量上达到一个新的水平。
减少顺序计算的目的形成了扩展神经GPU[16]、ByteNet[18]和ConvS2S[9]的基础,所有这些都使用卷积神经网络作为基本构建块,并使用并行的方式来计算所有输入和输出位置的隐藏表示。在这些模型中,将来自两个任意输入或输出位置的信号联系起来所需的操作次数随着位置之间的距离增加而增加,这对于ConvS2S是线性的,对于ByteNet是对数。这使得学习远距离位置之间的依赖性变得更加困难[12]。在Transformer中,这被减少到一个恒定的操作次数,尽管平均注意力加权位置而导致了有效分辨率(resolution)的降低,这是在3.2节中描述的**多头注意力(Multi-Head Attention)**的效果。
自注意(Self-attention),有时被称为内注意,是一种注意力机制,它将一个序列的不同位置联系起来,以计算序列的表示。在阅读理解、抽象总结、文本蕴涵和学习任务独立句子表达等多种任务中,人们成功地运用了 Self-attention[4,27,28,22]。
端到端的记忆网络是一种基于循环的注意力机制,而不是顺序一致的循环,并且在简单的语言问答和语言建模任务上表现良好[34]。
然而,据我们所知,Transformer是第一个完全依赖于 Self-Attention 来计算其输入和输出表示的转导模型,而不使用序列对齐的RNN或卷积。在下面的章节中,将描述Transformer
,激发Self-attention(motivate self-attention)
,并讨论它相对于[17,18,9]等模型的优势。
很多具有竞争力的神经序列转导模型都含有编码器-解码器结构[5,2,35]。在这里,编码器将符号表示的输入序列
(
x
1
,
…
,
x
n
)
(x_{1},…,x_{n})
(x1,…,xn)映射为连续表示序列
z
=
(
z
1
,
…
,
z
n
)
z=(z_{1},…,z_{n})
z=(z1,…,zn)。给定
z
z
z,解码器然后一次生成一个符号的输出序列
(
y
1
,
…
,
y
m
)
(y_{1},…,y_{m})
(y1,…,ym)。在每一步中,模型都是自动回归(auto-regressive)的[10],在生成下一步时,将先前生成的符号序列作为附加输入。
Transformer遵循这一总体架构,使用堆叠的 Self-attention 和 逐点(point-wise)、全连接的层用于编码器和解码器,分别如图1的左半部分和右半部分所示。
Encoder
:编码器由一组
N
=
6
N=6
N=6的相同层堆叠而成。每层有两个子层。
Residual 连接[11]
,然后是层 Normalization[1]
。也就是说,每个子层的输出是
L
a
y
e
r
N
o
r
m
(
x
+
S
u
b
l
a
y
e
r
(
x
)
)
LayerNorm(x+Sublayer( x))
LayerNorm(x+Sublayer(x)),其中Sublayer(x)
是子层实现的函数。为了方便这些 Residual 连接,模型中的所有子层以及嵌入层都会生成维度为
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512 的输出。decoder
:解码器也由一个
N
=
6
N=6
N=6的相同层堆叠而成。除了每个编码器层中的两个子层外,解码器还插入第三个子层,该子层在编码器堆栈的输出上执行 Multi-Head Attention
。与编码器类似,在每个子层周围使用Residual连接
,然后进行层Normalization
。还修改了解码器堆栈中的自注意子层,以防止每个位置去关注其后续位置。这个掩膜,结合输出嵌入(the output embeddings)被一个位置偏移(offset)的事实,确保了位置
i
i
i的预测只能依赖于位置小于
i
i
i的已知输出。注意力函数可以描述为从一个查询(query)
和一组键值对(key-value pairs)
到一个输出
的映射,其中, 查询(query)、键(key)、值(value)和输出(output)都是向量。输出(output)是以值(value)的加权和进行计算的,其中分配给每个值(value)的权重是通过查询(query)的匹配函数(compatibility function)和相应的键(key)计算的。
本文将提出的关注(attention)称为“Scaled Dot-Product Attention”
(图2)。输入包括
d
k
d_{k}
dk维的查询和键,以及
d
v
d_{v}
dv维的值。计算查询与所有键的点积,并将每个点积除以
d
k
\sqrt{d_{k}}
dk
,然后应用SoftMax函数得到这些值的权重。
在实践中,可以同时计算一组查询上的注意力函数,将其打包成矩阵Q。键和值也打包成矩阵K和V。我们计算输出矩阵的方式为:
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
两个最常用的注意力函数:
除了比例因子
1
d
k
\frac{1}{\sqrt{d_{k}}}
dk
1外,点积注意与本文提出的算法相同。加性注意使用一个前馈网络和一个单独的隐藏层来计算兼容性函数(compatibility function)。虽然二者在理论复杂度上相似,但在实践中,点积注意速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。
对于较小的
d
k
d_{k}
dk值,这两种机制的性能相似,但加性注意优于点积注意,而不会缩放较大的
d
k
d_{k}
dk值[3]。我们怀疑,对于
d
k
d_{k}
dk的较大值,点积的增长幅度较大,会将SoftMax函数推送到具有极小梯度的区域。为了抵消这种影响,将点积乘以
1
d
k
\frac{1}{\sqrt{d_{k}}}
dk
1。
不同于使用
d
m
o
d
e
l
d_{model}
dmodel维度的键、值和查询来执行单一注意函数,我们发现,使用另一种可学习的线性投影(projection)分别对查询、键和值进行h次线性投影(projection)会更有效,这些投影将这些元素分别映射到维度为
d
k
d_{k}
dk、
d
k
d_{k}
dk和
d
v
d_{v}
dv的空间。在这些元素的每个投影版本上,可以并行执行注意力函数,得到
d
v
d_{v}
dv维的输出值。如图2所示,之后将每个投影进行连接,并再次进行投影,从而得到最终的值。
Multi-Head Attention
允许模型关注来自不同位置的不同表示子空间的信息。只需一个single attention head,平均值就可以抑制这种情况。
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
w
h
e
r
e
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
)
where\ \ head_{i}=Attention(QW^{Q}_{i},KW^{K}_{i},VW^{V}_{i})
where headi=Attention(QWiQ,KWiK,VWiV)
其中,投影指的是参数矩阵
W
i
Q
∈
R
d
m
o
d
e
l
×
d
k
,
W
i
K
∈
R
d
m
o
d
e
l
×
d
k
,
W
i
V
∈
R
d
m
o
d
e
l
×
d
v
以
及
W
O
∈
R
h
d
v
×
d
m
o
d
e
l
W^{Q}_{i}\in \mathbb{R}^{d_{model}\times d_{k}}, W^{K}_{i}\in \mathbb{R}^{d_{model}\times d_{k}}, W^{V}_{i}\in \mathbb{R}^{d_{model}\times d_{v}}以及W^{O}\in \mathbb{R}^{hd_{v}\times d_{model}}
WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rdmodel×dv以及WO∈Rhdv×dmodel。
在这项工作中,我们使用
H
=
8
H=8
H=8的并行 attention layers 或 heads。对于每个模型,
d
k
=
d
v
=
d
m
o
d
e
l
/
h
=
64
d_{k}=d_{v}=d_{model}/h=64
dk=dv=dmodel/h=64。由于每个头部的降维,总的计算成本与 single-head 全尺寸注意力相似。
Transformer 采用三种不同的方式使用Multi-Head Attention:
encoder-decoder attention
层中,查询(Query)来自前一个解码器层,记忆的键和值(the memory keys and values)来自编码器的输出。这使得解码器中的每个位置都可以处理输入序列中的所有位置。这模仿了典型的编码器-解码器注意机制的Seq2Seq模型,如[38,2,9]。除了关注子层之外,编码器和解码器中的每个层都包含一个完全连接的前馈网络,该网络分别应用于每个position,并且完全相同。该网络也包括有两个通过ReLU连接起来的线性变换。
F
F
N
(
x
)
=
m
a
x
(
0
,
x
W
1
+
b
1
)
W
2
+
b
2
FFN(x)=max(0,xW_{1}+b_{1})W_{2}+b_{2}
FFN(x)=max(0,xW1+b1)W2+b2
虽然线性变换在不同的位置上是相同的,但它们在不同的层之间使用不同的参数。另一种描述这一点的方法是两个内核大小为1的卷积。输入输出维数为
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512,内层维数为
d
f
f
=
2048
d_{ff}=2048
dff=2048。
与其他序列转导(Sequence Transduction)模型类似,使用可学习的嵌入(Embeddings)将输入tokens和输出tokens转换为 d m o d e l d_{model} dmodel维的向量。还使用常用的可学习的线性变换和SoftMax函数将解码器的输出转换为待预测的下一个token的概率。在模型中,在两个嵌入层之间共享相同的权重矩阵和Pre-SoftMax线性变换,类似于[30]。在嵌入层中,将这些权重乘以 d m o d e l \sqrt{d_{model}} dmodel 。
由于模型不包含递归和卷积,为了使模型能够利用序列的顺序(the order of the sequence),必须注入一些关于序列中tokens的相对或绝对位置的信息。为此,将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入(embeddings)中。位置编码与嵌入具有相同的维度 d m o d e l d_{model} dmodel,因此可以将两者相加。位置编码有很多选择,可学习的和可固定的[9]。
在这项工作中,将使用不同频率的正余弦函数:
P
E
p
o
s
,
2
i
=
s
i
n
(
p
o
s
/
1000
0
2
i
/
d
m
o
d
e
l
)
PE_{pos,2i}=sin(pos/10000^{2i/d_{model}})
PEpos,2i=sin(pos/100002i/dmodel)
P
E
p
o
s
,
2
i
+
1
=
c
o
s
(
p
o
s
/
1000
0
2
i
/
d
m
o
d
e
l
)
PE_{pos,2i+1}=cos(pos/10000^{2i/d_{model}})
PEpos,2i+1=cos(pos/100002i/dmodel)
其中,pos是位置,i是维度。也就是说,位置编码的每个维度都对应于一个正弦曲线。波长形成一个从
2
π
2\pi
2π到
10000
⋅
2
π
10000\cdot2\pi
10000⋅2π的几何轨迹。之所以选择这个函数,是因为我们假设它可以让模型很容易地通过相对位置进行学习,因为对于任何固定的偏移量k,
P
E
p
o
s
+
k
PE_{pos+k}
PEpos+k都可以表示为
P
E
p
o
s
PE_{pos}
PEpos的线性函数。
此外,对learned positional embeddings[9]
进行了实验,发现两个版本产生了几乎相同的结果(见表3第(e)行)。本文选择正弦波模型的另外一个原因是因为它可以让模型外推到比训练中遇到的序列长度更长的序列。
在本节中,将自注意层的各个方面与递归和卷积层进行比较,后两个通常被用于将一个可变长度的符号表示序列 ( x 1 , … , x n ) (x_{1},…,x_{n}) (x1,…,xn)映射到另一个等长序列 ( z 1 , … , z n ) (z_{1},…,z_{n}) (z1,…,zn),其中 x i , z i ∈ R d x_{i},\ z_{i}\in \mathbb{R}^{d} xi, zi∈Rd,如同在一个典型的序列转导编码器或解码器中的隐藏层。为了使用自注意,考虑了三个目标。
如表1所示,一个自注意层将所有位置与恒定数量的顺序执行操作连接起来,而一个循环层则需要O(N)
顺序操作。在计算复杂度方面,当序列长度n
小于表示维数d
时,自注意层比循环层更快,这是机器翻译中最先进的模型(如word-piece[38]和byte-pair[31] representations)使用的句子表示最常见的情况。为了提高涉及非常长序列的任务的计算性能,可以将自注意限制为仅考虑以各自输出位置为中心的输入序列中大小为
r
r
r的邻域。这将把最大路径长度增加到
O
(
n
/
r
)
O(n/r)
O(n/r)。计划在今后的工作中进一步研究这种方法。
卷积核宽度为
k
<
n
k<n
k<n的单个卷积层不连接所有输入和输出位置对。这样做需要一堆
O
(
n
/
r
)
O(n/r)
O(n/r)卷积层(对于连续的内核)或
O
(
l
o
g
k
(
n
)
)
O(log_{k}(n))
O(logk(n))(对于扩张卷积18]),增加网络中任意两个位置之间最长路径的长度。卷积层通常比循环层更昂贵,其系数为k。可分离卷积[6]可将复杂性大大降低至
O
(
k
⋅
n
⋅
d
+
n
⋅
d
2
)
O(k·n·d+n·d^{2})
O(k⋅n⋅d+n⋅d2)。然而,即使**
k
=
n
k=n
k=n,可分离卷积的复杂度也等于模型中采用的自注意层和 point-wise 前馈层的组合**。
作为附带的好处,自注意可以产生更多可解释的模型。检查模型中的注意力分布,并在附录中展示和讨论示例。个体的注意力不仅能清楚地学习执行不同的任务,而且许多注意力表现出与句子的句法和语义结构相关的行为。
本节介绍了模型的训练方式。
训练了标准的WMT 2014英语-德语数据集,包含约450万个句子对。语句使用字节对编码[3]进行编码,该编码具有大约37000个标记的共享源-目标词汇表。对于英语-法语,使用了更大的WMT 2014英语-法语数据集,该数据集包含3600万句句子,并将标记拆分为32000个词条词汇[38]。句子对按近似的序列长度分批在一起。每个训练批包含一组句子对,其中包含大约25000个源标记和25000个目标标记。
使用8个Nvidia P100 GPU在一台机器上训练模型。对于使用本文中描述的超参数的基本模型,每个训练步骤大约需要0.4秒。对基础模型进行了总计100000步或12小时的训练。对于大型模型(如表3的底线所述),每个训练步骤时间为1.0秒。大模型接受了300000步(3.5天)的训练。
使用Adam优化器[20],其中
β
1
=
0.9
,
β
2
=
0.98
,
ϵ
=
1
0
−
9
\beta_{1}=0.9,\ \beta_{2}=0.98,\ \epsilon=10^{-9}
β1=0.9, β2=0.98, ϵ=10−9。根据如下的公式,在整个训练过程中改变了学习速度:
l
r
a
t
e
=
d
m
o
d
e
l
−
0.5
⋅
m
i
n
(
s
t
e
p
_
n
u
m
−
0.5
,
s
t
e
p
_
n
u
m
⋅
w
a
r
m
u
p
_
s
t
e
p
s
−
1.5
)
(
3
)
lrate=d^{-0.5}_{model}\cdot min(step\_num^{-0.5},step\_num\cdot warmup\_steps^{-1.5})\ \ \ \ (3)
lrate=dmodel−0.5⋅min(step_num−0.5,step_num⋅warmup_steps−1.5) (3)
这对应于在第一个warmup_steps
的训练步骤中线性地增加学习速率,然后与步骤数的平方反比成比例地减少学习速率,本文使用warmup_steps=4000
。
在训练过程中使用两种类型的正则方案:
在WMT 2014英语到德语翻译任务中,表2中的大 transformer 模型比之前报告的最好的模型(包括Ensembles)强2个 BLEU以上,获得了一个新的最先进的BLEU分数28.4。该模型的配置列在表3的底部,在8张p100机器上训练时间为3.5天。即使是本文提出的基础模型也超越了以前发布的所有模型和集成,而这训练成本只占其他模型的一小部分。
在WMT 2014英语到法语翻译任务中,大模型获得了41.0的BLEU分数,超过了之前发布的所有单一模型,低于之前最先进模型训练成本的1/4。在英语到法语训练的Transformer(大)模型使用的dropout率
P
d
r
o
p
=
0.1
P_{drop}=0.1
Pdrop=0.1,而不是0.3。
对于基本模型,使用了一个单一模型,该模型通过均值最后5个 checkpoints 获得,这些检查点以10分钟的间隔写入。对于大型模型,均值化最后20个checkpoints 。使用beam search,波束大小为4,长度惩罚
α
=
0.6
\alpha=0.6
α=0.6[38]。这些超参数是在对开发集进行实验后选择的。将推理期间的最大输出长度设置为输入长度+50,但在可能的情况下提前终止[38]。
表2总结了本文的结果,并将翻译质量和训练成本与文献中的其他模型架构进行了比较。通过乘以训练时间、使用的GPU数量和每个GPU 的持续单精度浮点容量来估计用于训练模型的浮点操作数。
为了评估Transformer不同组件的重要性,以不同的方式改变基础模型,在验证集newstest2013上测试中英译德翻译的性能变化。使用了前一节中描述的波束搜索,但没有使用平均checkpoints。在表3中给出了这些结果。
在表3的第(a)行中,改变注意头的数量、注意键和值的尺寸,并保持计算量不变,如第3.2.2节所述。单头性能比最好的参数设置性能差0.9个BLEU(24.9, 25.4),但是太多的头会导致性能下降。
在表3行(b)中,观察到减少注意键大小
d
k
d_k
dk会损害模型质量。这表明,确定兼容性并不容易,比点积更复杂的兼容性函数可能是有益的。
在(c)和(d)行中进一步观察到,正如预期的那样,较大的模型更好,而dropout对于避免过度拟合非常有帮助。
在第(e)行中,将正弦位置编码替换为学习的位置嵌入[9],观察到其结果与基本模型几乎相同。
为了评估Transformer是否可以推广到其他任务,进行了英语成分句法分析实验。这项任务提出了具体的挑战:输出受到强大的结构约束,并且明显长于输入。此外,RNN序列到序列模型无法在小数据状态下获得最先进的结果[37]。
在宾夕法尼亚州Treebank[25]的《华尔街日报》(WSJ)部分训练了一个4层Transformer,其
d
m
o
d
e
l
=
1024
d_{model}=1024
dmodel=1024,大约有40k个训练句子。我们也在一个半监督的环境中训练它,使用更大的高置信度和Berkleyparser语料库,大约有1700万句话[37]。我们只在wsj设置中使用16Ktoken的词汇表,在半监督设置中使用32K token的词汇表。
在第22验证集上做了少量的实验来选择合适的dropout、注意力和残差、学习率和光束大小。所有其他参数与英语到德语的基本翻译模型保持一致。在推理过程中,将最大输出长度增加到输入长度+300。仅对WSJ和半监督设置使用了大小为21和
α
=
0.3
\alpha=0.3
α=0.3的beam size。
表4中的结果表明,尽管缺乏特定于任务的调整,本文提出的模型仍然运行得非常好,产生的结果比以前报告的所有模型都好,除了重复性神经网络语法[8]。
与RNN序列到序列模型[37]相比,Transformer优于Berkeley-Parser[29],即使仅在仅针对40K句子的WSJ训练集进行训练时也是如此。
在这项工作中,首次提出了完全基于注意的序列转导模型Transformer,用多头自注意取代了编码器-解码器体系结构中最常用的循环层。
对于翻译任务,Transformer的训练速度明显快于基于循环层或卷积层的架构。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,实现了一种新的最优性能。在前一项任务中,最佳模型甚至超过了之前所有报告的集合。
我们对基于注意力的模型的未来感到兴奋,并计划将其应用到其他任务中。计划将Transformer扩展到涉及输入和输出模式(文本除外)的问题,并调查本地、受限注意机制,以有效处理图像、音频和视频等大型输入和输出。另一个研究目标是生成更少的顺序。本文用来训练和评估模型的代码可以在https://github.com/tensorflow/tensor2tensor上找到。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。