主要来自于李宏毅老师的视频,在此之上进行了重点信息的总结。

Self-attention

对于神经网络的输入,可能是一个vector或者一组vector,例如输入是一句话,可以将每个词处理后作为一组vector输入到网络中。
1

  • 上图是简单版本Self-attention的使用
  • 有几个vector输入就有几个vector输出
  • Self-attention的输出考虑到了整个sequence

2
self-attention要做的事情简单来说,输入一组vector,根据vector之间的相关联程度,计算并输出一组output vector。


Self-attention输出的计算流程(以b1b^1为例)

  • 第一步,计算输入向量a1a^1和其他向量相关程度alphaalpha
    • 3
    • 如何计算任意两两vector之间的alphaalpha
      • 常用方法如下,一般采用Dot-product
      • 4
      • 5
      • 以计算alpha1,ialpha'_{1,i}为例,首先拿WqW^q矩阵和输入向量a1a^1相乘获得中间矩阵q1q^1
      • 再拿WkW^k矩阵分别和其他输入向量相乘获得中间矩阵kik^i
      • q1q^1kik^i进行Dot-product获得alpha1,ialpha_{1,i}
      • alpha1,ialpha_{1,i}通过Softmax获得最后的相关性alpha1,ialpha'_{1,i}输出
      • Note: 不是一定需要Softmax,可以替换其他方法
  • 第二步,基于上面得到的attention scores来抽取sequence里面的重要信息
    • 6
    • 将每个vector乘上wv矩阵得到中间矩阵viv^i
    • 使用先前计算的alpha1,ialpha'_{1,i}乘上viv^i,最后累加得到最后的b1b^1
    • 其余的bib^i计算方法类似

从矩阵角度来进行操作
7

8

9

简化版
10

  • 只有WqW^q WkW^k WvW^v需要学习

Attention和Self-attention的区别

  • 以Encoder-Decoder框架为例,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention发生在Target的元素Query和Source中的所有元素之间。

  • Self-attention,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的Attention。

  • 两者具体计算过程是一样的,只是计算对象发生了变化。

Multi-head Self-attention

11

12

13

为什么需要Multi-head Attention?

  • 可以让Attention有更丰富的层次。有多个QKV的话,可以分别从多个不同角度来看待Attention。这样的话,输入a,对于不同的multi-headed Attention,就会产生不同的b
  • 直觉上理解为什么需要multi-headed Attention
    • multi
    • 首先观察上面左图,每个单词对应八个attention,八个attention分别用蓝色到灰色表示,首先确定一个单词it,可以从左图中看到其他单词与it的相关性
    • 提取出橙色和绿色的色块,可以看到单词it对应橙色色块最深的是animal,绿色色块最深的是tire,橙色的注意力主要表明it是个什么东西,从东西的角度说明它是一种动物,而不是苹果或者香蕉。如果我们从状态这个层面来看,it这个动物现在是在怎么样的一个状态,它的状态是tired,而不是兴奋。所以不同的Self-Attention Head是不同方面的理解。

Positional Encoding

通过前面的内容可以发现,Self-attention缺少了非常重要的位置信息。
处理方法

  • 为每一个位置设定一个位置vector ei,每一个不同位置都有自己的一个位置vector
  • 14
  • ei如何设定?
    • hand-crafted
    • learn from data
    • 尚待研究

Transformer

transformer本质上是一个Sequence-to-sequence(Seq2seq) model,即输入一个sequence,输出一个sequence,输出长度由model自己决定。
应用场景

  • 语音识别
  • 机器翻译
  • 语音翻译
  • Chatbot

Seq2seq Model

15

Seq2seq model主要有Encoder和Decoder构成。

Encoder

16

17
黄色为输出的中间vector
18

  • 左边为第一步,将Self-attention的结果做residual处理,再经过一层layerNormalization,将输出作为右边第二步的输入
  • 右边为第二步,将输入经过一次FC layer的结果继续做一次residual处理,再经过一层layerNormalization,最后再输出

思考:为什么需要用layerNormalization?阅读论文

总览
19

  • 上述为原始论文的结构,该变layerNormalization的位置可能会有更好的结果
  • 这里Input Embedding输入的三个箭头可以看做计算的Q,K,V矩阵

Decoder

20
21

  • 在Encoder计算完成后,输入作为Decode的参数
  • 开始时,输入为一个BEGIN vector,Decoder计算出初始输出
  • 后续Decoder将自己的输出又作为输入继续计算
  • 直到Decoder输出end标志为止

总览
22


什么是Masked Multi-head Attention?

  • 23
  • 可以看到在原来的Self-attention中,计算bib^i需要考虑到全部的输入vector aja^j,但是decoder只能接受来自于自己前面序列的信息,因此变为下面的形态
  • 24
  • 具体计算的变化(以b2b^2为例)
    • 25
    • 可以看到b2b^2的计算不再需要a3a^3a4a^4的参与

26
Cross attention如何运行?
27
可以看到encoder输出的两个箭头分别表示K, V矩阵,与Masked Sell-attention输出的Q矩阵进行对应操作得到中间变量进行输出。

28
在原始网络中,Decoder有许多Block,Encoder最后的输出需要分别发送到这些Block中,但是也有许多的变体。


Autoregressive(AT) VS Non-autoregressive(NAT)

  • AT是根据输入每次只产生一个输出vector
  • NAT不是一次只产生一个vector,而是一次将整个句子进行输出
  • 29
  • 如何确定NAT的输出长度?
    • 使用另外一个predictor进行预测
    • 输出一个非常长的sequence,忽略掉第一个END之后的内容
  • NAT的优点
    • 可并行性
    • 可以控制输出的长度
  • NAT通常比AT表现差(Multi-modality问题)

Training

30
31

  • Decoder每一次的输出,需要和Ground truth计算一次cross entropy,相当于做分类问题,我们需要最小化所有cross entropy的总和
  • 每次的输入为标准答案,而不是上一次decoder的输出(Teacher Forcing)
  • 问题: 训练过程中学习的是正确答案,但是test过程中不一定保证每一次的输出都是正确答案,如果输出错误答案,会大大影响后续的计算,如何合理解决?(exposure bias)
    • 训练过程中给decoder的输入增加一些错误项(Scheduled sampling)

Others

  • Beam search
  • BLEU score