首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >啥是Attention?

啥是Attention?

作者头像
CV君
发布2020-03-04 15:42:05
发布2020-03-04 15:42:05
1.9K0
举报

本文为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.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我爱计算机视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Attention in CNN
  • Attention in RNN
  • Self-Attention
    • Transformer框架
    • Multi-Head Attention
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档