导论:为什么“注意力”改变了序列建模
序列(sequence)无处不在:一句话是由词按顺序组成的序列,一段语音是由采样点按时间排列的序列,用户点击流是由行为事件按时间推进的序列,蛋白质也是由氨基酸按链式顺序排列的序列。序列建模的目标并不仅是“看见”这些元素的排列,还要在不确定、噪声与上下文依赖中,学习到可泛化的规律:下一词预测、机器翻译、摘要生成、对话、时间序列预测、检索与推荐等任务,本质上都在问同一个问题——当一个元素出现时,它应该参考序列中的哪些信息,以及参考到什么程度。
传统方法往往把“参考”理解为两种方式:要么只看附近(固定窗口),要么把过去压缩进一个不断更新的状态(递归记忆)。注意力(attention)改变序列建模的关键点在于:它把“参考”显式化为一种可学习的相关性加权汇聚机制——模型不再被迫只依赖固定窗口或单一记忆向量,而是可以在需要时,直接从整个上下文中“取用”最相关的片段。Transformer 的贡献并非首次提出注意力,而是将其提升为核心计算单元,并用工程上高度并行的结构重塑了序列建模的主流路径。<!-- concept: attention; concept: transformer -->
传统序列建模为何长期受限
长距离依赖:信息在传递中衰减
许多序列任务的关键线索并不在局部邻域。例如,在句子“这部电影虽然节奏缓慢,但我仍然喜欢它”中,情感极性与转折词“但”之间可能隔着较长片段;在程序代码中,一个变量的定义与使用可能相距数十行;在金融或传感器数据中,某些周期性结构跨越长时间窗口。长距离依赖的难点不只是“跨度大”,更在于有效信息密度低:模型需要在大量无关内容中定位少量关键线索。
并行计算:序列长度成为训练速度的“上限”
即使数据量足够大,训练速度也会被结构性瓶颈限制。大量经典序列模型具有严格的时间递推:第 $t$ 步的计算依赖第 $t-1$ 步的状态,导致训练与推理很难在时间维度上并行。随着 GPU/TPU 等硬件的并行能力不断增强,“结构不能并行”越来越成为瓶颈,而不仅是算力不足。
表示能力:固定路径与固定记忆带来的表达局限
传统模型通常隐含一种“固定的信息路径”:要把开头的信息带到结尾,就必须经过每一步的状态传递;要把某个局部信号影响到远处,也要沿着固定的链路传播。路径越长,信号越容易被噪声、非线性与数值不稳定吞噬。更重要的是,单一记忆状态往往迫使模型把多种因素混合在一个向量里,出现“信息拥挤”(information bottleneck):它既要记住语法,又要记住语义,还要记住长程约束,容量与可分离性都受到挑战。
> 归纳来看,传统序列建模的核心矛盾是:序列越长,模型越需要全局信息;但模型结构却越难高效、稳定地使用全局信息。
从固定窗口到递归记忆:传统路线的能力边界
固定窗口:n-gram 与局部特征的天花板
早期语言模型(如 n-gram)假设当前词只依赖前面 $n-1$ 个词,这是最典型的固定窗口思想。它的优势是简单、可并行、易统计;劣势同样明显:窗口之外的信息被彻底忽略。即便用更大的 $n$,数据稀疏与组合爆炸也会迅速出现。
在深度学习时代,卷积神经网络(CNN)用于序列时仍保留“局部感受野”思想:通过堆叠卷积层扩大感受野,以多层局部计算换取更大范围的依赖。但这种方式的“全局”通常是间接得到的:信息必须穿过多层才能相遇,层数增加会带来训练难度与计算开销。
递归记忆:RNN/LSTM 的优势与困境
循环神经网络(RNN)用隐藏状态 $h_t$ 压缩历史信息,并递推更新。其直观性很强:像读书一样,从左到右逐字读取,把重要内容记在脑中。然而,这种压缩同时也是限制:当历史很长且内容复杂时,把一切塞进一个向量很容易丢失细节。
更关键的问题在于训练稳定性。反向传播穿越时间(BPTT)时,梯度需要沿时间链路传播,容易出现梯度消失或爆炸。LSTM/GRU 通过门控机制缓解了这一问题,使得“保留/遗忘”更可控,但并未根除长程建模的结构性困难:信息仍然需要沿着递推链路传递,训练并行性仍受限。
经验性折中:双向、残差、跳连与外部记忆
为了弥补递归结构的局限,研究者提出了多种增强策略:双向 RNN 让每个位置同时看左与右;残差与跳连试图缩短梯度路径;外部记忆(memory network)把部分信息显式存储以供读取。这些努力都在指向同一个方向:让模型在需要时能够“直接访问”相关信息,而不是被动等待信息沿链路传来。注意力正是在这一动机下走向主舞台。
注意力的基本出发点:相关性加权汇聚
从“对齐”直觉理解注意力
在机器翻译中,一个常见直觉是“对齐”(alignment):生成目标词时,模型应聚焦源句中与之对应的词或短语。例如翻译时生成“not”往往需要关注源句的否定结构,而不是平均看所有词。注意力机制把这种“聚焦”变成可学习的计算:对每个候选信息源分配一个权重,权重越大,贡献越大。
数学骨架:打分、归一化、汇聚
设我们有一组待被读取的信息向量 $x_1,\dots,x_n$(可理解为序列各位置的表示),以及一个“查询”向量 $q$(表示当前想解决的问题:我要生成哪个词、我要判断什么类别、我要补全什么内容)。注意力通常分三步:
1. 打分(score):衡量查询与每个信息源的相关性 $$s_i = \mathrm{score}(q, x_i)$$ 常见打分是点积 $s_i = q^\top x_i$,也可以是小网络(加性注意力)。
2. 归一化(softmax):把打分变成概率分布(非负、和为 1) $$\alpha_i = \mathrm{softmax}(s)_i = \frac{e^{s_i}}{\sum_{j=1}^n e^{s_j}}$$
3. 汇聚(weighted sum):输出为信息的加权和 $$y = \sum_{i=1}^n \alpha_i x_i$$
这个结构的重要性在于:它用一个连续、可微的方式实现“选择”。当某个 $s_k$ 明显更大时,$\alpha_k$ 会占主导,输出近似选择 $x_k$;当多个位置都重要时,输出可以平滑融合。<!-- concept: softmax; concept: weighted_sum -->
一个最小例子:从“平均”到“偏置的平均”
假设要从三条线索 $x_1,x_2,x_3$ 中读取信息。若不使用注意力,最朴素的做法是平均:$y=\frac{1}{3}(x_1+x_2+x_3)$,这隐含“每条线索同等重要”。而注意力允许“数据驱动的重要性”:例如得到 $(\alpha_1,\alpha_2,\alpha_3)=(0.05,0.90,0.05)$,则 $y$ 基本由 $x_2$ 决定。对于长序列而言,这种能力意味着模型可以在很远的位置上找到关键证据,并让其在输出中占主要权重。
自注意力:让序列元素彼此“检索”
Transformer 的核心是自注意力(self-attention):查询与信息源都来自同一序列。换言之,序列中的每个位置都可以向序列中的其他位置发起“检索”:我需要哪些上下文来更新我的表示?
工程实现中通常使用 Query/Key/Value 三组向量:
- $Q$:查询(我想找什么)
- $K$:键(我有什么可被匹配的标签)
- $V$:值(真正要被读取的内容)
在最常用的缩放点积注意力(scaled dot-product attention)中,单头注意力写作: $$\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V$$
其中 $d_k$ 是 Key 的维度,$\sqrt{d_k}$ 的缩放用于稳定 softmax 的数值范围:维度增大时点积的方差也会增大,若不缩放,softmax 容易过于尖锐,训练不稳定。这个式子背后仍是“相关性加权汇聚”,只不过把多个查询打包成矩阵计算,从而高度并行。
为什么注意力改变了序列建模的主流路线
并行性:把“时间递推”变成“矩阵乘法”
在 RNN 中,序列长度 $n$ 通常意味着 $n$ 次严格串行的状态更新;而在自注意力中,核心计算 $QK^\top$ 与后续矩阵乘法可以一次性在 GPU 上并行完成。并行并不意味着“计算更少”,而是意味着硬件利用率显著提高:训练速度更容易随硬件发展而提升。
下面用示意图对比两类信息流(强调结构差异,而非精确实现细节):
```mermaid graph TD subgraph RNN[递归结构(串行依赖)] x1-->h1-->h2-->h3-->h4 x2-->h2 x3-->h3 x4-->h4 end
subgraph SA[自注意力结构(全局交互)] a1[位置1]---a2[位置2] a1---a3[位置3] a1---a4[位置4] a2---a3 a2---a4 a3---a4 end ```
> 自注意力的本质是“全连接式的信息交互”,它把长程依赖从“多步传递”改为“单跳可达”。
表示能力:动态路径与多视角聚合
注意力权重 $\alpha_i$ 是随输入变化的,这使得模型拥有一种“动态计算图”:同一结构在不同样本上会走不同的信息路径。对某些句子,模型可能主要关注主谓关系;对另一些句子,模型可能聚焦否定、时间状语或指代关系。这种动态性是固定窗口与固定递推路径难以直接提供的。
此外,Transformer 引入多头注意力(multi-head attention),可理解为让模型用多个“相关性度量空间”同时观察同一序列:某些头偏语法邻近,某些头偏语义相似,某些头可能学习到指代或长程一致性。这并不保证每个头都有清晰可解释的语义,但在实践中常能观察到一定的分工倾向,为分析与调试提供了线索。
代价与局限:二次复杂度与位置信息
注意力并非“没有代价”。标准自注意力需要计算 $n\times n$ 的相关性矩阵,时间与显存开销通常为 $O(n^2)$,当序列很长(长文档、长语音、长视频帧序列)时会成为瓶颈。后续章节将系统讨论稀疏注意力、线性注意力、分块与检索增强等改进路线。
另一个关键问题是位置:自注意力本身对输入顺序不敏感(只要你把向量集合打乱,集合层面的计算形式不变)。因此 Transformer 需要显式注入位置信息(位置编码、相对位置偏置等)才能处理“顺序”。这也是理解 Transformer 的必经之路:注意力负责“内容相关性”,位置机制负责“顺序结构”。<!-- concept: positional_encoding -->
三个具体场景:注意力为何“更像在理解”
场景一:机器翻译中的对齐与重排序
不同语言的语序、修饰结构常不同。生成目标词时,模型需要在源句中找到对应片段,甚至进行重排序。注意力提供了显式的对齐权重,使模型可以一边生成一边“回看”源句相关位置。2017 年 Transformer 论文《Attention Is All You Need》报告在当时的 WMT14 英德、英法翻译任务上取得强竞争力的 BLEU 指标,同时训练更易并行[^1]。对普通读者而言,关键不在具体分数,而在范式变化:译文的每个词都可以通过注意力直接查询源句,而不必把源句压缩成单一向量。
场景二:长文摘要中的“证据聚合”
摘要不是简单截取句子,而是从多个段落中抽取证据并重组。RNN 类模型把长文压缩到末端状态时,常出现“早期信息遗忘”;即便使用双向结构,模型仍需通过多步传递让远处信息影响当前生成。自注意力允许摘要生成时直接把注意力指向关键句,例如人物、结论句、转折句,从而更稳定地捕获长程依赖。即便后续研究会引入更适合长文的稀疏结构,其核心仍是“检索式的证据读取”。
场景三:推荐与行为序列中的“个性化关注”
在推荐系统中,用户行为序列可能很长,但并非每次点击都与下一次兴趣相关。注意力能根据候选商品(查询)对历史行为(键/值)进行加权,从而实现“针对当前问题的历史读取”:买相机时关注镜头与存储卡的历史;看书时关注图书与作者偏好。这里的要点是:注意力把“记忆的使用方式”变成条件化的、任务相关的,而不是一股脑压缩进固定状态。
本书学习路径与最低前置:从直觉到可实现
本书 20 章的路线图(建议的学习节奏)
为了让读者从“会用”到“通透”,本书将 20 章组织为递进的四个层次(章节编号以最终排版为准,这里给出概览):
- **第一层:问题与基本部件**:序列建模瓶颈、注意力直觉、矩阵化实现、位置机制的必要性。
- **第二层:Transformer 块的完整拼装**:多头注意力、前馈网络、残差与归一化、掩码、编码器/解码器结构。
- **第三层:训练与工程化**:损失函数、优化与学习率调度、正则化、混合精度、并行训练、推理加速与缓存。
- **第四层:变体与前沿**:长序列效率、检索增强(RAG)、多模态、对齐与安全、可解释性与评测。
这种路线的核心原则是:先建立可计算的骨架,再补足工程细节与理论解释。读者每走一步都能对应到可运行的实现与可观察的现象,而不是只停留在概念层面。
最低数学前置:够用、可解释、可计算
本书默认读者具备或愿意补齐以下直观知识(不要求严格证明):
- **向量与矩阵**:理解向量是“特征的有序数组”,矩阵乘法是“批量线性组合”。尤其需要熟悉 $QK^\top$ 这类形状变化所表达的含义:把“每个查询与每个键的相似度”一次性算出来。
- **点积与相似度**:点积可被理解为“方向一致程度”,在注意力中承担最常见的相关性打分。
- **softmax**:理解其将任意实数变成概率分布,并具有“放大相对差异”的效果。
- **梯度下降的直观认识**:知道训练是在最小化损失函数,参数沿负梯度方向更新;理解过拟合与正则化的基本概念即可。
> 若你能看懂“$y=\mathrm{softmax}(Ax)b$”这类表达,并愿意把它与“先算分数、再归一化、再加权求和”的流程对应起来,就已经具备阅读本书的数学门槛。
最低工程前置:能跑起来,能观察到现象
建议读者至少具备以下能力:
- 会使用一种主流深度学习框架(PyTorch 或 TensorFlow 任选其一),能读懂张量形状与广播规则。
- 能进行基本实验:跑一个小模型、观察 loss 曲线、做简单的消融对比(例如关掉位置编码会发生什么)。
- 理解训练/推理的区别,知道 batch、epoch、学习率等基本术语。
为降低门槛,本书后续示例将尽量采用“小而全”的代码片段:即便不追求工业级效率,也能清晰呈现核心机制。<!-- concept: pytorch; concept: tensor_shape -->
小结:从“记忆式建模”走向“检索式建模”
注意力之所以改变序列建模,不仅因为它在若干任务上取得了更好效果,更因为它提供了一种更符合问题结构的计算范式:序列元素之间的依赖并非固定窗口能覆盖,也不必被迫通过单一递归状态传递;相反,我们可以让模型在每一步显式地计算“我与谁相关”,并据此聚合信息。Transformer 将这一思想工程化为高度并行、可扩展的架构,进而成为自然语言处理乃至多模态学习的基础设施。
下一步需要回答的问题是:如果注意力只是“加权求和”,为什么它能构成强大的表示学习系统?多头、残差、归一化、位置编码、掩码与前馈网络各自扮演什么角色?这些问题将把我们从直觉带向完整的 Transformer 构件与可复现实验。
[^1]: Vaswani et al., “Attention Is All You Need”, NeurIPS 2017。论文提出以自注意力为核心的 Transformer 架构,并在机器翻译基准任务上报告了具有竞争力的效果与训练效率。