TensorFlow seq2seq中的Attention机制(续)

2017 年 11 月 16 日 深度学习每日摘要 DLdigest

TensorFlow seq2seq中的Attention机制(续)

承接上一期,今天继续讲解TensorFlow seq2seq中的注意力机制的代码设计。先稍微简单回顾一下常见的两种注意力机制:BahdanauAttention和LuongAttention,二者最初都是源自自然语言处理中的机器翻译问题,前者是基于加法的注意力机制,而后者是基于乘法的注意力机制,关于二者的详细比较,请参考以下的相关论文。

参考论文

Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.


Luong M T, Pham H, Manning C D.
 Effective Approaches to Attention-based Neural Machine Translation[J]. Computer Science, 2015.

在TensorFlow中,注意力机制的实现全部在attention_wrapper.py文件中,需要重点学习的是LuongAttention和BahdanauAttention。接下来将讲讲这里面的疑难点,分为三个部分来讲:首先是注意力机制的基本组成单元,因为无论是Bahdanau注意力机制还是Luong注意力机制,它们都是继承自基础注意力类;其次是BahdanauAttention与LuongAttention的不同点——score的计算;最后是今年刚发表不久的monotonic attention mechanism,这个留到下一期重点介绍。

1. 基础注意力类

基础注意类(_BaseAttentionMechanism)定义了一个注意力机制的基本组成单元,它们分别是querymemory,query可以决定该聚焦到memory的哪个部位,而通常情况下,memory就是指编码器的输出,当把memory经过一个memory layer之后就得到了key,下文中会用到key。

2. 计算score的不同算法

LuongAttention的score是通过乘法来得到的,为了保证矩阵乘法可以顺利进行,query和key的depth维度必须保持一致。query的维度是[batch_size, depth],key的维度是[batch_size, max_time, depth],首先把query的维度扩充成[batch_size, 1, depth],然后与key进行矩阵相乘,得到的score的维度是[batch_size, 1, max_time],将中间的维度进行压缩即可变成[batch_size, max_time],这就是LuongAttention的score的计算方式,此score未经过归一化,函数中还提供了scale参数,如果将scale设置为True,那么score=g*score,g是一个可训练的缩放因子。

将LuongScore计算好以后,经过softmax函数即可得到归一化之后的score,然后结合前一时刻的对齐权重,即可算出当前时刻的对齐权重alignments,很容易想到其维度是[batch_size, max_time],不过这里代码中并没有结合前一时刻的对齐权重,而是直接使用归一化之后的score来作为alignments。

对于BahdanauAttention的score,由于这里要执行的是query和key的矩阵加法,因此首先也要对query进行扩充维度,使其维度变成[batch_size, 1, depth]。除此之外,这里增加了一个attention_v变量,其维度是[depth],并且函数还提供了normalize参数,如果normalize为True,那么首先需要对attention_v进行归一化,否则,直接把attention_v乘以query与key的求和矩阵即可,最终对最后一个维度进行求和即可得到维度为[batch_size, max_time]的score。

将BahdanauScore计算好以后,与Luong的操作基本类似,即经过一个softmax函数得到归一化之后的score,并将其score作为alignments。

上面计算的alignments就是当前对输入序列的注意力权重因子,即在每个样本序列中,对于所有不同时刻上隐含状态的权重。

3. Monotonic Attention

由于这是今年刚刚提出不久的新的注意力机制,因此留到下一期长文撰写后再推送,欢迎大家提前阅读参考文献Online and Linear-Time Attention by Enforcing Monotonic Alignments

题图:Moon in a radio telescope


你可能会感兴趣的文章有:

[DLdigest-10] 每日一道算法

[DLdigest-9] 每日一道算法

[DLdigest-8] 每日一道算法

[DLdigest-7] 每日一道算法

[DLdigest-6] 每日一道算法

[DLdigest-5] 每日一道算法

[DLdigest-4] 每日一道算法

[DLdigest-3] Python中让你无法预测的“是”

[DLdigest-2] AlphaGo Zero是自由的

[DLdigest-1] 有人用量子场论来解释深度神经网络

