第 10 章 深度学习注意力机制Transformer

注意力机制:从关注到 Transformer

本章来源:本文整理自《动手学深度学习》(zh.d2l.ai)第 10 章《注意力机制》,原书作者 Aston Zhang、李沐、Zachary C. Lipton、Alexander J. Smola。

本章讲什么

注意力机制是现代深度学习最重要的思想之一。它最初用于机器翻译,后来成为 Transformer 的基础——而 Transformer 又是今天几乎所有大语言模型(GPT、BERT 等)的基石。

本章从注意力的直觉讲起,一步步走到完全基于注意力的架构——Transformer。

注意力提示:为什么需要注意力

注意力经济说起:人的注意力是有限、稀缺、有价值的资源。人的视觉系统每秒接收约 10^8 位信息,大脑无法全部处理,所以只把注意力投向感兴趣的一小部分。

心理学把注意力分成两类:

  • 非自主性提示:由物体的突出性自动引起。比如一堆黑白印刷品中突然出现一个红色咖啡杯,杯子不由自主地抓住你的视线。
  • 自主性提示:由意识和认知控制。比如"我想读书",所以主动把目光转向书。

把这两种提示翻译成神经网络语言,就得到注意力机制的 QKV 框架

  • 查询(query):自主性提示,代表"我想关注什么"。
  • 键(key):与每个值配对的非自主提示,代表"每个候选是什么"。
  • 值(value):感官输入或中间特征,是实际要加权的内容。

注意力机制与全连接层、池化层的本质区别,就是引入了自主性提示(查询)——模型可以主动决定关注哪里。

注意力汇聚:注意力怎么工作

用一个 1964 年的经典统计模型——Nadaraya-Watson 核回归,作为注意力机制的最简完整示例。

回归问题:给定 (x, y) 数据对,预测新输入 x 的输出。最笨的办法是平均汇聚——对所有 y 取平均,完全忽略 x 的信息,效果很差。

Nadaraya-Watson 提出按输入位置加权:离查询 x 越近的键,其对应的值权重越大(用高斯核度量距离,再归一化成概率分布)。从注意力框架看:x 是查询,(x_i, y_i) 是键值对,输出就是值的加权平均——这就是注意力汇聚的本质。

"谁离我近,我越听谁的":预测新点时,训练数据里离它越近的点发言权越大。

这个模型可以扩展为带参数版本:在距离计算中乘一个可学习的参数,通过训练自动学习它,让注意力更"尖锐"。

注意力评分函数

高斯核只是注意力评分的一种特例。通用流程是:先用一个函数算出查询与每个键的匹配分数(标量),再经 softmax 变成概率分布(注意力权重),最后对值做加权和。

两个经典评分函数:

  • 加性注意力:适用于查询和键长度不同的情况。把查询和键分别线性变换到同一维度后相加,过 tanh 激活,再投影成标量——本质上是一个单隐藏层 MLP。更灵活,但计算较慢。
  • 缩放点积注意力:适用于查询和键长度相同的情况。直接算点积,再除以向量长度的平方根。除以平方根是为了抵消维度增大带来的方差膨胀,保证数值稳定。点积可用矩阵乘法高效并行,计算远快于加性注意力。

还有个实用细节:处理变长序列时,用掩蔽 softmax 把填充位置(无意义词元)的注意力权重强制设为 0。

Bahdanau 注意力:注意力进入机器翻译

传统 seq2seq 把整个源句子压缩成一个固定形状的上下文向量 c,解码每一步都用同一个 c。但源句子里并非所有词都对翻译当前词有用。

Bahdanau 注意力(2014 年)让解码器在生成每个目标词元时,动态地从源序列"挑选"相关的部分:上下文变量换成每个解码步各自不同的值,它是编码器所有隐状态的加权和——解码器上一时间步的隐状态作为查询,编码器的所有隐状态同时充当键和值。

这样模型就学会了对齐——翻译某个词时只关注源句中对应的部分(比如英语 go → 法语 va)。可视化注意力权重,可以看到清晰的"对角对齐"模式。这就像人翻译时"边看原文边对应着翻译",而不是把整句死记成一句话再输出。

多头注意力:从多个角度看

