编码机

深度学习中的注意力机制一

发布时间:2023/4/11 15:08:27   
有白癜风怎么办 http://m.39.net/baidianfeng/a_4174800.html

作者

蘑菇先生

来源

NewBeeNLP

头图

CSDN下载自视觉中国

目前深度学习中热点之一就是注意力机制(AttentionMechanisms)。Attention源于人类视觉系统,当人类观察外界事物的时候,一般不会把事物当成一个整体去看,往往倾向于根据需要选择性的去获取被观察事物的某些重要部分,比如我们看到一个人时,往往先Attend到这个人的脸,然后再把不同区域的信息组合起来,形成一个对被观察事物的整体印象。

「同理,AttentionMechanisms可以帮助模型对输入的每个部分赋予不同的权重,抽取出更加关键及重要的信息,使模型做出更加准确的判断,同时不会对模型的计算和存储带来更大的开销,这也是AttentionMechanism应用如此广泛的原因」,尤其在Seq2Seq模型中应用广泛,如机器翻译、语音识别、图像释义(ImageCaption)等领域。Attention既简单,又可以赋予模型更强的辨别能力,还可以用于解释神经网络模型(例如机器翻译中输入和输出文字对齐、图像释义中文字和图像不同区域的关联程度)等。

本文主要围绕核心的Attention机制以及Attention的变体展开。

Seq2SeqModel

Attention主要应用于Seq2Seq模型,故首先简介一下Seq2Seq模型。Seq2Seq模型目标是学习一个输入序列到输出序列的映射函数。应用场景包括:机器翻译(Machinetranslation)、自动语音识别(Automaticspeechrecognition)、语音合成(Speechsynthesis)和手写体生成(Handwritinggeneration)。

Seq2Seq模型奠基性的两个工作如下:

NIPS:SequencetoSequenceLearningwithNeuralNetworks[1]

该论文介绍了一种基于RNN(LSTM)的Seq2Seq模型,基于一个Encoder和一个Decoder来构建基于神经网络的End-to-End的机器翻译模型,其中,Encoder把输入编码成一个固定长度的上下文向量,Decoder基于「上下文向量」和「目前已解码的输出」,逐步得到完整的目标输出。这是一个经典的Seq2Seq的模型,但是却存在「两个明显的问题」:

把输入的所有信息有压缩到一个固定长度的隐向量,忽略了输入的长度,当输入句子长度很长,特别是比训练集中所有的句子长度还长时,模型的性能急剧下降(Decoder必须捕捉很多时间步之前的信息,虽然本文使用LSTM在一定程度上能够缓解这个问题)。把输入编码成一个固定的长度过程中,对于句子中每个词都赋予相同的权重,这样做是不合理的。比如,在机器翻译里,输入的句子与输出句子之间,往往是输入一个或几个词对应于输出的一个或几个词。因此,对输入的每个词赋予相同权重,这样做没有区分度,往往使模型性能下降。

注意上图中Encoder得到的上下文向量「仅用于作为Decoder的第一个时间步的输入」。

Decoder的另一个输入是前一时刻的单词,需要注意的是,在训练阶段是「真实label」(需要embedding一下),而不是上一时刻的预测值。而在测试阶段,则是上一时刻的预测值(具体使用时需要借助beam-search来得到最优翻译序列)。

但是实际训练过程中,「label是否使用真实数据2种方式,可以交替进行」,即一种是把标准答案作为Decoder的输入,还有一种是把Decoder上一次的输出的结果作为输入,因为如果完全使用标准答案,会导致收敛的过快,导致测试的时候不稳定。

另外,上述输入输出中的每个单词,都要借助「embedding」技术。

EMNLP:LearningPhraseRepresentationsusingRNNEncoder–DecoderforStatisticalMachineTranslation[2]

和NIPS几乎同时发表,思想也是一样的。只不过在这篇文章中,作者提出了一种新的RNNCell,即GRU代替LSTM来构建Seq2Seq模型。

