二. Transformer原理分析
上图描述的是一个seq2seq的model,左侧为 Encoder block,右侧为 Decoder block。Encoder 和 Decoder 分别用来解决上游问题和下游问题。什么是上游问题呢?就是一个预训练的过程。比如我们培养一个士兵,一定是先学习基础知识,然后才能上战场。
黄色圈中的部分为Multi-Head Attention,是由多个Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
1. Encoder
- 首先输入 X 通过一个Input Embedding(词嵌入)的转移矩阵 W X {W}^{X} WX 变为了一个张量,也就是通过查表将一个文字变为一个向量表达。再加上一个表示位置的Positional Encoding E {E} E ,得到一个张量。(Positional Encoding在上一篇博文中有介绍,主要目的是获得序列信息)
- 然后,它进入了绿色的block中,并且重复 N 次,绿色block的第1层是一个multi-head的attention。输入一个sequence I {I} I ,经过一个multi-head的attention,会得到另外一个sequence O {O} O 。
- 下一个Layer是Add & Norm,这个意思是说:把multi-head的attention的layer的输入
I
{I}
I 和输出
O
{O}
O 进行相加以后,再做Layer Normalization。
- 接着是一个Feed Forward的前馈网络和一个Add & Norm Layer。
2. Decoder
- 首先输入 X 通过一个Input Embedding的转移矩阵 W X {W}^{X} WX 变为了一个张量,再加上一个表示位置的Positional Encoding E {E} E ,得到一个张量。
- 然后,它进入了绿色的block中,并且重复 N 次。绿色block的第1层是一个Masked Multi-Head Self-attention,masked的意思是使attention只会attend on已经产生的sequence,确保预测第 i {i} i 个位置时不会接触到未来的信息。然后Add & Norm Layer。
- 下一个Layer是另一个Multi-Head Attention层。输入是: E n c o d e r {Encoder} Encoder 的输出 和 对应 i − 1 {i-1} i−1 位置decoder的输出。所以中间的attention不是self-attention,它的Key和Value来自encoder,Query来自上一位置 D e c o d e r {Decoder} Decoder 的输出;输出是:对应 i {i} i 位置的输出词的概率分布。 然后Add & Norm Layer。
- 最后有一个 Softmax 层计算下一个翻译单词的概率。
注:Encoder可以并行计算,而Decoder要用上一个位置的输入当作attention的query,故是像RNN一样一个一个解出来的。
3. Masked Multi-Head Self-attention
Masked在Scale操作之后,softmax操作之前。
Mask的作用是:一个下三角矩阵,避免获取到超前信息。
下面以 “我有一只猫” 翻译成 “I have a cat” 为例,了解一下 Masked 操作。Decoder 可以在训练的过程中使用 Teacher Forcing 并且并行化训练,即将正确的单词序列 ( I have a cat) 和对应输出 (I have a cat ) 传递到 Decoder。
- 输入矩阵包含 " I have a cat" (0, 1, 2, 3, 4) 五个单词的表示向量,Mask是一个 5×5 的矩阵。输入矩阵 X {X} X 经过transformation matrix变为3个矩阵:Query Q {Q} Q,Key K {K} K 和Value V {V} V 。
- Q T ⋅ K {Q}^{T}\cdot{K} QT⋅K 得到 Attention矩阵 A {A} A ,此时先不急于做softmax的操作,而是先与一个 M s ∈ R N × N {M}_{s}\in{R}_{N}\times_{N} Ms∈RN×N 矩阵相乘( M s {M}_{s} Ms 矩阵是个下三角矩阵),使得Attention矩阵的有些位置归0,得到Masked Attention矩阵 A M {A}_{M} AM 。
- Masked Attention矩阵进行 Softmax,每一行的和都为 1。但是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。得到的结果再与 V {V} V 矩阵相乘得到最终的self-attention层的输出结果 Z 1 {Z}_{1} Z1 。
-
Z
1
{Z}_{1}
Z1 只是某一个head的结果,将多个head的结果concat在一起之后再最后进行Linear Transformation得到最终的Masked Multi-Head Self-attention的输出结果
Z
{Z}
Z 。
4. Decoder中两个Multi-Head Self-attention区别
第1个Masked Multi-Head Self-attention的
V
、
Q
、
K
{V}、{Q}、{K}
V、Q、K 均来自Output Embedding。
第2个Multi-Head Self-attention的
V
、
K
{V}、{K}
V、K 来自Encoder的输出 ,
Q
{Q}
Q 来自第1个Self-attention layer的输出。
V
、
K
{V}、{K}
V、K 来自Transformer Encoder的输出,所以可以看做句子(Sequence)/图片(image)的内容信息(content,比如句意是:“我有一只猫”,图片内容是:“有几辆车,几个人等等”)。
Q
{Q}
Q表达了一种诉求:希望得到什么,可以看做引导信息(guide)。
通过Multi-Head Self-attention结合在一起的过程就相当于是把我们需要的内容信息指导表达出来。
5. Transformer整体结构