欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.NET/xbinworld。

技术交流QQ群:433250724,欢迎对算法、技术感兴趣的同学加入。


上一篇博文深度学习方法(八):Encoder-Decoder模型,基本Sequence to Sequence模型描述了基本的Encoder-Decoder模型,在作为翻译模型的时候,这种基本的Encoder-Decoder模型有较大缺点,就是Encoder部分每一个输入对Decoder部分每一个输出的贡献都是一样的。下面先看一个例子[1],

输入的是英文句子:Tom chase Jerry,Encoder-Decoder生成:“汤姆”,“追逐”,“杰瑞”。

在基本模型中,每一个英文单词对杰瑞都是一样的贡献,这似乎是不太合理的;也就是说



没有引入注意力的模型在输入句子比较短的时候估计问题不大,但是如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是为何要引入注意力模型的重要原因。如果引入AM模型的话,应该在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:

(Tom,0.3)(Chase,0.2)(Jerry,0.5)

即生成目标句子单词的过程成了下面的形式:

而每个Ci可能对应着不同的源语句子单词的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:

其中,f2函数代表Encoder对输入英文单词的某种变换函数,比如如果Encoder是用的RNN模型的话,这个f2函数的结果往往是某个时刻输入xi后隐层节点的状态值(经过激活函数);g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和,也就是常常在论文里看到的下列公式:

ci=∑j=1Txαijhj

假设Ci中那个i就是上面的“汤姆”,那么Tx就是3,代表输入句子的长度,h1=f2(“Tom”),h2=f2(“Chase”),h3=f2(“Jerry”),对应的注意力模型权值分别是0.6,0.2,0.2,所以g函数就是个加权求和函数。如果形象表示的话,翻译中文单词“汤姆”的时候,数学公式对应的中间语义表示Ci的形成过程类似下图:

这里还有一个问题:生成目标句子某个单词,比如“汤姆”的时候,你怎么知道AM模型所需要的输入句子单词注意力分配概率分布值呢?就是说“汤姆”对应的概率分布:

(Tom,0.6)(Chase,0.2)(Jerry,0.2)

是如何得到的呢?

为了便于说明,我们假设对图1的非AM模型的Encoder-Decoder框架进行细化,Encoder采用RNN模型,Decoder也采用RNN模型,这是比较常见的一种模型配置,则图1的图转换为下图:

注意力分配概率分布值的通用计算过程:

相当于在原来的模型上,又加了一个单层DNN网络,当前输出词Yi针对某一个输入词j的注意力权重由当前的隐层Hi,以及输入词j的隐层状态(hj)共同决定;然后再接一个sofrmax得到0-1的概率值。

写成公式[2]:

αij=exp(eij)∑Txk=1exp(eik)eij=a(si−1,hj)

也就是说,si−1先跟每个h分别计算得到一个数值,然后使用softmax得到i时刻的输出在Tx个输入隐藏状态中的注意力分配向量。这个分配向量也就是计算ci的权重。我们现在再把公式按照执行顺序汇总一下[3]:

eij=a(si−1,hj)αij=exp(eij)∑Txk=1exp(eik)ci=∑j=1Txαijhjsi=f(si−1,yi−1,ci)yi=g(yi−1,si,ci)

[3]作者还给了一个示意图:

上面主要在讨论解码,相比于上面解码的创新,编码就比较普通了,只是传统的单向的RNN中,数据是按顺序输入的,因此第j个隐藏状态h→j只能携带第j个单词本身以及之前的一些信息;而如果逆序输入,则h←j包含第j个单词及之后的一些信息。如果把这两个结合起来,hj=[h→j,h←j]就包含了第j个输入和前后的信息。

Attention机制的一个主要优势是它让我们能够解释并可视化整个模型。举个例子,通过对attention权重矩阵a的可视化,我们能够理解模型翻译的过程(相关词的关注点)。



当从法语译为英语时,网络模型顺序地关注每个输入状态,但有时输出一个词语时会关注两个原文的词语,比如将“la Syrie”翻译为“Syria”。

下面讨论一些RNN+NLP之外的AM的问题,这些参考[4]

**

Attention的成本

**

如果再仔细观察attention的等式,我们会发现attention机制有一定的成本。我们需要为每个输入输出组合分别计算attention值。50个单词的输入序列和50个单词的输出序列需要计算2500个attention值。这还不算太糟糕,但如果你做字符级别的计算,而且字符序列长达几百个字符,那么attention机制将会变得代价昂贵。