还有一点不同的是,Encoder得到的上下文向量会作用于Decoder「每一个时间步」的预测。

总结起来:RNN-basedEncoder-DecoderFramework,目标是预测,其中都是one-hot向量。

「Encoder」

给定输入,,将其编码为上下文向量.

是LSTM或GRU,是时间步的单词的one-hot表示,先经过embedding矩阵嵌入后作为RNN在时刻的输入,是时间步的encode;是时间步的encode。

是上下文向量,是关于的函数。是输入的最大长度。最简单的,,即最后一个时间步得到的encode作为上下文向量。

「Decoder」

Decoder在给定上下文向量以及已经预测的输出条件下,预测下一个输出。换句话说,Decoder将输出上的联合分布分解为有序条件分布(orderedconditionals):

其中,,是输出的最大长度。

使用RNN,每个条件分布可以写成下式:

是输出词的one-hot向量(全连接+softmax激活后得到),是前一时刻已经预测的输出词的one-hot向量,先经过embedding后再作为的输入。是一个非线性函数(e.g.,全连接+softmax),输出关于的概率分布。(,是LSTM/GRU)是RNN的隐藏层状态。(注意,不是RNN提取隐藏层状态的LSTM或GRU,而是隐藏层后面接的全连接层或其他非线性函数,LSTM或GRU提取的Decoder隐状态和上下文向量以及已经预测的输出都将作为的输入,用于预测概率分布)。

Attention

如上文所述,传统的Seq2Seq模型对输入序列缺乏区分度,存在明显的两大问题。因此,有大牛提出使用Attention机制来解决问题。下面将按照Attention的不同类型重点介绍一些Attention上的研究工作。

BasicAttention

本小节介绍最传统和基础的Attention模型的应用。首先直观感受下Attention机制的一个示意动图。

MachineTranslation

ICLR:NeuralMachineTranslationbyJointlyLearningtoAlignandTranslate[3]

这是ICLR提出的文章,机器翻译的典型方法。作者在RNNEncoder-Decoder框架上,引入了Attention机制来同时进行翻译和对齐。使用bidirectionalRNN作为Encoder,Decoder会在翻译的过程中通过模拟搜索源句子focus到不同部位上来进行更准确的解码。模型示意图如下:

首先将Decoder中的条件概率写成下式:

其中,一般使用softmax全连接层(或多加几层,输入的3个向量concat到一起后进行FeedForward),是Decoder中RNN在时间步的隐状态,根据如下LSTM或GRU函数计算得到:

是关于前一时刻Decoder端隐状态,前一时刻已经预测的输出的embedding表示以及该时刻的上下文向量的函数。是LSTM或GRU。

注意,和已有的encoder-decoder不同,这里的条件概率对「每一个目标单词」都需要有一个「不同的」上下文向量。

而上下文向量取决于Encoder端输入序列encode后的RNN隐状态(bidirectionalRNN,因此包含了输入句子位置周围的信息,)

而每一个权重使用softmax转换为概率分布:

而是输出和输入的对齐模型(alignmentmodel),衡量了输入位置周围的信息和输出位置的匹配程度。

得分依赖于Decoder端时刻的「前一时刻的隐状态」和Encoder端时刻的隐状态。文中使用前馈神经网络学习对齐模型,并且和其他组件联合学习,实际上学到的是softalignment,因此可以很容易应用梯度反向传播。

总之,可以理解为衡量了输出单词和输入单词的对齐程度,而是时刻,所有encode隐状态根据该对齐程度得到的期望上下文向量,是所有对齐情况下的期望。衡量了在计算下一个decoder隐状态和预测过程中,相对于前一个decoder隐状态,不同的重要性程度。这一「Decoder中的」注意力机制使得只需要

转载请注明:http://www.aideyishus.com/lkyy/4043.html

------分隔线----------------------------