作者 | 蘑菇先生

来源 | NewBeeNLP

头图 | CSDN下载自视觉中国

目前深度学习中热点之一就是注意力机制(Attention Mechanisms)。Attention源于人类视觉系统,当人类观察外界事物的时候,一般不会把事物当成一个整体去看,往往倾向于根据需要选择性的去获取被观察事物的某些重要部分,比如我们看到一个人时,往往先Attend到这个人的脸,然后再把不同区域的信息组合起来,形成一个对被观察事物的整体印象。

「同理,Attention Mechanisms可以帮助模型对输入的每个部分赋予不同的权重,抽取出更加关键及重要的信息,使模型做出更加准确的判断,同时不会对模型的计算和存储带来更大的开销,这也是Attention Mechanism应用如此广泛的原因」,尤其在Seq2Seq模型中应用广泛,如机器翻译、语音识别、图像释义(Image Caption)等领域。Attention既简单,又可以赋予模型更强的辨别能力,还可以用于解释神经网络模型(例如机器翻译中输入和输出文字对齐、图像释义中文字和图像不同区域的关联程度)等。

本文主要围绕核心的Attention机制以及Attention的变体展开。

Seq2Seq Model

Attention主要应用于Seq2Seq模型,故首先简介一下Seq2Seq模型。Seq2Seq模型目标是学习一个输入序列到输出序列的映射函数。应用场景包括:机器翻译(Machine translation)、自动语音识别(Automatic speech recognition)、语音合成(Speech synthesis)和手写体生成(Handwriting generation)。

Seq2Seq模型奠基性的两个工作如下:

NIPS2014:Sequence to Sequence Learning with Neural Networks[1]

该论文介绍了一种基于RNN(LSTM)的Seq2Seq模型,基于一个Encoder和一个Decoder来构建基于神经网络的End-to-End的机器翻译模型,其中,Encoder把输入编码成一个固定长度的上下文向量,Decoder基于「上下文向量」「目前已解码的输出」,逐步得到完整的目标输出。这是一个经典的Seq2Seq的模型,但是却存在「两个明显的问题」

  • 把输入的所有信息有压缩到一个固定长度的隐向量,忽略了输入的长度,当输入句子长度很长,特别是比训练集中所有的句子长度还长时,模型的性能急剧下降(Decoder必须捕捉很多时间步之前的信息,虽然本文使用LSTM在一定程度上能够缓解这个问题)。

  • 把输入编码成一个固定的长度过程中,对于句子中每个词都赋予相同的权重,这样做是不合理的。比如,在机器翻译里,输入的句子与输出句子之间,往往是输入一个或几个词对应于输出的一个或几个词。因此,对输入的每个词赋予相同权重,这样做没有区分度,往往使模型性能下降。

注意上图中Encoder得到的上下文向量「仅用于作为Decoder的第一个时间步的输入」

Decoder的另一个输入是前一时刻的单词 











,需要注意的是,在训练阶段 











 是「真实label」(需要embedding一下),而不是上一时刻的预测值。而在测试阶段,则是上一时刻的预测值(具体使用时需要借助beam-search来得到最优翻译序列)。

但是实际训练过程中,「label是否使用真实数据2种方式,可以交替进行」,即一种是把标准答案作为Decoder的输入,还有一种是把Decoder上一次的输出的结果作为输入,因为如果完全使用标准答案,会导致收敛的过快,导致测试的时候不稳定。

另外,上述输入输出中的每个单词,都要借助「embedding」技术。

EMNLP2014:Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation[2]

和NIPS2014几乎同时发表,思想也是一样的。只不过在这篇文章中,作者提出了一种新的RNN Cell,即GRU代替LSTM来构建Seq2Seq模型。

还有一点不同的是,Encoder得到的上下文向量会作用于Decoder「每一个时间步」的预测。

总结起来:RNN-based Encoder-Decoder Framework,目标是预测 ,其中 












 都是one-hot向量。

「Encoder」

给定输入,

























,将其编码为上下文向量 




