论文笔记
资料
1.代码地址
2.论文地址
https://arxiv.org/abs/1706.03762
3.数据集地址
论文摘要的翻译
主要的序列转导模型是基于复杂的RNN(循环神经网络)或CNN(卷积神经网络),一个编码器和一个解码器。表现最好的模型还通过注意机制连接的编码器和解码器。我们提出了一个新的简单的网络架构,Transformer,完全基于注意力机制,完全摒弃循环和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具并行性,并且需要更少的训练时间。我们的模型在WMT 2014英语-德语翻译任务上实现了28.4 BLEU,比现有的最佳结果(包括集合)提高了2个BLEU以上。在WMT 2014英法翻译任务中,我们的模型在8个gpu上训练3.5天后,建立了一个新的单模型最先进的BLEU分数41.8,这是文献中最佳模型训练成本的一小部分。我们通过将Transformer成功地应用于具有大量和有限训练数据的英语选区解析,证明了它可以很好地推广到其他任务。
1 背景
1.1 自注意力机制
Self-attention
有时称为内注意,是一种将单个序列的不同位置联系起来的注意机制,以便计算该序列的表示。
1.2 端到端记忆网络
端到端记忆网络基于循环注意机制,而不是顺序排列的递归,
2论文的创新点
- 本文提出了一个新的简单的网络架构,Transformer,完全基于注意力机制,完全摒弃循环和卷积。
- 用多头自注意取代了编码器-解码器架构中最常用的循环层。
3 论文方法的概述
这里,编码器映射符号表示 ( x 1 , … , x n ) (x_1,…,x_n) (x1,…,xn)的输入序列。, 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)符号,一次一个元素。在每一步中,模型都是自回归的,在生成下一个符号时,将之前生成的符号作为额外的输入。
3.1 编码器和解码器
- Encoder
编码器由 N = 6 N = 6 N=6个相同层的堆栈组成。每一层有两个子层。第一层是多头自注意机制,第二层是简单的、位置完全连接的前馈网络。我们在每一个子层周围使用残差连接,然后进行层归一化。也就是说,每个子层的输出是 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)),其中 S u b l a y e r ( x ) Sublayer(x) Sublayer(x)是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层产生的输出维度为 d m o d e l = 512 d_{model} = 512 dmodel=512。解码器架构如下图
- Decoder
解码器也由 N = 6 N = 6 N=6层相同的堆栈组成。除了每个编码器层中的两个子层之外,解码器插入第三个子层,该子层对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围使用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自注意子层,以防止位置关注后续位置。这种掩蔽,再加上输出嵌入被偏移一个位置的事实,确保了位置i的预测只能依赖于位置小于i的已知输出。解码器结构如下图
3.2注意力机制
注意力机制实现可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出是作为值的加权和计算的,其中分配给每个值的权重是由查询与相应键的兼容性函数计算的。
3.2.1 Scaled Dot-Product Attention
我们称我们的特殊注意力机制为“Scaled Dot-Product Attention”(图2)。输入
d
k
d_k
dk的查询和键以及维度
d
v
d_v
dv的值组成。我们计算查询与所有键的点积,每个点积除以
d
k
\sqrt{d_k}
dk并应用softmax函数来获得值的权重。
在实践中,我们同时计算一组查询的注意力函数,它们被打包成一个矩阵
Q
Q
Q。键和值也打包到矩阵
K
K
K和
V
V
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
\mathrm{Attention}(Q,K,V)=\mathrm{softmax}(\frac{QK^{T}}{\sqrt{d_{k}}})V
Attention(Q,K,V)=softmax(dkQKT)V
两种最常用的注意实现是加性注意力和点积注意力。点积注意力和我们的算法是一样的,除了比例因子是
1
d
k
\frac{1}{\sqrt{dk}}
dk1。加性注意使用一个具有单个隐藏层的前馈网络来计算兼容性函数。虽然两者在理论复杂性上相似,但在实践中,点积注意力更快,更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。
当
d
k
d_k
dk值较小时,两种机制的表现相似,当
d
k
d_k
dk值较大时,加性注意力优于点积注意力。我们怀疑,对于较大的
d
k
d_k
dk值,点积注意力的大小会变大,从而将softmax函数推入具有极小梯度的区域。为了抵消这个影响,我们将点积乘以
1
d
k
\frac{1}{\sqrt{dk}}
dk1。
3.2.2 Multi-Head Attention
我们发现,与其使用
d
m
o
d
e
l
d_{model}
dmodel维度的键、值和查询执行单一的注意力函数,不如将查询、键和值分别以不同的、学习过的线性投影
h
h
h次线性投影到
d
k
、
d
k
和
d
v
d_k、d_k和d_v
dk、dk和dv维度,这是有益的。然后,在查询、键和值的每个投影版本上,我们并行地执行注意力函数,生成d维输出值。将它们连接起来并再次进行投影,得到最终值,如下图所示右侧所示
多头注意允许模型在不同位置共同注意来自不同表示子空间的信息。对于单一注意力头,平均会抑制这一点。
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
h
)
W
O
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
)
\mathrm{MultiHead}(Q,K,V)=\mathrm{Concat}(\mathrm{head}_{1},...,\mathrm{head}_{\mathrm{h}})W^{O}\\\mathrm{where~head_{i}}=\mathrm{Attention}(QW_{i}^{Q},KW_{i}^{K},VW_{i}^{V})
MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere headi=Attention(QWiQ,KWiK,VWiV)
Where the projections are parameter matrices
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
q
V
∈
R
d
m
o
d
e
l
×
d
n
W_i^Q\in \mathbb{R} ^{d_{\mathrm{model}}\times d_k}, W_i^K\in \mathbb{R} ^{d_{\mathrm{model}}\times d_k}, W_q^V\in \mathbb{R} ^{d_{\mathrm{model}}\times d_n}
WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WqV∈Rdmodel×d