Bahdanau D , Cho K , Bengio Y . Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.
1、什么是Attention机制
注意力,即重点关注某一局部信息。比如一张大合照,我们肯定是首先关注照片中的人而不是背景的花花草草。再比如在进行句子的情感识别的时候,我们通常需要关注某几个关键词,以及词语间的前后文关系,“快乐”,“悲伤”,“愤怒”,等等。因此:
- 注意力机制可以决定输入的哪一部分更值得关注;
- 注意力可以只提取出关键特征
2、为什么要引入Attention机制?
根据通用近似定理,前馈网络和循环网络都有很强的能力。但为什么还要引入注意力机制呢?
- 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
- 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高。可以借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力 [1]。
3、Attention的实现原理[2]
3.1 权重
实现Attention的原理其实很简单,只需要对输入加上权重就好,如Fig.1所示,这有点像Photoshop中的蒙版,白色的表示模型需要着重关注的对象,黑色的区域可以暂时不需要关注,因为它对我们的目标没有帮助。
Fig.1 Attention
以Seq2Seq模型为例,如下图所示。Seq2Seq的Encoder的最后一个状态的输出是Decoder的初始隐藏状态输入。我们计算Decoder的初始隐藏状态与Encoder的每一个状态的输出的相关性,结果记作,命名为权重,越大,相关性也就越大,反之相关性越小,记作:
因为有个隐藏状态,所以共有个,所有均为0到1之间的数据,且。
原论文中是根据如下计算的,具体请参考Fig.3:
- 将和拼接为一个长向量;
- 将拼接后的向量与权值相乘并经过激活函数tanh
- 将激活函数的输出与相乘,得到一个数
- 将所有计算得到的经softmax函数映射到0-1之间且和为1。
除此之外,还有另一种计算方法,如下所示,计算步骤如Fig.4所示:
- 分别将和作线性映射
- 将线性映射之后的向量作内积
-
Softmax归一化
Fig.4 alpha的计算过程
3.2 加权平均
计算得到每一个隐藏层状态的权重后,与每一个状态值相乘再相加,得到新的向量Context vector :
若没有attention,Decoder的第一个时刻的计算方式为:将Encoder的最后一个状态输出和Decoder的第一个输入拼接。而现在有了attention,将权重与每一个隐藏状态相乘再相加得到了新的向量,新的向量中包含整个时间序列的所有信息,所以就解决了遗忘的问题,将、和一起运算就得到了Decoder的第一个状态输出,其计算方式如Fig.5所示。
和刚刚一样,将与Encoder的所有状态对比,计算每一个状态所占权重。虽然它们都是,但与刚刚的已经不是同一个,因为刚刚的是和计算得到的,而现在是。也就是说,该步计算的是Encoder的隐藏状态与Decoder的第一个状态的相关性。
计算完后我们同样得到了Encoder隐藏状态的加权平均。
依次重复,我们可以得到加入了attention的Decoder的隐藏状态的输出,如Fig.7所示。
Fig.7
综上,在熟悉了如何引入attention机制之后我们来回顾一下attention是如何让模型只关注部分区域的。如Fig.8所示,这是一个Seq2Seq机器翻译模型,Decoder在翻译第一个单词的时候会回顾Encoder的所有inputs,但并不是所有的inputs都对翻译第一个单词有用,如图中所示,线越粗表明该单词对翻译结果的影响越大,可以看出,翻译I'
的时候,第一个输入the
对结果影响很大,agreement
和signed
次之,所以我们只需attention这几个单词即可。同理,翻译第二个单词accord
同样要回去再看下整句话,发现只有agreement
对最终的结果有影响,所以只需attentionagreement
即可。
参考:
网友评论