Attention 正在被越来越广泛的得到应用。
Attention 到底有什么特别之处?他的原理和本质是什么?Attention都有哪些类型?本文将详细讲解Attention的方方面面。

Attention 的本质是什么

Attention(注意力)机制如果浅层的理解,跟他的名字非常匹配。他的核心逻辑就是「从关注全部到关注重点」。

attention机制:又称为注意力机制,顾名思义,是一种能让模型对重要信息重点关注并充分学习吸收的技术,它不算是一个完整的模型,应当是一种技术,能够作用于任何序列模型中。

Attention 机制很像人类看图片的逻辑,当我们看一张图片的时候,我们并没有看清图片的全部内容,而是将注意力集中在了图片的焦点上。

我们的视觉系统就是一种 Attention机制,将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。

Attention 的3大优点

之所以要引入 Attention 机制,主要是3个原因:参数少、速度快、效果好

参数少

模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

速度快

Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

效果好

在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。

Attention 原理的3步分解:


第一步: query 和 key 进行相似度计算,得到权值

第二步:将权值进行归一化,得到直接可用的权重

第三步:将权重和 value 进行加权求和

Attention 的 N 种类型

Attention 有很多种不同的类型:Soft Attention、Hard Attention、静态Attention、动态Attention、Self Attention 等等。下面就跟大家解释一下这些不同的 Attention 都有哪些差别。

1. 计算区域

根据Attention的计算区域,可以分成以下几种:

1)Soft Attention,这是比较常见的Attention方式,对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。

2)Hard Attention,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)

3)Local Attention,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。

2. 所用信息

假设我们要对一段原文计算Attention,这里原文指的是我们要做attention的文本,那么所用信息包括内部信息和外部信息,内部信息指的是原文本身的信息,而外部信息指的是除原文以外的额外信息。

1)General Attention,这种方式利用到了外部信息,常用于需要构建两段文本关系的任务,query一般包含了额外信息,根据外部query对原文进行对齐。

2)Local Attention,这种方式只使用内部信息,key和value以及query只和输入原文有关,在self attention中,key=value=query。既然没有外部信息,那么在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系。

3. 结构层次

结构方面根据是否划分层次关系,分为单层attention,多层attention和多头attention:

1)单层Attention,这是比较普遍的做法,用一个query对一段原文进行一次attention。

2)多层Attention,一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务。

3)多头Attention,这是Attention is All You Need中提到的multi-head attention,用到了多个query对一段原文进行了多次attention,每个query都关注到原文的不同部分,相当于重复做多次单层attention,最后再把这些结果拼接起来。

4. 模型方面

从模型上看,Attention一般用在CNN和LSTM上,也可以直接进行纯Attention计算。

1)CNN+Attention

CNN的卷积操作可以提取重要特征,我觉得这也算是Attention的思想,但是CNN的卷积感受视野是局部的,需要通过叠加多层卷积区去扩大视野。另外,Max Pooling直接提取数值最大的特征,也像是hard attention的思想,直接选中某个特征。

CNN上加Attention可以加在这几方面:

a. 在卷积操作前做attention,比如Attention-Based BCNN-1,这个任务是文本蕴含任务需要处理两段文本,同时对两段输入的序列向量进行attention,计算出特征向量,再拼接到原始向量中,作为卷积层的输入。

b. 在卷积操作后做attention,比如Attention-Based BCNN-2,对两段文本的卷积层的输出做attention,作为pooling层的输入。

c. 在pooling层做attention,代替max pooling。比如Attention pooling,首先我们用LSTM学到一个比较好的句向量,作为query,然后用CNN先学习到一个特征矩阵作为key,再用query对key产生权重,进行attention,得到最后的句向量。

2)LSTM+Attention

LSTM内部有Gate机制,其中input gate选择哪些当前信息进行输入,forget gate选择遗忘哪些过去信息,我觉得这算是一定程度的Attention了,而且号称可以解决长期依赖问题,实际上LSTM需要一步一步去捕捉序列信息,在长文本上的表现是会随着step增加而慢慢衰减,难以保留全部的有用信息。

LSTM通常需要得到一个向量,再去做任务,常用方式有:

a. 直接使用最后的hidden state(可能会损失一定的前文信息,难以表达全文)

b. 对所有step下的hidden state进行等权平均(对所有step一视同仁)。

c. Attention机制,对所有step的hidden state进行加权,把注意力集中到整段文本中比较重要的hidden state信息。性能比前面两种要好一点,而方便可视化观察哪些step是重要的,但是要小心过拟合,而且也增加了计算量。

3)纯Attention

Attention is all you need,没有用到CNN/RNN,乍一听也是一股清流了,但是仔细一看,本质上还是一堆向量去计算attention。

5. 相似度计算方式

在做attention的时候,我们需要计算query和某个key的分数(相似度),常用方法有:
1)点乘:最简单的方法,

2)矩阵相乘:

3)cos相似度:

