本文是对文献 《An Attentive Survey of Attention Models》 的总结,详细内容请参照原文。html
注意力模型如今已经成为神经网络中的一个重要概念,并已经应用到多个应用领域。本文给出了注意力机制的主要思想,并对现有的一些注意力模型进行了分类,以及介绍了注意力机制与不一样的神经结构的融合方法,而且还展现了注意力是如何提升神经网络模型的可解释性的。最后,本文讨论了一些具体应用程序中注意力机制的应用与建模过程。web
Attention Model(AM)首次被 Bahdanau1 等人引用来解决机器翻译等问题,并已经做为神经网络架构的重要组成部分来普遍应用与天然语言处理,统计学习,语音和计算机视觉等多种领域。注意力机制的主要思想请参考资料:浅谈 Attention 机制的理解。神经网络中的 attention model 的快速发展主要有三个缘由:算法
该文献依然是从经典的 Encoder-Decoder 模型中来引入注意力模型,这有利于读者对 Attention 机制有更直观的理解,一样能够参考浅谈 Attention 机制的理解。数据库
以 Sequence-to-sequence 模型为例,该模型包含了一个 Encoder-Decoder 架构。其中,Encoder 是一个 RNN 结构,将序列 \(\lbrace x_1,x_2,\dots,x_T \rbrace\) 做为其输入,\(T\) 表示输入序列的长度,并将该序列编码成固定长度的向量集合 \(\lbrace h_1,h_2,\dots,h_T \rbrace\) 。Decoder 也是一个 RNN 结构,将一个单一的固定长度的向量 \(h_T\) 做为输入,而且迭代地生成一个输出序列 \(\lbrace y_1,y_2,\dots,y_{T'} \rbrace\),\(T^{'}\) 表示输出序列的长度。在每一个时刻 \(t\),\(h_t\) 和 \(s_t\) 分布表示 Encoder 和 Decoder 的隐藏层状态。网络
Attention Model 旨在经过容许 Decoder 访问整个编码的输入序列 \(\lbrace h_1,h_2,\dots,h_T \rbrace\) 来解决上述的问题。中心思想时在输入序列上引入 attention 权重 \(\alpha\) ,从而在生成下一个输出标记时优先考虑集合中存在相关信息的位置集。架构
相应的具备注意力机制的 Encoder-Decoder 的架构如 Figure 2(b) 所示。架构中的 attention block 负责自动学习注意力权重 \(\alpha_{ij}\) ,该参数表示了 \(h_i\) 和 \(s_i\) 之间的相关性,其中 \(h_i\) 为 Encoder 隐藏状态,也称之为候选状态,\(s_i\) 为 Decoder 隐藏层状态,也称之为查询状态。这些注意力权重而后被用来创建一个上下文向量 \(c\),该向量做为一个输入传递给 Decoder。在每一个解码位置 \(j\),上下文向量 \(c_j\) 是全部 Encoder 的隐藏层状态和他们对应的注意力权重的加权和,即 \(c_j=\sum_{i=1}^T{\alpha_{ij}h_i}\)。该机制的优点是 Decoder 不只考虑了整个输入序列的信息,并且集中关注了那些在输入序列中相关的信息。app
注意力权重是经过在体系结构中并入一个额外的前馈神经网络来学习的。该前馈神经网络学习将候选状态和查询状态做为神经网络的输入,并学习一个关于这两个隐藏层状态 \(h_i\) 和 \(s_{j-1}\) 的特定注意力权重 \(\alpha_{ij}\)。注意,此前馈神经网络须要和架构中的 encoder-decoder 组件一块儿联合训练。框架
此处在计算注意力权重的时候使用的是 \(s_{j-1}\),这是由于咱们当前在计算 \(y_j\) 时是不知道 \(s_j\) 状态的,因此只能使用前一个状态。机器学习
该文献将注意力主要分为四大类,可是须要注意的是这些类别并非互斥的,Attention 能够应用于多种类型的组合当中,例如 Yang2 等人将 multi-level 和 self and soft attention 进行组合使用。所以,咱们能够将这些类别看做是将注意力用于感兴趣的应用时能够考虑的维度。函数
到目前为止,咱们只考虑了涉及到单个输入和对应输出序列的状况。当候选状态和查询状态分布属于两个不一样的输入序列和输出序列时,就会使用这种类型的注意力,咱们称之为 distinctive
。
co-attention
模型同时对多个输入序列进行操做,并共同窗习它们的注意力,以捕获这些输入之间的相互做用。
相反,对于诸如文本分类和推荐之类的任务,输入是序列,但输出不是序列。在这种状况下,可使用注意力来学习输入序列中对应于相同输入序列中的每一个标记的相关标记。换句话说,查询和候选状态属于这种类型的关注的相同序列,这种注意力模型称为 self-attention
。
在最通常的状况中,仅针对原始的输入序列计算注意力权重,这种类型的注意力能够称之为 single-level
。另外一方面,能够按照顺序将注意力应用于输入序列的多个抽象层次,较低抽象级别的输出(上下文向量)成为较高抽象级别的查询状态。此外,使用 multi-level
注意力的模型能够进一步根据权重自上而下学习或者自下而上学习来进一步分类。多层注意力模型的最典型的示例就是文档的学习,文档是由句子组成的,而句子是由单词组成的,所以能够创建两层的 attention 机制。
在该分类依据中,主要是根据在计算注意力函数时输入序列的位置。Bahdanau3 等人提出的注意力也被称为 soft-attention
。顾名思义,它使用输入序列的全部隐藏状态的加权平均值来构建上下文向量。这种软加权方法的使用使得神经网络易于经过反向传播进行有效学习,但也致使二次计算成本。
Xu4 等人提出了一种 hard-attention
模型,其中上下文向量是经过从输入序列中随机采样隐藏层状态来计算获得,这是经过一个由注意力权重参数化的多项式分布来实现的。因为下降了计算成本,hard-attention
模型是有效的,可是在输入的每一个位置作出一个艰难的判决使得所获得的框架不可微而且难以优化。所以,为了克服这一局限性,文献中提出了变分学习方法和强化学习中的策略梯度方法。
Luong5等人提出了两种注意力模型用于机器翻译任务,分别命名为 local attention
和 global attention
。其中,global attention
和 soft-attention
是类似的,而 local attention
介于 soft-attention
和 hard-attention
之间。关键思想是首先检测输入序列中的注意点或位置,并在该位置周围选择一个窗口以建立局部软注意(local soft attention)模型。输入序列的位置能够直接设置(单调对齐)或经过预测函数(预测对齐)学习。所以,local attention
的优势是在 soft-attention
和 hard-attention
、计算效率和窗口内的可微性之间提供参数权衡。
一般,大多数应用程序都使用输入序列的单一特征表示。而后,在某些场景中,使用输入的一个特征表示可能没法知足下游任务。在这种状况下,通常会经过多个特征表示来捕获输入的不一样方面。attention 机制能够用于将重要性权重分配给这些不一样的表示,这些表示能够肯定最相关的方面,而忽略输入中的噪声和冗余。咱们将这种模型称为 multi representational AM
,所以它能够肯定下游应用的输入的多个表示的相关性。最终表示形式是这些多个表示形式及其注意权重的加权组合。attention 机制的一个好处是经过检查权重能够直接评估哪些嵌入更适合哪些特定的下游任务。例如,Kiela6等人经过学习相同输入句子的不一样单词嵌入的注意权重,以改善句子表示。
基于类似的直觉,在 multi-dimensional
注意中,能够引入权重来肯定输入嵌入向量的每一个维度的相关性。由于计算向量的每一个特征的得分能够选择可以在任何给定的上下文中最好地描述标记的特定含义的特征。这对于天然语言应用程序来讲尤为有用,由于在天然语言应用程序中,word 嵌入会存在一词多义的问题。
文献介绍了三个主要与 attention 机制进行结合的神经网络架构:(1)encoder-decoder 架构;(2)将注意力扩展到单个输入序列以外的内存网络(memort networks);(3)利用注意力绕过递归模型的顺序处理组件的体系结构。
注意力机制的早期使用是做为基于 RNN 的 encoder-decoder 架构的一部分来对长的输入语句进行编码。
一个有趣的事实是,Attention Model 能够采用任何输入表示,并将其减小为一个固定长度的上下文向量,以应用于解码步骤。所以,它容许将输入表示与输出解耦。人们能够利用这个好处来引入混合编码器 - 解码器,最流行的就是将卷积神经网络(CNN)做为编码器,而把 RNN 或长短时间存储器(LSTM)做为解码器。这种类型的架构特别适用于那些多模态任务,例如图像和视频字幕,视觉问答和语音识别。
然而,并不是全部输入和输出都是顺序数据的问题均可以用上述模式解决,例如排序和旅行商问题。文献给出了一个指针网络的示例,能够阅读文献进一步了解。
像问答和聊天机器人这样的应用程序须要可以从事实数据库中的信息进行学习。网络的输入是一个知识数据库和一个查询,其中存在一些事实比其余事实更与查询相关。端到端内存网络经过使用一组内存块存储事实数据库来实现这一点,并使用 attention 机制在回答查询时在内存中为每一个事实创建关联模型。attention 机制经过使目标连续,并支持端到端的训练反向传播模型来提升计算效率。端到端内存网络(End-to-End Memory Networks)能够看做是 AM 的一种泛化,它不是只在单个序列上建模注意力,而是在一个包含大量序列 (事实) 的数据库上建模注意力。
循环体系结构依赖于在编码步骤对输入的顺序处理,这致使计算效率低,由于处理不能并行化。为此,Vaswani7 等人提出了 Transformer
架构,其中 encoder 和 decoder 由一堆具备两个子层的相同的层组成,两个子层分别为位置定向前馈网络层(FFN)和多抽头自注意层(multi-head self attention)。
Position-wise FFN:输入是顺序的,要求模型利用输入的时间方面,可是不使用捕获该位置信息的组件(即 RNN/CNN)。为此,转换器中的编码阶段使用 FFN 为输入序列的每一个标记生成内容嵌入和位置编码。
Multi-head Self-Attention:在每一个子层中使用 self-attention 来关联标记及其在相同输入序列中的位置。此外,注意力被称为 multi-head ,由于几个注意力层是并行堆叠的,具备相同输入的不一样线性变换。这有助于模型捕获输入的各个方面,并提升其表达能力。转换结构实现了显著的并行处理,训练时间短,翻译精度高,无需任何重复的组件,具备显著的优点。
受到模型的性能以及透明度和公平性的推进,人工智能模型的可解释性引发了人们的极大兴趣。然而,神经网络,特别是深度学习架构因其缺少可解释性而受到普遍的吐槽。
从可解释性的角度来看,建模注意力机制特别有趣,由于它容许咱们直接检查深度学习架构的内部工做。假设注意力权重的重要性与序列中每一个位置的输出的预测和输入的特定区域的相关程度高度相关。这能够经过可视化一组输入和输出对的注意权重来轻松实现。
注意力模型因为其直观性、通用性和可解释性,已成为研究的一个活跃领域。注意力模型的变体已经被用来处理不一样应用领域的独特特征,如总结、阅读理解、语言建模、解析等。主要包括:
近年来,人们的注意力以新颖的方式被利用,为研究开辟了新的途径。一些有趣的方向包括更平滑地整合外部知识库、训练前嵌入和多任务学习、无监督的表明性学习、稀疏性学习和原型学习,即样本选择。
该文献讨论了描述注意力的不一样方法,并试图经过讨论注意力的分类、使用注意力的关键神经网络体系结构和已经看到显著影响的应用领域来概述各类技术。文献讨论了在神经网络中加入注意力是如何带来显著的性能提升的,经过促进可解释性提供了对神经网络内部工做的更深刻的了解,并经过消除输入的顺序处理提升了计算效率。
Neural machine translation by jointly learning to align and translate↩
Hierarchical attention networks for document classification↩
Neural machine translation by jointly learning to align and translate↩
Show, Attend and Tell: Neural Image Caption Generation with Visual Attention↩
Effective approaches to attention-based neural machine translation↩
Dynamic meta-embeddings for improved sentence representations↩