四万字全面详解 | 深度学习中的注意力机制

2020 年 11 月 12 日 AINLP

NewBeeNLP原创出品 

公众号专栏作者@蘑菇先生

知乎 | 蘑菇先生学习记


目前深度学习中热点之一就是注意力机制(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机制被用于关联输出摘要中的每个词和输入中的一些特定词。

ok,今天就到这儿啦,敬请期待下一篇~我是蘑菇先生,欢迎大家到我的公众号『蘑菇先生学习记』一起交流!

本文参考资料

[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


- END -


由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方"AINLP",进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

欢迎加入AINLP技术交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注NLP技术交流

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
0

相关内容

注意力机制综述
专知会员服务
198+阅读 · 2021年1月26日
LinkedIn最新《注意力模型》综述论文大全,20页pdf
专知会员服务
135+阅读 · 2020年12月20日
专知会员服务
308+阅读 · 2020年11月24日
专知会员服务
50+阅读 · 2020年11月17日
干货|书籍《百页机器学习》推荐(附最新135页PDF下载)
专知会员服务
58+阅读 · 2020年9月22日
Transformer模型-深度学习自然语言处理,17页ppt
专知会员服务
99+阅读 · 2020年8月30日
BERT技术体系综述论文:40项分析探究BERT如何work
专知会员服务
138+阅读 · 2020年3月1日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
76+阅读 · 2020年2月3日
注意力机制模型最新综述
专知会员服务
260+阅读 · 2019年10月20日
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
深度学习的下一步:Transformer和注意力机制
云头条
56+阅读 · 2019年9月14日
自然语言处理中注意力机制综述
黑龙江大学自然语言处理实验室
11+阅读 · 2019年2月26日
深度学习中Attention Mechanism详细介绍:原理、分类及应用
深度学习与NLP
10+阅读 · 2019年2月18日
Attention模型方法综述 | 多篇经典论文解读
PaperWeekly
107+阅读 · 2018年6月11日
干货 | NLP中的self-attention【自-注意力】机制
机器学习算法与Python学习
12+阅读 · 2018年4月11日
注意力机制(Attention Mechanism)在自然语言处理中的应用
基础 | 基于注意力机制的seq2seq网络
黑龙江大学自然语言处理实验室
16+阅读 · 2018年3月7日
深度学习中的注意力机制
人工智能头条
16+阅读 · 2017年11月2日
Arxiv
3+阅读 · 2020年9月30日
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
Arxiv
6+阅读 · 2019年7月11日
Arxiv
19+阅读 · 2019年4月5日
Area Attention
Arxiv
5+阅读 · 2019年2月5日
Neural Speech Synthesis with Transformer Network
Arxiv
5+阅读 · 2019年1月30日
Arxiv
3+阅读 · 2018年11月14日
VIP会员
相关VIP内容
注意力机制综述
专知会员服务
198+阅读 · 2021年1月26日
LinkedIn最新《注意力模型》综述论文大全,20页pdf
专知会员服务
135+阅读 · 2020年12月20日
专知会员服务
308+阅读 · 2020年11月24日
专知会员服务
50+阅读 · 2020年11月17日
干货|书籍《百页机器学习》推荐(附最新135页PDF下载)
专知会员服务
58+阅读 · 2020年9月22日
Transformer模型-深度学习自然语言处理,17页ppt
专知会员服务
99+阅读 · 2020年8月30日
BERT技术体系综述论文:40项分析探究BERT如何work
专知会员服务
138+阅读 · 2020年3月1日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
76+阅读 · 2020年2月3日
注意力机制模型最新综述
专知会员服务
260+阅读 · 2019年10月20日
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
相关资讯
深度学习的下一步:Transformer和注意力机制
云头条
56+阅读 · 2019年9月14日
自然语言处理中注意力机制综述
黑龙江大学自然语言处理实验室
11+阅读 · 2019年2月26日
深度学习中Attention Mechanism详细介绍:原理、分类及应用
深度学习与NLP
10+阅读 · 2019年2月18日
Attention模型方法综述 | 多篇经典论文解读
PaperWeekly
107+阅读 · 2018年6月11日
干货 | NLP中的self-attention【自-注意力】机制
机器学习算法与Python学习
12+阅读 · 2018年4月11日
注意力机制(Attention Mechanism)在自然语言处理中的应用
基础 | 基于注意力机制的seq2seq网络
黑龙江大学自然语言处理实验室
16+阅读 · 2018年3月7日
深度学习中的注意力机制
人工智能头条
16+阅读 · 2017年11月2日
相关论文
Arxiv
3+阅读 · 2020年9月30日
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
Arxiv
6+阅读 · 2019年7月11日
Arxiv
19+阅读 · 2019年4月5日
Area Attention
Arxiv
5+阅读 · 2019年2月5日
Neural Speech Synthesis with Transformer Network
Arxiv
5+阅读 · 2019年1月30日
Arxiv
3+阅读 · 2018年11月14日
Top
微信扫码咨询专知VIP会员