.
































 是LSTM或GRU,







 是时间步 




 的单词的one-hot表示,先经过embedding矩阵 




嵌入后作为RNN在 




 时刻的输入,











 是 






 时间步的encode;







 是时间步 




 的encode。



































 是上下文向量,是关于 























 的函数。







 是输入的最大长度。最简单的,































,即最后一个时间步得到的encode作为上下文向量。

「Decoder」

Decoder在给定上下文向量 




 以及已经预测的输出 



























 条件下,预测下一个输出 














。换句话说,Decoder将输出 




 上的联合分布分解为有序条件分布 (ordered conditionals):

其中,

































 是输出的最大长度。

使用RNN,每个条件分布可以写成下式:









 是输出词的one-hot向量(全连接+softmax激活后得到),











 是前一时刻已经预测的输出词的one-hot向量,先经过 












embedding后再作为 




 的输入。




 是一个非线性函数(e.g., 全连接+softmax),输出关于 







 的概率分布。












































 是LSTM/GRU)是RNN的隐藏层状态。(注意,




 不是RNN提取隐藏层状态的LSTM或GRU,而是隐藏层后面接的全连接层或其他非线性函数,LSTM或GRU提取的Decoder隐状态和上下文向量以及已经预测的输出都将作为 




 的输入,用于预测概率分布)。

Attention

如上文所述,传统的Seq2Seq模型对输入序列缺乏区分度,存在明显的两大问题。因此,有大牛提出使用Attention机制来解决问题。下面将按照Attention的不同类型重点介绍一些Attention上的研究工作。

Basic Attention

本小节介绍最传统和基础的Attention模型的应用。首先直观感受下Attention机制的一个示意动图。

Machine Translation

ICLR2015: Neural Machine Translation by Jointly Learning to Align and Translate[3]

这是ICLR2015提出的文章,机器翻译的典型方法。作者在RNN Encoder-Decoder框架上,引入了Attention机制来同时进行翻译和对齐。使用bidirectional RNN作为Encoder,Decoder会在翻译的过程中通过模拟搜索源句子focus到不同部位上来进行更准确的解码。模型示意图如下:

首先将Decoder中的条件概率写成下式:

其中,




 一般使用softmax全连接层(或多加几层,输入的3个向量concat到一起后进行Feed Forward),







 是Decoder中RNN在时间步 




 的隐状态,根据如下LSTM或GRU函数计算得到:














































 是关于前一时刻Decoder端隐状态 











,前一时刻已经预测的输出 











 的embedding表示 












 以及该时刻 




 的上下文向量 







 的函数。




 是LSTM或GRU。

注意,和已有的encoder-decoder不同,这里的条件概率对「每一个目标单词」




 都需要有一个「不同的」上下文向量 







而上下文向量 







 取决于Encoder端输入序列encode后的RNN隐状态 







(bidirectional RNN,因此 







 包含了输入句子 




 位置周围的信息,



























)



































而每一个权重 










 使用softmax转换为概率分布:

而 










 是输出 




 和输入 




 的对齐模型(alignment model),衡量了输入位置 




 周围的信息和输出位置 




 的匹配程度。








































 得分依赖于Decoder端 




 时刻的「前一时刻的隐状态」











 和Encoder端 




 时刻的隐状态。文中使用前馈神经网络学习对齐模型,并且和其他组件联合学习,




 实际上学到的是soft alignment,因此可以很容易应用梯度反向传播。

总之,










 可以理解为衡量了输出单词 




 和输入单词 




 的对齐程度,而 







 是 




 时刻,所有encode隐状态根据该对齐程度得到的期望上下文向量,是所有对齐情况下的期望。










 衡量了在计算下一个decoder隐状态 







 和预测 







 过程中,相对于前一个decoder隐状态 











,不同 







 的重要性程度。这一「Decoder中的」注意力机制使得只需要关注源句子部分的信息,而不是像此前工作中非要将源句子「所有的信息」都编码成固定长度的上下文向量来用。

Image Caption

ICML2015: Show, Attend and Tell- Neural Image Caption Generation with Visual Attention[4]

