Attention→K3 三十天课 · Day 8 / 30 课程首页 面试视角 自测题
Day 8 · 第 2 周开篇:2017 年之前的世界

为什么「一步一步串行算」是 AI 无法逾越的死穴?

第 1 周我们建立了语言模型的大局观。从今天起,我们正式进入这门课的核心主干——Transformer 架构考古。先回到 2017 年之前的深度学习世界:看清统治 NLP 领域的循环神经网络(RNN/LSTM)究竟被哪两堵死墙逼到了绝境,才倒逼出了 Transformer 的横空出世。

学完你能回答
2017 年之前大家用什么做序列建模?
学完你能回答
为什么 RNN 会在长句子里「前头忘光」?
学完你能回答
为什么显卡(GPU)拿 RNN 毫无办法?

1起点:这些你早就会了

在理解新技术之前,必须先看清旧技术的痛点。RNN 遇到的物理瓶颈,生活中到处都是:

你已经会的AI 世界里对应的东西
传话游戏:10 个人排队耳语,最后一人听到的面目全非长距离依赖遗忘:信息在 RNN 隐藏状态里逐层递推,步数越长衰减越严重
单行道收费站:后一辆车必须等前一辆车交完费才能开串行计算(Sequential):计算第 t 步必须等待第 t-1 步结果,无法并行
班级大扫除:50 个人闲着,只有 1 个人在挨个扫地算力浪费:GPU 有数千核心,却因为串行依赖只能让 1 个核心在算
直线翻书:想看第 500 页,必须从第 1 页一页一页翻过去最大路径长度 O(n):任意两 token 关联所需的计算步数等于它们相隔的距离
圆桌讨论:轮到你发言时,只能参考之前已经发言的同学自注意力(Transformer):每个 token 只能「回头看」前面的 token(因果掩码,Day 9–10 讲),任意两 token 距离 O(1),全矩阵一步并行算完

看完这 5 行,你已经把握了 2017 年 Transformer 颠覆整个 AI 行业的根本逻辑。

22017 年前的旧霸主:排队传话的 RNN

在 2017 年之前,只要是处理一段文字、一段语音,全世界工程师的第一反应都是用循环神经网络(RNN)及其改进版 LSTM 和 GRU。Google 自家的机器翻译系统 GNMT 当时也是建立在 8 层堆叠的 LSTM 之上。

核心类比:排队传话与记忆小纸条
假设一句话有 100 个 token。RNN 处理这句话的方式就像安排了 100 个同学排成一列:
1. 第 1 个同学读到「我」,在小纸条(隐状态 h_1)上记下自己的理解,递给第 2 个同学;
2. 第 2 个同学读到「在」,结合第 1 个同学递来的纸条,修改纸条写成 h_2,递给第 3 个同学;
3. ……一直传到第 100 个同学。

严格来说:每一步的数学公式极其朴素:h_t = f(h_(t-1), x_t)。只要前一个状态 h_(t-1) 没算出来,第 t 步的计算就绝对无法开始。
RNN 的时间步串行递推:前一步算完才能算后一步,路径长、易遗忘 从输入 x1 到 x4,隐藏状态 h1、h2、h3、h4 一步步串行传递,后一步必须依赖前一步 RNN 的串行计算链(时间步依赖) 计算第 4 步必须等待第 1、2、3 步依次完成,跨越距离为 O(n) RNN 步 1 (h₁) 输入 token 1 RNN 步 2 (h₂) 输入 token 2 RNN 步 3 (h₃) 输入 token 3 RNN 步 4 (h₄) 输入 token 4
图 8.1:RNN 的时间步串行链条。每一步都必须苦等上一步输出,信息传递路径与序列长度 n 呈严格线性正比。

3致命痛点一:传到第 50 步,开头的细节全丢了

纸条只有巴掌大,传得越远,前面写的东西被涂抹得越严重。这就是著名的长距离依赖问题(Long-range Dependency)。

经典场景:隔了 30 个 token 的指代

比如这句话:「小明昨天去图书馆借了一本非常厚重、封皮泛黄且写满古代拉丁文的历史书,直到深夜回宿舍后他才发现它居然少了两页。」

句末的「它」指代的是「历史书」还是「图书馆」?开头的「小明」和后面的「他」是什么关系?在 RNN 架构下,这两个 token 相隔 30 个位置,信号必须穿过 30 次矩阵乘法与非线性压缩。在反向传播求导时,梯度会发生指数级衰减(梯度消失),导致模型根本记不住开头的线索。

进阶小注:为什么 LSTM 也救不了? Hochreiter 与 Schmidhuber 在 1997 年发明的 LSTM(长短期记忆网络)引入了「门控机制」和一条线性传送带 C_t,极大地缓解了梯度消失,把有效记忆长度从几十拉到了上百。但本质未变:信息依然被硬塞进固定维度的向量瓶颈中,最大路径长度依然是严格的 O(n)。

4致命痛点二:GPU 算力大爆发,RNN 却完全无法并行

如果说长距离遗忘是“质量问题”,那么无法并行则是彻底堵死大模型 Scaling Law(Day 22 讲)的“致命工程死穴”。

核心类比:千人施工队 vs 一把铁锹
GPU(图形处理器)天生就是为了大规模矩阵并行计算而生的——一张现代 GPU 拥有数千甚至上万个计算核心,最擅长的是「一万个数同时做加减乘除」。

但面对 RNN 时:因为第 2 个 token 必须等第 1 个 token 算完,第 3 个等第 2 个……结果就是:数千个核心全部在闲置摸鱼,只有 1 个核心在一步一步串行推导!算力利用率极低,训练长文要等上很久。

