前言
本文为学习总结用,可能不涉及具体的注意力机制实现。
很多时候我们理解一个事物应该从它的具体作用出发,再去深入它的具体实现。
比如,当你学自行车的时候,你不可能是先去理解自行车的构造原理,再上车骑行。
往往我们学习自行车的骑行都是从应用开始,这也是这篇文章的初衷发,先了解它干嘛用,再理解它的实现。
部分图片从网络上进行转载,侵删
注意力机制
注意力机制本质上就是类似于我们人类在处理事物时的注意力。举一个简单的例子,人类往往在进入心流状态时工作效率是最高的,这时候人几乎是全神贯注的,注意力高度集中在他需要工作的事物上。
其实AI也是同理,一张图片中可能有AI作业所需要的事物,也有一些干扰或者说是不重要的事物。引入注意力机制后,让AI能更快的注意到应该注意的事物上。
QKV是什么?
其中我们先来讲讲注意力机制中的QKV分别对应什么:
假设你是一位画家,正在创作一幅画。这幅画的主题是 “森林中的一只鹿”。(这头鹿引用自《幽灵公主》)
为了完成这幅画,你需要做以下几件事:
- 确定主题(Query):
主题是 “森林中的一只鹿”,这就是你的 Query(Q)。它代表你当前关注的核心内容。 - 寻找参考素材(Key):
你需要参考一些素材来完成这幅画,比如:
一张鹿的照片(Key 1)
一片森林的风景图(Key 2)
一些光影效果的示例(Key 3)
这些素材就是 Key(K),它们是你用来与 Query 匹配的参考。 - 提取有用信息(Value):
从这些素材中,你提取出对创作有用的信息:
从鹿的照片中提取鹿的形态和细节(Value 1)
从森林的风景图中提取树木和背景的布局(Value 2)
从光影效果中提取如何表现光线(Value 3)
这些提取的信息就是 Value(V),它们是实际用于创作的内容。 - 动态组合(注意力机制):
你不会完全照搬某一张素材,而是根据主题(Query)动态地选择和组合素材中的有用信息(Value)。
例如:
你可能会更关注鹿的照片(Key 1),因为它是画作的核心。
你也会参考森林的风景图(Key 2),但只提取其中的一部分布局。
光影效果(Key 3)可能只用于调整整体的氛围。
这种动态选择和组合的过程就是 注意力机制。 - 完成画作(输出):
最终,你将提取的信息(Value)组合起来,完成了一幅画作。这幅画既包含了鹿的细节,也融合了森林的背景和光影效果。
通过这幅画的比喻,我们可以形象地理解 QKV 的作用:
- Query:当前关注的核心内容(画作的主题)。
- Key:用来匹配 Query 的参考(素材)。
- Value:从参考中提取的实际信息(用于创作的内容)。
注意力机制就像画家的创作过程,通过动态选择和组合信息,生成符合主题的输出。
注意:在不同的注意力机制中QKV的算法可能是不同的。
硬注意力(Hard Attention)
硬注意力每次只关注一个特定的部分,忽略其他信息。
就像是抠图一样,识别图片中的猫时,系统只关注猫的部分,忽略背景。
硬注意力机制通常是不可微的,因此训练起来比较困难,常用强化学习来优化。
软注意力(Soft Attention)
软注意力同时关注多个部分,但对不同部分分配不同的权重。
像是听一段话时,系统同时处理所有声音,但更关注主要说话者。
权重通常是可微的,因此更容易训练。
通道注意力机制(Channel Attention)
想象一下,你有一张彩色照片,这张照片由红、绿、蓝三个颜色通道组成。每个通道都包含了不同的信息,比如红色通道可能更突出红色的物体,绿色通道更突出绿色的物体。
通道式注意力的作用就是让模型学会:哪些颜色通道更重要。比如,如果照片里有一只红色的苹果,模型就会觉得红色通道更重要,给它更多的“注意力”,而绿色和蓝色通道可能就没那么重要。
通俗来讲当你使用Adobe AU对某一音乐进行人声降噪时,你可以需要进行中置声道提取降低其中置声道,保证你的其他BGM能够被更加“注意”。
在CBAM卷积注意力机制中与通道注意力机制和空间注意力机制的结合,通道注意力机制动态调整特征图中每个通道的重要性,从而增强对任务更有用的通道特征,抑制不重要的通道特征。
CBAM首先采用了通道注意力机制,如下图CBAM中的通道注意力
局部注意力机制(Local Attention)
局部注意力关注的是图片的某一个小区域,而不是整张图片。比如一张照片里有一个人和一只猫,局部注意力可能会先聚焦在人的脸上,然后再聚焦在猫的身上。
就像是我们阅读书时,我们并不是一页一页的看,而是先聚焦到第一行,再聚焦到第二行,一行一行的看。(如果可以量子速读那我没话说)
自注意力机制(Self-Attention)
自注意力机制的核心思想是:让模型自己决定输入数据中哪些部分更重要。比如:“我喜欢吃苹果,因为它很甜。” 自注意力机制会让模型自动发现“苹果”和“甜”之间的关系更紧密,而不是“我”和“甜”。
就像你在读一篇文章时,会不自觉地把相关的词语或句子联系起来。比如看到“猫”这个词,你会想到“老鼠”或者“鱼”,而不是“汽车”。自注意力机制就是让模型学会这种“联想”能力。
自然语言处理(如翻译、文本生成) 中常用
空间注意力机制(Spatial Attention)
空间注意力机制关注的是 图片或特征图中的空间位置。比如一张图片里有一个人和一只狗,空间注意力机制会让模型先关注人的位置,再关注狗的位置。
就像你看一幅画时,眼睛会先聚焦在画中最显眼的部分(比如画中央的人物),然后再去看其他细节(比如背景的树)。空间注意力机制就是让模型学会这种“聚焦”能力。
在CBAM卷积注意力机制中与通道注意力机制和空间注意力机制的结合,空间注意力机制动态调整特征图中每个空间位置的重要性,从而增强对任务更有用的空间区域特征,抑制不重要的区域特征。
在CBAM中空间注意力在通道注意力结束之后执行,如下图为CBAM中的空间注意力
CBAM的单个conv blocks的处理先后顺序,可见通道注意力与空间注意力的重要性。
空间注意力在计算机视觉任务中常用,比如目标检测、图像分割。
空间注意力与局部注意力的区别
空间注意力
空间注意力关注的是 整个图像或特征图中的空间位置。 它会为图像中的每个位置分配一个权重,表示该位置的重要性。
- 模型会为整张图片的每个位置分配权重。
- 比如,模型可能会发现猫的脸和身体更重要,背景不太重要。
局部注意力
局部注意力关注的是 图像或特征图中的某一个小区域。 它只对局部区域内的信息进行加权,而不是整个图像。
- 模型只关注图片中的一个小区域,比如猫的眼睛。
- 它会为眼睛周围的像素分配权重,而忽略其他部分。
空间注意力: 关注整个图像的空间位置,适合全局任务。
局部注意力: 关注图像中的局部区域,适合细节任务。
时间注意力(Temporal Attention)
时间注意力机制关注的是 时间序列数据中哪些时间点更重要。比如一段视频中,一个人在跑步,时间注意力机制会让模型关注跑步动作的关键帧,而不是每一帧都同等对待。
时间注意力机制适合去处理一些时序类型的数据
视频分析、语音识别、时间序列预测等任务中常用。
交叉注意力(Cross-Attention)
交叉注意力机制用于处理两个不同的输入序列之间的关系。比如在机器翻译中,源语言句子和目标语言句子之间的关系就是通过交叉注意力机制来建模的。
交叉注意力机制通过计算解码器当前状态与编码器所有状态之间的相关性,来决定解码器应该关注编码器的哪些部分。
在transformer中q来自于decoder,k和v来自于encoder,这个步骤就叫做交叉注意力。
交叉注意力中不一定是encoder最后一层的输出同时也有人尝试不同的交叉注意力的方式具体可以看下面的论文
简单来说交叉注意力机制中的交互就是目标序列的状态与源序列的状态之间的交互。应用于需要处理两个不同序列之间交互的任务中。
那么说可能有点抽象,接下来用示例来说
E.g:机器翻译(Machine Translation)
任务描述:将一种语言的句子(源序列)翻译成另一种语言的句子(目标序列)。
交叉注意力的作用:
在解码器生成目标语言的每个词时,交叉注意力机制允许模型动态地关注源语言序列中最相关的部分。
例如,将英文句子 “The cat is on the mat.” 翻译成法文 “Le chat est sur le tapis.” 时,生成 “chat” 时会重点关注源句中的 “cat”。
E.g:图文生成(Image Captioning)
任务描述:给定一张图像,生成描述该图像内容的文本。
交叉注意力的作用:
图像通过卷积神经网络(CNN)编码为特征序列,文本通过解码器生成。
交叉注意力机制允许文本生成过程动态关注图像的不同区域。
例如,生成 “A cat is sitting on a mat.” 时,模型会关注图像中的猫和垫子区域。
因此可以总结出交叉注意力机制的核心思想是在两个不同序列之间建立动态的、上下文相关的关联。
多头注意力(Multi-Head Attention)
观察transformer模型可以发现有很多的多头注意力机制。
观察上图可以发现有层归一化(layer norm)和残差操作,此外还有部分的masked多头注意力,其中marked的思想如下
首先我们来展示一个没有marked的
在来看看marked的自注意力
b1只能考虑a1的,而b2可以考虑a1,a2的依次类推,也就是说marked,就是将输入"遮掩",使得输出只能考虑已知的信息。
多头注意力的构造如下
让我们输入的VKQ进行转换使得它有多个VKQ,用官方点的话来讲多头注意力机制是注意力机制的一种扩展,通过并行计算多个注意力头来捕捉输入序列的不同特征。
每一个头关注到不同的方面,其中不同方面都是通过网络学习的。
其中注意力头如下
注意力头
注意力头(Attention Head)是注意力机制中的一个基本单元,用于计算输入序列中不同位置之间的相关性。每个注意力头独立计算注意力权重,捕捉输入序列的不同特征。通过使用多个注意力头,模型可以并行学习多种不同的表示,从而提升性能。
它的作用是通过计算输入序列中不同位置之间的相关性,帮助模型捕捉序列中的重要信息,也就是在不同的位置分配注意力。
所谓多头注意力就是并行多个注意力头
引导注意力(Guide Attention)
旨在通过显式地引导模型关注输入数据的特定部分,从而提高模型的性能或满足特定任务的需求。它通常用于需要强约束或先验知识的任务中,比如语音识别、图像生成、机器翻译等。
比如语音识别任务中,我们可以引导模型在学习过程中就应该由左向右的处理。
比如”你好呀“,如果不加引导,那么模型处理的顺序可能是乱序的,而我们所说的话一般是有上下联系的,所以加入从左到右的注意力可以让模型把注意力放在从左到右中,从而使得模型的效果更好
其核心的思想是通过外部信息或规则,显式地引导模型在训练过程中关注输入数据的某些特定部分。
主要的处理方式就是由Monotonic Attention(单调注意力) 和 Location-aware Attention(位置感知注意力)来实现的。
单调注意力(Monotonic Attention)
核心的思想为强制模型的注意力在输入序列上单调移动。 也就是说,模型在处理输出序列时,注意力只能从左到右(或从右到左)移动,而不能来回跳跃。
位置感知注意力(Location-aware Attention)
核心的思想为让模型在计算注意力时,考虑之前注意力的位置信息。 通过引入位置信息,模型可以更好地捕捉输入序列的局部结构,避免注意力漂移。
层次化注意力(Hierarchical Attention)
层级注意力是一种基于多层次结构的注意力机制。它能够在不同层次上对输入序列进行建模,并根据不同层次的重要性进行加权融合。它通常用于处理层次化结构的数据,比如文档(由句子组成,句子由单词组成)。它先在低层次(如单词级别)计算注意力,然后在高层次(如句子级别)再次计算注意力。
就像读一本书时,先关注每个句子的重点,再关注整段话的重点,最后理解整篇文章的主旨。
外部注意力(External Attention)
通过引入两个外部记忆单元(Memory Units)来替代传统的自注意力机制,总的来说它的计算更快、内存更省。 使用两个不同的memory单元Mk和Mv作为key和value,去增强网络的能力。
其论文中做了消融实验,如分类、分割、目标检测、图像生成,点云等等,其中发现确实是有效的。
全注意力(Full Attention)
全注意力机制(Fully Attention Mechanism)是一种完全依赖注意力机制来建模输入序列中所有元素之间关系的模型设计。 与传统的混合模型(如结合卷积神经网络和注意力机制的模型)不同,全注意力机制摒弃了卷积或循环结构,仅通过注意力机制来捕捉序列中的全局和局部依赖关系。
稀疏注意力(Native Sparse Attention)
这个我也是粗略了解,这里只简单说说。
DeepSeek团队最近提出的一种稀疏注意力机制,简称NSA,它在训练过程中是可用的。
下图是与全注意力模型的对比,可以发现NSA又快又好
NSA与baselines在LongBench上的性能比较,包括单文档QA、多文档QA合成和代码任务类别的子集。NSA的表现优于大多数baseline,包括全注意力。
其整体架构如下
其中第一个模块是压缩,第二个模块是选择,第三个模块是滑动窗口,大致原理类似于
- 粗读一遍文章,寻找兴趣点
- 精度感兴趣的部分
- 寻找感兴趣部分的上下文
有点像达芬奇剪辑软件的菜单设计了,先进行粗剪,再细剪,拖动视频通道中的视频边界获取其上下文。
引用
- Woo S, Park J, Lee J Y, et al. Cbam: Convolutional block attention module[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 3-19.
- Vaswani A , Shazeer N , Parmar N ,et al.Attention Is All You Need[J].arXiv, 2017.DOI:10.48550/arXiv.1706.03762.
- 李宏毅的Transformer课程
- 郭梦浩, 徐童, 刘江江, 刘振宁, 蒋鹏涛, 穆泰江, 张松海, Ralph R. Martin, 程明明, 胡事民. Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks[J]. arXiv preprint arXiv:2105.02358, 2021.
- Jingyang Yuan, Huazuo Gao, Damai Dai, Junyu Luo, Liang Zhao, Zhengyan Zhang, Zhenda Xie, Y. X. Wei, Lean Wang, Zhiping Xiao, Yuqing Wang, Chong Ruan, Ming Zhang, Wenfeng Liang, Wangding Zeng. Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention[J]. arXiv preprint arXiv:2502.11089, 2025.
后记
“如果我们认为的神,还有我们追逐的希望,只不过是科学的量化。那么我们的爱是否也将科学化呢?” ————《未来的夏娃》
如果有问题要问的话最近比较忙,我估计我也不是很会回答,请谅解一下。