4)串联方式:

5)用多层感知机也可以:
具体方法看这里

attention介绍相关推荐

  1. Attention的本质:从Encoder-Decoder(Seq2Seq)理解

    目录 1. 前言 2. Encoder-Decoder(Seq2Seq)框架 3. Attention原理 3.1 Soft Attention介绍 4. Attention机制的本质思想 5. 总结 ...

  2. 从2017年顶会论文看Attention Model - PaperWeekly 第50期

    作者丨黄瑾 学校丨中国人民大学在读硕士 研究方向丨数据挖掘,人工智能 1. 前言 2017 年 KDD,Sigir 以及 Recsys 会议被接收的论文早已公示,本文对这些会议中 Attention ...

  3. 《深度学习进阶 自然语言处理》书籍介绍

    写在开头 前面几篇文章介绍了图灵<深度学习入门>一书,接下来将继续带读作者的另一书籍:<深度学习进阶 自然语言处理>. 在这儿我觉得非常有必要解释一下,现在社会上有这么多NLP ...

  4. 机器翻译注意力机制及其PyTorch实现

    前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translat ...

  5. android 广播反注册后,BroadcastReceiver注册、使用及其权限

    首先声明一个类,此类继承自BroadcastReceiver类,处理Android当中发出的广播事件: public class SMSReceiver extends BroadcastReceiv ...

  6. 5大经典排序算法在淘宝“有好货”场景的实践

    本文将介绍有好货推荐场景下的排序算法.有好货作为淘宝典型的内容导购场景,产品的定位是帮助消费升级人群发现口碑好货.排序作为推荐场景链路中重要环节,很大程度决定了推荐效率.过去一年,我们在排序算法的超长 ...

  7. 深度学习基础-经典模型总结

    深度学习经典模型总结 卷积神经网络 介绍下转置卷积 循环神经网络 介绍下RNN 介绍下LSTM 一个LSTM cell的时间复杂度是多少 介绍下GRU RNN和LSTM的区别 注意力模型 介绍下Att ...

  8. NLP 算法工程师面试问答-DeepLearningAlgorithm

    [关于生成对抗网络GAN]那些你不知道的事 一.动机 之前我们提到玻尔兹曼机(Boltzmann machine),波尔茨曼机作为一种基于能量函数的概率模型,因为能量函数比较复杂,所以存在较多的限制. ...

  9. (很全面)综述---图像处理中的注意力机制

    原文链接:https://blog.csdn.net/xys430381_1/article/details/89323444 重磅好文:微软亚研:对深度神经网络中空间注意力机制的经验性研究 论文:A ...

最新文章

  1. 网易云游戏来了:手机电脑电视随时接入可玩,高流畅度低延迟,还能跨终端无缝切换...
  2. weblogic 12c 一键静默建域、集群、受管,计算机以及添加受管到集群
  3. SEO日暮途穷?做好几点实现华丽蜕变
  4. GitHub之深入解析如何对项目做出贡献
  5. 记录cu上shell比赛的第6题:输入日期,打印天数
  6. python怎么让输出结果为01_python从0到1--01.python中的输入/输出(基础篇)
  7. android 手机 熄屏 短信控制_华为手机音量键还隐藏着这8个实用功能,终于知道了...
  8. ecology9 系统文件常用说明
  9. spring源码之bean加载(bean解析下篇)
  10. 线性代数:特征值和特征向量
  11. 逆水寒7.25服务器维护,逆水寒7月26日更新维护公告 更新内容汇总
  12. 设计模式(2) 生成器模式(BUILDER)
  13. 微信H5禁止分享功能
  14. (法)H.嘉当(H.Cartan)、塞尔(J.P.Serre)、施瓦茨(L.Schwartz)等[著],刘应明、胡师度[译]:代数结构与拓扑结构
  15. 大闹天宫 页游 架设教程 自玩 单机
  16. UnsatisfiedDependencyException: Error creating bean with name XXXController'
  17. 停车场车牌识别收费系统厂家
  18. python中del什么意思_python del函数是什么以及如何使用?
  19. windows键盘按键输入错乱;
  20. [LQR简要快速入门]+[一级倒立摆的LQR控制]

热门文章

  1. Transformer Meets Tracker: Exploiting Temporal Context for Robust Visual Tracking
  2. 使用MySQL过程中忘掉实例名怎么办
  3. WIN10下安装Ubuntu18.04.5双系统+RTX3070独显不太成功安装方法(可参考)
  4. 职场知识:这 3 份程序员年终总结呈上,来年上级一定看重你!
  5. Appfuse搭建过程(下源码不需要maven,lib直接就在项目里(否则痛苦死!))
  6. tree老师:PSSH自动化运维实战
  7. 一文搞定SpringSecurity+vue前后端分离
  8. 计算机网络分层的优点有哪些,计算机网络分层设计优点有哪些
  9. 终于有人把量化投资讲明白了
  10. 积极向上的佳句(1)