网站建设应列支什么科目,承德做网站优化,网络品牌推广怎么做,wordpress程序【NLP】Attention Model#xff08;注意力模型#xff09;学习总结郭耀华发表于郭耀华‘s Blog订阅294在这篇文章中#xff1a;1. 什么是Attention机制#xff1f;2. 先了解编码-解码框架#xff1a;Encoder-Decoder框架3. Attention Model4. Attention机制的本质思想5. S…【NLP】Attention Model注意力模型学习总结
郭耀华发表于郭耀华‘s Blog订阅294在这篇文章中1. 什么是Attention机制2. 先了解编码-解码框架Encoder-Decoder框架3. Attention Model4. Attention机制的本质思想5. Self Attention模型6. Attention机制的应用 最近一直在研究深度语义匹配算法搭建了个模型跑起来效果并不是很理想在分析原因的过程中发现注意力模型在解决这个问题上还是很有帮助的所以花了两天研究了一下。 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客不过添加了一些个人的思考与理解过程。在github上找到一份基于keras框架实现的可运行的注意模型代码Attention_Network_With_Keras。如有不足之处欢迎交流指教。 注意力模型对目标数据进行加权变化。人脑的注意力模型说到底是一种资源分配模型在某个特定时刻你的注意力总是集中在画面中的某个焦点部分而对其它部分视而不见。 ------思考为什么要集中在那个部分是因为那个部分能解决问题吗1. 什么是Attention机制 最近两年注意力模型Attention Model被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中是深度学习技术中最值得关注与深入了解的核心技术之一。 当我们人在看一样东西的时候我们当前时刻关注的一定是我们当前正在看的这样东西的某一地方换句话说当我们目光移到别处时注意力随着目光的移动也在转移这意味着当人们注意到某个目标或某个场景时该目标内部以及该场景内每一处空间位置上的注意力分布是不一样的。---------思考对于图片会有些特别显眼的场景会率先吸引住注意力那是因为脑袋中对这类东西很敏感。对于文本我们大都是带目的性的去读顺序查找顺序读但是在理解的过程中我们是根据我们自带的目的去理解去关注的。 注意力模型应该与具体的目的(或者任务)相结合。 从Attention的作用角度出发我们就可以从两个角度来分类Attention种类Spatial Attention 空间注意力和Temporal Attention 时间注意力。更具实际的应用也可以将Attention分为Soft Attention和Hard Attention。Soft Attention是所有的数据都会注意都会计算出相应的注意力权值不会设置筛选条件。Hard Attention会在生成注意力权重后筛选掉一部分不符合条件的注意力让它的注意力权值为0即可以理解为不再注意这些不符合条件的部分。2. 先了解编码-解码框架Encoder-Decoder框架 目前绝大多数文献中出现的AM模型是附着在Encoder-Decoder框架下的当然其实AM模型可以看作一种通用的思想本身并不依赖于Encoder-Decoder模型这点需要注意。Encoder-Decoder框架可以看作是一种文本处理领域的研究模式应用场景异常广泛本身就值得细谈。图1 抽象的Encoder-Decoder框架 Encoder-Decoder框架可以这么直观地去理解可以把它看作适合处理由一个句子或篇章生成另外一个句子或篇章的通用处理模型。对于句子对X,Y。 --------思考X,Y对很通用X是一个问句Y是答案X是一个句子Y是抽取的关系三元组X是汉语句子Y是汉语句子的英文翻译。等等我们的目标是给定输入句子X期待通过Encoder-Decoder框架来生成目标句子Y。X和Y可以是同一种语言也可以是两种不同的语言。而X和Y分别由各自的单词序列构成 Encoder顾名思义就是对输入句子X进行编码将输入句子通过非线性变换转化为中间语义表示C 对于解码器Decoder来说其任务是根据句子X的中间语义表示C和之前已经生成的历史信息y1,y2….yi-1来生成i时刻要生成的单词yi 每个yi都依次这么产生那么看起来就是整个系统根据输入句子X生成了目标句子Y。 ------思考其实这里的Encoder-Decoder是一个序列到序列的模型seq2seq这个模型是对顺序有依赖的。 Encoder-Decoder是个非常通用的计算框架至于Encoder和Decoder具体使用什么模型都是由研究者自己定的常见的比如 CNN / RNN / BiRNN / GRU / LSTM / Deep LSTM 等这里的变化组合非常多。 ------思考人的学习过程包括输入、输出、外界评价。Encoder模型类似于人的输入学习过程Decoder模型类似于人的输出学习过程对输出的内容进行评价就类似于损失函数。英语老师给我上了几堂英语课我在不断的输入Encoder突然有一个随堂测试我得做题输出Decoder最后英语老师改卷子给我一个分数不对的地方我得反思调整我对输入数据的加工方式。-------再思考关于英语翻译。课本上的单词和课文是原始数据输入相当于X我在大脑里加工这些数据相当于Encoder模型我的脑子里有很多加工后的数据相当于C现在要让我翻译一个英语句子这个任务相当于Y我不能翻课本所以我只能借助我脑袋里加工的数据C去翻译这个句子即我得动脑子相当于Decoder。 学习的过程是什么都要学要分类整理要增加线索并不知道未来的某天能用到什么所以Encoder-Decoder是一个泛泛学习的框架3. Attention Model 以上介绍的Encoder-Decoder模型是没有体现出“注意力模型”的所以可以把它看作是注意力不集中的分心模型。为什么说它注意力不集中呢请观察下目标句子Y中每个单词的生成过程如下 其中f是decoder的非线性变换函数。从这里可以看出在生成目标句子的单词时不论生成哪个单词是y1,y2也好还是y3也好他们使用的句子X的语义编码C都是一样的没有任何区别。而语义编码C是由句子X的每个单词经过Encoder 编码产生的这意味着不论是生成哪个单词y1,y2还是y3其实句子X中任意单词对生成某个目标单词yi来说影响力都是相同的没有任何区别其实如果Encoder是RNN的话理论上越是后输入的单词影响越大并非等权的估计这也是为何Google提出Sequence to Sequence模型时发现把输入句子逆序输入做翻译效果会更好的小Trick的原因。这就是为何说这个模型没有体现出注意力的缘由。 引入AM模型以翻译一个英语句子举例输入XTom chase Jerry。 理想输出汤姆追逐杰瑞。 应该在翻译“杰瑞”的时候体现出英文单词对于翻译当前中文单词不同的影响程度比如给出类似下面一个概率分布值Tom,0.3Chase,0.2Jerry,0.5 每个英文单词的概率代表了翻译当前单词“杰瑞”时注意力分配模型分配给不同英文单词的注意力大小。这对于正确翻译目标语单词肯定是有帮助的因为引入了新的信息。同理目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词Yi的时候原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的Ci。理解AM模型的关键就是这里即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。图2 引入AM模型的Encoder-Decoder框架 即生成目标句子单词的过程成了下面的形式 而每个Ci可能对应着不同的源语句子单词的注意力分配概率分布比如对于上面的英汉翻译来说其对应的信息可能如下 其中f2函数代表Encoder对输入英文单词的某种变换函数比如如果Encoder是用的RNN模型的话这个f2函数的结果往往是某个时刻输入xi后隐层节点的状态值g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数一般的做法中g函数就是对构成元素加权求和也就是常常在论文里看到的下列公式 假设Ci中那个i就是上面的“汤姆”那么Tx就是3代表输入句子的长度h1f(“Tom”)h2f(“Chase”),h3f(“Jerry”)对应的注意力模型权值分别是0.6,0.2,0.2所以g函数就是个加权求和函数。如果形象表示的话翻译中文单词“汤姆”的时候数学公式对应的中间语义表示Ci的形成过程类似下图图3 Ci的形成过程 这里还有一个问题生成目标句子某个单词比如“汤姆”的时候你怎么知道AM模型所需要的输入句子单词注意力分配概率分布值呢就是说“汤姆”对应的概率分布 划重点(注意力权重获取的过程)Tom,0.3Chase,0.2Jerry,0.5是如何得到的呢 为了便于说明我们假设对图1的非AM模型的Encoder-Decoder框架进行细化Encoder采用RNN模型Decoder也采用RNN模型这是比较常见的一种模型配置则图1的图转换为下图图4 RNN作为具体模型的Encoder-Decoder框架 注意力分配概率分布值的通用计算过程图5 AM注意力分配概率计算 对于采用RNN的Decoder来说如果要生成 yi 单词在时刻 i 我们是可以知道在生成 Yi 之前的隐层节点i时刻的输出值 Hi 的而我们的目的是要计算生成 Yi 时的输入句子单词“Tom”、“Chase”、“Jerry”对 Yi 来说的注意力分配概率分布那么可以用i时刻的隐层节点状态 Hi 去一一和输入句子中每个单词对应的RNN隐层节点状态 hj 进行对比即通过函数 F(hj,Hi) 来获得目标单词 Yi 和每个输入单词对应的对齐可能性这个F函数在不同论文里可能会采取不同的方法然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值这就得到了注意力权重。图5显示的是当输出单词为“汤姆”时刻对应的输入句子单词的对齐概率。绝大多数AM模型都是采取上述的计算框架来计算注意力分配概率分布信息区别只是在F的定义上可能有所不同。 上述内容就是论文里面常常提到的Soft Attention Model任何数据都会给一个权值没有筛选条件的基本思想你能在文献里面看到的大多数AM模型基本就是这个模型区别很可能只是把这个模型用来解决不同的应用问题。那么怎么理解AM模型的物理含义呢一般文献里会把AM模型看作是单词对齐模型这是非常有道理的。目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率这在机器翻译语境下是非常直观的传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤而注意力模型其实起的是相同的作用。在其他应用里面把AM模型理解成输入句子和目标句子单词之间的对齐概率也是很顺畅的想法。图6 Google 神经网络机器翻译系统结构图 图6所示即为Google于2016年部署到线上的基于神经网络的机器翻译系统相对传统模型翻译效果有大幅提升翻译错误率降低了60%其架构就是上文所述的加上Attention机制的Encoder-Decoder框架主要区别无非是其Encoder和Decoder使用了8层叠加的LSTM模型。当然从概念上理解的话把AM模型理解成影响力模型也是合理的就是说生成目标单词的时候输入句子每个单词对于生成这个单词有多大的影响程度。这种想法也是比较好理解AM模型物理意义的一种思维方式。 图7是论文“A Neural Attention Model for Sentence Summarization”中Rush用AM模型来做生成式摘要给出的一个AM的一个非常直观的例子。图7 句子生成式摘要例子 这个例子中Encoder-Decoder框架的输入句子X是“russian defense minister ivanov called sunday for the creation of a joint front for combating global terrorism”。对应图中纵坐标的句子。系统生成的摘要句子Y是“russia calls for joint front against terrorism”对应图中横坐标的句子。可以看出模型已经把句子主体部分正确地抽出来了。矩阵中每一列代表生成的目标单词对应输入句子每个单词的AM分配概率颜色越深代表分配到的概率越大。这个例子对于直观理解AM是很有帮助作用。 《A Neural Attention Model for Sentence Summarization》论文提供的实验数据集链接(开放可用)DUC 2004感兴趣的朋友可以下载看看。图8 摘要生成 开放数据集4. Attention机制的本质思想 如果把Attention机制从上文讲述例子中的Encoder-Decoder框架中剥离并进一步做抽象可以更容易看懂Attention机制的本质思想。图9 Attention机制的本质思想 我们可以这样来看待Attention机制参考图9将Source中的构成元素想象成是由一系列的Key,Value数据对构成此时给定Target中的某个元素Query通过计算Query和各个Key的相似性或者相关性得到每个Key对应Value的权重系数然后对Value进行加权求和即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式 其中||Source||代表Source的长度公式含义即如上所述。上文所举的机器翻译的例子里因为在计算Attention的过程中Source中的Key和Value合二为一指向的是同一个东西也即输入句子中每个单词对应的语义编码所以可能不容易看出这种能够体现本质思想的结构。 当然从概念上理解把Attention仍然理解为从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上忽略大多不重要的信息这种思路仍然成立。聚焦的过程体现在权重系数的计算上权重越大越聚焦于其对应的Value值上即权重代表了信息的重要性而Value是其对应的信息。 从图9可以引出另外一种理解也可以将Attention机制看作一种软寻址Soft Addressing:Source可以看作存储器内存储的内容元素由地址Key和值Value组成当前有个KeyQuery的查询目的是取出存储器中对应的Value值即Attention数值。通过Query和存储器内元素Key的地址进行相似性比较来寻址之所以说是软寻址指的不像一般寻址只从存储内容里面找出一条内容而是可能从每个Key地址都会取出内容取出内容的重要性根据Query和Key的相似性来决定之后对Value进行加权求和这样就可以取出最终的Value值也即Attention值。所以不少研究人员将Attention机制看作软寻址的一种特例这也是非常有道理的。 至于Attention机制的具体计算过程如果对目前大多数方法进行抽象的话可以将其归纳为两个过程第一个过程是根据Query和Key计算权重系数第二个过程根据权重系数对Value进行加权求和。而第一个过程又可以细分为两个阶段第一个阶段根据Query和Key计算两者的相似性或者相关性第二个阶段对第一阶段的原始分值进行归一化处理这样可以将Attention的计算过程抽象为如图10展示的三个阶段。图10 三阶段计算Attention过程 在第一个阶段可以引入不同的函数和计算机制根据Query和某个计算两者的相似性或者相关性最常见的方法包括求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值即如下方式 第一阶段产生的分值根据具体产生的方法不同其数值取值范围也不一样第二阶段引入类似SoftMax的计算方式对第一阶段的得分进行数值转换一方面可以进行归一化将原始计算分值整理成所有元素权重之和为1的概率分布另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用如下公式计算 第二阶段的计算结果即为对应的权重系数然后进行加权求和即可得到Attention数值 通过如上三个阶段的计算即可求出针对Query的Attention数值目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程。5. Self Attention模型 通过上述对Attention本质思想的梳理我们可以更容易理解本节介绍的Self Attention模型。Self Attention也经常被称为intra Attention内部Attention最近一年也获得了比较广泛的使用比如Google最新的机器翻译模型内部大量采用了Self Attention模型。 在一般任务的Encoder-Decoder框架中输入Source和输出Target内容是不一样的比如对于英-中机器翻译来说Source是英文句子Target是对应的翻译出的中文句子Attention机制发生在Target的元素和Source中的所有元素之间。而Self Attention顾名思义指的不是Target和Source之间的Attention机制而是Source内部元素之间或者Target内部元素之间发生的Attention机制也可以理解为TargetSource这种特殊情况下的注意力计算机制。其具体计算过程是一样的只是计算对象发生了变化而已所以此处不再赘述其计算过程细节。 如果是常规的Target不等于Source情形下的注意力计算其物理含义正如上文所讲比如对于机器翻译来说本质上是目标语单词和源语单词之间的一种单词对齐机制。那么如果是Self Attention机制一个很自然的问题是通过Self Attention到底学到了哪些规律或者抽取出了哪些特征呢或者说引入Self Attention有什么增益或者好处呢我们仍然以机器翻译中的Self Attention来说明图11和图12是可视化地表示Self Attention在同一个英语句子内单词间产生的联系。图11 可视化Self Attention实例图12 可视化Self Attention实例 从两张图图11、图12可以看出Self Attention可以捕获同一个句子中单词之间的一些句法特征比如图11展示的有一定距离的短语结构或者语义特征比如图12展示的its的指代对象Law。 很明显引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征因为如果是RNN或者LSTM需要依次序序列计算对于远距离的相互依赖的特征要经过若干时间步步骤的信息累积才能将两者联系起来而距离越远有效捕获的可能性越小。 但是Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来所以远距离依赖特征之间的距离被极大缩短有利于有效地利用这些特征。除此外Self Attention对于增加计算的并行性也有直接帮助作用。这是为何Self Attention逐渐被广泛使用的主要原因。6. Attention机制的应用 前文有述Attention机制在深度学习的各种应用领域都有广泛的使用场景。上文在介绍过程中我们主要以自然语言处理中的机器翻译任务作为例子下面分别再从图像处理领域和语音识别选择典型应用实例来对其应用做简单说明。图13 图片-描述任务的Encoder-Decoder框架 图片描述Image-Caption是一种典型的图文结合的深度学习应用输入一张图片人工智能系统输出一句描述句子语义等价地描述图片所示内容。很明显这种应用场景也可以使用Encoder-Decoder框架来解决任务目标此时Encoder输入部分是一张图片一般会用CNN来对图片进行特征抽取Decoder部分使用RNN或者LSTM来输出自然语言句子参考图13。 此时如果加入Attention机制能够明显改善系统输出效果Attention模型在这里起到了类似人类视觉选择性注意的机制在输出某个实体单词的时候会将注意力焦点聚焦在图片中相应的区域上。图14给出了根据给定图片生成句子“A person is standing on a beach with a surfboard.”过程时每个单词对应图片中的注意力聚焦区域。图14 图片生成句子中每个单词时的注意力聚焦区域 图15给出了另外四个例子形象地展示了这种过程每个例子上方左侧是输入的原图下方句子是人工智能系统自动产生的描述语句上方右侧图展示了当AI系统产生语句中划横线单词的时候对应图片中聚焦的位置区域。比如当输出单词dog的时候AI系统会将注意力更多地分配给图片中小狗对应的位置。图15 图像描述任务中Attention机制的聚焦作用图16 语音识别中音频序列和输出字符之间的Attention 语音识别的任务目标是将语音流信号转换成文字所以也是Encoder-Decoder的典型应用场景。Encoder部分的Source输入是语音流信号Decoder部分输出语音对应的字符串流。 图16可视化地展示了在Encoder-Decoder框架中加入Attention机制后当用户用语音说句子 how much would a woodchuck chuck 时输入部分的声音特征信号和输出字符之间的注意力分配概率分布情况颜色越深代表分配到的注意力概率越高。从图中可以看出在这个场景下Attention机制起到了将输出字符和输入语音信号进行对齐的功能。 上述内容仅仅选取了不同AI领域的几个典型Attention机制应用实例Encoder-Decoder加Attention架构由于其卓越的实际效果目前在深度学习领域里得到了广泛的使用了解并熟练使用这一架构对于解决实际问题会有极大帮助。本文参与腾讯云自媒体分享计划欢迎正在阅读的你也加入一起分享。发表于 2018-08-152018-08-15 15:32:46编程算法深度学习GitHubKeras举报2分享分享文章到朋友圈分享文章到 QQ分享文章到微博复制文章链接到剪贴板扫描二维码扫码关注云社区郭耀华‘s Blog126篇文章34人订阅订阅专栏知乎问题代码Win10 Anaconda下TensorFlow-GPU环境搭建详细教程包含CUDAcuDNN安装过程NLP之——Word2Vec详解SVM支持向量机之Hinge Loss解释各种卷积结构原理及优劣总结我来说两句0 条评论登录 后参与评论上一篇如何做一个用区块链知识有尊严赚钱的文人下一篇别小看实干者传统行业怎么了欧洲能源一哥照样用区块链玩转2B的生意 | 人物志
相关文章来自专栏机器之心订阅学界 | 谷歌大脑提出对抗正则化方法显著改善自编码器的泛化和表征学习能力无监督学习的目标之一是不依靠显式的标注得到数据集的内在结构。自编码器是一种用于达成该目标的常见结构它学习如何将数据点映射到隐编码中——利用它以最小的信息损失来…762来自专栏数据派THU订阅教你用TensorFlow和自编码器模型生成手写数字附代码来源机器之心 本文长度为1876字建议阅读4分钟 本文介绍了如何使用 TensorFlow 实现变分自编码器VAE模型并通过简单的手写数字生成案例一步…2608来自专栏人工智能LeadAI订阅机器学习实战 | 数据探索数据的输入质量决定了输出的最后结果数据的探索、预处理、特征选择、降维等特征工程占了项目的70%的时间。那么如果我们确定了商业目的该如何一步一步渐进式进行特征…3585来自专栏专知订阅【NAACL 2018】Self-attention考虑相对位置谷歌Vaswani团队最新工作1835来自专栏AI科技评论订阅干货 | 完全图解RNN、RNN变体、Seq2Seq、Attention机制AI科技评论按本文作者何之源原文载于知乎专栏AI InsightAI科技评论获其授权发布。