# Attention All in ONE
**Kaggle**及更多AI分享,欢迎关注我的[知乎帐号](https://www.zhihu.com/people/zhouzhirui)
作者:爱睡觉的KKY
## UPDATE
2022.7 视觉Attention
“注意力”在平时的生活中相信大家都深有体会,当你认真读某本书的时候,会感觉眼睛中只有书中正在读的文字,竖起耳朵去听一个很微弱的声音的时候,这个声音也仿佛放大了,能听的更清楚。深度学习中Attention机制非常类似生物的注意力。人们视觉在感知东西的时候一般不会是一个场景从到头看到尾每次全部都看,而往往是根据需求观察注意特定的一部分。而且当人们发现一个场景经常在某部分出现自己想观察的东西时,人们会进行学习在将来再出现类似场景时把注意力放到该部分上。
![](./asset/attention/visual1.jpg)
不同时刻,在做不同任务的时候,我们的注意力不是一成不变的。就输入下图,我们在做图片翻译到文字的任务时,翻译不同对象的时候,聚焦的图片位置是有区别。
![](./asset/attention/visual2.png)
基于以上的直觉,Attention可以用于,学习权重分布:
+ 这个加权可以是保留所有分量均做加权(即soft attention);也可以是在分布中以某种采样策略选取部分分量(即hard attention),此时常用RL来做;
+ 这个加权可以作用在原图上,也可以作用在特征图上;
+ 这个加权可以在时间维度、空间维度、mapping维度以及feature维度。
以seq2seq举例,传统的模型decoder输入的上下文c是一成不变的,但这显然不够合理,如果这是一个翻译模型,原文为“我喜欢食物”,当我翻译到"i like"时,我翻译下一个"food"时应该更关注的是"食物",而不是别的。
![](./asset/attention/seq2seq1.png)
所以,我们在seq2seq解码过程中,在每一步可以利用Attention,对Encoder每一步的hidden state进行加权,获得不同的语义编码,获得更好的翻译效果。
![](./asset/attention/seq2seq2.png)
效果展示,横轴是输入的待翻译原文,纵轴是翻译结果,可以看到翻译到不同的英文单词时,对于原文的单词注意力差别是非常巨大的。
![](./asset/attention/seq2seq3.png)
同时,我们还可以利用Attention对多任务进行聚焦、解耦(通过attention mask),使得单一模型能够进行多项任务,且均达到比较良好的性能。多任务模型,可以通过Attention对feature进行权重再分配,聚焦各自关键特征。在图像分割论文***Fully Convolutional Network with Task Partitioning for Inshore Ship Detection in Optical Remote Sensing Images***中:
针对靠岸舰船,本文通过任务解耦的方法来处理。因为高层特征表达能力强,分类更准,但定位不准;底层低位准,但分类不准。为了应对这一问题,本文利用一个深层网络得到一个粗糙的分割结果图(船头/船尾、船身、海洋和陆地分别是一类)即Attention Map;利用一个浅层网络得到船头/船尾预测图,位置比较准,但是有很多虚景。**训练中,使用Attention Map对浅层网络的loss进行引导,只反传在粗的船头/船尾位置上的loss,其他地方的loss不反传。**相当于,**深层的网络能得到一个船头/船尾的大概位置,然后浅层网络只需要关注这些大概位置,然后预测出精细的位置,图像中的其他部分(如船身、海洋和陆地)都不关注,从而降低了学习的难度。**
![](./asset/attention/visual3.png)
# Attention 发展历程
Attention机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是2014年google mind团队的这篇论文《Recurrent Models of Visual Attention》,他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将attention机制应用到NLP领域中。接着attention机制被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。自注意力机制也成为了大家的研究热点,结合预训练模型技术的发展,在NLP/CV/时间序列预测/推荐算法等多个领域均取得了巨大突破。。下图展示了attention研究进展的大概趋势:
![](./asset/attention/2_1.png)
# Attention 计算原理
---
$Attention(Q,K,V)=softmax(score({Q, K})V$
Google 2017年论文[Attention is All you need](w)中,为Attention做了一个抽象定义:
> An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.
>
> 注意力是将一个查询和键值对映射到输出的方法,Q、K、V均为向量,输出通过对V进行加权求和得到,权重就是Q、K相似度。
---
这是一个非常General的定义,我们举例说明一下QKV分别代表什么,在机器翻译中,Encoder 编码的信息是我们原始语义信息(V),Decoder的上一步输出的hidden state 定义的当前正在翻译的内容,是我们需要处理的问题(Q),此外我们还需要构造一个信息门牌(K),通过(Q)计算每个门牌的权重,用于给原始语义信息(V)做加权。
计算Attention Weighted Value有三个步骤:
1. 首先的到Q、K、V (在不同任务中,QKV需要用不同方式去构造)
2. 计算Q、K相似度
3. 将相似度进行Softmax处理,得到权重
4. 根据权重对V进行加权
![](./asset/attention/3_1.jpg)
而在整个过程中,最关键的是如何构造Q、K、V,然后是如何选择 `score`函数去计算相似度,这里先用几个案例讲解一下如何的到Q、K、V及score function。
# 文本分类&Attention
论文《Understanding Attention for Text Classification》中使用了一种比较简单且广泛使用的Q、K、V构造方式。
![](asset/attention/attention1.png)
输入文本长度为n,经过LSTM后得到每一步的hidden state 向量 $h_i$,这个向量同时看成K和V,查询向量Q使用一个可学习的模型参数向量W表示,并且使用dot product (点积运算)作为`score function`,这样就可以计算每一个K的score:
$$ score_i = \frac{h_i^{T} W}{\gamma} $$
其中,$\gamma$是一个比较大的常数,用于对点积结果做放缩,使得最后softmax后的权重更加平滑,一般情况下我们可以设置成K向量维度大小的根号 $\sqrt{d_K}$。
$$ weight = softmax(score) $$
其中每个分量按照softmax的到 $weight_i = \frac{e^{score_i}}{\sum{e^{score_j}}}$,这样我们就的到了Attention权重,只需要用其对V做加权求和就可以了。
将分类Attention权重可视化可以发现,重点的单词被给与了更高的权重,PAD特殊字符几乎0权重。
![](./asset/attention/4_1.png)
![](./asset/attention/4_2.png)
# Transformer with SelfAttention
《Attention is All You Need》是一个里程碑式的论文,提出了一种完全基于注意力机制的新模型结构 - Transformer,在NLP/CV/序列等大量领域均取得突破。
## Transformer基础结构
Transformer采用Encoder-Decoder架构,下图中左侧为encoder,右侧为decoder,Transformer encoder和decoder中使用3种网络结构:全连接层、多头自注意力层和LayerNorm层组成TransformerLayer,再对Trans
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这里为你收集整理了关于AI,机器学习,深度学习相关的资料一份,质量非常高,如果你投入时间去研究几天相信肯定对你有很大的帮助。到时候你会回来感谢我的。 本资源是经过本地编译测试、可打开、可运行的文件或源码,可以用于毕业设计、课程设计的应用、参考和学习需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但强调一下,这些项目源码仅供学习和研究之用。在使用这些资源时,请务必遵守学术诚信原则和相关法律法规,不得将其用于任何商业目的或侵犯他人权益的行为。对于任何因使用本资源而导致的问题,包括但不限于数据丢失、系统崩溃或安全漏洞,风险自担!
资源推荐
资源详情
资源评论
收起资源包目录
注意力机制实践.zip (58个子文件)
Attention-PyTorch-master
pic
4_4.png 109KB
3_1.jpg 36KB
1_3.png 1.4MB
2_1.png 29KB
1_6 30KB
1_9.png 252KB
3_3.png 103KB
1_1.jpg 28KB
4_1.png 105KB
1_5 18KB
4_2.png 91KB
1_7.png 55KB
1_4 74KB
3_2.png 119KB
1_4.jpg 18KB
3_4 48KB
4_3.png 113KB
attention_meta.jpg 19KB
4_5.png 543KB
1_10.png 265KB
1_8.png 443KB
1_2.png 112KB
corpus
amazon 4.3MB
矩阵乘法.ipynb 4KB
asset
attention
3_1.jpg 36KB
attention1.png 48KB
visual3.png 1.4MB
2_1.png 29KB
visionattn.png 303KB
selfattn1.png 49KB
4_1.png 105KB
CBAM3.png 60KB
CBAM1.png 186KB
4_2.png 91KB
visual1.jpg 28KB
selfattn3.png 88KB
visual2.png 74KB
layernorm.png 269KB
selfattn2.png 73KB
selfattn4.png 68KB
seq2seq2.png 30KB
seq2seq1.png 18KB
CBAM2.png 68KB
seq2seq3.png 55KB
LICENSE 11KB
.gitignore.swp 12KB
utils
__init__.py 111B
text.py 426B
constant.py 191B
vocabulary.py 1KB
base.py 1KB
label.py 403B
Attention_all_in_one.ipynb 132KB
models
__init__.py 106B
layer.py 1KB
fasttext_attention.py 111B
.gitignore 19B
README.md 15KB
共 58 条
- 1
资源评论
高校毕业设计
- 粉丝: 184
- 资源: 385
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功