注意力机制
为什么要引入注意力机制?
- 计算能力的限制
当要记住更多的“信息”时,模型变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
- 优化算法的限制
虽然局部连接,权重共享以及池化等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络(RNN)中的长距离依赖问题,信息“记忆”能力并不高。
因此,人们参照人脑处理信息过载的方式 ,例如注意力机制可以提高神经网络处理信息的能力。
关于人脑处理信息:
对于一张图片,我们人眼对整张图片不会全面观察,只会观察集中的一部分 ,然后再依次向外逐渐发散观察;对于几行字,加入我们要对这几行字进行翻译,如果是机器,它就会全面的进行扫描,而这增大了任务难度或者说降低了效果,参照我们人类的习惯,我们将会对几行字,逐行进行观察 ,这就可以有效的优化我们的机器模型。
![JsYfYT.png](https://s1.ax1x.com/2020/04/25/JsYfYT.png)
注意力机制有哪些?
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。按照认知神经学中的注意力,可以总体上分为两类:
- 聚焦式(focus)注意力 :自上而下的有意识的注意力,主动注意–是指有预定目的的、依赖任务的、主动有意识的聚焦于某一对象的注意力;
- 显著性(saliency-based)注意力 :自下而上的有意识的注意力,被动注意–基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将最大池化和门控(gating)机制 来近似看作是自下而上的基于显著性的注意力机制。
在人工神经网络中,注意力机制一般就特指聚焦式注意力 。
无注意力机制
普通的Encoder-Decoder(seq2seq)
结构:(基于RNN
)
![JsDuTJ.jpg](https://s1.ax1x.com/2020/04/25/JsDuTJ.jpg)
x
是输入序列Encoder
是编码器;Decoder
是解码器- 语义编码C是对输入的高度概括,是输入的核心总结
y
是输出
其概括形式:
![JsrCnO.jpg](https://s1.ax1x.com/2020/04/25/JsrCnO.jpg)
在这个过程当中,我们的语义编码使用的是相同的值。那么,所有的预测输出 y 1 y_{1} y1 、 y 2 y_{2} y2 、 y 3 y_{3} y3 …都完全依赖于同一个语义编码C来决定,真的科学吗?
注意力机制
以机器翻译为例:
![JsybB8.png](https://s1.ax1x.com/2020/04/25/JsybB8.png)
- 在翻译“汤姆”时,原句中的三个词对其贡献度不同,关联度最高的应该是“Tom”。同样,于“追逐”关联度最高的是“chase”,与“杰瑞”关联度最高的是“Jerry”。
- 在C中,所有词的对应权重是相同 的。并且固定编码C能表示的信息有限 ,尤其是在长句子中。
- 提出注意力机制 ,使得在翻译时不同词时,注意到各个词的贡献(相关性)。
![Js6TPJ.jpg](https://s1.ax1x.com/2020/04/25/Js6TPJ.jpg)
很明显,这里我们就会冒出一个问题:权重如何计算?
![JsgocR.jpg](https://s1.ax1x.com/2020/04/25/JsgocR.jpg)
- 在计算中,如果 h 1 h_{1} h1 与 H 1 H_{1} H1 的相似度值越大,那么赋予的权值越大。
在赋予权值之前,我们需要用
Softmax
进行归一化处理
例子
Tom chase Jerry => 汤姆 追逐 杰瑞
假设汤姆对应的隐藏层向量:[10,5,10]
![Js2BVK.jpg](https://s1.ax1x.com/2020/04/25/Js2BVK.jpg)
import numpy as np
tom_init = np.array([10,5,10])
tom_hidden = np.array([5,0,1])
chase_hidden = np.array([0,1,1])
jerry_hidden = np.array([1,1,0])
print("score:")
print(np.multiply(tom_init, tom_hidden))
print(np.multiply(tom_init, chase_hidden))
print(np.multiply(tom_init, jerry_hidden))
在翻译“汤姆”时的注意力权重分布矩阵为:[3.15,0.3,0.75]
总结
注意力机制就是通过学习得到一个权重分布,再把这个权重分布施加到原来的特征上面。以获取更多所需要关注目标的细节信息,而抑制其他无用信息。是一种资源分配方式。
参考
相关文章
- Java 基础 - 注解机制详解
- 各种注意力机制的PyTorch实现
- 【Paper Reading】自注意力机制以及在Alphafold2中的应用
- 李宏毅机器学习笔记——16. Conditional Generation by RNN&Attention(RNN条件生成与注意力机制)
- 基于自注意力机制与无锚点的仔猪姿态识别(农业工程学报)
- 番外篇 | 20+ 种注意力机制及代码 适用于YOLOv5/v7/v8(新增5种v7模板)
- 手把手带你YOLOv5/v7 添加注意力机制(并附上30多种顶会Attention原理图)2023/2/11更新
- NLP-生成模型-2017-Transformer(四):单个输入-输出样本的并行化计算【编码:训练预测都基于注意力机制来并行化】【解码:训练时基于掩码注意力机制、teach-forcing来并行化】
- NLP-生成模型-2019:TransformerXL【对Vanilla Transformer的改进:片段级递归机制、相对位置编码】【超出固定长度上下文的注意力语言模型】
- NLP-信息抽取-关系抽取-2016:Attention-BiLSTM实体关系分类器【基于双向LSTM及注意力机制的关系分类】【数据集:SemEval-2010 Task 8】
- NLP-阅读理解-2016:MatchLSTM(UniAttention+PointerNet)【片段抽取式任务;单向注意力机制】【 Sequence/Boundary 模型】【数据集:SQuAD】
- 基于组合双向拍卖的共享储能机制研究(Matlab代码实现)
- mysql锁机制之乐观锁(二)
- 外部注意力机制与内部注意力机制
- Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
- K-DB亮相数据库大会 浪潮解读RAC关键锁机制
- 2023.1.25,周三【图神经网络 学习记录9】图网络的分类,异构图---注意力机制网络:节点级别的attention,语义级别的attention
- 全局注意力机制(Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions )
- 论文实验(密集连接,多尺度,注意力机制,特征融合)
- VAN(大核注意力机制)
- 你确定懂了Java中的序列化机制吗
- 第7.6节 Python中类的继承机制详述
- 十图详解TensorFlow数据读取机制(附代码)
- Android内存优化4 了解java GC 垃圾回收机制2 GC执行finalize的过程
- golang中gorotine的退出机制和gorotine完美退出
- Apache Hudi重磅特性解读之存量表高效迁移机制
- Android框架浅析之锁屏(Keyguard)机制原理
- 【Android 进程保活】Low Memory Killer 机制
- 【视频处理工程】5、DirectShow的事件交互和数据流控制机制