在使用tensorflow时发现其提供了两种Attention Mechanisms(注意力机制),如下

The two basic attention mechanisms are:

  • tf.contrib.seq2seq.BahdanauAttention (additive attention, ref.)
  • tf.contrib.seq2seq.LuongAttention (multiplicative attention, ref.)

那么这两种注意力机制有何异同呢?下面我们通过两个方面介绍,首先简单回顾下注意力机制,然后再对这两种经典的注意力机制进行比较。

一、注意力机制回顾

简单来说,注意力本质上就是一个经过softmax层输出的向量。

在早期机器翻译应用中,神经网络结构一般如下图,是一个RNN的Encoder-Decoder模型。左边是Encoder,代表输入的sentence。右边代表Decoder,是根据输入sentence对应的翻译。Encoder会通过RNN将最后一个step的隐藏状态向量c作为输出,Deocder利用向量c进行翻译。这样做有一个缺点,翻译时过分依赖于这个将整个sentence压缩成固定输入的向量。输入的sentence有可能包含上百个单词,这么做不可避免会造成信息的丢失,翻译结果也无法准确了。

注意力机制的引入就是为了解决此问题,注意力机制使得机器翻译中利用原始的sentence信息,减少信息损失。在解码层,生成每个时刻的y,都会利用到x1,x2,x3....,而不再仅仅利用最后时刻的隐藏状态向量。同时注意力机制还能使翻译器zoom in or out(使用局部或全局信息)。

注意力机制听起来很高大上、很神秘,其实它的整个实现只需要一些参数和简单的数学运算。那么注意力机制到底是如何实现的呢?

在基本的Encoder-Decoder模型中,注意力机制在Encoder和Decoder加入了上下文向量context vector,如上图所示,左边蓝色的代表Encoder,红色的代表Decoder。对于Decoder中每个要生成的y,都会生成一个上下文向量。这个上下文向量是由每个输入的words的信息加权求和得到的,其中权重向量就是注意力向量,它代表在此刻生成y时输入的单词的重要程度。最后将上下文向量和此刻的y的信息进行融合作为输出。

构建上下文向量过程也很简单,首先对于一个固定的target word,我们把这个target state跟所有的Encoder的state进行比较,这样对每个state得到了一个score;然后使用softmax对这些score进行归一化,这样就得到了基于target state的条件概率分布。最后,对source的state进行加权求和,得到上下文向量,将上下文向量与target state融合作为最终的输出。

具体流程的数学表达如下:

为了理解这个看起来有些复杂的数学公式,我们需要记住三点:

  1. 在解码时,对于每个输出的word都需要计算上下文向量。所以,我们会得到一个的2D矩阵, 代表source word数量,代表target word数量
  2. 我们可以通过context vector,target word,attention function 计算attention vevtor
  3. attention mechanism是可以训练的。

二、BahdanauAttention与LuongAttention

2.1 BahdanauAttention

BahdanauAttention是Bahdanau在论文NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE中提出的,整体Attention结构如下图:

1)第个target word上下文向量会根据每个source word的隐向量加权求和得到:

2)对于每个 计算如下

其中

是对齐模型,代表位置的输入和位置的输出匹配程度的分数,这个分数基于RNN的 i-1 位置的隐含状态和 j 位置的计算得到。

2.2 LuongAttention

LuongAttention是Luong在论文Effective Approaches to Attention-based Neural Machine Translation中提出的。整体结构如下

与BahdanauAttention整体结构类似,LuongAttention对原结构进行了一些调整,其中Attention向量计算方法如下

其中与BahdanauAttention机制有以下几点改进:

  1. BahdanauAttention对Encoder和Decoder的双向的RNN的state拼接起来作为输出,LuongAttention仅使用最上层的RNN输出
  2. BahdanauAttention的计算流程为 ht−1 → at → ct → ht,它使用前一个位置t-1的state计算t时刻的ht。LuongAttention计算流程为  ht → at → ct → h˜t 使用t位置的state当前位置的ht
  3. BahdanauAttention只在concat对齐函数上进行了实验,LuongAttention在多种对齐函数进行了实验,下图为LuongAttention设计的三种对齐函数

2.3 总结