严格来说:GPU 并不是真的只有一个核心在干活——每一步内部的矩阵运算仍然是并行的,没法并行的是「时间步之间」这条依赖链。另外训练总时长还取决于模型大小和数据量,这里只强调「串行等待」这个让 GPU 使不上劲的瓶颈。
GPU 算力利用率对比:RNN 串行等待 vs Transformer 全矩阵并行 左侧展示 RNN 核心闲置等待,右侧展示 Transformer 一次性把整个序列矩阵铺满所有 GPU 核心 RNN:串行排队(GPU 绝大多数核心闲置) 计算 1 等待... 等待... 等待... 耗时 = N 步 × 单步耗时 无法利用 GPU 并行能力 Transformer:矩阵并行(GPU 核心全满载) Token 1 Token 2 Token 3 Token 4 耗时 = 1 步矩阵乘法 一次性把数万核心占满!
图 8.2:算力硬件的契合度对比。Transformer 抛弃循环的本质,就是把「时间上的先后递推」彻底重构成「空间上的矩阵乘法」。

5卷积神经网络(CNN)的尝试与局限

在 Transformer 之前,科学家们也想过用图像领域大获成功的卷积神经网络(CNN)来做并行化——代表作有 ByteNet、ConvS2S(两个用卷积做机器翻译的模型,知道名字即可)。卷积确实可以对全序列同时滑动计算,但它带来了新的尴尬:

直到 2017 年,Google 团队在论文《Attention Is All You Need》中掷地有声地提出:不需要循环(No Recurrence),也不需要卷积(No Convolution),只要注意力机制(Attention Is All You Need)!

6面试视角

面试视角 · 高频考点
面试官可能会问:「Transformer 相比于传统的 RNN / LSTM,到底解决了什么根本问题?」
八股答「RNN 有长距离依赖遗忘和梯度消失问题,而且不能并行计算。Transformer 提出了自注意力机制,能够并行训练,并且任意两个 token 之间的距离都是 1,所以效果更好。」——背得没毛病,但没有触及工程本质。
本课答「核心是两笔账:第一是硬件吞吐账:RNN 具有天然的时间步依赖(h_t = f(h_(t-1), x_t)),导致无法在训练样本内并行化,GPU 算力利用率极低;Transformer 将序列依赖解绑为全矩阵内积,将训练顺序步数直接降为 O(1),打通了硬件大规模集群训练的 Scaling 通道(Day 22 讲);第二是信息路径账:RNN 在任意两 token 间的信号传递路径为 O(n),长程衰减严重;而自注意力让任意两 token 交互距离恒为 O(1),消除了长程信息瓶颈。」

7映射到原文:Attention 论文 §1–2

我们在今天精译的《Attention Is All You Need》第 1 节和第 2 节中,能清楚看到作者当年写下这些论述时的开篇暴击:

论文原文对照 · 《Attention Is All You Need》§1 引言
“This inherently sequential nature precludes parallelization within training examples, which becomes critical at longer sequence lengths, as memory constraints limit batching across examples… In this work we propose the Transformer, a model architecture eschewing recurrence and instead relying entirely on an attention mechanism to draw global dependencies between input and output.”

逐词翻译:「这种固有的顺序特性阻碍了训练样本内部的并行化……在这项工作中,我们提出了 Transformer,一种彻底摒弃循环、完全依赖注意力机制来刻画全局依赖的模型架构。」

O(n)
RNN 信号传递的最大路径长度
O(1)
Transformer 任意两 token 的交互距离
12 h
2017 年 8 块 P100 训练出 SOTA 模型耗时
0
Transformer 内部的循环层与卷积层数

8自测题(先自己答,再点开看解析)

Q1 为什么 RNN 的单步计算无法利用 GPU 进行大并发?
解析:因为 RNN 的第 t 步隐状态 h_t 必须以第 t-1 步的输出 h_(t-1) 为输入。这种前后时间依赖是因果硬锁,GPU 虽然有几千个核心,但也只能等前一步算完才能算后一步,无法同时并发处理整条序列。
Q2 什么是「最大路径长度」?RNN 和 Transformer 分别是多少?
解析:最大路径长度指网络中任意两个 token 之间传递信号(前向或反向)所需跨越的最长步数。RNN 必须一步步传,距离为 O(n);Transformer 通过全局注意力矩阵直接两两相乘,距离恒为 O(1)。
Q3 2017 年之前,大家用什么做序列建模?这些方案各自的短板是什么?
解析:主力是循环神经网络(RNN)及其改进版 LSTM、GRU——Google 的机器翻译系统 GNMT 就堆了 8 层 LSTM;也有人尝试用卷积神经网络(如 ByteNet、ConvS2S)实现并行。RNN 一派的短板是串行计算无法并行、长距离容易遗忘(LSTM 靠门控机制缓解了遗忘,但改不了串行本质);CNN 一派能并行,但感受野受限,长程关联要靠堆几十层卷积,仍不如全局自注意力直接。
Q4 为什么卷积神经网络(CNN)也能并行,却没有统治大模型?
解析:因为单层卷积的视野(感受野)局限于核大小 k。要连接相距遥远的 token,必须堆叠大量卷积层(路径为 O(n/k) 或 O(log_k n)),模型结构臃肿且长程语义捕捉能力仍不如全局自注意力直接。
Q5 用一句通俗的话总结:Transformer 之所以打败 RNN,核心赢在哪里?
解析:核心赢在「把时间递推重构成了矩阵乘法」,一举扫清了长距离遗忘,并完美契合了 GPU 硬件的大规模矩阵并行算力。
《从 Attention 到 K3 · 大模型近十年设计演进》30 天课 · Day 8 / 30 · 返回课程首页