当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。按照认知神经学中的注意力,可以总体上分为两类:聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。在人工神经网络中,注意力机制一般就特指聚焦式注意力。

聚焦式注意力,根据每个元素被赋予的权重对序列数据进行编码,已被广泛应用于自然语言处理的各种任务,包括情感分类、文本摘要、QA、依赖关系解析等,并取得了明显的成效。下面是对不同NLP问题中的注意力机制进行简要总结。

首先讲一个机器翻译的例子。机器翻译的传统架构为编码器-解码器架构,编码器和解码器通常由RNN构成。但基于RNN的架构有两个严重的缺点,一个是时间步长过长导致信息丢失,另一个是在解码过程中没有对齐过程。为了解决上述问题,注意力机制首次引入到机器翻译中。在解码过程中,计算每一步j时都会计算每个编码器端隐藏层表示\bm{h_i^{in}}的注意力分数\alpha_{ji},以获得一个上下文向量c_j

\begin{align}e_{ji} = a(\bm{h_i^{in}},\bm{h_j^{out}})\\\alpha_{ji} = \frac{e_{ji}}{\sum_{i}{e_{ji}}}\\\bm{c_j} = \sum_{i}{\alpha_{ji}\bm{h_i^{in}}}\end{align}

通过此过程,时间步长问题和对齐问题都可以得到解决。

1.注意力的基本形式

上面讨论了注意力在机器翻译中的应用,为了正式将其概括为注意力的基本形式,我们将V={\bm{v_i}} \in \mathbb{R}^{n \times d_v}定义为矢量元素的序列,并将前面的步骤改写为

\begin{align}e_i=a(\bm{u,v_i}) & & (\textnormal{compute attention scores})\\\alpha_{i} = \frac{e_{i}}{\sum_{i}{e_{i}}} & & (\textnormal{normalize})\\c = \sum_{i}{\alpha_{i}\bm{v_i}} & & (\textnormal{encode})\end{align}

在第一步中,\bm{u} \in \mathbb{R}^{d_u}是一个适用于特定任务的模式向量,根据对齐函数a\bm{(u,v)}与序列中的每个元素进行匹配,输出一个标量分数e_i \in \mathbb{R}以表示匹配的程度。在大多数情况下,我们假设d_u = d_v=d。常见的有

Multiplicative:

\begin{align}\bm{u^Tv} & & \textnormal{(dot)}\\\bm{u^T}W\bm{v} & & \textnormal{(general)}\end{align}

Additive:

\begin{align}\bm{w_2^T}tanh(W_1[\bm{u};\bm{v}])\end{align}

MLP:

\begin{align}\sigma (\bm{w_2^T}tanh(W_1[\bm{u};\bm{v}]+\bm{b_1})+b_2)\end{align}

2.注意力机制的变体

在第一节我们讨论了注意力机制的基本形式,由于它的简单性和可解释性,它在各种NLP任务中被广泛使用。然而对于更复杂的任务而言,这种注意机制一般来说不够强大。下面是一个简单的例子

萨姆走进了厨房。萨姆拿起一个苹果。萨姆走进卧室。萨姆放下了苹果。

Q: 请问苹果在哪?A: 卧室。

潜在的困难是,Q和“萨姆走进卧室。”之间没有直接的关系,因此我们需要设计一个更复杂的机制,利用上下文中的潜在线索(在这种情况下是时间推理)引导注意力到正确的位置。由于近年来提出了不同的注意力变体,我们把它们归纳为几个最有代表性的类别:基本注意力(从一个序列中提取重要元素)、多维注意力(捕捉术语之间多种类型的交互)、分层注意力(提取全局和局部的重要信息)、自注意力(捕捉一个句子中的深层语境信息)、基于记忆的注意力(在复杂的NLP任务中发现潜在的依赖关系)和特定任务注意力(捕捉任务中指定的重要信息)。从左到右,相应的任务的复杂性增加,机制变得更有任务针对性。