神经网络基础05-注意力机制
参考链接:https://blog.csdn.net/shenziheng1/article/details/89323074
Attention Model
sequence-to-sequence模型由编码器-解码器体系结构组成,如图2(a)所示。编码器是一个RNN,它接受tokens的输入序列(x1,x2,…,xt),其中t是输入序列的长度,并将其编码为固定长度的向量(h1,h2,…,ht)。解码器也是一个RNN,它以一个固定长度的向量ht作为输入,通过tokens-to-tokens生成一个输出序列(y1,y2,…,ytt),其中tt是输出序列的长度。在每个位置t,ht和st分别表示编码器和解码器的隐状态。
关键理念
注意模型旨在通过允许解码器访问整个编码的输入序列(h1,h2,…,ht)来减轻这些挑战。其核心思想是在输入序列上引入注意权重α,以优先考虑存在相关信息的位置集,以生成下一个输出token。
Attention的使用
具有注意模型的相应编码器-解码器体系结构如图2(b)所示。网络结构中的注意力模块负责自动学习注意力权重αij,它可以自动捕获hi(编码器隐藏状态,我们称之为候选状态)和sj(解码器隐藏状态,我们称之为查询状态)之间的相关性。然后,这些注意力权重用于构建内容向量C,该向量作为输入传递给解码器。在每个解码位置j,内容向量cj是编码器所有隐藏状态及其相应注意权的加权和。
学习注意力权重
注意力权重是通过在体系结构中加入一个额外的前馈神经网络来学习的。该前馈网络学习一个特殊的注意权αij,作为两种状态h(i)和s(j-1)的函数。简单地说,就是用这两种状态作为神经网络的输入,进而学习αij关于他们的函数。
Taxonomy of Attention
我们将注意力分为四大类,并说明每一类中不同类型的注意力,如表1所示。我们要强调的是,这些类别并不相互排斥。注意力模型可以应用于多个类别的组合,如多层次的、self和soft注意力组合。因此,我们可以将这些类别视为维度,在将注意力用于感兴趣的应用时,可以考虑这些维度。为了使这一概念易于理解,我们提供了一份关键技术论文列表,并在表2中指定了作者在提出的方法中使用的多种注意类型。
Number of sequences
到目前为止,我们只考虑了涉及单个输入和相应输出序列的情况。当候选状态(candidate state)和查询状态(query state)分别属于两个不同的输入和输出序列时,使用这种注意模型的我们称之为区别性distinctive。大多数用于翻译、总结、图像字幕和语音识别的注意力模型都属于区别性distinctive的注意力类型。
共同注意模型co-attention同时对多个输入序列进行操作,并共同学习它们的注意力权重,以捕获这些输入之间的交互作用。刘等人使用共同注意力模型构建了视觉问答系统。作者认为,除了对输入图像进行视觉注意建模外,对问题注意建模也很重要,因为问题文本中的所有单词对问题的答案并不同等重要。此外,基于注意力的图像表示用于引导问题的注意力,反之亦然,这基本上有助于同时检测问题中的关键短语和与答案相关的图像的相应区域。
相反,对于文本分类和推荐等任务,输入是序列,但输出不是序列。在相同的输入序列中,注意力模型可以用于学习输入序列中每个tokens的相关tokens。换句话说,对于这类关注模型,查询和候选状态属于相同的序列。为此,Yang等人[Yang et al. ,2016]提出了自我关注,也就是内在注意力模型。
Number of abstraction levels
在最一般的情况下,只为原始输入序列计算注意力权重。这种注意力模型可以称为单一水平single-level。另一方面,注意力可以按顺序应用于输入序列的多个抽象层次。较低抽象级别的输出(内容向量)成为较高抽象级别的查询状态。此外,使用多层次注意力模型可以根据权重是自上而下(从较高抽象级别到较低级别)[Zhao and Zhang, 2018]还是自下而上学习[Yang et al., 2016]来进一步分类。
我们举例说明了这一类别中的一个关键示例,它在两个不同的抽象级别(即单词级别和句子级别)使用注意力模型来完成文档分类任务[Yang et al., 2016]。该模型被称为“层次注意力模型”(HAM),因为它捕获了文档的自然层次结构,即文档由句子组成,句子由单词组成。多层次的注意力模型允许提取句子中重要的单词和文档中重要的句子,如下所示。它首先建立了一种基于attention的句子表示法,并将第一级attention应用于单词嵌入向量序列。然后,它使用第二级注意来聚合这些句子表示,以形成文档的表示。文档的最终表示形式用作分类任务的特征向量。
Number of position
在第三类中,差异来自于计算注意力函数的输入序列的位置。Bahdanau等人引入的注意力模型也被称为软注意力soft attention [Bahdanau et al., 2014]。顾名思义,它使用输入序列所有隐藏状态的加权平均值来构建内容向量。软加权方法的应用使得神经网络易于通过反向传播进行有效的学习,同时也导致了二次计算代价。
Xu等人提出了一个硬注意模型 hard attention [Xu et al., 2015],其中内容向量是根据输入序列中随机抽样的隐藏状态计算出来的。这是通过使用由注意权重参数化的多努利分布来实现的。由于计算成本的降低,硬注意模型是有益的,但是在输入的每一个位置做出一个艰难的决策,使得所得到的框架不可微分,难以优化。因此,为了克服这一局限性,文献中提出了变分学习法和策略梯度法在强化学习中的应用。
在机器翻译任务的背景下,Luong等人提出了两种关注模型,即局部Local关注模型和全局Global关注模型[Luong et al. , 2015]。全局注意力模型与软注意力模型相似。另一方面,局部注意模型介于软注意和硬注意之间。关键思想是首先检测输入序列中的注意点或位置,然后在该位置周围选择一个窗口,以创建局部软注意模型。输入序列中的位置可以设置(单调对齐)或通过预测函数(预测对齐)学习。因此,局部关注的优势在于在软关注、硬关注、计算效率、窗口内可微性之间的参数权衡。
Number of representations
一般来说,输入序列的单一特征表示被大多数网络模型使用。但是,在某些情况下,使用输入的一个特征表示可能不足以完成下游任务。在这种情况下,一种方法是通过多个特征表示来捕获输入的不同方面。注意力机制可以用来为这些不同的表示分配重要权重,这些表示可以确定最相关的方面,而忽略输入中的噪声和冗余。我们将此模型称为多表示注意模型,因为它可以确定下游应用程序输入的多个表示的相关性。最终的表达是这些多重特征及其注意模型的权重加权组合。注意力模型的一个好处是通过检查权重,直接评估哪些嵌入是特定下游任务的首选嵌入。
Kiela等人在同一输入句的不同单词嵌入上学习注意力模型权重,以改进句子表示[Kiela et al. , 2018]。同样地,Maharjan等人也利用注意力来动态地给词汇、句法、视觉和体裁信息的书籍的不同特征表示赋予权重[Maharjan et al., 2018]。
类似地,在多维注意multi-dimensional中,引入权重来确定输入嵌入向量的各个维度的相关性。直觉地将,计算向量的每个特征的分数可以选择在任何给定内容中最能描述词牌token特定含义的特征。这对于自然语言应用程序尤其有用,因为在自然语言中,单词嵌入会遇到一词多义问题。这一方法在Lin等人中展示了更有效的句子嵌入表示[Lin et al. , 2017],在Shen等人中展示了语言理解问题上[Shen et al. 2018]进行了充分的讨论。
Network Architectures with Attention
在本节中,我们描述了与注意力结合使用的三种的神经网络架构:(1)编码器-解码器框架,(2)将注意力扩展到单个输入序列之外的存储网络,以及(3)利用注意力绕过RNN模型的顺序处理
Encoder-Decoder
最早使用注意力是作为基于RNN的编码器-解码器框架的一部分来编码长的输入语句[Bahdanau et al., 2014]。因此,注意力在这种体系结构中得到了最广泛的应用。一个有趣的事实是,注意力模型可以采用任何长度的输入表示,并将其减少到一个固定长度的内容向量,用于解码步骤。因此,它允许将输入表示与输出分离。我们可以利用这一优势来引入混合编码器解码器,最流行的是卷积神经网络(CNN)作为编码器,RNN或长短期存储器(LSTM)作为解码器。这种类型的体系结构对于多模式任务特别有用,例如图像和视频标注、可视问答和语音识别。
Memory Networks
像问答和聊天机器人这样的应用程序需要能够从事实数据库中的信息中学习。网络的输入是一个知识数据库和一个查询,其中一些事实比其他事实更与查询相关。端到端内存网络[Sukhbaatar et al., 2015]通过使用一组内存块存储事实数据库来实现这一点,并注意内存中每个事实的模型相关性以回答查询。使用注意力还提供了计算优势,使目标连续,并通过反向传播实现端到端训练。端到端存储器网络可以被看作注意力模型的一种推广,它不是只在一个序列上建模,而是在一个大型的序列数据库上建模。
Networks without RNNs
RNN结构依赖于编码步骤输入的顺序处理,因为处理无法并行化,这导致计算效率低下[Vaswani et al., 2017]。为了解决这一问题,作者提出了一种Transformer结构,其中编码器和解码器由,带有两个子层的相同层组成:位置前馈网络(FFN)层和multi-head自注意层。
Position-wise FFN: 输入是序列的,它要求模型利用输入的时间信息,但是不使用捕获该位置信息的组件(如,RNN/CNN)。为此,在Transformer的编码阶段使用Position-wise FFN为输入序列的每个标记token生成内容嵌入和位置编码。
Multi-Head Self-Attention: 在每个子层中使用self-attention来关联token及其在相同输入序列中的位置。此外,注意力机制被称为multi-head,因为几个注意力层是平行堆叠的,对相同输入序列进行不同的线性变换。这有助于模型捕获输入的各个方面并提高其表达能力。
Transformer结构实现了显著的并行处理、更短的训练时间和更高的翻译精度,无需任何循环的组件,这是一个显著的好处。然而,位置编码仅弱合并位置信息,可能不适用于对位置变化更敏感的问题。Shen等人利用时间卷积编码位置信息以及Transformer的自我注意机制 [Shen et al., 2018]。
此外,还有更直接的方法来中断输入的顺序处理。Raffel和Ellis提出了前馈注意模型[Raffel and Ellis, 2015],他们使用注意模型来折叠数据的时间维度,并使用FFN而不是RNN来解决顺序数据问题。在这种情况下,注意力模型被用来从可变长度的输入序列中产生一个固定长度的内容向量,它可以作为一个输入,进而输入到FFN。