自注意力机制

1. self-attention

  • 关注输入数据的全局信息
  • 没有考虑位置信息
  • 计算量是序列长度的平方

transformer NLP自注意力可视化 自注意力模型_人工智能

每个输入ai乘以不同的矩阵,得到向量q、k、v,q表示查询向量,用q乘以所有输入的k向量得到的值再进行softmax归一化,作为输入a的权重和输入a的v向量进行点乘,加起来就得到了a对应的输出:bi

transformer NLP自注意力可视化 自注意力模型_数据集_02

transformer NLP自注意力可视化 自注意力模型_机器学习_03

  1. 把全部输入看成一个向量I,分别乘以transformer NLP自注意力可视化 自注意力模型_深度学习_04,transformer NLP自注意力可视化 自注意力模型_Self_05,transformer NLP自注意力可视化 自注意力模型_数据集_06(模型学习出来的参数),得到Q、K、V
  2. K的转置乘以Q得到Attention的分数A,再对每一列进行归一化,得到A’
  3. 将V乘以得到分数矩阵A’,得到输出O

整体过程如下

transformer NLP自注意力可视化 自注意力模型_机器学习_07


transformer NLP自注意力可视化 自注意力模型_深度学习_08

2. Multi-head Self-attention

可能输入之间存在不同的相关性

transformer NLP自注意力可视化 自注意力模型_Self_09


transformer NLP自注意力可视化 自注意力模型_Self_10

3. Positional Encoding

  • self-attention 没有考虑位置关系
  • Positional Encoding为每个位置设置一个独一无二的位置向量 transformer NLP自注意力可视化 自注意力模型_Self_11
  • 把ei加入到ai,手工设计的

transformer NLP自注意力可视化 自注意力模型_人工智能_12

4. TruncatedSelf-attention

有些序列可能会非常长,比如说语音识别,也许没必要关注全局信息,可以只输入一部分信息就可以(比如说的这一小段语音是什么),减少计算量

transformer NLP自注意力可视化 自注意力模型_深度学习_13

5. Self-attention VS CNN

transformer NLP自注意力可视化 自注意力模型_机器学习_14


transformer NLP自注意力可视化 自注意力模型_机器学习_15

  • CNN可以看成简化的Self-attention
  • CNN只需要考虑感受野大小里的信息,感受野是人为设计的大小;而Self-attention从全局范围来看,通过学习决定哪些地方重要,自己决定感受野大小
  • Self-attention可以看成可以自己学习感受野大小的CNN
  • 比较小的模型更适合小的数据集,更灵活的模型需要更大的数据集,所有self-attention需要更大量的数据

transformer NLP自注意力可视化 自注意力模型_机器学习_16


transformer NLP自注意力可视化 自注意力模型_深度学习_17

6. Self-atention VS RNN

  • RNN也可以考虑全局信息(双向RNN),但是最右边(最后)的输出要考虑最左边(第一个)的输入,就需要把它一直存在memory里不能忘掉;不是并行的,是串行的
  • Self-attention不存在这个问题,他的任意输入序列之间是无序的,并行的,“天涯若比邻”,比RNN块

7. Self-attention for Graph

  • 将Self-attention用在图上,可以只考虑相连的节点之间的attention

transformer NLP自注意力可视化 自注意力模型_数据集_18