type
status
date
slug
summary
tags
category
icon
password
智慧的艺术是知道该忽视什么。
📝 注意力基本理念
注意力分为两种:
1、自上而下的有意识的注意力,称为聚焦式注意力,包含自主性提示。
2、自下而上的无意识的注意力,称为显著性注意力,包含非自主性提示。
一个和注意力有关的例子是鸡尾酒会效应,当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音(聚焦式注意力).同时,如果背景声中有重要的词(比如他的名字),他会马上注意到(显著性注意力)。
显著性注意力偏向于感官输入,可以用简单的全连接层,或者是最大汇聚、门控机制进行模拟和实现。
注意力机制,通常指的是聚焦式注意力。自主性提示被称为查询Q(query),通过注意力汇集将选择引导至感官输入,感官输入被称为值V(value)。其中,每一个值V都和一个键K(key)配对,作为非自主提示,或是环境中的非意志信息。
😀 注意力评分函数
查询(自主提示)和键(非自主提示)之间的交互形成了注意力汇聚。
注意力汇聚有选择地聚合了值(感官输入)以生成最终的输出。
那么注意力评分函数就是用来计算查询向量Q和键向量K之间的相关性。
加性模型
当查询Q和键K的长度不同时,可以使用加性模型。
点积模型
加性模型和点积模型的复杂度差不多,但是点积模型在实现上可以更好地利用矩阵乘积,从而计算效率更高。使用点积模型的前提是qk具有相同的长度d。
假设查询和键的所有元素都是独立的随机变量,并且都满足零均值和单位方差,那么两个向量的点积的均值为0,方差为1。为确保无论向量长度d如何,点积的方差在不考虑向量长度的情况下仍然是1,那么对点积除以,得到缩放点积评分函数:
小节
缩放点积直接通过点积得到注意力分数,没有任何的学习参数。而加性注意力是通过可学习参数先进行缩放,然后进行q与k的特征相加。
区别在于:
- 是否可学习。
- 特征进行点积还是特征进行相加。
😁 自注意力机制
自注意力
查询、键和值来自同一组输入,因此被称为自注意力(self-attention)。
在序列信息中,能够捕捉序列内部相关性的信息。顺序信息可通过位置编码加入。
基本结构如下:
自注意力模型可以作为神经网络中的一层来使用,既可以用来替换卷积层和循环层,也可以和它们一起交替使用。自注意力模型计算的权重a只依赖于q和k的相关性,而忽略了输入信息的位置信息。因此在单独使用时,自注意力模型一般需要加入位置编码信息来进行修正。
全连接和自注意力对比
特征/机制 | 全连接层(FC) | 自注意力机制 - 序列数据 | 自注意力机制 - 非序列数据 |
适用数据类型 | 固定大小的输入,非序列数据 | 序列数据,尤其适合变长输入 | 图像、图形数据等非序列数据 |
基本功能 | 特征整合、分类、回归 | 序列内特征提取、长距离依赖捕获 | 特征提取、依赖关系捕获 |
参数量 | 随输入和输出大小显著增长 | 相对较少,取决于注意力机制的实现 | 相对较少,取决于注意力机制的实现 |
计算效率 | 较低(特别是在处理大规模数据时) | 较高,支持并行处理 | 较高,支持并行处理 |
适用场景 | 特征融合、最终决策层 | 序列分析、NLP、部分视觉和音频任务中的特征提取和关系建模 | 计算机视觉(如图像分类)、图形数据分析(如图注意力网络) |
特有优势 | 简单、直接、普遍适用 | 强大的序列内部结构建模能力、高效处理长距离依赖 | 能够捕捉非序列数据内部的复杂依赖和关系 |
网络结构中的位置 | 通常位于网络末端,用于最后的决策或分类 | 可以用于网络的多个位置,特别是在处理序列数据的中间层 | 可以用于网络的多个位置,适用于图像的块处理或图数据的节点处理 |
表示能力 | 有限,主要依赖输入特征的线性组合 | 强大,可以捕捉复杂的序列内依赖关系 | 强大,适用于捕捉图像中的空间关系或图中的结构依赖 |
适应性 | 适应于不同的数据模式,但不直接处理序列间的动态关系 | 高度适应性,能够动态关注序列中重要的部分 | 高度适应性,能够动态关注数据中重要的部分 |
端到端学习 | 支持,但可能需要手动特征选择和设计 | 强支持,尤其是在序列模型中,减少了对手动特征工程的需求 | 强支持,减少了对手动特征工程的需求,适用于图像和图形数据处理 |
处理长距离依赖能力 | 低 | 高,是其设计的核心优势之一 | 在非序列上下文中,转化为处理复杂依赖和关系的能力 |
卷积、循环神经网络和自注意力对比
卷积神经网络:卷积核大小为k,序列长度为n,输入输出通道数为d
循环神经网络:序列长度为n,输入输出通道数为d
自注意力机制:序列长度为n,输入输出通道为d
计算复杂度:乘法中每个输出元素需要的乘法次数,乘以总共的元素数量。
ㅤ | 卷积神经网络 | 循环神经网络 | 自注意力机制 |
计算复杂度 | |||
最大路径长度 |
总而言之,卷积神经网络和自注意力都拥有并行计算的优势, 而且自注意力的最大路径长度最短。但是因为其计算复杂度是关于序列长度的二次方,所以在很长的序列中计算会非常慢。
自注意力代码
🤗 条件注意力机制
条件注意力机制(Conditional Attention Mechanism)是一种在标准注意力机制基础上增加额外控制信号的扩展形式,允许模型根据特定的条件信息(如标签类别、句子属性或其他辅助变量)动态调整注意力分布。在不同的应用场景中,条件注意力的具体实现会有所差异,但基本思想是将额外的条件信息融入到注意力计算的过程中。
最直接的方法是将条件信息融合到查询(Q)和键(K)的生成中。这可以通过将条件信息编码为向量,然后与每个输入位置的表示相结合(例如,通过连接、相加或通过一个全连接层)来实现。这样做的目的是让注意力权重的计算不仅依赖于输入序列内部的关系,而且还受到外部条件的影响。
条件自注意力代码
🤩 交叉注意力机制
交叉注意力(cross attention)和自注意力的区别就在于输入,在计算注意力时我们需要三个矩阵Q、K、V,这三个矩阵是由输入X经过线性变换得到的。对于自注意力,输入X只有一个,三个矩阵都是由同一个X得到;对于交叉注意力,输入X一般有两个和,Q由线性变换得到,K、V由线性变化得到。
基本特点:
- 两个x必须具有相同的维度
- 两个x可以是不同的模态形式(如:文本、声音、图像)
- 存在个别情况,如selfDoc的cross-attention中,一个x生成Q和V,一个x生成k。
相关论文:
交叉注意力代码
🤗 多头注意力机制
多头注意力(Multi-Head Attention)利用多个查询Q=[q1,q2,…,qn]来并行地从输入信息中获取多组信息,每个注意力关注信息的不同部分。
结构如下:
计算步骤为:
- Embedding
- 生成Q,K,V
- 根据头数量,将Q,K,V分割成不同子集
- 分别对每个头进行自注意力计算,得到每个头的输出z
- 对每个头的输出合并,并通过线性变化层w0,得到最终的多头注意力输出Z
- 输出处理,如fc、残差层等等
多头自注意力代码
🤗 其他
通道注意力机制和空间注意力机制使用的并非QKV的自注意力结构,通过主要通过池化、卷积和全连接实现功能,在本文不进行详细展开。
📎 参考文章
- 作者:Hemon
- 链接:https://hemonn.com/article/0f46e773-c96c-4c9a-93ef-9dd71b4a5243
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。