Attention机制

写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!!

attention详解
self attention & transformer
参考3

1 Attention原理

Attention机制
其计算公式为:si=f(si1,yi1,ci)s_{i} = f\left ( s_{i-1}, y_{i-1}, c_i \right )其中,sis_i 为decoder在 ii 时刻的隐状态,$ y_{i-1}$ 为在 i1i-1 时刻decoder的输出,cic_i 为context信息。
ci=j=1Jaijhjc_{i} = \sum_{j=1}^{J}\text{a}_{ij}h_{j}
其中,hjh_{j} 表示encode中的第j个词的隐状态,aij\text{a}_{ij} 为根据decode当前隐状态 sis_i 给予 hjh_{j} 的权重。
Attention机制
其中,aij\text{a}_{ij} 是一个softmax模型输出,概率值的和为1。eij表示一个对齐模型,用于衡量encoder端的位置j个词,对于decoder端的位置i个词的对齐程度(影响程度),换句话说:decoder端生成位置i的词时,有多少程度受encoder端的位置j的词影响。

2 Attention分类

2.1 soft & hard attention

  1. soft attention:上文介绍
  2. hard attention:只关注到某一个位置上的信息。
  • 硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。
  • 缺点:最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。

2.2 global & local attention

  1. global attention:上文介绍
  • 缺点:每次encoder端的所有hidden 都需要参与计算,计算开销较大,特别是输入较长,效率低。
  1. local attention:将decoder当前位置,预测到encoder端某个位置,然后选择一个窗口,来类似global一样计算,这样可以在输入较长的情况下,节约计算开支。
  • 缺点:
    1、当encoder句子不是很长时,相对Global Attention,计算量并没有明显减小。
    2、位置向量的预测并不非常准确,这就直接影响到的local Attention的准确率。

2.3 self attention &Transformer结构

  1. self attention:
    Attention机制
    对于self-attention来讲,Q(Query), K(Key), V(Value)三个矩阵均来自同一输入,分别由n个单词嵌入的特征[x1, x2, …, xn],分别乘以 WQ,WK,WVW^{Q},W^{K},W^{V} 得到。首先我们要计算Q与K之间的点乘,然后为了防止其结果过大,会除以一个尺度标度 dk\sqrt[]{d_{k}} ,其中 dkd_k 为一个query和key向量的维度。然后是Mask模块,这里encoder阶段没有,decoder阶段有,作用是忽略还未预测到部分(设置为0)。再利用Softmax操作将其结果归一化为概率分布,然后再乘以矩阵V就得到权重求和的表示。该操作可以表示为
    Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax(\frac{QK^T}{\sqrt[]d_k})V
    这里操作可能比较抽象,接下来举个具体例子,请参考
    Attention机制
    2.Transformer结构
    Attention机制1中介绍的就是基本的Multihead Attention单元。
  • 对于encoder来说就是利用这些基本单元叠加,其中key, query, value均来自前一层encoder的输出,即encoder的每个位置都可以注意到之前一层encoder的所有位置。
  • 对于decoder来讲,我们注意到有两个与encoder不同的地方,一个是第一级的Masked Multi-head,另一个是第二级的Multi-Head Attention不仅接受来自前一级的输出,还要接收encoder的输出,下面分别解释一下是什么原理。
  1. 第一级decoder的key, query, value均来自前一层decoder的输出,但加入了Mask操作,即我们只能attend到前面已经翻译过的输出的词语,因为翻译过程我们当前还并不知道下一个输出词语,这是我们之后才会推测到的。
  2. 第二级decoder也被称作encoder-decoder attention layer,即它的query来自于之前一级的decoder层的输出,但其key和value来自于encoder的输出,这使得decoder的每一个位置都可以attend到输入序列的每一个位置。
  • 总结一下,k和v的来源总是相同的,q在encoder及第一级decoder中与k,v来源相同,在encoder-decoder attention layer中与k,v来源不同。