Kelvin Xu等人在该论文中将Attention引入到Image Caption中。Image Caption是一种场景理解的问题,这是视觉领域重要的一个研究方向。场景理解的难点在于既要进行物体识别,又要理解物体之间的关系。这相当于要让机器拥有模仿人类将大量显著的视觉信息压缩为描述性语言的能力。

模型包括两个部分:Encoder和Decoder。其中,Encoder会使用CNN提取图片低层特征;Decoder会在RNN中引入注意力机制,将图片特征解码为自然语言语句。模型总的示意图如下:

如上图,模型把图片经过CNN网络,变成特征图。LSTM的RNN结构在此上运行Attention模型,最后得到描述。

「目标:」 输入一个图像,输出该图像的描述 
































,其中 




 是词典词汇的数量,







 是词的one-hot表示向量,




 是描述的长度。

「Encoder」

在encoder端,模型使用CNN来提取L个D维vector,每一个都对应图像的一个区域(这里粗体表示向量):
































在原论文中,原始图像先经过center cropped变为 






 的图像,然后经过卷积和pooling操作,共4次max pooling,最后得到 






 的feature map,feature map个数共512个,即512个通道。这里 










 对应的就是196个区域数量,每个区域都是原始图像经过下采样得到的,因此可以通过4次上采样能够恢复原始图像中对应区域。而 






,即每个区域的向量化表示是由所有的feature map相应位置数值构造而成。

与此前的工作使用Softmax层之前的那一层vector作为图像特征不同,本文所提取的这些vector来自于 「low-level 的卷积层,这使得Decoder可以通过从所有提取到的特征集中,选择一个子集来聚焦于图像的某些部分」。这样子就有点像NLP里的seq2seq任务了,这里的输入从词序列转变成了图像区域vector的序列。作为类比,图像上的 




 个区域(






 平展开为196)就相当于句子的长度(单词的数量 







);每个区域的D维向量化表示是由D个Filter提取的该区域的特征concat在一起形成的向量,类比于句子每个单词的embedding经过RNN提取的「隐状态向量」。

上下文向量 












 计算如下:































即,在给定一组提取到的图像不同区域的向量表示 









,以及不同区域相应的权重 









 条件下,计算上下文向量,最简单的方式是使用上文所述的加权和来处理。本文使用了两种Attention Mechanisms,即Soft Attention和Hard Attention。我们之前所描述的传统的Attention Mechanism就是Soft Attention。Soft Attention是参数化的(Parameterization),因此可导,可以被嵌入到模型中去,直接训练,梯度可以经过Attention Mechanism模块,反向传播到模型其他部分。相反,Hard Attention是一个随机的过程,根据 









 随机采样。Hard Attention不会选择整个encoder的输出做为其输入,Hard Attention会依概率来采样输入端的隐状态一部分来进行计算,而不是整个encoder的隐状态。为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度。

而权重 







 的计算,作者引入了一个Attention模型,实际上就是上篇文章MT任务中的对齐模型。









































 是当前要预测的「输出词」的位置,




 是输入词的位置。

「Decoder」

使用LSTM来解码并生成描述词序列,LSTM结构单元如下:

具体LSTM的计算:(可以发现如何将 












 融入到LSTM中的,实际上就是多一个线性变换,再全部加起来)






































































第一个式子实际上是四个式子,分别得到输入门、遗忘门、输出门和被输入门控制的候选向量。其中,三个门控由sigmoid激活,得到的是元素值皆在 0 到 1 之间的向量,可以将门控的值视作保留概率;候选向量由tanh激活,得到的是元素值皆在-1到1之间的向量。

























 是仿射变换,在上式也就是要对最右边的三项进行加权求和,可以将T理解为分块矩阵。最右边的三个式子,其中 















 是「输出词的embedding matrix」,











 是one-hot词表示,












 用来lookup,得到dense词向量表示。


















 是前一时刻的decoder状态,



















 是LSTM真正意义上的“输入”,代表的是捕捉了特定区域视觉信息的上下文向量,既然它和时刻 




 有关,就说明它是一个动态变化的量,在不同的时刻将会捕捉到与本时刻相对应的「相关图像区域」。这个量将由attention机制计算。