单个注意力汇聚只能学到一种"关注方式"。实践中我们希望模型对同一组数据学到不同的行为再组合起来,从而捕获不同范围的依赖(短距离和长距离)。

多头注意力的做法:用 h 组独立学习的线性投影分别变换查询、键、值,得到 h 组不同的"子空间表示",并行送入 h 个注意力汇聚(每个叫一个"头"),把 h 个输出拼接起来,再过一层线性变换得到最终输出。

每个头像一位专家,各自关注材料的不同方面(语法、语义、指代等),最后把各位专家的意见汇总,形成更全面的判断。

自注意力与位置编码

前面都是查询来自一个序列、键值来自另一个序列。自注意力(也叫内部注意力)让同一组词元同时充当查询、键、值——每个词元都关注序列中所有其他词元,输出与输入长度相同的表示。

作者把自注意力与 CNN、RNN 三种序列编码架构从三个维度对比:

架构 计算复杂度 顺序操作 最大路径长度
CNN O(knd²) O(1) O(n/k)
RNN O(nd²) O(n)(无法并行) O(n)
自注意力 O(n²d) O(1)(可并行) O(1)

自注意力兼有并行优势和最短路径(任意两个词元直接相连),但序列很长时二次复杂度是瓶颈。

由于自注意力放弃了顺序操作,需要位置编码注入序列的位置信息。Transformer 用正弦/余弦函数生成固定的位置嵌入,加到输入表示上。这种设计能同时编码绝对位置("第几个位置")和相对位置("相隔多远")。

Transformer:完全基于注意力

Transformer 是本章的集大成者:完全基于注意力,没有任何卷积层或循环层,最初用于机器翻译,现已扩展到语言、视觉、语音、强化学习。

整体是编码器-解码器架构:

  • 编码器:由若干相同层堆叠,每层两个子层——多头自注意力 + 基于位置的前馈网络,每个子层都带残差连接层规范化(Add & Norm)。
  • 解码器:每层三个子层——掩蔽多头自注意力(用掩蔽保证自回归属性,预测只依赖已生成的词元)、编码器-解码器注意力(查询来自解码器,键值来自编码器输出)、前馈网络。

几个关键组件:

  • 基于位置的前馈网络:对每个位置用同一个两层 MLP 变换,位置无关、逐点共享。
  • 层规范化:沿特征维度归一化,适合变长序列,优于批量规范化。
  • 残差连接:x + sublayer(x),解决深层网络训练难的问题。

用"接力流水线"来类比:编码器像"阅读理解"(每层读完做笔记再传给下一层),解码器像"边看笔记边写作"(写当前词时既回顾自己已写的内容,又查阅编码器的笔记)。残差连接像"抄近路",保证信息不丢失。

小结

  • 注意力机制源于人的注意力:自主提示(查询)和值、键共同构成 QKV 框架。
  • 注意力汇聚的本质是对值做加权平均,权重由查询-键关系决定。
  • 加性注意力和缩放点积注意力是两种经典评分函数。
  • Bahdanau 注意力把注意力引入机器翻译,让模型学会"对齐"。
  • 多头注意力从多个子空间并行观察,捕获不同范围的依赖。
  • 自注意力让每个词元关注序列中所有词元,配合位置编码使用。
  • Transformer 完全基于注意力,是今天大语言模型的基石。

关键术语

术语 一句话解释
注意力经济 注意力是有限、稀缺、有价值的资源
查询 / 键 / 值 自主提示 / 非自主提示 / 实际加权的内容
注意力汇聚 对值做加权平均,权重由查询-键关系决定
注意力评分函数 把查询和键映射为标量分数的函数
加性注意力 用单隐藏层 MLP 计算评分,可处理不同长度
缩放点积注意力 点积除以长度平方根,计算高效
Bahdanau 注意力 首次把注意力引入 seq2seq 机器翻译
对齐 源词与目标词之间的对应关系
多头注意力 多个注意力头并行、拼接后线性变换
自注意力 查询、键、值全部来自同一组输入
位置编码 注入序列位置信息的嵌入
Transformer 完全基于注意力机制的深度架构
层规范化 沿特征维度归一化,适合变长序列