【深度学习—李宏毅教程笔记】Self-attention
目录
一、Self-attention 的引入
1、多样化的输入形式
2、典型的下游任务下游任务
3、传统“全连接 + 窗口”方法的局限
4、Self‑Attention 的引入
二、Self-attention 的架构
1、Self-attention层的框图表示
2、Self-attention 层的矩阵运算过程
三、Multi-head Self-attention
四、位置编码
五、Self-attention 的应用
1、在自然语言处理(NLP)中的典型应用
2、在语音信号处理中的应用
3、在计算机视觉中的应用
4、Self‑Attention 与卷积神经网络(CNN)的对比
5、Self‑Attention 与循环神经网络(RNN)的对比
6、在图结构数据(GNN)中的应用
7、高效 Transformer 与未来方向
8、总结
一、Self-attention 的引入
1、多样化的输入形式
对于常见的机器学习任务,输入形式是多样的:
-
单向量(Vector)
-
最基础的输入形式,例如将一段文本或一帧语音直接映射为实数向量。
-
-
向量集合(Set of Vectors)
-
句子中每个单词、语音信号中的每一帧、图结构中的每个节点,都可看作一个向量,模型的输入即这一组向量。而这种输入形式正是适合 Self-attention 的输入形式。
-
例如:
-
文本中单词的 one‑hot 编码或预训练词向量
-
语音信号按帧提取的 MFCC 或滤波器组特征
-
社交网络中每个用户节点的属性向量
-
-
2、典型的下游任务下游任务
根据输入向量集合,模型的输出形式主要有以下几类:
-
逐向量标注(Sequence Labeling)
-
对每个输入向量分别打标签,常见任务如词性标注(POS Tagging)、命名实体识别(NER)等。
-
-
序列级分类(Sequence Classification)
-
对整个向量序列赋予一个标签,如情感分析、话者识别等。
-
-
动态标签数预测
-
模型无需预先固定标签数量,例如聚类任务或机器翻译中的对齐机制。
-
-
序列到序列映射(Seq2Seq)
-
输入和输出均为向量序列,典型应用为神经机器翻译
-
3、传统“全连接 + 窗口”方法的局限
-
全连接层(Fully‑Connected):只能将每个向量独立映射,缺乏上下文信息;
-
滑动窗口(Window):虽然可引入局部邻域信息,但窗口大小有限,难以捕获远距离依赖;
-
问题示例:单句“I saw a saw”,对第二个“saw”需要同时考虑前文的“I saw a”与后文的含义,但窗口方法可能覆盖不到全部上下文
4、Self‑Attention 的引入
为了解决上述方法无法建模全局依赖的问题,在此处引入 Self‑Attention 概念:
-
核心思想
-
在给定序列中,每个元素不仅与自身相关,还与序列中所有其他元素进行交互,通过计算相似度权重来聚合全局信息。
-
-
预期效果
-
既能灵活捕捉长距离依赖,又能保留序列中各元素的相对位置信息(后续可结合位置编码)。
-
-
后续展开
-
具体计算方式包括 Query/Key/Value 的映射、点积打分、缩放与 Softmax、加权求和,以及多头机制等。
-
二、Self-attention 的架构
1、Self-attention层的框图表示
Self-attention 的架构大体就上面的图片上的样子,有时在应用时可叠多层,如下图:
其中的每一个输出不仅仅只与对应的一个输入有关,其余的说有输入都影响到这个输出,比如 不仅仅与
有关,还受
的影响,如下图:
在计算 时,可先建立
与
的联系,用
表示,如下图:
每一个输入都有一个自己的 Query、Key、Value,(Value后续用到)。Query、Key、Value都由相应的输入和一个参数矩阵 ,
,
相乘得到,对于每一个输入,用的参数矩阵
,
,
都是相同的。
得到了 各个输入之间的关系 ,后将他们送到softmax层进行归一化,再与各个输入的 Value 相乘后加一起,就得到了
,如下图:
这就是 Self-attention 层从输入到输出的过程。所有的输出都是并行的。
2、Self-attention 层的矩阵运算过程
步骤一:
一个 Self-attention 层的参数就只有三个矩阵: ,
,
,它们三个的任务是与输入分别相乘得到每个输入对应的 Query、Key、Value ,具体如下:
步骤二:
接着由矩阵 和矩阵
相乘得到矩阵
,再经过softmax得到
步骤三:
然后再由矩阵 和矩阵
相乘得到 输出矩阵
可更清晰得表示为
步骤一:
步骤二:
步骤三:
即全流程为:
三、Multi-head Self-attention
再普通 Self-attention 的基础上 添加多个注意力矩阵的运算,通过多头注意力找到输入之间的多种不同的相关性,即:
得到 和
,再将它两个乘上一个矩阵变成一个,即
四、位置编码
对于上面的 Self-attention ,其中忽略了输入之间的位置信息,但这并不能说位置信息就丢失了,在学习过程中,位置信息会被学到,但如果提前加入位置信息,那么对于位置信息,模型就能更轻易的得到,相当于帮助了模型对位置信息的学习,也可以说对位置信息提前加入了先验,效果更好。所以说就有了位置编码。
位置编码的方式:
给输入 加上一个向量
,即:
向量 长什么样子呢?最早的论文中的向量
如下图:
每个列都代表一个向量,从左到右依次是 ,
,
,
,黑色框里的是
.
在论文 《All attention is you need》中它的位置向量是通过一个固定的规则所产生的,这个规则是一个很神奇的 sin cos 的函数所产生的。
更多的位置编码:
第一个图的位置向量是横着看的,是用 sin 函数产生的,第二个图是学出来的,即位置向量通过学习得到的,
五、Self-attention 的应用
1、在自然语言处理(NLP)中的典型应用
-
Transformer 与 BERT:
-
Transformer 架构首次将全局自注意力引入序列建模,实现了并行化训练和长距离依赖捕捉。
-
BERT 在预训练阶段使用双向自注意力,有效地学习上下文表示,推动了阅读理解、文本分类等任务性能大幅提升。
-
2、在语音信号处理中的应用
-
长序列带来的挑战:语音信号通常以 10ms 为帧长,序列长度极大,直接计算全局注意力矩阵代价高。
-
截断自注意力(Truncated Self‑Attention):仅对固定窗口或范围内的帧计算注意力,减少计算复杂度;
-
局部范围内的注意力:结合局部上下文,有助于捕捉短时特征,同时兼顾部分全局信息。
3、在计算机视觉中的应用
-
Self‑Attention GAN(SAGAN)
-
在生成对抗网络中加入自注意力模块,增强远距离像素间的信息交互,提高生成图像的细节一致性。
-
-
Detection Transformer(DETR)
-
将检测任务形式化为集合预测,引入全局自注意力取代传统的区域建议或锚框策略,实现端到端目标检测。
-
4、Self‑Attention 与卷积神经网络(CNN)的对比
-
感受野:
-
CNN:固定且局部的感受野,由卷积核大小决定。
-
Self‑Attention:学习到的注意力权重即可视作可调节的“感受野”,可跨越全局。
-
-
表达能力:
-
Self‑Attention 是带可学习权重的复杂版本,能够灵活建模任意位置间的关系;CNN 是其简化形式。
-
5、Self‑Attention 与循环神经网络(RNN)的对比
-
并行性:
-
RNN 串行处理,难以并行;Self‑Attention 并行度高,训练速度快。
-
-
依赖建模:
-
Self‑Attention 天然捕捉长距离依赖;RNN 随序列长度增长易产生梯度消失。
-
-
记忆机制:
-
自注意力通过键值对存储中间信息,类似可扩展的外部记忆。
-
6、在图结构数据(GNN)中的应用
-
图注意力网络(GAT):
-
对图中的每条边应用自注意力,仅在相邻节点间计算注意力分数,实现节点特征的加权聚合。
-
-
优势:更灵活地建模异质图结构中的节点关系,提升节点分类、链路预测等任务性能。
7、高效 Transformer 与未来方向
-
Efficient Transformers(《Efficient Transformers: A Survey》)
-
梳理了各种降低注意力复杂度的方法,如稀疏注意力、分块注意力、低秩分解等。
-
-
Long Range Arena 基准
-
提供了对比不同高效 Transformer 在多种长序列任务上的表现,为后续模型设计提供评测标准。
-
8、总结
Self‑Attention 作为一种通用的关系建模机制,已广泛渗透到 NLP、语音、视觉、图神经网络等领域。其核心优势在于并行化训练、长距离依赖捕捉与可学习的全局感受野;同时,面对序列长度过大时,也催生了各类高效变体(如截断、稀疏、分层注意力)来平衡性能与计算资源。