第二个式子是更新旧的记忆单元,element-wise 的运算表示三个门控将对各自控制的向量的每个元素做“取舍”:0 到 1 分别代表完全抛弃到完全保留。第三个式子是得到隐状态。

有了隐状态,就可以计算词表中各个词的概率值,那么取概率最大的那个作为当前时刻生成的词,并将作为下一时刻的输入。其实就是softmax全连接层(两层MLPs+softmax)。




 是单词的数量。

原论文中还有一些比较有意思的Trick。

  • 解码的输出:模型生成的一句caption被表示为各个词的one-hot编码所构成的集合,输出的caption y表示为:









































 是字典的单词个数,




 是句子长度。







 的形式为 






















,即只有第




 处位置为1,其它位置为0。

RNN建模时,







 会用在embedding,将稀疏one-hot向量转成dense的embedding向量。模型的输出概率 



























 会用于拟合真实的 







  • LSTM初始输入:

LSTM中的记忆单元与隐藏单元的初始值,是两个不同的多层感知机,采用所有特征区域的平均值来进行预测的:

  • 图像的encode:

文中使用VGGnet作为encoder进行编码,且不进行finetuning。encoder得到 








 的feature maps。因此decoder处理的是flattened






 (










)。

  • Caption的Decode:

在decode时,由于模型每次更新所需要的时间正比于最长的句子,如果随机采样句子进行解码,训练时间会很长。为了解决这个问题,文中会在预处理环节,将句子按照长度分组。每次更新时,随机采样一个长度,然后使用相应的分组内的句子进行训练,这样就能显著提高运行效率。

个人觉得输出词的embedding matrix也可以使用word2vec预训练好的词向量代替,文中没提到。

Speech Recognition

NIPS2015: Attention-Based Models for Speech Recognition[5]

给定一个英文的语音片段作为输入,输出对应的音素序列。Attention机制被用于对输出序列的每个音素和输入语音序列中一些特定帧进行关联。

Entailment

ICLR2016: Reasoning about Entailment with Neural Attention[6]

语义蕴含,句子关系推断方面的早期工作,也是采用了基本的Attention模型。给定一个用英文描述的前提和假设作为输入,输出假设与前提是否矛盾、是否相关或者是否成立。举个例子:前提:在一个婚礼派对上拍照;假设:有人结婚了。该例子中的假设是成立的。Attention机制被用于关联假设和前提描述文本之间词与词的关系。

Text Summarization

EMNLP2015: A Neural Attention Model for Sentence Summarization[7]

给定一篇英文文章作为输入序列,输出一个对应的摘要序列。Attention机制被用于关联输出摘要中的每个词和输入中的一些特定词。

参考资料:

[1]Sequence to Sequence Learning with Neural Networks:

https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

[2]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation:

https://www.aclweb.org/anthology/D14-1179

[3]ICLR2015: Neural Machine Translation by Jointly Learning to Align and Translate:

https://arxiv.org/pdf/1409.0473.pdf

[4]ICML2015: Show, Attend and Tell- Neural Image Caption Generation with Visual Attention:

https://arxiv.org/pdf/1502.03044.pdf

[5]NIPS2015: Attention-Based Models for Speech Recognition:

https://arxiv.org/pdf/1506.07503.pdf

[6]ICLR2016: Reasoning about Entailment with Neural Attention:

https://arxiv.org/pdf/1509.06664.pdf

[7]EMNLP2015: A Neural Attention Model for Sentence Summarization:

https://www.aclweb.org/anthology/D/D15/D15-1044.pdf

更多精彩推荐
  • 强化学习:10种真实的奖励与惩罚应用

  • NLP实战:利用Python理解、分析和生成文本 | 赠书

  • AI 隐身术,能让物体在视频中消失的魔法

  • CPU究竟是如何执行任务的?

  • 太扎心!人艰不拆!16 个程序员专属笑话讲给你听

