注意力机制三级详解
一、入门级:高中生 / 非技术人群
Section titled “一、入门级:高中生 / 非技术人群”想象你在参加一场热闹的晚宴,周围有十几个人同时在聊天。如果你想听清楚某个人说的话,你会怎么做?你会不自觉地把注意力集中在那个人身上,同时忽略其他人的声音——即使他们也在说话。
注意力机制做的就是这么一件事:让 AI 学会”把注意力放在重要的地方”。
在阅读理解中,这特别有用。比如这句话:“小明虽然个子不高,但他打篮球非常厉害。“当我们读到”他”的时候,大脑会自动把注意力放在”小明”上,而不是”个子”或”篮球”上。AI 以前做不到这一点——它会把所有词一视同仁地处理,很容易搞混谁是谁。
有了注意力机制后,AI 可以给每个词分配一个”关注权重”。读到”他”的时候,“小明”的权重最高,其他词的权重很低。这样 AI 就”知道”了”他”指的是小明。
这就是 2017 年 Google 提出的 Transformer 模型的核心思想。后来大名鼎鼎的 ChatGPT 就是在这个基础上发展起来的。简单来说,注意力机制让 AI 学会了像人一样”聚焦关键信息”,而不是对所有信息一视同仁。这个看似简单的能力,彻底改变了人工智能的发展方向。
二、中级:有编程 / 数学基础
Section titled “二、中级:有编程 / 数学基础”注意力机制的核心可以用三个矩阵来理解:Query(查询)、Key(键)、Value(值)。这三个概念借用了数据库的术语,但含义有所不同。
打个比方:你在图书馆找书。你心里想找的主题就是 Query,每本书封面上的标签是 Key,而书的内容是 Value。你用 Query 去匹配所有书的 Key,匹配度越高的书,你花的时间越多(权重越大),最终得到的是所有书内容的加权求和。
假设输入序列有 n 个词,每个词用维度为 d 的向量表示:
-
线性变换:将输入 X 分别乘上三个可学习的权重矩阵,得到 Q、K、V:
- Q = XW_Q,K = XW_K,V = XW_V
-
计算注意力分数:用 Q 和 K 的点积衡量每个词对其他词的”相关程度”:
- scores = QKᵀ,结果是一个 n×n 的矩阵
-
缩放 + Softmax:将分数除以 √d_k(防止梯度消失),再用 softmax 归一化为概率分布:
- α = softmax(QKᵀ / √d_k)
-
加权求和:用注意力权重对 V 做加权求和,得到最终输出:
- output = αV
softmax 的作用是让所有权重加起来等于 1,这样输出就是 V 中各行的”加权平均”。权重越大的词,对输出的影响越大。
这个过程被称为 Scaled Dot-Product Attention,是 Transformer 中最基本的注意力单元。通过 Q/K/V 的巧妙设计,模型能够自动学习到”应该关注谁”。
三、高级:面向 ML 研究者
Section titled “三、高级:面向 ML 研究者”3.1 Multi-Head Attention
Section titled “3.1 Multi-Head Attention”单头注意力将整个嵌入维度映射到一个表示空间,存在信息瓶颈。Multi-Head Attention 将 Q/K/V 分别投影到 h 个不同的子空间(d_k = d_model / h),独立计算注意力后拼接:
MultiHead(Q, K, V) = Concat(head₁, …, headₕ) Wᴼ
其中 headᵢ = Attention(QWᵢᑫ, KWᵢᵏ, VWᵢᵛ)
多头机制让模型能同时关注不同子空间中的不同位置,捕获诸如句法依存、语义共指、长距离搭配等异构关系。实验表明,h=8 在大多数场景下已足够。
3.2 位置编码(Positional Encoding)
Section titled “3.2 位置编码(Positional Encoding)”自注意力机制本身是置换不变的(permutation equivariant),无法区分词序。为此需要注入位置信息。原始 Transformer 使用正弦/余弦编码:
- PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
- PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
这种编码的好处是可以处理未见过的序列长度,且不同维度形成不同频率的周期函数。后续工作如 RoPE(Rotary Position Embedding)通过旋转矩阵将位置信息注入 Q/K 的交互中,具有更好的长度外推性,已成为主流方案(LLaMA、Mistral 等均采用)。
3.3 复杂度分析
Section titled “3.3 复杂度分析”设序列长度为 n,模型维度为 d:
| 模型 | 每层计算复杂度 | 顺序操作 | 最大路径长度 |
|---|---|---|---|
| Transformer | O(n²d) | O(1) | O(1) |
| RNN(循环) | O(nd²) | O(n) | O(n) |
| CNN(一维卷积) | O(knd²) | O(1) | O(n/k) |
自注意力的 O(n²) 复杂度是主要瓶颈——注意力矩阵的规模与序列长度平方成正比。这催生了大量高效注意力变体:Sparse Attention(如 Longformer 的局部+全局模式)、Linear Attention(用核函数近似 softmax,将复杂度降至 O(n))、Flash Attention(通过分块计算减少 HBM 读写,实现 O(n²) FLOPs 但大幅降低 wall-clock time)。
3.4 与 RNN / CNN 的对比
Section titled “3.4 与 RNN / CNN 的对比”- vs RNN:RNN 的顺序计算天然限制了并行性,且梯度在长序列中容易消失/爆炸。注意力机制直接建模任意两个位置的关系,最大路径长度为 O(1),且完全可并行。
- vs CNN:卷积通过局部感受野和堆叠层捕获关系,路径长度为 O(n/k)。但卷积难以建模跨块的远程依赖(除非堆叠极多层),而注意力一步直达任意位置。
Transformer 的成功本质上是用计算换归纳偏置:放弃了 RNN 的时序假设和 CNN 的局部性假设,让模型从数据中自由学习依赖关系,在数据量充足时表现更强。这也是预训练大语言模型采用 Transformer 架构的根本原因。