深度学习中的Attention机制

RNN作机器翻译有它自身的弱点,Attention正是为了克服这个弱点而出现的。因此,要理解Attention,就要搞明白两件事:面试

  • RNN在作机器翻译时有什么弱点网络

  • Attention是如何克服这个弱点的机器学习

本文试图从解答这两个问题的角度来理解Attention机制。ide

 

目录
  • 1、RNN作机器翻译的经典思路 encoder-decoder
  • 2、encoder-decoder的缺点在哪里?
  • 3、Attention是如何利用中间的输出的
  • 4、Attention中产生几率分布的两种方法
  • 5、Attention机制的扩展
  • 6、总结

 

1、RNN作机器翻译的经典思路 encoder-decoder

用RNN作机器翻译时,一般须要两个RNN网络,一个用来将接收待翻译语句,对其进行编码,最后输出一个vector,这个网络叫encoder。而后,该vector会做为输入,传给另外一个RNN网络,该网络用来根据vector产生目标语言的翻译语句,这个网络叫作decoder。以下图所示:学习

《机器学习面试之Attention》

上图中间的Context就是咱们这里说的第一个RNN产生的vector。编码

2、encoder-decoder的缺点在哪里?

encoder-decoder最大的缺点是,encoder接收了无论多长的语句,最后输出的只是最后一个vector,当语句很长时,这个vector可否有效地表示该语句是很值得怀疑的。翻译

如何解决这个问题呢?咱们很天然会想到,第一个RNN其实在中间会产生不少输出,这些输出都被咱们抛弃了,咱们只用了最后的一个。若是能利用上中间的输出,兴许能够解决问题。Attention正是利用上了这些中间的输出。code

3、Attention是如何利用中间的输出的

先上图,再来解释:blog

《机器学习面试之Attention》

上图中的A是咱们的encoder, B是咱们的decoder。
能够想象,A网络接收了一个四个字的句子,对每一个字都产生了一个输出(这些输出都是一个vector),咱们称其为s1,s2,s3,s4。图片

咱们看上图的B网络,在第一个B产生的hidden state(称其为h1)除了传给下一个cell外,还传到了A网络,这里就是Attention发挥做用的地方,咱们来看看发生了什么。

第一步
h1 分别与s1,s2,s3,s4作点积,产生了四个数,称其为m1,m2,m3,m4(这些都是标量,不是向量了!)

第二步
m1,m2,m3,m4 传到一个softmax层,产生一个几率分布a1,a2,a3, a4。

第三步
将a1,a2,a3, a4 与s1,s2,s3,s4分别相乘,再相加,获得获得一个vector,称其为Attention vector。

第四步

Attention vector 将做为输入传到B网络的第二个cell中,参与预测。

以上就是Attention机制的基本思想了。咱们看到,Attention vector 实际上融合了s1,s2,s3,s4的信息,具体的融合是用一个几率分布来达到的,而这个几率分布又是经过B网络上一个cell的hidden state与s1,s2,s3,s4进行点乘获得的。

Attention vector实际上达到了让B网络聚焦于A网络输出的某一部分的做用。

4、Attention中产生几率分布的两种方法

在第3部分中,咱们的几率分布来自于h与s的点积再作softmax,这只是最基本的方式。在实际中,咱们能够有不一样的方法来产生这个几率分布,每一种方法都表明了一种具体的Attention机制。

  • 1 加法Attention
    在加法Attention中,咱们再也不让h与s作点积,而是作以下的运算:

    《机器学习面试之Attention》

va和Wa都是能够训练的参数。h与s之间的分号表示将两者接到一块儿产生一个更长的vector。这样产生的数再送往softmax层,进而产生一个几率分布。

固然,咱们还能够这么作:

《机器学习面试之Attention》

这里只是再也不把h与s接到一块儿而已,本质上没有什么区别的。

  • 2 乘法Attention
    乘法Attention将h与s作以下的运算:

    《机器学习面试之Attention》

显然,乘法Attention的参数更少,效率天然也会更高一些。

5、Attention机制的扩展

Attention机制的核心在于对一个序列数据进行聚焦,这个聚焦是经过一个几率分布来实现的。这种机制其实有很强的普适性,能够用在各个方面。

好比,根据图片产生描述该图片的文字, 首先,图片会通过CNN进行特征的提取,提取的数据会输入到产生描述文字的RNN中,这里,咱们能够引入Attention机制,让咱们在产生下一个文字时,聚焦于咱们正在描述的图片部位。

其次,在句子表示中,self Attention机制是成功扩展的Attention的范例。其基本原理以下:

假如咱们用一个RNN读入了一个句子,产生了h1, h2,h3,h4四个hidden state。
为了获得该句子的摘要,咱们能够这样作:
对每个h计算一个分数:

《机器学习面试之Attention》

四个h共产生了4个分数,将这四个分数送入一个softmax层,产生一个几率分布,根据这个几率分布对四个h进行加和,获得句子摘要的第一个vector。以下图所示:

《机器学习面试之Attention》

为了获得更多的vector,咱们能够把上面图中的小写va换成一个矩阵,而后,咱们的a也就变成了多个几率分布组成的矩阵,每一个几率分布均可以用来与h进行加和产生一个vector,这样咱们就产生了摘要的多个vector,以下图所示:

《机器学习面试之Attention》

6、总结

经过以上的内容,咱们了解到,Attention机制最初用来克服RNN作机器翻译时的缺点,而后,人们发现,Attention机制具备普遍的适用性,因而它又被扩展到了产生图片描述,作句子摘要等任务上。

咱们也清楚了,不一样的Attention机制的核心区别在于产生几率分布的方法不一样。

相关文章
相关标签/搜索