注意力机制详解(小白入门)
文章目录
- 产生原因
- 注意力机制类型
- 最大池化与平均池化的注意力机制
- 注意力池化
- 层次池化- 引入时序,更新V
- 循环池化 引入时序更新Q
- 多头注意力池化
- 基于多头注意力的变换器
- 注意力机制的研究进展(待更)
- 注意力机制的好处
- 注意力机制的变种
- 硬性注意力
- 键值对注意力
- 多头注意力
产生原因
受到人类注意力机制的启发。人们在进行观察图像的时候,其实并不是一次就把整幅图像的每个位置像素都看过,大多是根据需求将注意力集中到图像的特定部分。而且人类会根据之前观察的图像学习到未来要观察图像注意力应该集中的位置。
注意力机制类型
注意力机制其实也是一种池化,是一种对输入分配偏好的通用池化方法,通常是含常数的,也可以带来非参数模型。注意力机制可以分为三步:一是信息输入;二是计算注意力分布α;三是根据注意力分布α 来计算输入信息的加权平均。
最常用的形式是通过query(问询矩阵)*key(比如用rnn的隐藏层ht加入全连接生成或者用lstm的细胞状态全连接生成) 对两个矩阵点乘的结果(标准化)套入softmax进行生成概率分布,再于value 矩阵相乘的得到包含注意力机制的词/句子表示。
比如输入是the food is good but the service is bad 这个文本做情感分类,如果问的是食物的情感,则通过query embedding加大注意力在前四个词语(通过概率的数值加大前面四个词的比重)而尽可能忽略but后面的词语。如果问的是服务,则尽可能忽略but前面的词语,实现形式是通过问题生成query embedding作为Q矩阵与键K矩阵相乘经过softmax得到每个词的注意力权重(其实这是一种概率的体现), 再与V值矩阵相乘得到注意力机制的表示。该例子:对注意力可视化如下:
最大池化与平均池化的注意力机制
最大池化容易过拟合,平均池化容易欠拟合
最早的注意力机制其实是一种平均池化:
注意力池化
attention base RNN: seq2seq 模型:
上图为双向rnn作为encoder, 经过编码后再塞进去基于RNN的decoder。
需要初始化的值: s0, y0,h0(正向,反向两个)。st是新的decoder中的隐状态。
seq2seq的理解:主要是生成模型的一种。比如“知识就是力量”这个句子经过decode后,是c,c生成s0,s1=f(y0,s0,c), y1=f(s1,c,y0). 注意力机制让其先集中翻译知识,输出knowledge,作为y0,进一步再翻译下面的。
层次池化- 引入时序,更新V
应用:文本分类/句子情感分析
循环池化 引入时序更新Q
深度学习主要是对端对端对训练。但该论文需要提供中间步骤的标签;先根据query获得最接近的句子1,再根据句子1找句子2,句子2中的实体得到答案。
多头注意力池化
逻辑:通过全连接层做不同的子空间变换,再连接起来。允许模型在不同子空间学习信息,另外一点是这个过程是可以并行计算的。Q每一行都是一个词的表征; dk: the square root of the dimension of the key vectors.
更细节解释:
输入X的维度 [batch_size, length, embedding_size]
W [embedding_size, hidden_size]
Q or V or K=WX [batch_size, length, hidden_size]
多头Q = [batch_size, length, h, embedding_size/h],
转置 [batch_size, h, length, embedding_size/h],
h头,则h次缩放点积
词嵌入的维度要可以整除头的个数。
生成多个q,k,v; 并不share权重,每个头都不一样;每个头的维度: [wocab_length, embedding_dim/h]
It expands the model’s ability to focus on different positions. Yes, in the example above, z1 contains a little bit of every other encoding, but it could be dominated by the the actual word itself. It would be useful if we’re translating a sentence like “The animal didn’t cross the street because it was too tired”, we would want to know which word “it” refers to.
多头在解决指代关系更强;
It gives the attention layer multiple “representation subspaces”. As we’ll see next, with multi-headed attention we have not only one, but multiple sets of Query/Key/Value weight matrices (the Transformer uses eight attention heads, so we end up with eight sets for each encoder/decoder). Each of these sets is randomly initialized. Then, after training, each set is used to project the input embeddings (or vectors from lower encoders/decoders) into a different representation subspace.
基于多头注意力的变换器
不用rnn cnn;就是基于很多线性变换,通过注意力构造很多的神经网络;
编码器:输入200个词, 最后得到200个词的表征;
解码器 生成模型;生成第一个。再生成第二个。。。在第n个词解码时对前五个词分配注意力机制;掩码变量;
注意力机制的研究进展(待更)
Attention机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是google mind团队的这篇论文《Recurrent Models of Visual Attention》[14],他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是是第一个提出attention机制应用到NLP领域中。接着类似的基于attention机制的RNN模型扩展开始应用到各种NLP任务中。
注意力机制的好处
- 提高性能,提高审计网络的可解释性
- 克服递归神经网络RNN的一些挑战,随着输入长度增加性能下降,输入顺序不合理导致计算效率低下。
最大的坏处是计算量。o(n^2d) n是文本长度 d是词的embedding 维度。
注意力机制的变种
硬性注意力
之前提到的注意力是软性注意力,其选择的信息是所有输入信息在注意力 分布下的期望。还有一种注意力是只关注到某一个位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有两种实现方式:
(1)一种是选取最高概率的输入信息;
(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。硬性注意力模型的缺点:
硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。硬性注意力需要通过强化学习来进行训练。——《神经网络与深度学习》
键值对注意力
即上图右边的键值对模式,此时Key!=Value,注意力函数变为:
多头注意力
多头注意力(multi-head attention)是利用多个查询Q = [q1, · · · , qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分,然后再进行拼接。多头的本质是多个独立的attention计算,作为一个集成的作用,防止过拟合。
对于使用自注意力机制的原因,论文中提到主要从三个方面考虑(每一层的复杂度,是否可以并行,长距离依赖学习),并给出了和RNN,CNN计算复杂度的比较。
1、可以看到,如果输入序列n小于表示维度d的话,每一层的时间复杂度self-attention是比较有优势的。当n比较大时,作者也给出了一种解决方案self-attention(restricted)即每个词不是和所有词计算attention,而是只与限制的r个词去计算attention(局部,例如Bert窗口+跳词)。
2、在并行方面,多头attention和CNN一样不依赖于前一时刻的计算,可以很好的并行,优于RNN。
3、在长距离依赖上,由于self-attention是每个词和所有词都要计算attention,所以不管他们中间有多长距离,最大的路径长度也都只是1。能够无视词之间的距离直接计算依赖关系,能够学习一个句子的内部结构。
reference
https://blog.csdn.net/yimingsilence/article/details/79208092?ops_request_misc=&request_id=&biz_id=102&utm_term=注意力机制&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-79208092.pc_search_result_hbase_insert&spm=1018.2226.3001.4187
https://zhuanlan.zhihu.com/p/53682800
https://www.jianshu.com/p/f3a6fd73115f
注意力机制详解(小白入门)相关推荐
- STM32 CAN通信协议详解—小白入门(二)
文章目录 (一)CAN通信协议简介 (二)CAN物理层 2.1.闭环总线网络2.2.开环总线网络2.3.通信节点2.4.差分信号2.5.CAN协议的差分信号 (三)协议层 3.1.CAN的波特率及位同 ...
- 论文笔记:BahdanauAttention和LuongAttention(注意力机制详解)
前言 近日,阅读了两篇与attention机制相关的论文,为了防止看了就忘,写此文记录论文中一些要点,方便日后回顾,也为需要了解attention机制的朋友们提供一些参考. 两篇论文提出的attent ...
- 空间注意力机制和通道注意力机制详解
Attention机制在近几年来在图像,自然语言处理等领域中都取得了重要的突破,被证明有益于提高模型的性能. Attention机制本身也是符合人脑和人眼的感知机制,这次我们主要以计算机视觉领域为例, ...
- 注意力机制详解(Attention详解)
注意力机制与人眼类似,例如我们在火车站看车次信息,我们只关注大屏的车次信息,而忽略大屏外其他内容,从而导致钱包被偷... 注意力机制只关注重点信息,忽略不重要的信息,关注最核心的内容. 主要就是这个公 ...
- 注意力机制详解(脉络版)
10.1 注意力提示 att有价值 人类对att的使用 10.1.1 生物学中的注意力 心理学中的双组件 非自主性提示 自主性提示 10.1.2 查询.键和值 非自主性提示:使用 FC 或者是 非参数 ...
- Java的垃圾回收机制详解——从入门到出土,学不会接着来砍我!
文章目录 哪些内存需要回收 回收堆:垃圾的定义 引用计数算法: 可达性分析算法: GC Roots的对象 回收方法区:垃圾的定义 如何回收垃圾 垃圾回收算法总结 标记-清除算法(适用老年代,但是基本废 ...
- 注意力机制详解系列(三):空间注意力机制
- 注意力机制详解系列(二):通道注意力机制
- 注意力机制详解系列(一):注意力机制概述
最新文章
- 数据库创建索引的原则
- VTK:可视化算法之TensorAxes
- 软件测试行业有哪些细分方向,软件测试人员有哪些职业发展方向?
- 十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!
- ffmpeg编译android,FFMPEG Android(2) 编译编译静态ffmpeg可执行文件
- MySQL中concat以及group_concat的使用
- 【Oracle】Oracle基本数据类型总结
- JavaScript中清空数组最有效的三种方法
- python反编译dll_是否可以反编译.dll / .pyd文件以提取Python源代码?
- linux和windows php pdf转图片,扩展安装imagick和ImageMagick
- Revit二次开发——轴网
- 网络时代人物标签(两种)
- 个人数字证书免费申请
- android mapping文件 路径,Android打包代码混淆后的Mapping文件路径
- Neodynamic JSPrintManager for Blazor
- 如何判断THIS指向?
- 【智能制造】索菲亚家居智能工厂与物流系统建设
- 【五一创作】自动驾驶技术未来大有可为
- 折叠屏上应用设计规范,了解一下?
- 百度、高德地图功能进一步探索之—电子围栏绘制(三)