注意力(Attention)机制概述

注意力(Attention)机制概述

1 前言

​ 在视觉方面,注意力机制的核心思想是突出对象的某些重要特征。【从关注全部到关注重点】

​ 注意力机制的目的可以认为是在深度神经网络的结构设计中,对某些权重添加注意力。可以理解为再增加一层权重,重要的部分这个权重设的大一点,不重要的部分设的小一点。【参数少+速度快+效果好】

​ 视觉注意力分为几种,核心思想是基于原有的数据找到其之间的关联性,然后突出其某些重要特征,有通道注意力,像素注意力,多阶注意力等,也有把NLP中的自注意力引入。

2 常见注意力机制的基本结构
2.1 transformer

​ 自注意力(self-attention,又称内部注意力),目的是计算序列的表达形式,与单个序列的不同位置相关的注意力机制,因为解码器的位置不变性,以及在DETR中,每个像素关注数值信息和位置信息。

​ Self-Attention是Transformer最核心的内容,可以理解位将队列和一组值与输入对应,即形成querry,key,value向output的映射,output可以看作是value的加权求和,加权值则是由Self-Attention来得出的。

​ 所有编码器(encoder)结构相同,但没有共享参数。

​ 解码器(decoder)结构由多个相同的堆叠组成。

2.2 soft-attention

​ 属于[0,1]间的连续分布问题,更加关注区域或通道。

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

​ 属于确定性注意力,学习完成后可以通过网络生成,且是可微的。可以通过神经网络计算出梯度,可以通过前向传播和后向反馈来学习,得到注意力的权重。

​ 与hard-attention区别:“hard-attention model” 选择固定数量的输入部分,而 “soft-attention model” 选择动态数量的输入部分,并将它们加权组合以生成输出。【6】hard-attention直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)

2.2.1 空间域注意力(spatial transformer network)

​ 将原始图片中的空间信息变换到另一个空间中并保留了关键信息。训练出的spatial transformer能够找出图片信息中需要被关注的区域,同时这个transformer又能够具有旋转、缩放变换的功能,这样图片局部的重要信息能够通过变换被框提取出来。

2.2.2 通道注意力(Channel Attention,CA)

​ 典型代表是SENet。卷积网络的每一层都有好多卷积核,每个卷积核对应一个特征通道。相对于spatial transformer attention机制,Channel Attention在于分配各个卷积通道之间的资源,分配粒度上比spatial transformer大了一个级别。

2.2.3 混合域模型

​ (1)Residual Attention Network for image classification(CVPR 2017 Open Access Repository

​ (2)Dual Attention Network for Scene Segmentation(CVPR 2019 Open Access Repository)

2.2.4 non-local:

​ 指的就是感受野可以很大,而不是一个局部领域。

​ 全连接是non-local的,且是global的。但是全连接带来了大量的参数,给优化带来困难。

2.2.5 位置注意力(position-wise attention)

​ 在上面的DANet中,attention map计算的是所有像素与所有像素之间的相似性,空间复杂度为(HxW)x(HxW)。而position-wise attention采用了criss-cross思想,只计算每个像素与其同行同列即十字上的像素的相似性,通过进行循环(两次相同操作),间接计算到每个像素与每个像素的相似性,将空间复杂度降为(HxW)x(H+W-1)。【二阶注意力,能够从所有像素中获取全图像的上下文信息,以生成具有密集且丰富的上下文信息的新特征图。】

3 注意力机制的实现过程
3.1 结构层次

结构方面根据是否划分层次关系,分为单层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:head(i)=Attention(q(i),K,V),最后再把泽泻单层Attention的结果拼起来。

3.2 模型方面

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

yolov5+Attention【ref:[9],[10]】

3.2.1 SE

​ 添加示例:

(1)在yolov5/models文件夹下新建yolov5s_SE.yaml

(2)将SE注意力代码添加到commom.py中

(3)将类名SE加到yolov5/models/yolo.py

(4)修改yolov5s_SE.yaml,将SE注意力加到我们需要加的位置

(5)修改train.py中的相关参数开始训练

3.2.2 CBAM

3.2.3 ECA

3.2.4 CA

3.3 其它

在做attention的时候,需要计算query和某个key的分数(相似度),常用方法有:

1)点乘

2)矩阵相乘

3)cos

4)串联将q和k拼接起来

4 常见问题:
4.1 为什么有时候添加了注意力机制精度反而下降?

​ 大部分注意力模块是有参数的,添加注意力模块会导致模型的复杂度增加。(1)如果添加attention前模型处于欠拟合状态,那么增加参数是有利于模型学习的,性能会提高。(2)如果添加attention前模型处于过拟合状态,那么增加参数可能加剧过拟合问题,性能可能保持不变或者下降。

4.2
ref:

[1] https://zhuanlan.zhihu.com/p/146130215

[2] http://papers.nips.cc/paper/7181-attention-is-all-you-need

[3] https://zhuanlan.zhihu.com/p/48508221

[4] https://github.com/huggingface/transformers

[5] https://blog.csdn.net/xys430381_1/article/details/89323444

[6] https://www.jianshu.com/p/1a78bd494c4a

[7] https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA

[8] https://www.zhihu.com/question/478301531/answer/2280232845

[9] https://zhuanlan.zhihu.com/p/543231209

[10] https://blog.csdn.net/weixin_50008473/article/details/124590939

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃油淋鸡的莫何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值