其实它和我们的直觉恰恰相反。人类的注意力是节省计算资源的。当专注于一件事时,我们能忽略其它事情。但这并不是我们上一个模型的作法。我们在决定专注于某个方面之前先仔细观察每件事。直观地说,这相当于输出一个翻译后的词语,然后遍历记忆里所有文本再决定下一个输出什么。这似乎是一种浪费,而且没人会这么干。事实上,它更类似于内存访问,不是attention,在我看来有点儿用词不当(下文会继续讨论)。不过,这并没有阻碍attention机制的流行传播。

attention的另一种替代方法是用强化学习(Reinforcement Learning)来预测关注点的大概位置。这听起来更像是人的注意力,这也是Recurrent Models of Visual Attention文中的作法。然而,强化学习模型不能用反向传播算法端到端训练,因此它在NLP的应用不是很广泛(我本人反而觉得这里有突破点,数学上的不可求解必然会得到优化,attention model在RL领域的应用确实非常有趣)。

机器翻译之外领域的Attention机制

到目前为止,我们已经见识了attention在机器翻译领域的应用。但上述的attention机制同样也能应用于递归模型。让我们再来看几个例子。

在Show,Attend and Tell一文中,作者将attention机制应用于生成图片的描述。他们用卷积神经网络来“编码”图片,并用一个递归神经网络模型和attention机制来生成描述。通过对attention权重值的可视化(就如之前机器翻译的例子一样),在生成词语的同时我们能解释模型正在关注哪个部分。

在Grammar as a Foreign Language论文中,作者用递归神经网络模型和attention机制的来生成语法分析树。可视化的attention矩阵让人深入地了解网络模型如何生成这些树:

在Teaching Machines to Read and Comprehend论文里,作者利用RNN模型读入文本,先读入一个(合成的)问题,然后产生一个答案。通过将attention可视化,我们可以看到网络模型在试图寻找问题答案的时候关注哪些方面:

ATTENTION = (FUZZY) MEMORY?

attention机制解决的根本问题是允许网络返回到输入序列,而不是把所有信息编码成固定长度的向量。正如我在上面提到,我认为使用attention有点儿用词不当。换句话说,attention机制只是简单地让网络模型访问它的内部存储器,也就是编码器的隐藏状态。在这种解释中,网络选择从记忆中检索东西,而不是选择“注意”什么。不同于典型的内存,这里的内存访问机制是弹性的,也就是说模型检索到的是所有内存位置的加权组合,而不是某个独立离散位置的值。弹性的内存访问机制好处在于我们可以很容易地用反向传播算法端到端地训练网络模型(虽然有non-fuzzy的方法,其中的梯度使用抽样方法计算,而不是反向传播)。

记忆机制本身的历史更久远。标准递归网络模型的隐藏状态本身就是一种内部记忆。RNN由于存在梯度消失问题而无法从长距离依赖学习。LSTM通过门控机制对此做了改善,它允许显式的记忆删除和更新。

更复杂的内存结构的趋势还在延续。End-To-End Memory Networks一文中的方法允许网络在输出内容前多次读入相同的序列,每一步都更新记忆内容。举个例子,输入一个故事,在经过多步推理之后回答一个问题。然而,当网络参数的权重以某种特定方式被绑定,端到端记忆网络的记忆机制就和这里所介绍的attention机制一样了,只是它是多跳的记忆(因为它试图整合多个句子信息)。

神经图灵机器使用类似的记忆机制,但有一个更复杂的解决方案,它同时基于内容(如在这里)和位置,使网络模型通过学习模式来执行简单的计算机程序,比如排序算法。

在将来,我们很可能看到记忆机制和attention机制之间有更清晰的区别,也许是沿着Reinforcement Learning Neural Turing Machines,它尝试学习访问模式来处理外部接口。


本文实际上是对网络上的一些很棒的博文的整理,便于自己以后回忆理解,实际上网上写的东西一般都比较浅显易懂,但是真正要理解还是建议看一下相关论文,基本的两篇推荐[2][6],更多论文可以参考网页[7][8]的参考文献;最后再推荐一个网页文章[5],介绍了RNN模型在Attention以及Memory方向的一些变化,总结的很不错,后面有时间我再用自己的理解来记录一下,看完本文的同学可以看看:)


参考资料

[1] http://blog.csdn.net/malefactor/article/details/50550211

[2] NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

[3] http://blog.csdn.net/u014595019/article/details/52826423

[4] http://geek.csdn.net/news/detail/50558

[5] http://distill.pub/2016/augmented-rnns/

