2.1 为什么需要 Attention
从 RNN/LSTM 的串行瓶颈与梯度消失、CNN 的局部感受野出发,理解 Self-Attention 为何能同时解决两类问题
序列建模的两条"老路"
2017 年以前,自然语言处理(Natural Language Processing, NLP)的序列建模基本只有两条技术路径:
- **递归神经网络(Recurrent Neural Network, RNN)**族:RNN、LSTM、GRU。沿时间轴一步一步地吞进 token,把过去压缩到一个固定大小的隐状态里
- **卷积神经网络(Convolutional Neural Network, CNN)**用于文本:TextCNN、ByteNet、ConvS2S。用小卷积核在序列上滑动,靠堆叠增加感受野
两条路各自解决了一部分问题,也各自留了一个硬伤。
RNN/LSTM 的两大局限
局限一:无法在序列维度并行
RNN 的数学形式是
的计算依赖 。这条"时间链"把训练按 token 数串成一条线——要算第 1000 步,必须先算完第 1 步到第 999 步。GPU 的并行能力在序列维度上完全用不上,只能靠扩大 batch 来勉强喂饱算力。结果就是:序列一长,训练就慢;硬件再强,也跟不上。
局限二:长程依赖与梯度消失
LSTM 用门控机制(gate)缓解了普通 RNN 的梯度消失,但只是缓解,不是解决。考虑在 1000 步之前出现过的一个关键词对 1000 步的预测的影响:
这个乘积里只要有几个雅可比矩阵的范数小于 1,结果就会指数衰减到零。有效记忆长度在实践中很难突破几百 token,这远远无法满足文档级推理、长对话、代码生成等真实任务。
CNN 的局部感受野局限
CNN 避开了串行瓶颈(在序列维度可以并行卷积),但付出的代价是感受野被卷积核大小约束。要让位置 能"看到"位置 ,理论上需要
其中 是卷积核大小。一个 的 CNN 想建立 1000 步的依赖需要约 500 层——既不现实,也会带来优化难度。WaveNet 用 Dilated Convolution 把增长速度改为指数,但任意两点之间仍需多层间接传播,没有"一步直达"的路径。
Attention 的核心主张:关系自己学,通路一步直达
Self-Attention 的核心直觉极为朴素:
每个 token 对序列中所有其他 token 计算一个"相关性分数",再按分数加权求和。
这一步同时达成三件事:
- 任意两点之间的路径长度恒为 1——再也没有梯度消失问题,1000 步之外的信息与 1 步之外的信息在计算图里是等价的
- 同一层内所有位置独立计算——在序列维度可以完全并行,GPU 的矩阵乘法能力被榨干
- "看谁多、看谁少"由数据学出来——不再需要像 CNN 那样预先设计卷积核大小,也不用像 RNN 那样靠隐状态硬记
三者对比
从复杂度与路径长度两个维度更精确地对比:
| 架构 | 每层计算复杂度 | 最大路径长度 | 序列维并行 |
|---|---|---|---|
| RNN | 否 | ||
| CNN(核大小 ) | 或 | 是 | |
| Self-Attention | 是 |
Self-Attention 的代价是 的内存与计算——序列长度翻倍,计算量变四倍。这也是 2023 年以来 FlashAttention、Linear Attention、Mamba 等工作的出发点:在保留"一步直达"优势的同时压低二次方开销。长上下文问题我们会在 2.4 节和 2.6 节进一步展开。
"Attention 不是辅助件,是主件"
值得注意的是,Attention 并非 Transformer 发明。Bahdanau et al.(ICLR 2015)就已在机器翻译的 Encoder-Decoder 里加入了 Attention,用于动态对齐源语言和目标语言。但在那个时代,Attention 只是 RNN 的"插件",真正做序列编码的主力还是 LSTM。
Vaswani et al. 的《Attention Is All You Need》的真正突破是:把 Attention 从插件变成主件,彻底撤掉 RNN 和 CNN。只靠 Self-Attention + Feed-Forward Network(FFN) + 残差 + 归一化,就可以构造一个比之前一切序列模型都更强、更快、更深的架构。这一步抽象上的"做减法",让整个领域重新起步。
本节小结
| 问题 | RNN/LSTM | CNN | Self-Attention |
|---|---|---|---|
| 序列维并行 | 不能 | 能 | 能 |
| 任意两点距离 | ,易梯度消失 | ,需堆叠 | |
| "看谁多看谁少" | 由门控隐式决定 | 卷积核预设 | 数据驱动,显式权重 |
| 主要代价 | 训练慢、长程弱 | 感受野受限 | 的计算/内存 |
下一节我们把这句直觉——"每个 token 对所有 token 算分再加权"——翻译成一组精确的矩阵运算:Scaled Dot-Product Attention。