什么是Attention机制

Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素。其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有1000个哈姆雷特。根据应用场景的不同,Attention分为空间注意力和时间注意力,前者用于图像处理,后者用于自然语言处理。本文主要介绍Attention机制在Seq2seq中的应用。

为什么要用Attention机制

我们知道在Seq2seq模型中,原始编解码模型的encode过程会生成一个中间向量C,用于保存原序列的语义信息。但是这个向量长度是固定的,当输入原序列的长度比较长时,向量C无法保存全部的语义信息,上下文语义信息受到了限制,这也限制了模型的理解能力。所以使用Attention机制来打破这种原始编解码模型对固定向量的限制。

Attention原理

Attention的原理就是计算当前输入序列与输出向量的匹配程度,匹配度高也就是注意力集中点其相对的得分越高,其中Attention计算得到的匹配度权重,只限于当前序列对,不是像网络模型权重这样的整体权重。

算法过程:

1)encode对输入序列编码得到最后一个时间步的状态c,和每个时间步的输出h,其中c又作为decode的初始状态z0。

2)对于每个时间步的输出h与z0做匹配也就是match操作,得到每个时间步的匹配向量α01,如图1。

图1

3)对所有时间步的输出h与z0的匹配度α0,使用softmax做归一化处理,得到各个时间步对于z0的匹配分数。

4)求各个时间步的输出h与匹配分数的加权求和得到c0,作为decode的下一个时间步的输入,如图2。

图2

5)计算各个时间步的输出h与z1的匹配度得到c1作为decode下一个时间步的输入,如此一步一步重复下去,如图3。

图3

这样就可以把每个时间步重要的信息传给decode中,以上就是Attention机制的处理过程。其中match操作一般是求两个向量的相似度,通常有如下方法:
1)余弦相似度
2)一个简单的 神经网络,输入为hh和ww,输出为α
3)或者矩阵变换α=hTWzα=hTWz (Multiplicative attention,Luong et al., 2015)

在tensorflow1.0版本以后的api seq2seq库中,包含了两种Attention算法,他们的区别就是match操作的不同,因此也有人称他们为加法Attention和乘法Attention,具体内容下:

1)BahdanauAttention:论文https://arxiv.org/abs/1409.0473中的实现:

图4

2)LuongAttention:论文https://arxiv.org/abs/1508.04025中的实现 :

图5

由于图片来自不同地方,所以符号有些不同,图4和图5中的h是上文所说的每个时间步的输出向量,d是decode中每个时间步的状态,也就是上文中的z,c是match后计算的权值加和后的向量用于decode中每个时间步的输入,a就是match操作中经过softmax后的匹配权重,v是一个向量,相当于w一样的权重需要去学习。有上面两个公式可以看出,BahdanauAttention和LuongAttention的区别就是在match过程中的计算方式不同,一个是将decode的状态与encode的输出求和,一个是求乘,所以才有了加法Attention和乘法Attention的叫法。

待更新。。

参考:

台大李宏毅课程

最新文章

  1. Linux(Ubuntu)下如何安装JDK
  2. 简单实用的双向电平转换电路(3.3v-5v)
  3. yum自动脚本
  4. GRE红宝书5-6
  5. SharePoint Security and Permission System Overview
  6. 如何新建XCode项目
  7. 【Xilinx-Petalinux学习】-08-OpenAMP系统实现
  8. poj-3169Layout
  9. java模式之模板模式——抽象类
  10. 从git仓库导入idea的gradle项目无法添加依赖包问题
  11. win10释放的wifi热点手机连不上
  12. 关于angular实现表单的一些问题
  13. (面试题)python面试题集锦-附答案
  14. 聚类——GAKFCM
  15. POJ 1200 Crazy Search 【hash】
  16. python笔记12-字典
  17. 测试json字符和java对象属性不一样在多个json框架下转换的表现
  18. 【MyBatis】MyBatis之别名typeAliases标签的使用
  19. pycharm、webstorm和idea激活码
  20. 使用ShareSDK完成第三方(QQ、微信、微博)登录和分享

热门文章

  1. 技巧:Vimdiff 使用(改)
  2. [MYSQL][2]索引
  3. Xcode9.2 添加iOS11.2以下旧版本模拟器
  4. 如何使用git命令从github上取得项目
  5. Spring Cloud之 Config Server 使用ip端口号配置高可用
  6. centos7 杂记
  7. C、C++混合调用
  8. 传说是小米家的一道面试题难倒了某Java程序员。扑克牌排序问题。
  9. JavaScript预解析
  10. 【HDOJ-1081】To The Max(动态规划)