点击我爱计算机视觉标星,更快获取CVML新技术


本文为52CV粉丝sayhi对论文中常见的Attention机制的解读,已获作者授权转载,请勿二次转载:

https://juejin.im/post/5e57d69b6fb9a07c8a5a1aa2

论文题目:《Attention Is All You Need》

论文作者:Ashish Vaswani Google Brain

收录:NIPS 2017

前言

还记得18年去南大参加MLA的时候,会上的大佬们都在说Attention mechanism,那么啥是Attention?简单点来说,Attention机制就是加权,目前其实现形式包括三种,我把它归纳成:

  1. 基于CNN的Attention

  2. 基于RNN的Attention

  3. self-Attention,即Transformer结构

Attention in CNN

其中基于CNN的Attention可以分为通道域和空间域的,分别可以去看SE-Block [1]和CBAM-Block [2],其他的多数是这两个的变种。

这里简单说一下,比如通道域,在某层的feature map有64个通道,则对每个通道赋一个权重,即

其中表示每个通道的权重,表示每个通道的原始特征,表示每个通道加权后的特征,而权重是从原始所有特征中用小型神经网络算出来的,可以认为权重能够自动捕获通道间的依赖关系。

Attention in RNN

理解了上面的CNN Attention,后面的都好办了,因为都是大同小异的,基于RNN的Attention也是如此,这里用文章 [3]的公式来解释一下,其使用了encoder-decoder结构,在decoder层加入attention结构:

可以看出是用 进行加权,其中 表示t时刻j个隐藏层的权重,公式如下:

熟悉的同学一眼就能看出这是个softmax,表示当前时刻decoder的输入 和t-1时刻的decoder的输出的关联程度,关联程度越高,则该 的权重越大,公式如下:

Self-Attention

上面两种情况稍微提一下,不做展开,有兴趣的同学可以去参考文献仔细看,本文着重要讲的是《Attention is all your need》的Transformer结构,也就是经常能听到的self-attention,该结构最初是用在机器翻译领域中,

论文中说到,提出该方法的motivation是当使用RNN进行序列传导建模的时候,其本质是串联的,即 的输出必须等待 的输入,导致计算效率很低,不能进行并行计算。而Transformer直接把整个原始序列输入,不需要等待该,可以直接进行并行计算。

Transformer框架

Transformer用了encoder-decoder结构,看下面的图就能了解大概框架,其中encoder结构由N层堆叠而成,每个层包含两个sub-layer,一个MHA(Multi-Head Attention)和一个全连接网络,每个sub-layer都用残差结构连接起来。输入是整个原始序列的嵌入,输出是的向量。

decoder结构也由N层堆叠而成,每个层包含三个sub-layer,两个MHA和一个全连接层,基本和encoder类似,输入是原始输出向量的嵌入(因为不能让当前输出和后面的输出产生attention,

论文中说是prevent leftward information flow,故要把当前和后面所有的输出都mask掉,在MHA的softmax中这些值设为)。随后,经过一个全连接层和softmax层,输出当前时刻预测的probabilities。

Multi-Head Attention

要讲清楚Multi-Head Attention就要从单个Attention讲起,论文中把单个Attention叫做ProScaled Dot-duct Attention,结构如下图左边:

首先定义queries ,keys ,values ,则单个Attention的公式如下:

由此可见,softmax算出来的是一个权值,以此对V进行加权。那么自相似性是怎么体现的呢?从上面的Transformer结构所知,Q,K,V三个向量是同一个input。。则算出来的权重就是与query最相关的key影响最大,即input序列中与当前元素最相关的元素影响最大。

Multi-Head Attention如上图右边所示,就是重复多次单个Attention再拼接输出向量,传给一个全连接层输出最终结果。公式如下:

至此,transformer的结构已经阐述完毕,我们发现这种结构的确能提高计算效率和捕获数据里的自相似性,而且能很好的处理长程依赖(因为输入是把所有元素一起输入,这里感叹一句谷歌爸爸真的有钱,没有足够的计算资源撑腰谁能想得出这种烧钱方法),里面的实现细节有很多有意思的地方,等我深挖一下,以后如果有机会在写篇博客说说。

参考文献

[1] Hu J, Shen L, Sun G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141.

