在深度学习与自然语言处理领域的Attention和Memory
(笔记草稿)
一、Attention是什么?
私以为所谓注意力是:在目标的预测或判定时,有选择性的利用目标的上下文信息。
二、Attention有什么用?
原文中的表述为:
The basic problem that the attention mechanism solves is that it allows the network to refer back to the input sequence, instead of forcing it to encode all information into one fixedlength vector.
注意力机制在机器翻译中的应用尤为突出,如下以机器翻译为业务背景说明注意力机制到底解决了什么问题。
2.1、机器翻译的简单背景
a. 传统的机器翻译依赖于基于文本统计的特征工程,需要大量的特征构造方法和多系统的集成
b. 神经机器翻译只需要简单的特征,通过一个端到端的统一学习框架,避免了繁杂的特征工程和多系统集成的问题。
而在神经机器翻译领域常见的模型框架为Seq2Seq解决方案。其主要特点是将机器翻译问题转化为将源语言通过序列编码得到中间编码,然后利用这个中间编码通过序列解码生成目标端语言序列。但是简单的将编码序列与解码序列连接起来的Seq2Seq解决方案(后面简称简单Seq2Seq)在实际操作中存在诸多问题。
简单Seq2Seq模型的中间编码是一个固定维度的中间编码,往往用编码序列的最后一个位置的状态向量代替。基于此源端序列位置和与其相关目标序列位置的关系完全通过RNN模型构建。尽管RNN例如LSTM等理论上可以学习长距离依赖关系,但是在实际中长距离依赖关系随着长度的增加而减弱。
例如,一个长度为50的英文句子的第一个词翻译成中文句子对应中文的词,这两个词之间的依赖关系由于距离太远而导致关系减弱,同时中间编码中包含了翻译对应中文词不相关的信息。
这种距离与依赖关系强弱之间的相关性,相关研究者通过将源端序列反序获得更好效果来说明。(源端反序后,源端序列前面词与目标端序列前面的词的距离变近了)。但是这种解决方案并不具备普适性。
例如,英语-中文两种语言同义词序之间的序列顺序基本一致,但是日语句子中的最后一个词很有可能与英语对应句子的第一个词是对应的。
为了解决源端与目标端对应序列元素之间的对应关系问题,产生了注意力机制的方法。注意力机制不再给出单一的中间编码,而是利用一个子网络,输入源端的所有特征序列与目标端上一个时刻的序列编码,输出当前目标端预测位置与源端的所有特征序列的注意力权重。通过这个注意力权重与源端的所有特征序列得到当前目标端预测位置解码的中间编码。
三、Attention的优势与缺陷
优势:注意力机制的先进性主要体现在可以帮助我们更好的理解可视化模型,同时有不错的效果提升。
缺陷:需要大量额外的计算开销。其计算开销在于每个解码位置都需要利用注意力子网络学习权重。当源端或者解码端的长度过长时,会导致不可忍受的计算开销。
事实上,attention机制与人的Attention机制还是有区别的。人的大脑可以自动忽略掉不想关的事情,仅仅在很小的范围内进行Attention。这种过程与计算机内存寻址读写机制有些类似。通过Reinforcement Learning预测下一个位置是一种可选的Attention实现方法,可以减轻Attention的计算量。
四、Attention的其他场景下的应用
Image Caption、生成句法解析树、阅读理解
五、Attention与Memory之间的关系
Attention机制较普通的Seq2Seq模型相当于提供了一种访问由编码隐状态构成的内部Memory. 与传统的Memory访问不同,Attention是一种Soft的方式(并不是给出应该取什么位置,而是带权的访问所有位置)
这种soft的方式可以让神经网络更容易训练。
而Memory机制已有很长的使用历史。标准的RNN就是一种Memory机制,但是标准的RNN在学习长距离依赖时会出现梯度消失问题。LSTM通过引入“门限机制”对Memory进行显示的删除与更新。
越来越复杂的Memory结构将会持续出现。
补充材料:
- End-To-End Memory Networks
- Neural Turing Machines
- Reinforcement Learning Neural Turing Machines
- Teaching Machines to Read and Comprehend
- Grammar as a Foreign Language
- Show, Attend and Tell
- Recurrent Models of Visual Attention
- Neural Machine Translation by Jointly Learning to Align and Translate
- Learning to Execute
- Sequence to Sequence Learning with Neural Networks
- Learning where to Attend with Deep Architectures for Image Tracking
- Learning to combine foveal glimpses with a third-order Boltzmann machine