人工智能实践(语言智能)
第2讲:Transformer

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 的数学形式是

ht=tanh(Whht1+Wxxt+b)h_t = \tanh(W_h h_{t-1} + W_x x_t + b)

hth_t 的计算依赖 ht1h_{t-1}。这条"时间链"把训练按 token 数串成一条线——要算第 1000 步,必须先算完第 1 步到第 999 步。GPU 的并行能力在序列维度上完全用不上,只能靠扩大 batch 来勉强喂饱算力。结果就是:序列一长,训练就慢;硬件再强,也跟不上。

局限二:长程依赖与梯度消失

LSTM 用门控机制(gate)缓解了普通 RNN 的梯度消失,但只是缓解,不是解决。考虑在 1000 步之前出现过的一个关键词对 1000 步的预测的影响:

hth1=i=2thihi1\frac{\partial h_t}{\partial h_1} = \prod_{i=2}^{t} \frac{\partial h_i}{\partial h_{i-1}}

这个乘积里只要有几个雅可比矩阵的范数小于 1,结果就会指数衰减到零。有效记忆长度在实践中很难突破几百 token,这远远无法满足文档级推理、长对话、代码生成等真实任务。

CNN 的局部感受野局限

CNN 避开了串行瓶颈(在序列维度可以并行卷积),但付出的代价是感受野被卷积核大小约束。要让位置 ii 能"看到"位置 jj,理论上需要

depthijk1\text{depth} \geq \frac{|i - j|}{k - 1}

其中 kk 是卷积核大小。一个 k=3k=3 的 CNN 想建立 1000 步的依赖需要约 500 层——既不现实,也会带来优化难度。WaveNet 用 Dilated Convolution 把增长速度改为指数,但任意两点之间仍需多层间接传播,没有"一步直达"的路径

Attention 的核心主张:关系自己学,通路一步直达

Self-Attention 的核心直觉极为朴素:

每个 token 对序列中所有其他 token 计算一个"相关性分数",再按分数加权求和。

这一步同时达成三件事:

  1. 任意两点之间的路径长度恒为 1——再也没有梯度消失问题,1000 步之外的信息与 1 步之外的信息在计算图里是等价的
  2. 同一层内所有位置独立计算——在序列维度可以完全并行,GPU 的矩阵乘法能力被榨干
  3. "看谁多、看谁少"由数据学出来——不再需要像 CNN 那样预先设计卷积核大小,也不用像 RNN 那样靠隐状态硬记

三者对比

从复杂度与路径长度两个维度更精确地对比:

架构每层计算复杂度最大路径长度序列维并行
RNNO(nd2)O(n \cdot d^2)O(n)O(n)
CNN(核大小 kkO(knd2)O(k \cdot n \cdot d^2)O(logkn)O(\log_k n)O(n/k)O(n/k)
Self-AttentionO(n2d)O(n^2 \cdot d)O(1)O(1)

Self-Attention 的代价是 O(n2)O(n^2) 的内存与计算——序列长度翻倍,计算量变四倍。这也是 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/LSTMCNNSelf-Attention
序列维并行不能
任意两点距离O(n)O(n),易梯度消失O(n/k)O(n/k),需堆叠O(1)O(1)
"看谁多看谁少"由门控隐式决定卷积核预设数据驱动,显式权重
主要代价训练慢、长程弱感受野受限O(n2)O(n^2) 的计算/内存

下一节我们把这句直觉——"每个 token 对所有 token 算分再加权"——翻译成一组精确的矩阵运算:Scaled Dot-Product Attention。