主要用于翻译,有两部份组成:encoding和decoding,如下图所示:
1 encoding
encoding如下图所示:
1.1 self-attention
输入:input embedding。
输出:带相关性编码的input embedding。
包含3个向量矩阵:Query
(
M
,
d
q
k
)
(M, d_{qk})
(M,dqk)、Key
(
d
q
k
,
N
)
(d_{qk}, N)
(dqk,N)、Value
(
N
,
d
v
)
(N, d_v)
(N,dv),其中:
- Q为待查询的vector,Key为需要和Q计算相似度的vector,所以Q和K的维度必须相同。
- K和V是同一个vector在不同空间的表示。维度可以不同。
计算相关性权重矩阵的方法(scaled dot-product attention):
Query=embeddingWq
Value=embeddingWv
Key=embeddingWk
relevance=Softmax(QueryKey)
输出为relevance*Value
除以根号d是为了梯度更加稳定。
1.2 multi-attention head
计算输入词之间的关系。求self-attention的三个向量分别用了一个矩阵,论文中使用了8组Q、K、V矩阵,最后生成8组相关性权重矩阵,然后使用矩阵Wo转化为最终的结果,为了增加Q、K、V的多样性,计算前先经过Linear层。
1.3 positional encoding
之前的谈论并没有考虑单词顺序的关系。假设使用jpe向量表示,有许多方法求该向量,论文中用到的公式是:
PE(pos,2i)=sin(pos/100002i/dmodel)
PE(pos,2i+1)=cos(pos/100002i/dmodel)
pe+embedding作为最终的输入向量。
其中pos是指当前词在句子中的位置,i是指向量中每个值的index
1.4 layer normalization
在每一个子模块后添加一个残差块,残差块包括layer normalization。
1.5 Forward Feedback Network(FFN)
作用:增加非线性(Relu激活函数)
构成:两层全连阶层+中间的激活层。
2 decoding
2.1 mask multi-head attention
计算目标词之间的关系,包括两种掩码:padding mask和sequence mask。
2.1.1 padding mask
输入序列需要对齐, 如果输入序列不足则用一个很小的负数填充,经过softmax后值接近0,如果输入序列长则去掉多的部分。
2.1.1 sequence mask
屏蔽目标值当前以后的信息。使用一个上三角矩阵如下图所示,对角线用0填充,乘以输入embedding。
2.2 multi-head attention(encoder-decoder attention)
计算输入和目标值之间的关系。输入为decoder上一层的输出(i-1位置decoder的输出)作为Q,encoder的输出作为K、V。
优点:
- 速度快:并行计算充分利用gpu资源。
- 精度高。
- 可以直接计算每个词间的相关性而不需要通过隐藏值传递。
缺点:
- 顶层梯度消失问题:残差经过了LN层,导致梯度减少。(系数<1)
- 位置信息编码简单的与embedding加和。