[2] Woo S, Park J, Lee J Y, et al. Cbam: Convolutional block attention module[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 3-19.

[3] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.

CV细分方向交流群

52CV已经建立多个CV专业交流群,包括:目标跟踪、目标检测、语义分割、姿态估计、人脸识别检测、医学影像处理、超分辨率、神经架构搜索、GAN、强化学习等,扫码添加CV君拉你入群,如已经为CV君其他账号好友请直接私信,

(请务必注明相关方向,比如:目标检测

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。

(不会时时在线,如果没能及时通过验证还请见谅)


长按关注我爱计算机视觉

啥是Attention?相关推荐

  1. attention seq2seq transformer bert 学习总结 _20201107

    https://blog.csdn.net/weixin_44388679/article/details/102575223 Seq2Seq原理详解 一文读懂BERT(原理篇) 2018年的10月1 ...

  2. “Attention is All You Need 翻译

    <p><img src="output_0_0.png" alt="png"></p> "Attention is ...

  3. 《attention is all you need》解读

    Motivation: 靠attention机制,不使用rnn和cnn,并行度高 通过attention,抓长距离依赖关系比rnn强 创新点: 通过self-attention,自己和自己做atten ...

  4. 浅谈Transformer 及Attention网络

    1 Transformer 模型结构 处理自然语言序列的模型有 rnn, cnn(textcnn),但是现在介绍一种新的模型,transformer.与RNN不同的是,Transformer直接把一句 ...

  5. Attention is all your need 谷歌的超强特征提取网络——Transformer

    过年放了七天假,每年第一件事就是立一个flag--希望今年除了能够将技术学扎实之外,还希望能够将所学能够用来造福社会,好像flag立得有点大了.没关系,套用一句电影台词为自己开脱一下--人没有梦想,和 ...

  6. 《Attention is All You Need》浅读(简介+代码)

    2017年中,有两篇类似同时也是笔者非常欣赏的论文,分别是FaceBook的<Convolutional Sequence to Sequence Learning>和Google的< ...

  7. seq2seq与Attention机制

    学习目标 目标 掌握seq2seq模型特点 掌握集束搜索方式 掌握BLEU评估方法 掌握Attention机制 应用 应用Keras实现seq2seq对日期格式的翻译 4.3.1 seq2seq se ...

  8. 什么是self-attention、Multi-Head Attention、Transformer

    本文紧接<什么是Encoder-Decoder.Seq2Seq.Attention?>,目的是从输入输出.以及内部数据流和详细的计算过程角度,去剖析self-attention.Multi ...

  9. 谷歌NIPS论文Transformer模型解读:只要Attention就够了

    作者 | Sherwin Chen 译者 | Major,编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:在 NIPS 2017 上,谷歌的 Vaswani 等人提出了 T ...

  10. 图解 Attention(完整版)!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 译者:张贤,哈尔滨工程大学,Datawhale原创作者 本文约4000字 ...

最新文章

  1. “黑客”一年能赚多少钱?
  2. docker初体验:docker部署nginx服务
  3. 你真的理解“吃亏是福”么?
  4. php 文件查找类,PHP类搜索定位目录树的具体实现方式解析
  5. Python爬虫使用浏览器的cookies:browsercookie
  6. MVC 使用 Webuploader 插件 传递额外参数 备忘笔记
  7. java连接数据库步骤
  8. Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
  9. 计算机论文格式要求吗,论文格式
  10. Android安全之Https中间人攻击漏洞
  11. 计算机设置新用户名和密码怎么设置路由器,192.168.11.1路由器设置教程 | 192路由网...
  12. 深投控合作之后 国美更具有想象力
  13. 计算机硬件的主要性能指标包括,计算机硬件系统有哪些主要的性能指标
  14. Summary: Rendering Pipeline简单总结一下渲染管线流程图
  15. e系列是服务器CPU吗,Intel-至强E系列CPU参数
  16. 南京大学中国史考研考情与难度、参考书及上岸前辈备考经验指导
  17. Springcloud+Seata+nacos 分布式事务项目搭建 AT模式
  18. wps页眉添加下划线
  19. DCT变换的基函数与基图像
  20. 2019年春节春晚红包大战战报!30亿!

热门文章

  1. VC2008以资源形式实现多语言版本
  2. 设计模式学习笔记——观察者(Observer)模式
  3. toj 4611 Repairing a Road
  4. STM32 - 定时器基础应用说明 - 03 - Application: timer clocking using external clock-source on ETR timer input
  5. 【小程序】【Tips】【前端】交互【后端】从Json对象数组里面获取数据的方法 - PHP - JS 的原生方法
  6. [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
  7. windows nginx 停止和启动_大数据离线项目实践之nginx服务器搭建
  8. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...
  9. python修改word_Python自动化修改word实例
  10. c语言长整数除法,大整数除法