注意力机制(Attention Mechanism)是深度学习领域最具影响力的技术之一,它让模型能够动态地关注输入序列中最重要的部分,而非平等处理所有信息。从机器翻译到大型语言模型,注意力机制已成为现代 AI 系统的基石。
传统序列模型(如 RNN/LSTM)将整个输入编码为一个固定维度的向量,面临长距离信息丢失的瓶颈。注意力机制打破了这一限制:在每一步输出时,让模型"回头查看"输入序列的所有位置,并赋予不同位置不同的权重。
想象你在阅读一段文字:你不会逐字平等地记忆每个词,而是根据当前理解需要,聚焦到最关键的部分。注意力机制正是模仿了这一认知过程。
| 场景 | 传统方法 | 注意力机制 |
|---|---|---|
| 翻译 | 读完整个句子,记住所有细节,然后翻译 | 翻译每个词时,回看原文中最相关的部分 |
| 图像描述 | 提取整张图片特征,生成描述 | 生成每个词时,聚焦图片的不同区域 |
| 问答 | 将文档编码成固定向量后回答问题 | 回答每个问题时,动态检索文档中最相关的段落 |
注意力机制的核心可抽象为一个查询(Query)到键值对(Key-Value)的映射函数:
其中:
以机器翻译中翻译"I love you"为"我爱你"为例,假设已翻译出"我",正在预测下一个词:
步骤 1:计算注意力分数
将当前解码状态 与每个源语言编码位置 计算点积:
| 源词位置 | 键向量表示 | 与 Q 的点积 | 含义 |
|---|---|---|---|
| I | 0.2 | 与"我"已对应,相关性低 | |
| love | 9.8 | 当前最需要翻译的词 | |
| you | 1.5 | 次要相关信息 |
步骤 2:缩放与 Softmax
对分数除以 (假设 ,则 )后做 softmax:
| 源词 | 缩放后分数 | Softmax 权重 | |
|---|---|---|---|
| 1 | I | 0.025 | 0.01 |
| 2 | love | 1.225 | 0.84 |
| 3 | you | 0.1875 | 0.15 |
可以看到模型将 84% 的注意力集中在"love"上。
步骤 3:加权求和
输出向量主要包含"love"的语义信息,模型据此预测出"爱"。
Softmax 函数的"软硬程度"受缩放因子影响。若 (不缩放),注意力分布会非常尖锐(接近 one-hot);若缩放过大,分布又会过于均匀。 是一个经验上最优的折中。
以下展示了不同缩放对分布的影响:
| 输入分数 | 未缩放 () | 缩放 () | 过度缩放 () |
|---|---|---|---|
| [0.2, 9.8, 1.5] | [0.00007, 0.9998, 0.0001] | [0.01, 0.84, 0.15] | [0.31, 0.36, 0.33] |
| 特点 | 几乎 one-hot,梯度消失 | 适当聚焦,保留多样性 | 分布均匀,无法聚焦 |
注意力机制经历了从"辅助工具"到"核心架构"的演变:
| 阶段 | 时间 | 代表作 | 关键贡献 |
|---|---|---|---|
| 萌芽 | 2014 | Bahdanau Attention | 首次在 Seq2Seq 中引入对齐机制 |
| 演进 | 2015 | Luong Attention | 简化计算,提出全局/局部注意力 |
| 革命 | 2017 | Transformer (Vaswani et al.) | 彻底抛弃 RNN,纯注意力架构 |
| 爆发 | 2018+ | BERT, GPT, ViT | 注意力成为主流模型的基础 |
2014 年,Bahdanau 等人首次在机器翻译中引入注意力机制,解决了 RNN 编码器-解码器框架中的长距离依赖问题。
计算公式:
其中 是解码器隐状态, 是编码器隐状态,、、 是可学习参数。
特点:
实际效果:在 WMT'14 英法翻译任务上,使用注意力的模型 BLEU 得分从 28.45 提升至 31.44,且能有效处理长句(超过 30 个词的长句翻译质量显著优于无注意力模型)。
2015 年,Luong 等人提出了更简洁的计算方式,并区分了全局注意力和局部注意力。
三种对齐函数:
| 类型 | 公式 | 计算复杂度 | 参数量 |
|---|---|---|---|
| 点积 | 0 | ||
| 一般 | |||
| 拼接 |
其中点积注意力最为简洁高效,后来的 Transformer 在此基础上做了缩放改进。
全局 vs 局部注意力:
| 特性 | 全局注意力 | 局部注意力 |
|---|---|---|
| 覆盖范围 | 所有输入位置 | 窗口内的部分位置 |
| 计算量 | 随序列长度线性增长 | 窗口大小固定,计算量可控 |
| 适用场景 | 短序列、对精度要求高 | 长序列、计算资源有限 |
| 对齐质量 | 更准确但更慢 | 快速但有遗漏风险 |
这是 Transformer 中使用的核心机制,也是目前最广泛应用的注意力形式:
缩放因子 的直觉:
假设 和 的每个维度均值为 0、方差为 1,则点积 的均值仍为 0,但方差变为 。若不缩放,当 较大时,点积的值域会很大,导致 softmax 进入饱和区,梯度极小。缩放后方差回归为 1,梯度更健康。
数值示例:
当 时,点积的方差约为 512,标准差约为 22.6。这意味着点积的典型值会在 范围内,远大于 的理想区间,未经缩放的 softmax 几乎会输出 one-hot 分布。
多头注意力是 Transformer 的关键创新:不只用一组注意力,而是同时使用多组并行的注意力头。
其中每个头:
为什么需要多个头? 一组注意力只能学习"一种"关注模式,但自然语言中的关系是多维的。例如:
| 注意力头 | 关注的内容 | 捕捉的关系 |
|---|---|---|
| 头 1 | 语法依赖关系 | 主语-动词、名词-形容词 |
| 头 2 | 语义相似性 | 同义词、上下位词 |
| 头 3 | 位置关系 | 前后文共现、距离信息 |
| 头 4 | 指代关系 | 代词回指、实体消歧 |
Vaswani et al. (2017) 在论文中对 Transformer 各头的注意力分布进行了可视化分析,发现不同头确实学习到了不同的语言学模式:有的头关注句法关系(如依赖解析),有的头关注词汇语义(如名词短语的核心词)。
以 Transformer Base 模型为例:
计算量对比:
| 配置 | 参数量 | 计算量 (FLOPs) | 表达能力 |
|---|---|---|---|
| 单头 | ~1M | ~1x | 单一关注模式 |
| 8 头 | ~1M | ~1x | 多种关注模式 |
| 单头 | ~256K | 更低 | 受限 |
注意:多头注意力虽然计算了多次注意力,但由于每个头的维度只有 ,总计算量与单头全维度注意力基本相当。
Transformer 架构中使用了三种不同角色的注意力机制:
每个位置关注编码器中的所有位置,包括自己。
为何需要"关注自己"? 在"the bank of the river"中,"bank"需要结合上下文"river"才能正确理解。自注意力直接建模了这种上下文关系。
解码器的查询关注编码器的键值对:
这相当于机器翻译中的"查字典":解码器生成每个词时,都回到编码后的源语言序列中寻找对应信息。
解码器中,每个位置只能关注其之前(包括自己)的位置:
为什么需要掩码? 在生成任务中,模型不应看到未来的词。例如预测 "I love ___" 的下一个词时,模型可以看到 "I" 和 "love",但不能看到正确答案 "you"。
掩码机制通过将上三角矩阵设为 实现(经过 softmax 后这些位置的概率变为 0):
| 位置 | I | love | you |
|---|---|---|---|
| I | ✅ 0 | ❌ -∞ | ❌ -∞ |
| love | ✅ 0 | ✅ 0 | ❌ -∞ |
| you | ✅ 0 | ✅ 0 | ✅ 0 |
| 特性 | 描述 | 与传统 RNN 对比 |
|---|---|---|
| 并行计算 | 所有位置可同时计算 | RNN 必须逐步串行 |
| 长距离依赖 | 任意两个位置可直接交互,路径长度为 1 | RNN 需经过 步 |
| 可解释性 | 注意力权重可直接可视化解码依据 | RNN 隐状态难以解释 |
| 梯度传播 | 梯度可直接从输出传到任意输入位置 | RNN 存在梯度消失/爆炸 |
计算复杂度:标准注意力为 ,对长序列成本高昂
位置信息缺失:注意力本身无序,需额外加入位置编码
内存占用:需存储 的注意力矩阵
为解决 的复杂度问题,研究者提出了多种稀疏模式:
| 变体 | 思路 | 复杂度 | 代表工作 |
|---|---|---|---|
| 局部窗口注意力 | 只关注邻近 个位置 | Longformer (Beltagy, 2020) | |
| 空洞注意力 | 跳跃式关注,扩大感受野 | Sparse Transformer (Child, 2019) | |
| 全局+局部 | 少数全局 token 关注所有位置 | BigBird (Zaheer, 2020) | |
| 聚类注意力 | 先聚类再组内注意力 | Reformer (Kitaev, 2020) | |
| 线性注意力 | 用核函数分解避免矩阵乘法 | Linear Transformer (Katharopoulos, 2020) |
性能对比(以 Longformer 为例):
| 模型 | 序列长度 | 训练时间/步 | 内存占用 | 困惑度 (perplexity) |
|---|---|---|---|---|
| BERT (full attn) | 512 | 1x | 1x | 24.1 |
| Longformer (sliding) | 4096 | 1.2x | 0.3x | 23.9 |
| Longformer (sliding) | 8192 | 1.5x | 0.5x | 23.7 |
2022 年,Dao 等人提出的 Flash Attention 通过分块计算 + 内核融合技术,在不降低精度的情况下将注意力计算速度提升了 2-4 倍:
Flash Attention v2 性能数据(A100 GPU,序列长度 4K):
| 实现 | 吞吐量 (tokens/s) | 相对速度 |
|---|---|---|
| PyTorch 原生 | 18,000 | 1x |
| xFormers | 45,000 | 2.5x |
| Flash Attention v1 | 52,000 | 2.9x |
| Flash Attention v2 | 72,000 | 4.0x |
| 模型 | 注意力用法 | 核心特点 | 参数规模 |
|---|---|---|---|
| BERT | 双向自注意力 | 编码器架构,Masked LM 预训练 | 110M-340M |
| GPT-3 | 单向因果注意力 | 解码器架构,自回归生成 | 175B |
| T5 | 编码器-解码器注意力 | Encoder-Decoder,Text-to-Text | 11B |
| Longformer | 局部+全局稀疏注意力 | 支持长文档,序列长度可达 4096+ | 150M |
Vision Transformer (ViT) 将图像视为 patch 序列,用自注意力替代卷积:
| 模型 | 方法 | ImageNet Top-1 | FLOPs |
|---|---|---|---|
| ResNet-152 | 卷积 | 78.6% | 11B |
| ViT-B/16 | 注意力 | 79.8% | 17B |
| ViT-L/16 | 注意力 | 82.5% | 62B |
| Swin-T | 窗口注意力 | 81.3% | 4.5B |
Swin Transformer 进一步引入层级式窗口注意力,先在局部窗口内计算注意力,再通过窗口移位实现跨窗口信息交互,使注意力架构也能像 CNN 一样构建层级特征金字塔。
| 模型 | 模态 | 注意力设计 | 应用场景 |
|---|---|---|---|
| CLIP | 文本+图像 | 对比学习中的交叉注意力 | 图文匹配、零样本分类 |
| DALL-E 2 | 文本→图像 | 文本编码器+图像解码器注意力 | 文本生成图像 |
| Flamingo | 文本+图像+视频 | 门控交叉注意力 | 多模态理解与生成 |
图注意力网络 (GAT) 将注意力机制引入图学习:
其中 是节点 的邻居集合, 表示向量拼接。GAT 通过注意力机制为不同邻居分配不同的权重,比传统的图卷积(均匀聚合邻居)更具表达能力。
| 挑战 | 描述 | 影响 | 缓解方法 |
|---|---|---|---|
| 二次复杂度 | 限制了序列长度 | 无法处理百万级 token | 线性注意力、状态空间模型 |
| 缺乏因果推理 | 注意力只能发现"相关性"而非"因果性" | 难以进行真正的推理 | 神经符号方法、因果注意力 |
| 位置编码瓶颈 | 相对位置编码的表示能力有限 | 长距离位置关系模糊 | RoPE、ALiBi |
| 幻觉问题 | 注意力过度关注无关内容导致生成错误 | 事实准确性下降 | 检索增强 (RAG) |
Mamba vs Transformer 最新数据对比:
| 模型 | 序列长度 | 训练吞吐量 | 推理速度 | 质量 (下游任务平均) |
|---|---|---|---|---|
| Transformer | 2048 | 1x | 1x | 基准 |
| Mamba | 2048 | 1.2x | 5x | +0.2% |
| Transformer | 65536 | OOM | OOM | — |
| Mamba | 65536 | 1.5x (relative) | 50x | -0.5% |
| 年份 | 论文 | 贡献 |
|---|---|---|
| 2014 | Bahdanau et al. - Neural Machine Translation by Jointly Learning to Align and Translate | 首次提出注意力机制 |
| 2015 | Luong et al. - Effective Approaches to Attention-based Neural Machine Translation | 简化注意力,区分全局/局部 |
| 2017 | Vaswani et al. - Attention Is All You Need | Transformer 与多头注意力 |
| 2020 | Devlin et al. - BERT: Pre-training of Deep Bidirectional Transformers | 双向注意力的预训练应用 |
| 2022 | Dao et al. - Flash Attention: Fast and Memory-Efficient Exact Attention | 硬件感知的注意力加速 |
选择注意力变体:
调试注意力:
常见陷阱:
注意力机制从机器翻译中一个小小的"对齐模块"发展成为整个深度学习领域的基础架构,其核心思想——让模型动态地关注最相关的信息——已被证明具有极强的通用性。Transformer 的提出彻底验证了"Attention Is All You Need"的理念,而后续的稀疏化、线性化、硬件加速等改进则不断拓展其能力边界。随着混合架构和新范式(如状态空间模型)的出现,注意力机制仍在持续演化中。