[6] Sequence to Sequence Learning with Neural Networks, 2014, Google

[7] https://www.52ml.net/20093.html

[8] http://blog.csdn.net/malefactor/article/details/50583474

深度学习方法(九):自然语言处理中的Attention Model注意力模型的更多相关文章

  1. (zhuan) 自然语言处理中的Attention Model:是什么及为什么

    自然语言处理中的Attention Model:是什么及为什么 2017-07-13 张俊林 待字闺中 要是关注深度学习在自然语言处理方面的研究进展,我相信你一定听说过Attention Model( ...

  2. [转]自然语言处理中的Attention Model:是什么及为什么

    自然语言处理中的Attention Model:是什么及为什么 https://blog.csdn.net/malefactor/article/details/50550211 /* 版权声明:可以 ...

  3. 自然语言处理中的Attention Model:是什么及为什么

    /* 版权声明:能够随意转载.转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 要是关注深度学习在自然语言处理方面的研究进展,我相信你一定听说过Attention Model(后文有 ...

  4. (转载)自然语言处理中的Attention Model:是什么及为什么

    转载说明来源:http://blog.csdn.net/malefactor/article/details/50550211 author: 张俊林 原文写得非常好! 原文: 要是关注深度学习在自然 ...

  5. 深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 接下来重点讲一下RBM模型求解 ...

  6. 深度学习之Attention Model(注意力模型)

    1.Attention Model 概述 深度学习里的Attention model其实模拟的是人脑的注意力模型,举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观 ...

  7. 【NLP】Attention Model(注意力模型)学习总结

    最近一直在研究深度语义匹配算法,搭建了个模型,跑起来效果并不是很理想,在分析原因的过程中,发现注意力模型在解决这个问题上还是很有帮助的,所以花了两天研究了一下. 此文大部分参考深度学习中的注意力机制( ...

  8. <A Decomposable Attention Model for Natural Language Inference>(自然语言推理)

    http://www.xue63.com/toutiaojy/20180327G0DXP000.html 本文提出一种简单的自然语言推理任务下的神经网络结构,利用注意力机制(Attention Mec ...

  9. 深度学习方法(八):自然语言处理中的Encoder-Decoder模型,基本Sequence to Sequence模型

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. Encoder-Decoder(编码- ...

随机推荐

  1. CF Playrix Codescapes Cup Problems Analysis

    A 理清思路模拟 B 先对3个array排序,然后每次从某个array的头删数,可保证每个数必被处理1次,O(n log n) (set维护也行) C 分3类情况讨论,一种为: p1≤p2 & ...

  2. 解题:由乃OI 2018 五彩斑斓的世界

    题面 写在前面的扯淡: 分块的总体学习告一段落,这算是分块集中学习的最后一题么:以后当然也可能会写,就是零零散散的题了=.= 在洛谷上搜ynoi发现好像只有这道题和 由乃OI 2018 未来日记 是分 ...

  3. 关于JBoss基本说明文档及基本使用安装

    关于JBoss JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器.在不  到12个月的时间里有一百万以上的拷贝被下载.JBoss是第一位的J2EE应用服务器.    J ...

  4. 省选模拟赛 LYK loves string(string)

    题目描述 LYK喜欢字符串,它认为一个长度为n的字符串一定会有n*(n+1)/2个子串,但是这些子串是不一定全部都不同的,也就是说,不相同的子串可能没有那么多个.LYK认为,两个字符串不同当且仅当它们 ...

  5. 洛谷P2002 消息扩散

    题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n ...

  6. bzoj 1528 [POI2005]sam-Toy Cars 堆维护+贪心

    1528: [POI2005]sam-Toy Cars Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 716  Solved: 306[Submit][S ...

  7. 单例 ------ C++实现

    基础知识掌握: 单例考虑三点:内存何时释放.运行速度如何.多线程下能否保证只有一个实例 如果获取对象的返回值类型是引用,返回值赋值给变量而不是引用会进行对象的拷贝,这样就会出现两个对象,可以把显示声明 ...

  8. 题解 P1345 【[USACO5.4]奶牛的电信Telecowmunication】

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  9. LightOJ 1070 - Algebraic Problem 推导+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1070 思路:\({(a+b)}^n =(a+b){(a+b)}^{n-1} \) \(( ...

  10. STL在算法比赛中简单应用

    STL基础 和 简单的贪心问题 STL(Standard Template Library) 即 标准模板库. 它包含了诸多在计算机科学领域里所常用的基本数据结构和算法.这些数据结构可以与标准算法一起 ...