注意力机制(一)
注意力机制(一)
近几年随着计算力和数据量的飞速飙升,深度学习有了自己的用武之地。最近几年,各种顶会的期刊呈指数形式不断飞升,各种网络和方法的创新也层出不穷。除此之外,一些很多年前提出的方法有的也在最新的应用中取得很好的效果。Attention模型在九几年就被提出了,开始被应用在机器视觉等方面,后来被在机器翻译等NLP方向证明用很高的应用价值。最近因为课题需要,学习了Attention模型,并将自己学到的粗浅认识记录于此。主要分为两部分:一是Attention模型在Seq2Seq问题中与RNN(LSTM、GRU)结合的模型;二是Google提出的Transform模型,本文首先介绍第一部分,并使用Pytorch框架实现基本模型。
一、 Seq2Seq模型
在一些任务中,模型的输入与输出可能是不定的,例如在机器翻译任务中翻译和被翻译的语言一般都是不定长的序列。在这些情况下我们可以使用编码器—解码器(encoder-decoder)或者seq2seq模型。这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器。编码器用来将语句编码成背景向量,而解码器将背景向量编码并输出序列。模型的具体结构如下图所示。
seq2seq模型结构
编码器的作用是将一段序列X1,X2, . . .,Xt编码成为一段背景向量C,该结构常用循环神经网络(LSTM, GRU)进行构建,例如Xi输入句子中的第i词。在时间步t,循环神经网络将输入Xt
的特征向量Xt和上一个时间步的隐藏状态ht-1变换为当前时间步的隐藏状态ht,如下式所示。
然后根据通过自定义函数将编码过程中各个编码单元的隐藏变量计算,得出编码器的背景变量。
以上这个过程就是编码--解码模型的编码部分,并且实力是一个单向循环网络,我们也可以使用双向循环网络,在这种情况下,编码器每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。
解码器的作用是将背景向量解码生成输出序列,解码器一般也是使用循环神经网络(LSTM、GRU)实现。在解码时需要考虑的有两方面的信息,一是前一时刻的输出信息,在进行机器翻译任务时,翻译所得的文本无论是句与句之间还是词与词之间都有很强的依赖性,为此借助循环神经网络的特点,可以构建模型考虑这种前后之间的依赖性;二是被翻译语句的总体信息,这需要借助背景向量进行信息挖掘。所以,在解码模型中每个单元中都包含两个输入,分别为前一个状态的输出和背景向量。
二、 基于Seq2Seq结构的Attention模型
Seq2Seq结构解决的是不定长序列到不定长序列的问题,但是在一些任务中利用Seq2Seq把信息编码再解码的过程存在一些问题。例如在执行机器翻译的任务中,把汉语中的“深度学习”这个短语翻译成“Deep learning”当翻译“深度”这个汉语短语时应该对应的是“Deep”这个英文单词,所以说翻译语句和被翻译语句和被翻译语句之间的语料是有一定的对应关系的,但是上文中提出的一般的Seq2Seq结构每次只是重复的把背景向量输入给每个解码器,不能充分的考虑前后语料的相关性。所以,在此基础上使用Attention模型,以考虑在输出不同的翻译序列时能够重点考虑与其相关的输入。基于Attention的seq2seq模型结构如下图所示。
基于Attention的seq2seq模型
此结构的策略是将编码器的特征信息以权重的形式进行组合生成背景向量C,并把各个权重作为参数进行训练;在解码过程中,每个解码器使用的背景向量是动态变化的,这样就可以在解码时对前面的输入信息有侧重,从而更好地完成机器翻译任务。