您的位置:首页 > 理论基础 > 计算机网络

Attention and Memory in Deep Learning and NLP(深度学习和NLP中的注意和记忆机制) 阅读笔记

2016-07-26 20:19 871 查看

Attention and Memory in Deep Learning and NLP(深度学习和NLP中的注意和记忆机制) 阅读笔记

引言

什么是Attention Mechanisms(注意机制)

神经网络中的注意机制类似人类的视觉注意机制,人类视觉本质上看图片会聚焦在“高清晰度“的区域,同时也会感知周围“低清晰度”的区域,然后不断调整焦点

目前,注意机制和RNN结合大放异彩

注意机制可以解决什么问题?

以NTM(Neural Machine Translation)为例,主要的工作是把源语言句子通过RNN编码成一个向量,然后再通过RNN解码成其他语言的句子

解码器产生翻译句子完全依赖编码器的最后一个隐含状态,这个状态必须包含句子的所有信息,更加书面的说法是,句嵌入向量。在向量空间了,语义接近的句子向量也是接近的

不合理的之处:将一个很长的句子的所有信息都编码成一个单独的向量,并且解码器只用这个唯一的向量来生成目标翻译句子。 假设句子的长度是50,目标翻译句子英语的第一个单词有很大的可能性和原句的第一个词语有关,这也就意味着,解码器需要考虑到50步之前的原句信息,而这 个信息需要以某种形式编码在编码器的最后一个向量里面

众所周知,RNN容易产生梯度消失或者梯度爆炸等诸多麻烦。理论上,使用LSTM这种结构可以解决这个问题,但是实践中,对于长句子的学习(long-range-dependencies)仍然问题重重。举个例子,研究发现,将原句的顺序颠倒过来能够对翻译结果产生明显的提升,因为这样 做之后,编码器个解码器相关的词语的距离减少了(如,将 “我爱你”–>“I love you”这个编码器-解码器模型变成
“你爱我”–>”I love you” 之后,“我”和 “I”的距离就减少了。相似地,将输入句子重复两次也能够起到优化翻译结果的目的(如 将“我爱你”这个输入变成“我爱你我爱你”,译者注)。

颠倒句子的做法是一种投机取巧的做法,不是根本的解决方法。需要源语言和目标语言的词语循序一致才能达到不错的效果,但是像日语这种最后一个词与目标语言第一个词很语义很接近,颠倒顺序反而结果更糟糕。那么应该怎么办?注意机制!

使用注意机制我们不再需要把整个很长的句子编码成固定的向量,而是在每一步产生输出是关注源句子的不同部分。最重要的是让模型学习到从输入句子中注意什么,和需要产生什么。例如,在源语言和目标语言高度相似(英语和德语),在编码是模型根据关注单词顺序

如下图,解码器产生每一个输出单词都需要依赖所有的输入信息而不仅仅是最后一个状态。a矩阵是对于每个输出状态,每个输入状态有多少信息需要被考虑到。如 a3,2是一个大数字,表示解码器生成输出第三个单词时,需要更多关注输入的第二个单词

注意机制的开销

Attention模型的开销很大,我们需要计算所有输入和输出的单词的attention value,当句子长度增加时,计算量会急剧增大

但是这一点违反了我们的常识,人类的注意机制是关注一些东西而忽略另外的一些东西。但是在模型中我们需要在决定关注哪些内容之前,要把所有信息计算一遍。

模型中的关注机制就是每次决定生成的单词需要关注原句子中哪些词语时,需要把原句子中每个词与生成的词的关注度计算一遍。

这样做很浪费资源,而且和人类的做法不一样。实际上,attention model更加像记忆遍历,而不是关注。

一个attention model的替代方案是用增强学习来近似预测需要关注的位置,在Recurrent Models of Visual Attention有应用

attention在机器翻译之外的应用

目前为止,了解了机器翻译中的注意机制,但是相同的机制可以应用到其他的递归模型

Show, Attend and Tell中,作者应用了注意机制对图片生成文字描述。使用卷积神经网络去编码图片,然后使用带注意机制的递归神经网络生成描述。通过可视化attention权重,可以看到与翻译类似,通过寻找图片中的关注点然后产生一个词语

Grammar as a Foreign Language,作者使用rnn和attention生成句子的解析树

Teaching Machines to Read and Comprehend,作者用rnn和attention教机器阅读和理解问题并产生答案

注意=(模糊)记忆?

attention mechanism能够允许模型在任意的一个时刻回溯到输入序列的所有信息,而不是将所有的信息编码成一个固定长度的向量。

attention就是使网络能够获取器内部记忆信息,而这些内部信息就是编码器的隐含状态。所以,attention并不是选择哪些该关注,而是从记忆中检索什么信息应该被抽取。

而抽取记忆并不是抽取单一区域的值,而是所有记忆的加权。(fuzzy)Memory

现在的趋势是使用更加复杂的端到端的记忆网络,模型允许在产生输出之前多次读取相同的输入序列,在每一步更新记忆的内容。

在将来,我们可能会清晰地划分memory Mechanism和Attention Mechanism的界限,也许在Reinforcement Learning Neural
Turing Machines这一文中,我们能够汲取到一点思路

原文:http://www.wildml.com/2016/01/attention-and-memory-in-deep-learning-and-nlp/

参考翻译:http://blog.csdn.net/u010223750/article/details/51537656
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息