attention
Attention的发展脉络
1 背景与动机
早期序列到序列(Seq2Seq)模型使用一个固定长度的上下文向量来表示整个源序列,这在 Bahdanau 等人(2014)提出的工作中被明确指出是性能瓶颈。他们发现在长句翻译任务中,用单个向量来编码任意长度的输入会限制模型表达能力。因此,Bahdanau 等人引入了注意力机制(Attention),通过对源序列不同位置分配动态权重,使解码器能够软性地搜索与当前目标词最相关的源词位置。这一机制极大缓解了固定向量的瓶颈,实现了与当时最优统计翻译系统可比的性能。
随着研究进展,Luong 等人(2015)进一步探索了注意力的不同变体。他们提出了两类常用的注意力:**全局注意力(Global Attention)对源序列所有位置进行加权,而局部注意力(Local Attention)**只关注源序列的一个子窗口,从而降低了计算开销。此外,Luong 等定义了多种“打分函数”(点乘、一般形式、加性形式等),并对它们在不同注意力模式下的表现进行了比较。简而言之,局部注意力在性能接近的情况下计算更高效,但全局注意力能捕获更全面的上下文信息。
2017 年,Vaswani 等人提出了Transformer,彻底摆脱了循环和卷积结构,采用堆叠的自注意力机制来进行序列建模。Transformer 中引入的多头注意力(Multi-Head Attention)和缩放点积(Scaled Dot-Product)注意力,使模型能够在不同子空间并行地学习多种表征。这标志着注意力机制从加性/乘性注意力时代进入了全新的阶段:注意力不仅仅是对齐手段,而成为整个模型的核心。
近年来,关注点逐渐转向提高注意力的效率和可扩展性。一方面,提出了稀疏或局部窗口注意力(如 Longformer、BigBird)以降低长序列的计算复杂度;另一方面,通过低秩近似或核方法(如 Performer、Linformer)实现线性注意力。同时,在视觉和多模态领域,注意力机制扩展到了图像、视频等新领域,如 Vision Transformer (ViT) 将注意力引入计算机视觉,BLIP-2、Flamingo 等模型进一步探索了跨模态的注意力融合。总之,注意力机制从最初解决 RNN 瓶颈的动机出发,不断演进,涵盖了多种形式和优化策略。
2 核心概念
2.1 Vanilla/Global Attention(全局注意力)
全局注意力(Global Attention)指的是解码器在生成每个目标词时,会考虑源序列中所有位置的上下文信息。具体而言,给定解码器时刻 \(i\) 的隐状态 \(s_{i-1}\) 和源序列第 \(j\) 个隐藏状态 \(h_j\),我们先计算兼容度得分 \(e_{ij}=score(s_{i-1},h_j)\),然后通过软最大化得到注意力权重:\(\alpha_{ij}=\mathrm{softmax}(e_{ij})\)。常见的评分函数包括加性(Additive)注意力和点积(Dot-Product)注意力。加性注意力(Bahdanau 注意力)使用一个小型前馈网络学习得分:\(e_{ij}=v^\top\tanh(W_q s_{i-1}+W_k h_j)\,,\quad c_i=\sum_j\alpha_{ij}h_j\,,\quad \alpha_{ij}=\frac{\exp(e_{ij})}{\sum_k\exp(e_{ik})}\,,\)这里 \(v,W_q,W_k\) 为可训练参数;而点积注意力(Luong 注意力)通常计算 \(e_{ij}=s_{i-1}^\top h_j\),并在 Transformer 中引入缩放 \(\sqrt{d}\) 因子以缓解维度膨胀。相比之下,点积注意力在实现上简单且利用矩阵乘加并行化,其复杂度与加性注意力相当,但效率更高。
全局注意力的优点在于能考虑源序列的全部信息,但对于长序列计算和存储成本较高(时间复杂度 \(O(n^2)\))。在实践中,为了平衡效果与效率,也可采用局部注意力(Local Attention)或窗口注意力等变种,仅关注附近或局部区域。例如,Luong 等发现在全球注意力和局部注意力之间权衡时,局部注意力在BLEU等评价指标上表现相近,但计算更轻量。全局注意力常见于机器翻译、句子生成等需要捕获长距离依赖的任务,许多经典神经翻译模型都采用了这一机制。
2.2 自注意力(Self-Attention)(编码器/解码器)
自注意力是在同一序列内部进行注意力计算的方式,用于捕获序列内部不同位置间的相互关系。在 Transformer 中,编码器层的自注意力(Encoder Self-Attention)对输入序列的所有位置互相进行注意力:每个位置 \(i\) 通过查询向量 \(q_i\), 键向量 \(k_j\), 值向量 \(v_j\)(都来自前一层输出,通常 \(q_i=W_q x_i, k_j=W_k x_j, v_j=W_v x_j\))与序列中所有位置 \(j\) 计算兼容度,并形成加权和:\(\alpha_{ij}=\frac{\exp(q_i^\top k_j/\sqrt{d})}{\sum_{k}\exp(q_i^\top k_k/\sqrt{d})}\,,\quad c_i=\sum_j\alpha_{ij}v_j\,,\)其中 \(d\) 是向量维度,缩放因子 \(\sqrt{d}\) 防止点积过大。这种机制使得模型能动态聚焦序列中其他位置的信息。例如 Transformer 编码器中的每一层都会执行这样的自注意力,使每个词的表示与其他所有词进行交互。多头注意力进一步将 \(q,k,v\) 投影到 \(h\) 个子空间并行执行,如 Vaswani 等指出:并行的多头注意力允许模型在不同表示子空间上关注信息,使得整体表达更为丰富。
解码器中的自注意力(Decoder Self-Attention)与编码器类似,但采取因果遮掩(Causal Masking),仅允许当前位置 \(i\) 注意到不超过 \(i\) 的先前位置。这样保证生成的每个词只依赖已生成的词,维护自回归的特性。Masked Attention 对评分矩阵进行上三角遮掩处理(超出当前位置的权重为 \(-\infty\)),公式依旧为软最大化形式。自注意力的优点在于并行性好、全局信息交互、长距离依赖捕捉;缺点是其计算和内存复杂度为 \(O(n^2)\)(需计算 \(n\times n\) 个相关系数),对于极长序列可能开销很大。
2.3 交叉注意力(Cross-Attention)(编码-解码,多模态)
交叉注意力指查询(Query)和键值(Key/Value)来自不同来源。典型应用是 Transformer 的编码器-解码器结构:在解码器的每层中,交叉注意力层将解码器先前层的输出作为查询,将编码器的输出作为键和值。公式形式与自注意力相同:$\alpha_{ij}=\mathrm{softmax}(q_i^\top k_j/\sqrt{d}),,\quad c_i=\sum_j \alpha_{ij}v_j,, $只不过此时 \(q_i\) 来源于 Decoder 隐藏状态,\(k_j,v_j\) 来源于 Encoder 隐藏状态。这种跨序列注意力使解码器能在生成时直接参考源序列的编码表示,实现信息的跨模态融合。例如机器翻译中,Decoder 可利用交叉注意力将当前生成词与源句的所有词对齐。
在多模态场景中,交叉注意力也被广泛应用:一个模态的特征作为查询,另一个模态的特征作为键值,实现模态间信息交互。例如 CLIP 虽用双塔结构,但后续视觉语言模型如 BLIP-2 或 Flamingo 则在 LLM 和视觉编码器间加入交叉注意力层,使文字查询注意到图像特征,或反之。交叉注意力的优点是灵活地将不同上下文的信息融合,缺点则与全局注意力类似,计算量较大,特别是在两模态都很长时。此外,跨模态的注意力可能需要额外的对齐或提示机制(如提示词或位置嵌入)来协调不同模态。
2.4 Masked/Causal Attention(遮掩/因果注意力)
遮掩/因果注意力通常指解码器中自注意力的约束设置,确保未来信息不泄露给当前预测。在标准自回归生成任务中,对于目标序列的第 \(i\) 位置,只能看到第 1 到 \(i\) 个已生成的词。实现方式是在计算注意力权重之前,用掩码将查询-键相关矩阵中超过当前位置 \(i\) 的元素置为 \(-\infty\),使得 \(\exp(q_i^\top k_j)=0\) 对于所有 \(j>i\)。这样一来,softmax 自然只关注前 \(i\) 个位置,维护了预测时序的因果性。带掩码的注意力保证了模型在训练和推理时的一致性:每个时间步的输出仅依赖于已生成内容,对语言模型等任务尤为关键。
Masked Attention 的公式与普通注意力相同,仅在求 \(\alpha_{ij}\) 时加上掩码:例如,定义掩码函数 \(\mathrm{mask}(i,j)=0\) if \(j\le i\) else \(-\infty\),则 $\alpha_{ij}=\frac{\exp\bigl(q_i^\top k_j/\sqrt{d} + \mathrm{mask}(i,j)\bigr)}{\sum_{k=1}^i \exp(q_i^\top k_k/\sqrt{d})},. $这种设计使解码器能够每步并行计算注意力,但却隐式地只看到前文。其优势是支持高效并行计算且能执行自回归推理;劣势是降低了训练阶段对未来信息的利用(但这正是生成任务所需)。Masked Attention 被普遍用于语言模型(如 GPT)和序列生成模型的Decoder层。
2.5 Target-Attention(目标感知注意力,推荐系统场景)
目标注意力(Target-Attention)常见于推荐系统等场景,其中注意力权重的计算需要参考一个特定的“目标”或“候选项”。例如在点击率预测中,深度兴趣网络(DIN)提出使用局部激活单元来根据特定广告(目标),对用户历史兴趣进行加权。具体而言,将候选广告 \(a_t\) 的嵌入作为查询 \(q\),将用户历史点击序列的嵌入 \({h_j}\) 作为键值,对应地计算注意力权重 \(\alpha_j=\mathrm{softmax}(q^\top h_j)\),生成与当前广告相关的兴趣表示。这种目标导向的注意力使用户表示因不同候选广告而变化,增强了模型对个性化需求的捕捉能力。
另一典型例子是目标注意力图神经网络(TAGNN)在会话推荐中使用的目标感知图注意力。TAGNN 中,用户当前会话的行为序列被视为图结构,用目标商品作为查询项,对图中节点进行注意力加权,提取与当前目标最相关的用户兴趣。这同样实现了针对不同目标项给出不同的兴趣表示,克服了简单池化历史特征的局限性。
总的来说,Target-Attention 的形式与标准注意力相同,只是查询来源为目标或候选项,而键值来自用户行为或上下文。公式依旧可以写成例如 \(\alpha_{j}=\mathrm{softmax}(q^\top k_j)\)(其中 \(q\) 为目标嵌入)或加性形式。其优势是显式引入目标信息,获得更精细的兴趣分布;劣势是增加了计算及参数,并且需要设计合适的注意力结构来融合目标和历史特征。DIN 和 TAGNN 等模型的实验表明,目标注意力显著提升了点击率预测和会话推荐的效果。
2.6 加性 vs 缩放点积;局部 vs 全局的比较
-
加性(Additive)与缩放点积(Scaled Dot-Product):加性注意力使用了一个前馈网络来计算兼容度得分,而缩放点积直接计算向量内积并加上 \(\sqrt{d}\) 缩放因子。Vaswani 等指出,尽管两者在表达能力上接近,但点积注意力在实现上更高效、更节省空间。当特征维度较小时,两者性能差异不大;而当维度很大时,不加缩放的点积可能导致得分很大,从而梯度极小,故通常采用 \(1/\sqrt{d}\) 缩放。加性注意力的计算更加灵活,但计算成本略高(需要额外的矩阵乘法和激活),且在现代硬件上不如点积注意力并行高效。总结:点积注意力更适合大规模并行运算,加性注意力在低维度或需要更强非线性时可能略有优势。
-
局部(Local)与全局(Global)注意力:全局注意力关注序列中所有位置的上下文,适用需要捕捉长距离依赖的任务,但复杂度为 \(O(n^2)\)。局部注意力只关注当前窗口(如固定大小或可学习窗口),将复杂度降低到 \(O(n\cdot k)\)(\(k\ll n\)),大大节省计算和内存。例如,Luong 等所提的局部注意力在翻译任务上取得了与全局注意力近似的效果,却比全局注意力计算量更低。如前所述,大多数长序列模型(Longformer、BigBird 等)使用稀疏或局部注意力实现线性复杂度。局部注意力的优势是高效,适合超长序列;局部注意力的局限是只能捕获有限范围内的依赖,可能漏掉序列中较远的关键信息。全局注意力则能全方位建模上下文,但当序列极长时成本过高,需要借助算法或硬件优化来克服。
3 发展时间线
| 年份 | 论文(主要贡献) |
|---|---|
| 2014 | Bahdanau et al. “Neural Machine Translation by Jointly Learning to Align and Translate”:提出注意力机制,解决 RNN 序列编码的固定向量瓶颈。 |
| 2015 | Luong et al. “Effective Approaches to Attention-based NMT”:区分全局/局部注意力并比较各种对齐函数,提出局部注意力用于加速。 |
| 2017 | Vaswani et al. “Attention Is All You Need”:提出 Transformer,用纯注意力架构替代 RNN/CNN,首次引入多头自注意力和缩放点积注意力。 |
| 2018 | Zhou et al. “Deep Interest Network (DIN)”: 提出目标导向注意力机制(基于候选广告加权用户兴趣)用于CTR预测。 |
| 2019 | Yu et al. “TAGNN”: 在会话推荐中提出目标注意力图神经网络,使用户兴趣表示可针对不同目标自适应调整。 |
| 2020 | Dosovitskiy et al. “ViT”: 将 Transformer 应用于计算机视觉,提出视觉 Transformer 架构。 Chen et al. “GAT”: 图注意力网络问世。 |
| 2022 | Alayrac et al. “Flamingo”:提出多模态 Transformer,用交叉注意力将图像特征与语言模型结合。 |
| 2023 | Dao et al. “FlashAttention-2”:优化 GPU 上的注意力并行划分,显著加速注意力计算。 Ding et al. “LongNet”:提出扩张注意力,可扩展到十亿序列长度,复杂度线性且有效依赖距离。 视觉领域:Li et al. “BLIP-2”推动态态视觉-语言预训练;Kowsher et al. “Shared-Weight Self-Attention” 提出共享权重自注意力方案。 |
| 2024 | Hassanin et al. 综述:“Visual Attention Methods in Deep Learning”总结了50种注意力技术,指出Transformer 仅覆盖了一种自注意力形式。 |
| 2025 | 新方法:诸如滑动窗口注意力(Sliding Window Attention)等技术正在探索以适应动态场景。注意力在扩散模型和生成任务中的研究持续升温。 |
表:注意力机制发展里程碑(年份、代表论文及其贡献)。
4 主要变种
下面列举注意力机制的几种常见变种,说明其计算复杂度、特点场景和实现要点:
| 变种 | 复杂度(序列长度 \(n\)) | 特点与应用场景 | 开源实现要点 |
|---|---|---|---|
| 多头注意力(Multi-Head) | \(O(n^2)\) | 将查询/键/值映射到多个子空间并行计算,允许模型关注不同表示子空间的信息。提高表征能力,常用于各类Transformer模型。 | 每个头使用独立的线性映射生成 \(Q_i,K_i,V_i\),最后拼接(或平均)输出。主流框架(如 TensorFlow、PyTorch)均支持并行多头计算。 |
| 低秩近似注意力(Low-Rank) | \(O(n)\) | 将原始 \(QK^\top\) 矩阵近似为低秩形式,如 Linformer 将键/值映射到较低维度空间,再计算注意力。优点是降低内存和计算开销,缺点可能有少量表达能力损失。 | 典型方案是在原来 \(n\) 维的键值上使用投影矩阵,将维度降到 \(k<n\) 后再做注意力。Linformer 提供开源实现,其变体可在 Transformers 库中找到。 |
| 线性注意力(Linear Attention) | \(O(n)\) | 利用核技巧或分解技巧将注意力计算化简为线性时间。例如 Performer 使用随机特征映射近似高斯核,自注意力复杂度为线性。适合极长序列(上百万级别)建模。 | 常见实现有 Performer、Linformer 等。Performer 需要实现特定的特征映射函数(如 FAVOR+),Linformer 则在 PyTorch、TensorFlow 等框架中提供官方版本,配合输入长度截断。 |
| 相对位置编码(Relative Positional) | \(O(n^2)\) | 引入相对位置偏置或距离表示,以学习序列元素间相对位置信息。适合需要建模序列结构的语言或序列任务,如 Transformer-XL、T5。 | 在计算注意力时,将可训练的相对位置向量加入到 \(Q K^\top\) 的得分上,或将其加入 \(K,V\) 的线性映射中。许多 Transformer 变体(HuggingFace 等库)提供相对编码实现。 |
| 稀疏/块稀疏注意力(Sparse/Block) | \(O(n\cdot k)\)(\(k\ll n\)) | 只关注局部窗口或稀疏模式的注意力,使复杂度从二次降为线性。用于极长序列任务,如文档分类、长文本生成。例:Longformer、BigBird、Sparse Transformer 等。 | 实现方法包括滑动窗口注意力、全局+局部混合注意力或随机稀疏。开源库(如 Longformer、BigBird 在 HuggingFace Transformers)已内置相应层,可直接调用。 |
以上各变种在不同场景下各有优势:多头注意力是默认配置,可扩展为相对位置编码帮助建模位置关系;稀疏和线性注意力适用于极长序列;低秩近似是另一种减少复杂度的策略。实际应用时,往往结合硬件特性(GPU/TPU 内存层级优化)和软件库支持,选择合适的变种来平衡性能和资源。如 FlashAttention 系列通过内存管理和并行划分进一步加速标准注意力,但这属于算法优化范畴,可与以上变种叠加使用。
5 应用实例
注意力机制已成为众多领域的核心组件,以下是一些典型应用及代表模型:
-
机器翻译:Bahdanau 等(2014)在神经机器翻译中引入注意力,用于对齐源语句不同位置;Vaswani 等的 Transformer(2017)彻底革新翻译模型,使翻译系统可在无RNN的情况下进行并行训练。实际中,Google Translate 等大规模翻译系统已采用基于注意力的 Transformer 模型。
-
语言模型/生成:GPT 系列(OpenAI GPT-3, GPT-4)、BERT 等预训练模型广泛使用自注意力网络进行语言建模和特征提取。GPT-4(2023)在对话生成和自然语言理解中表现出色,即是多层自注意力解码器的典型应用。对话系统(如 ChatGPT)利用自回归 Masked Attention 进行句子生成,实时调用前文信息生成连贯回答。
-
对话与问答:语言模型扩展到对话场景,Flamingo(DeepMind, 2022)结合视觉信息使用交叉注意力,实现图文对话;BLIP-2(Salesforce, 2023)在多模态问答中引入视觉编码器与大型语言模型之间的交叉注意力,支持图像描述和视觉问答任务。
-
代码与编程:Codex(OpenAI)和 AlphaCode(DeepMind)等代码生成模型基于 Transformer,对源代码进行建模。这里注意力帮助模型捕捉代码中变量作用域和语法结构的长距离依赖,实现自动补全和代码生成。
-
计算机视觉(CV):Vision Transformer (ViT, Dosovitskiy et al., 2020) 将图像划分为固定大小“块”,并将注意力机制用于图像分类,结果表明纯自注意力可以匹敌卷积网络。在目标检测领域,DETR(Carion et al., 2020)直接用 Transformer 解码器将一组查询映射为检测框。还有带遮掩的 ViT 和 Swin Transformer 等继续推动视觉任务的发展。
-
推荐系统:基于注意力的模型提升了个性化能力。Deep Interest Network (DIN, Zhou et al., 2018)使用目标广告对用户历史行为进行加权,已应用于阿里巴巴的CTR预测。MIND(Multi-Interest Network,张磊等,2019)学习用户多个兴趣向量来丰富表示。TAGNN(Yu et al., 2020)在会话推荐中采用图注意力,针对不同目标自适应聚焦用户兴趣。这些模型在电商推荐中都取得了显著收益。
-
蛋白质折叠:AlphaFold(Jumper et al., 2021)使用了多层注意力机制来预测蛋白质结构。其核心模块“Evoformer”包含多种注意力操作,如在多序列比对(MSA)中进行注意力权重的计算,并引入**几何感知注意力(Invariant Point Attention)**来捕捉残基间的3D关系,从而大幅提升了预测精度。
-
时间序列预测:如股票预测、气象预报等任务中,长序列 Transformer(Informer、Autoformer 等)通过改进注意力如 ProbSparse 注意力或周期性注意力,处理了数千乃至万级的时间步问题。在实时信号处理和交通流量预测中,轻量级Transformer模型结合注意力,也取得了优异效果。
每个领域的这些实例都证明了注意力机制的灵活性和有效性:通过关注关键信息,模型在对应任务上实现了突破。值得注意的是,不同行业对注意力的配置各有侧重,如推荐系统强调目标引导的兴趣表示,生物分子问题强调几何先验的注意力机制等。
6 未来趋势
展望未来,注意力机制的研究正朝着多元化和高效化方向发展。一方面,研究者在探索新的注意力设计和变体,例如 [Kowsher et al., 2025] 提出的**共享权重自注意力(Shared-Weight Self-Attention)**用单个权重矩阵代替传统的三个不同矩阵,显著减少了参数量和计算时间;此外,混合注意力结构(结合注意力和其他操作)以及动态可学习的稀疏模式正在兴起。另一方面,如何进一步扩展注意力处理极长序列(数百万级别)、多模态大模型的高效训练、以及注意力的可解释性,都是活跃话题。
最新的调查报告指出,目前 Transformer 覆盖的只是注意力的一种基本形式,而深度学习领域还存在许多未充分利用的注意力范式。因此,未来可能出现更多注意力的类别创新,如树结构注意力、图结构注意力或混合层次注意力,以适应不同数据结构和任务需求。同时,在生成模型(如扩散模型、多模态生成模型)中,注意力机制被发现对模型的全局一致性和跨模态对齐至关重要,预计这方面的研究将更深入。此外,为了应对大模型训练的计算瓶颈,我们也会看到更多算法级优化(如 FlashAttention 系列)和硬件协同设计出现。
总之,注意力机制作为深度模型的核心部件,其变体和应用将继续丰富与发展。从理论角度看,人们将探索注意力机制的本质、设计新的兼容度函数和正则化方法;从工程应用看,更高效、可扩展的注意力方案将是解决超大规模数据和模型的关键。结合最新文献的预测,注意力领域未来有望诞生更加灵活、高效、可解释的新型注意力结构,并在更多跨领域任务中发挥作用。
7 参考文献
[Bahdanau, 2014] Bahdanau, D., Cho, K., & Bengio, Y. (2014). Neural Machine Translation by Jointly Learning to Align and Translate. (ICLR, 2015).
[Luong, 2015] Luong, M.-T., Pham, H., & Manning, C. D. (2015). Effective Approaches to Attention-based Neural Machine Translation. arXiv:1508.04025.
[Vaswani, 2017] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. NeurIPS.
[Dao, 2023] Dao, T. (2023). FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv:2307.08691.
[Ding, 2023] Ding, J., Ma, S., Dong, L., Zhang, X., Huang, S., Wang, W., Zheng, N., & Wei, F. (2023). LongNet: Scaling Transformers to 1,000,000,000 Tokens. arXiv:2307.02486.
[Zhou, 2018] Zhou, H., Zhao, X., Xu, J., Zhou, Y., Zhu, H., Xu, Z., & Shi, J. (2018). Deep Interest Network for Click-Through Rate Prediction. (KDD 2019).
[Yu, 2020] Yu, F., Ma, Y., Huang, Y., Zhang, B., Wen, L., & Wei, W. (2020). TAGNN: Target Attentive Graph Neural Networks for Session-based Recommendation. (SIGIR 2020).
[Hassanin, 2022] Hassanin, M., Anwar, S., Radwan, I., Khan, F. S., & Mian, A. (2022). Visual Attention Methods in Deep Learning: An In-Depth Survey. Information Fusion.
[Kowsher, 2025] Kowsher, M. M., Zhuang, J., et al. (2025). Do We Need Three Weight Matrices in Self-Attention? (Shared Weight Self-Attention). arXiv:2412.00359.
[Jumper, 2021] Jumper, J., Evans, R., Pritzel, A., et al. (2021). Highly accurate protein structure prediction with AlphaFold. Nature, 596, 583–589.
[Anyenda, 2024] Cao, X., et al. (2025). Attention in Diffusion Model: A Survey. arXiv:2504.03738.
浙公网安备 33010602011771号