啥是Attention?
点击我爱计算机视觉标星,更快获取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机制就是加权,目前其实现形式包括三种,我把它归纳成:
基于CNN的Attention
基于RNN的Attention
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。
(不会时时在线,如果没能及时通过验证还请见谅)
长按关注我爱计算机视觉