Attention Mechanism 序列学习任务中的注意力机制

Attention机制:序列学习任务(translation, QA, image captioning, OCR 等)上提升巨大;

  • 分类:
    • 空间注意力 Spatial Attention
    • 时间注意力 Temporal Attention
    • Soft Attention (soft 分布)
    • Hard Attention (one-hot 分布)
  • 引入原因:
    • 输入序列很长时,模型难以学到合理的向量表示;
    • 所有上下文输入信息都被限制到固定长度,随着输入序列的增长模型能力逐渐变差;
    • 编解码器的结构无法解释,也就导致其无法设计;
  • 长输入序列的问题:
    • 使用传统encoder-decoder的RNN模型先用LSTM单元对输入序列进行学习,编码为固定的向量表示;然后再用一些LSTM单元来读取这种向量表示并解码为输出序列;
    • 输入序列不论长短都会被编码成固定长度的向量表示,因此解码也受限于该固定长度的向量表示,当输入序列很长时无法保留全部的必要信息(信息太多而长度固定);
  • 基本思想:通过保留LSTM编码器对输入序列的中间输出结果,然后训练一个模型对这些输入进行选择性的学习并在模型输出时将输出序列与之关联;
  • 没有attention机制的encoder-decoder通常把encoder的最后一个状态作为decoder的输入,但encoder的state有限,存储不了太多信息。而引入attention机制后,decoder根据时刻不同,让每一时刻的输入都有所不同;
  • 公式(加性注意力):通过计算输入和输出的相似度(match),给每个时刻decoder的输入赋予不同的权重系数;
    • h_i:第 i 个hidden encoder状态;d_t: 第 i 个hidden decoder状态;u^t_i:t 时刻第 i 个节点所应得的注意力权重;
      • u^t_i=v^Tf(W_1' h_i + W_2 'd_t)  ,其中 v^T, W_1' , W_2 ' 都是网络的可学习参数;
      • \alpha^t_i = softmax(u^t_i):归一化;
      • c^t=\sum_i \alpha^i_th_i:t 时刻RNN的输入;
  • 引入attention机制后计算量增大,但模型性能水平会得到提升;且这种机制便于我们理解输入的信息如何影响最后的输出生成序列;
  • 总结:传统的encoder-decoder结构的 LSTM/RNN 模型存在这样的问题——不论输入长短都编码成一个固定长度的向量表示,这种模型对于长输入序列的学习效果很差(解码);attention 机制在模型输出时选择性的专注考虑输入中的对应相关信息,有效克服了上述问题。

Transformer结构:

一般的attention机制有两种,一种是 additive attention (加性注意力,前面所讲的 u^t_i=v^Tf(W_1' h_i + W_2 'd_t)  ),另一种是 dot-product attention (点乘)。其中 additive attention 相对于普通 dot-product attention 来说效果更优,但 dot-product attention的速度更快,且更节省空间,而 scaled dot-product attention 同时拥有两者的长处 (后文会解释),在序列任务中被广泛使用。对于 transformer block 的 self-attention 结构可以表述为 multi-head scaled dot-product attention,其中Multi-Head表示将一组向量拆分为多个部分并行计算,attention的方程式可以表示为 query(Q) 和一组key-value(K-V)之间的映射,这里的 Q, K , V 都是原始输入经过三个线性变换得到的向量。下图是 Scaled Dot-Product Attention 以及Multi-Head的解释示意图:

Attention Mechanism 序列学习任务中的注意力机制_第1张图片

关于向量 Q, K, V,经过线性变换后上图左侧的输入Q, K 是 d_k 维度的,V 是 d_v 维度的。Scaled Dot-Product Attention 总体的公式如下:

其中的QK^T会得到一个 d_k \times d_k 的矩阵,在语言模型中就是一个word2word的attention map,如下图(图片和部分描述参考:Transformer模型笔记):

Attention Mechanism 序列学习任务中的注意力机制_第2张图片Attention Mechanism 序列学习任务中的注意力机制_第3张图片

左图: Self-Attention                                                    右图:Masked Self-Attention

  • QK^T / \sqrt{d_k} 再经过softmax得到attention map 后再乘以一个V 就是想当于对原始输入的一个加权输出;
  • Self-Attention 的输出是每一个位置的 token 对应另一个 token 的权重;
  • Masked Self-Attention 就是不给当前 token  看到后面位置的信息;
  • Multi-Head 就是把 Q, K, V 分别拆分成 H 块,对每一块做上述操作,最后 concat 起来经过线性变换得到 d_v 维度的输出。multi-head attention 使得模型在不同位置共同关注子空间的表征信息;
  • 而Scaled一词在公示中的表示就是QK^T表达式要除以\sqrt{d_k},这么做的原因是当 d_k 增大时,QK^T的值增长幅度会大幅加大,导致softmax后的梯度很小,模型效果变差。

总的 Multi-Head Scaled Dot-Production Attention 公式如下:

Attention Mechanism 序列学习任务中的注意力机制_第4张图片

其中的 W^q_i,\,W^k_i,\, W^v_i 表示线性变换矩阵,论文中的参数设定为:H=8,\,d_{model}=512,\,d_k=d_v=d_{model}/H=64


双向 transformer 结构(Bidirectional Transformers,代表模型:BERT)

Attention Mechanism 序列学习任务中的注意力机制_第5张图片

每个蓝色的block是一个transformer block;


AoA (Attention on Attention):

当没有任何东西满足特定query的要求时,attention 模块仍然返回关于输入的一个加权向量,为了解决这种不合理的现象,AoA通过使用 element-wise multiplication 将 attention gate (G) 应用于信息向量 (I) 来增加另一个注意力得到最终的输出;

Attention Mechanism 序列学习任务中的注意力机制_第6张图片

Reference:

  • Attention机制;
  • Attention is All You Need;
  • Attention on Attention;

你可能感兴趣的:(Attention Mechanism 序列学习任务中的注意力机制)