说attention模型之前呢,先了解一下Encoder-Decoder框架的概念
因为目前绝大多数文献中出现的AM模型是附着在Encoder-Decoder框架下的,当然,其实AM模型可以看作一种通用的思想,本身并不依赖于Encoder-Decoder模型,这点需要注意。
下图是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示:
Encoder-Decoder框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对<X,Y>,我们的目标是给定输入句子X,期待通过Encoder-Decoder框架来生成目标句子Y。X和Y可以是同一种语言,也可以是两种不同的语言。而X和Y分别由各自的单词序列构成:
Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非线性变换转化为中间语义表示C:
对于解码器Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息y1,y2….yi-1来生成i时刻要生成的单词yi
每个yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y。
Encoder-Decoder是个非常通用的计算框架,至于Encoder和Decoder具体使用什么模型都是由研究者自己定的,常见的比如CNN/RNN/BiRNN/GRU/LSTM/Deep LSTM等,这里的变化组合非常多。
前面所说的Encoder-Decoder模型是没有体现出“注意力模型”的,所以可以把它看作是注意力不集中的分心模型。为什么说它注意力不集中呢?请观察下目标句子Y中每个单词的生成过程如下:
其中f是decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,是y1,y2也好,还是y3也好,他们使用的句子X的语义编码C都是一样的,没有任何区别。而语义编码C是由句子X的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子X中任意单词对生成某个目标单词yi来说影响力都是相同的,没有任何区别(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权的,估计这也是为何Google提出Sequence to Sequence模型时发现把输入句子逆序输入做翻译效果会更好的小Trick的原因)。这就是为何说这个模型没有体现出注意力的缘由。这类似于你看到眼前的画面,但是没有注意焦点一样。没有引入注意力的模型在输入句子比较短的时候估计问题不大,但是如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是为何要引入注意力模型的重要原因。
增加了AM模型的Encoder-Decoder框架理解起来如图所示:
即生成目标句子单词的过程成了下面的形式:
基于attention的翻译
模型:
- 双向RNN用于捕获两侧信息
- “注意力”模型关注当前翻译的词
Encoder部分: hj
根据当前xj
和hj-1
捕获两侧信息- 再将两部分信息拼接
*Encoder更细的解释:
- 用双向RNN,避免了信息全部都压缩到一个向量里
- 有多少个词就有多少个标记向量
hj
,hj
包含了周边信息,相比onehot好一些
Dencoder部分: yi
为当前翻译的结果,Si-1
为之前的翻译,Ci
为给不同词投射不同注意力的加权向量ti
为需要结合注意力去完成的内容
Attention部分:
- hj为RNN捕获周边信息的拼接
- 注意力的得分
eij
通过之前的翻译结果Si-1
和encoder的hj
周边信息来得到
Si-1即y1.y2…yi-1
Ci的计算:根据之前的翻译结果Si-1
和encoder的hj
周边信息得到每个输入单词的得分权重,通过softmax转换成概率向量,而从在不同的词上投射注意力
*W为参数矩阵,作为可训练参数加入整个网络
Luong 在论文4中提出一种 a(对齐函数) 的新计算方式
归一化之后乘以每个单词的信息hj:
由于句子的每个词都有单独的标记hj
,能够用不同的权重对标记向量加权
rnn的隐藏状态,也称 thinking parameters 或 annotation informations,每一时刻的隐藏状态表示整个输入句子的前后关系,逻辑,顺序等信息,同时更加关注(focus on)该时刻前后时刻的关系的表示信息。
当使用bilstm时,隐藏状态包括 前向隐藏状态(forward state) 和 后向隐藏状态(back state),将这两个状态对应时刻的状态相加就可以。
上述内容就是论文里面常常提到的Soft Attention Model的基本思想,你能在文献里面看到的大多数AM模型基本就是这个模型,区别很可能只是把这个模型用来解决不同的应用问题。那么怎么理解AM模型的物理含义呢?一般文献里会把AM模型看作是单词对齐模型,这是非常有道理的。目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。在其他应用里面把AM模型理解成输入句子和目标句子单词之间的对齐概率也是很顺畅的想法。
图像识别的attention
Attention模型最初应用于图像识别,模仿人看图像时,目光的焦点在不同的物体上移动。当神经网络对图像或语言进行识别时,每次集中于部分特征上,识别更加准确。如何衡量特征的重要性呢?最直观的方法就是权重,因此,Attention模型的结果就是在每次识别时,首先计算每个特征的权值,然后对特征进行加权求和,权值越大,该特征对当前识别的贡献就大。
例如要对图像的描述做填空的时候,填空的词语应该是图像中的某一区域内的东西,此时将注意力放在这一区域内才是最准确的。
首先复习一下RNN,RNN结构中,每个时间点t都会输出一个结果Ot,又将这个Ot作为下一个的输入,继续预测。
而在图像的Attention模型中,在RNN看到St-1即当前描述图像的一段词,在去预测下一个词的时候,还会输出一个概率矩阵(下图a1,归一化之后得到的),且概率矩阵和图像的特征向量维度是相同的,将概率矩阵和图像的特征向量点乘,由于得到的图像的特征向量上的每个值都有一个感受野,就能够得到对于每一块区域的应该投射的注意力,即对输入的不同部分加权,有不同的重视程度。
继续将加权后的特征图和上一次输出的值作为下一个时间点的输入,即在上面提到的调整加入注意力模型的变化的Ci。
参考文章:https://blog.csdn.net/malefactor/article/details/50550211