深度学习中的注意力机制(一)相关推荐

  1. 深度学习中的注意力机制(三)

    作者 | 蘑菇先生 来源 | NewBeeNLP原创出品 深度学习Attenion小综述系列: 深度学习中的注意力机制(一) 深度学习中的注意力机制(二) 目前深度学习中热点之一就是注意力机制(Att ...

  2. 深度学习中的注意力机制(二)

    作者 | 蘑菇先生 来源 | NewBeeNLP 目前深度学习中热点之一就是注意力机制(Attention Mechanisms).Attention源于人类视觉系统,当人类观察外界事物的时候,一般不 ...

  3. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  4. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attenion小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的 ...

  5. 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记  前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...

  6. 注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用

    1 深度学习中的注意力机制 https://mp.weixin.qq.com/s?__biz=MzA4Mzc0NjkwNA==&mid=2650783542&idx=1&sn= ...

  7. 深度学习中的注意力机制汇总

    什么是注意力机制 视觉注意力机制是人类视觉所特有的一种大脑信号处理机制,而深度 学习中的注意力机制正是借鉴了人类视觉的注意力思维方式.一般来说, 人类在观察外界环境时会迅速的扫描全景,然后根据大脑信号 ...

  8. 深度学习中的注意力机制(2017版)

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ 张俊林 (本文2017年发表于<程序员>杂志7月刊) (想更系统的学习深度学习知识?请参考:深度学习枕边书) 如果 ...

  9. 关于深度学习中的注意力机制,这篇文章从实例到原理都帮你参透了(很系统,重点看)

    最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理.图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一. 本文以机器翻译为 ...

最新文章

  1. 工作流引擎 SpringBoot+flowable完美结合,快速实现工作流,so easy
  2. 字符串对象转数组对象_js对象转数组的方法 js怎么将数组对象转变成字符串
  3. SpringBoot实现OAuth2认证服务器
  4. VirtualBox通过命令方式批量创建并配置虚拟机
  5. 没有什么是日本牛郎店做不到的......
  6. axios请求本地的json文件在打包部署到子目录域名下,路径找不到
  7. windows中安装64位MySQL及连接MySQL和重置MySQL密码
  8. 使用git在本地电脑与远程GitHub/gitlub库中clone别人的github上的远程仓库代码,找资源
  9. [vscode] markdown_index----可以为你的markdown标题添加序号的插件
  10. 杭州云栖大会10月起航,这里有一份最全的大会剧透
  11. 【文献学习】DeepReceiver: A Deep Learning-Based Intelligent Receiver for Wireless Communications in the Ph
  12. 给大家讲解一下 AIDL原理分析
  13. 全面了解三极管——三极管用作开关管1
  14. win7此计算机与未识别的网络连接,win7本地连接未识别的网络怎么办_win7本地连接未识别的网络怎么解决-win7之家...
  15. 计算机毕设 SSM+Vue健身管理系统 健身教练预约管理系统 健身知识平台 健身房管理系统Java Vue MySQL数据库 远程调试 代码讲解
  16. steamvr2.0 vr模式下,多相机共存
  17. 餐厅预订系统如何选?餐厅预订系统推荐
  18. 基于星环TDH数据仓库典型总和场景数据流转设计
  19. 将UTC日期字符串转为本地时间字符串,如@yyyy-MM-dd'T'HH:mm:ssZ转换为本地时间
  20. iOS开发-极光推送SDK使用笔记

热门文章

  1. C#线程同步的几种方法
  2. flume源码学习8-hdfs sink的具体写入流程
  3. 微软在慕尼黑设立欧洲首个物联网实验室
  4. 经典树型表结构之SORT_NO
  5. SPRING3.X JSON 406 和 中文乱码问题
  6. 39个超实用jQuery实例应用特效
  7. 医院数据中心机房建设资料汇总(31篇)
  8. 《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(10)
  9. 炎热夏天到底如何让自己更凉快? - 生活至上,美容至尚!
  10. SpringDataJpa根据多个id物品清单id查询房源编号