详解TensorFlow Eager命令式执行环境

动态层归一化(Dynamic Layer Normalization)

端对端的深度卷积神经网络在语音识别中的应用

SampleRNN语音合成模型

详述DeepMind wavenet原理及其TensorFlow实现

Layer Normalization原理及其TensorFlow实现

Batch Normalization原理及其TensorFlow实现

Maxout Network原理及其TensorFlow实现

时延神经网络(TDNN)原理及其TensorFlow实现

ConvLSTM原理及其TensorFlow实现

Network-in-Network原理及其TensorFlow实现

如何基于TensorFlow实现ResNet和HighwayNet

深度学习每日摘要|坚持技术,追求原创

微信ID:deeplearningdigest
长按二维码关注我
登录查看更多
15

相关内容

Attention机制最早是在视觉图像领域提出来的,但是真正火起来应该算是google mind团队的这篇论文《Recurrent Models of Visual Attention》[14],他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是是第一个提出attention机制应用到NLP领域中。接着类似的基于attention机制的RNN模型扩展开始应用到各种NLP任务中。最近,如何在CNN中使用attention机制也成为了大家的研究热点。下图表示了attention研究进展的大概趋势。
基于多头注意力胶囊网络的文本分类模型
专知会员服务
77+阅读 · 2020年5月24日
【ICLR2020-】基于记忆的图网络,MEMORY-BASED GRAPH NETWORKS
专知会员服务
108+阅读 · 2020年2月22日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
从Seq2seq到Attention模型到Self Attention(二)
量化投资与机器学习
23+阅读 · 2018年10月9日
从Seq2seq到Attention模型到Self Attention(一)
量化投资与机器学习
76+阅读 · 2018年10月8日
基于attention的seq2seq机器翻译实践详解
黑龙江大学自然语言处理实验室
11+阅读 · 2018年3月14日
基础 | 基于注意力机制的seq2seq网络
黑龙江大学自然语言处理实验室
16+阅读 · 2018年3月7日
从 Encoder 到 Decoder 实现 Seq2Seq 模型
AI研习社
10+阅读 · 2018年2月10日
完全图解RNN、RNN变体、Seq2Seq、Attention机制
AI研习社
12+阅读 · 2017年9月5日
干货|完全图解RNN、RNN变体、Seq2Seq、Attention机制
机器学习研究会
11+阅读 · 2017年8月5日
从Encoder到Decoder实现Seq2Seq模型(算法+代码)
量化投资与机器学习
8+阅读 · 2017年7月9日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
3+阅读 · 2018年5月11日
Arxiv
3+阅读 · 2018年4月18日
Arxiv
27+阅读 · 2018年4月12日
Arxiv
27+阅读 · 2017年12月6日
VIP会员
相关资讯
从Seq2seq到Attention模型到Self Attention(二)
量化投资与机器学习
23+阅读 · 2018年10月9日
从Seq2seq到Attention模型到Self Attention(一)
量化投资与机器学习
76+阅读 · 2018年10月8日
基于attention的seq2seq机器翻译实践详解
黑龙江大学自然语言处理实验室
11+阅读 · 2018年3月14日
基础 | 基于注意力机制的seq2seq网络
黑龙江大学自然语言处理实验室
16+阅读 · 2018年3月7日
从 Encoder 到 Decoder 实现 Seq2Seq 模型
AI研习社
10+阅读 · 2018年2月10日
完全图解RNN、RNN变体、Seq2Seq、Attention机制
AI研习社
12+阅读 · 2017年9月5日
干货|完全图解RNN、RNN变体、Seq2Seq、Attention机制
机器学习研究会
11+阅读 · 2017年8月5日
从Encoder到Decoder实现Seq2Seq模型(算法+代码)
量化投资与机器学习
8+阅读 · 2017年7月9日
相关论文
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
3+阅读 · 2018年5月11日
Arxiv
3+阅读 · 2018年4月18日
Arxiv
27+阅读 · 2018年4月12日
Arxiv
27+阅读 · 2017年12月6日
Top
微信扫码咨询专知VIP会员