BahdanauAttention与LuongAttention两种注意力机制大体结构类似,都是基于第一节中的attention框架设计,主要的不同点就是在对齐函数上,在计算第 个位置的score,前者是需要使用  来进行计算,后者使用计算,这么来看还是后者直观上更合理些,逻辑上也更顺滑。两种机制在不同任务上的性能貌似差距也不是很大,具体的细节还待进一步做实验比较。

BahdanauAttention与LuongAttention注意力机制简介相关推荐

  1. 论文笔记:BahdanauAttention和LuongAttention(注意力机制详解)

    前言 近日,阅读了两篇与attention机制相关的论文,为了防止看了就忘,写此文记录论文中一些要点,方便日后回顾,也为需要了解attention机制的朋友们提供一些参考. 两篇论文提出的attent ...

  2. 图片的描述生成任务、使用迁移学习实现图片的描述生成过程、CNN编码器+RNN解码器(GRU)的模型架构、BahdanauAttention注意力机制、解码器端的Attention注意力机制

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  3. 注意力机制、bmm运算

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  4. 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  5. 机器翻译 MXNet(使用含注意力机制的编码器—解码器,即 Encoder编码器-Decoder解码器框架 + Attention注意力机制)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  6. Pytorch:Transformer(Encoder编码器-Decoder解码器、多头注意力机制、多头自注意力机制、掩码张量、前馈全连接层、规范化层、子层连接结构、pyitcast) part1

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  7. 基于Seq2Seq的中文聊天机器人编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

  8. 《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法

    目录 <Effective Approaches to Attention-based Neural Machine Translation> 一.论文结构总览 二.论文背景知识 2.1 ...

  9. 注意力机制学习(二)——空间注意力与pytorch案例

    文章目录 一.空间注意力机制简介 二.空间注意力与pytorch代码 三.使用案例 一.空间注意力机制简介 空间注意力的示意图如下: 长条的是通道注意力机制,而平面则是空间注意力机制,可以发现: 通道 ...

最新文章

  1. MV* 框架 与 DOM操作为主 JS库 的案例对比
  2. list 根据某个数字所在位置_富玩车穷玩表,一个案例轻松认识python列表List——计算Hadamard 乘积...
  3. 一道非常经典C++面试题|大厂面试
  4. 还要我带一个六级辅导班--痛苦!
  5. 【华为云技术分享】序列特征的处理方法之一:基于注意力机制方法
  6. mega2560电脑识别不到端口后_Qt音视频开发41-人脸识别嵌入式
  7. python log函数_求你别再花大价钱学 Python 之爬虫实战
  8. DragDrop 注册失败的解决方法 转
  9. nginx做下载文件服务器
  10. 深海迷航坐标传送代码_深海迷航代码输入方法
  11. 基于DNN的IMDB电影数据集文本分类
  12. 计算机桌面广告弹窗,电脑乱弹广告怎么办_怎么禁止桌面弹出广告
  13. Python数据挖掘——文本分析
  14. 微信公众平台php开发包
  15. IGBT的双脉冲测试实验
  16. 刘强东带到石头村什么宝贝?飞翔鸽、“村长刘”品牌、歌唱家!
  17. 移动开发中“单位”的那些事儿
  18. 交换机 tagged 与 untagged 的关系
  19. 软件测试面试题:优惠券发布后测试场景图和设计?
  20. 芯洲电源,一款可以升压降压DCDC开关稳压电源,车规级面世,文章是参数详解

热门文章

  1. 还原时代原声,AI修复老北京再次火爆全网
  2. 我们是在搞学术,还是被学术搞?
  3. jQuery中用来让元素显示和隐藏的函数
  4. html中base标签的使用,和简介
  5. 利用人工智能众包数据,加速药物发现
  6. charts混合使用 elementui和e_vue模块化(echart+element ui)
  7. boost::unorder_map如何插入元素_「React」如何在React中优雅的实现动画
  8. ggClusterNet---一条代码完成全内容微生物网络
  9. R语言:生成正态分布数据生成--rnorm,dnorm,pnorm,qnorm
  10. php怎么复制变量,php - 将用户名保留在变量/函数中供以后使用[复制] - SO中文参考 - www.soinside.com...