论文: 《Attention is all you need》
代码: https://github.com/tensorflow/tensor2tensor
创新点
作者提出一种新的简单网络结构,Transformer,其完全基于注意力机制,摒弃CNN与RNN。
我们的模型在 WMT 2014 英德翻译任务上达到了 28.4 BLEU,比现有的最佳结果提高了 2 BLEU 以上。
算法
Transformer结构如图1,左侧为encoder,右侧为decoder,
Encoder
编码器有6个(即为图1左侧N),每个结构包括:multi-head self-attention(MSA)和feed-forward network(FFN)。MSA及FFN引入残差网络解决退化问题;
MSA
MSA结构如图2,
在self-attention中,每个单词有3个不同的向量,它们分别是Query向量(Q),Key向量( K )和Value向量( V ),长度均是64(每个head)。它们是通过3个不同的权值矩阵由嵌入向量 X 乘以三个不同的权值矩阵 Wq, Wk , Wv 得到,其中三个矩阵的尺寸也是相同的。均是 512 * 64 。
d
m
o
d
l
e
d_{modle}
dmodle=512,由于含有8个head,因此dk为512/8=64。8个head拼接得到512。
Attention的计算方法如式1,整个过程可以分成7步:
1、将输入单词转化成嵌入向量;
2、根据嵌入向量得到
Q
∈
(
n
,
d
k
)
,
K
∈
(
m
,
d
k
)
,
V
∈
(
m
,
d
v
)
Q\in(n, d_k), K\in(m, d_k),V\in(m,d_v)
Q∈(n,dk),K∈(m,dk),V∈(m,dv)三个向量;
3、为每个向量计算一个score(attention,相似度): score = Q * K ;
4、为了梯度的稳定,防止score过大,Transformer使用了score归一化,即除以
√
d
k
\surd d_k
√dk;
5、对score按行施以softmax激活函数;
6、softmax点乘Value值 V ,得到加权的每个输入向量的评分 V ;
7、相加之后得到最终的输出结果 Z: Z = sum(V)。
Decoder
解码器有6个,每个结构包括:multi-head self-attention、feed-forward network以及masked multi-head attention。
masked multi-head attention防止看到句子当前位置后面单词,输入为上一个 Decoder block 的输出 Z,输出为Q (如果是第一个 Decoder block 则使用输入矩阵 X 进行计算)。
masked multi-head attention训练时第一个attention单元输入为x,通过mask确保第i个位置预测仅使用位置i之前信息,达到seq2seq目的。
multi-head self-attention中K、V使用编码器输出C计算得到 K, V;
FFN
feed-forward层,
W
1
∈
(
d
m
o
d
e
l
,
d
f
f
)
,
W
2
∈
(
d
f
f
,
d
m
o
d
e
l
)
W_1\in(d_{model}, d_{ff}), W_2\in(d_{ff},d_{model})
W1∈(dmodel,dff),W2∈(dff,dmodel),其中
d
m
o
d
e
l
=
512
,
d
f
f
=
2048
d_{model}=512,d_{ff}=2048
dmodel=512,dff=2048
FFN计算过程如式2,
Position Embedding
positional encoding作用是防止输入单词顺序调换,输出结果一致,表示词在句子中位置;
下一个位置的编码向量可以由前面的编码向量线性表示,等价于以一种非常容易学会的方式告诉了网络单词之间的绝对位置,让模型能够轻松学习到相对位置信息。
作者使用正余弦定理进行位置编码,