为什么 RNN 读得越长,越难记住很早之前的信息?

序列模型和它的瓶颈

约 12 分钟5 道自测更新于 2026-11-01

一句话记住RNN 用隐藏状态边读边记,但长距离信息会逐步衰减、计算还必须串行;Transformer 用注意力让位置直接互相查看,并能并行处理训练数据。

01学完你能做到

明白为什么 RNN 被 Transformer 取代。

02序列需要「记忆」

一句话、一段语音、一串股价都是序列:顺序很重要。「狗咬人」和「人咬狗」用词一样,意思相反。上一节的 n-gram 只看固定窗口。我们想要一个能「边读边记」、理论上看得无限远的模型。

03RNN:带记忆的循环网络

循环神经网络(RNN)每读一个词,就更新一个隐藏状态 h(可以理解为「到目前为止的笔记」):

h(t) = tanh( W·h(t−1) + U·x(t) )

新笔记 = 旧笔记和新词揉在一起。每一步用的都是同一套参数 W、U。

走读一遍

读「我爱北京」:

  1. 读「我」:h1 = 由「我」生成的笔记。
  2. 读「爱」:h2 = 揉合 h1 和「爱」,笔记里有了「我爱」。
  3. 读「北京」:h3 = 揉合 h2 和「北京」,笔记压缩了整句话。
  4. 用 h3 去做分类,或预测下一个词。

数值小例子(一维,为好算去掉 tanh):W=0.5,U=1,h0=0,输入依次是 1、0、0。

  • h1 = 0.5×0 + 1 = 1
  • h2 = 0.5×1 + 0 = 0.5
  • h3 = 0.5×0.5 + 0 = 0.25

第一个词的信息每步打对折,读 10 步后只剩约 0.001。早期信息会被逐渐冲淡。

RNN 每读入一个 token 就更新隐藏状态,并把状态传给下一步。
RNN 每读入一个 token 就更新隐藏状态,并把状态传给下一步。

04瓶颈一:长距离依赖与梯度消失

训练 RNN 时,误差要沿时间一步步往回传(「沿时间反向传播」)。每往回一步,梯度大约要乘一次类似 W 的系数。

  • 每步乘 0.9,回传 30 步:0.9³⁰ ≈ 0.04,梯度几乎没了 → 梯度消失,模型学不会远处的关联。
  • 每步乘 1.1:1.1³⁰ ≈ 17.4,越传越大 → 梯度爆炸,训练不稳定(常用「梯度裁剪」压住)。

所以对于「我在法国长大……(隔了 50 个词)……我说流利的___」,普通 RNN 很难把「法国」和答案联系起来。

回传步数增加时,每步乘以 0.9 会让梯度指数衰减,乘以 1.1 会让梯度指数增长。
回传步数增加时,每步乘以 0.9 会让梯度指数衰减,乘以 1.1 会让梯度指数增长。

05LSTM:加上「门」来管理记忆

LSTM(长短期记忆网络,1997)在 RNN 里加了一条细胞状态(像一条传送带)和三个「门」:

  • 遗忘门:旧记忆里哪些该丢掉;
  • 输入门:新信息里哪些该写进去;
  • 输出门:此刻该把哪些记忆拿出来用。

门是 0\~1 之间的数(用 Sigmoid 算)。关键在于传送带上的记忆主要是加法更新,遗忘门接近 1 时信息几乎原样传下去,梯度也不容易消失。LSTM 能记住数百步,统治了 2014–2017 年的机器翻译和语音识别。GRU 是它的简化版。

06编码器-解码器(Seq2Seq)与「信息瓶颈」

机器翻译要把一个序列变成另一个序列。2014 年的方案:

  1. 编码器 RNN 读完整个中文句子,压成一个固定长度的向量;
  2. 解码器 RNN 从这个向量出发,一个词一个词生成英文。

问题:不管原句 5 个词还是 50 个词,都要塞进同一个大小的向量,长句信息必然丢失,翻译质量随句长明显下降。

2014 年 Bahdanau 等人提出注意力机制:解码器每生成一个词,都可以回头「看」编码器所有位置,按相关性加权取信息,而不是只靠最后那一个向量。这是通往 Transformer 的关键一步(第 7 讲(注意力机制))。

07瓶颈二:没法并行

RNN 必须先算 h1 才能算 h2,再算 h3……天生串行。

一句 1000 个词就要串行 1000 步,而 GPU 擅长的是同时做大量计算。这让 RNN 很难扩展到海量数据和大模型。

RNN 与 Transformer 的计算方式
  1. RNN:串行计算先算 h1,再算 h2、h3
  2. Transformer:并行计算多个位置可同时处理

RNN 的隐藏状态依赖前一步;Transformer 的训练可并行处理多个位置。

08Transformer 的回答(2017)

论文《Attention Is All You Need》干脆扔掉循环,只用注意力:

  • 每个词都能直接看到序列中任何其他词,距离 1 和距离 1000 一样近 → 解决长距离依赖;
  • 训练时所有位置同时计算 → 充分利用 GPU 并行 → 能做大。
RNN / LSTMTransformer
远距离信息要一步步传,会衰减一步直达
训练并行不行,必须串行可以
代价每步计算小注意力计算量随长度平方增长

最后一行是 Transformer 的代价,也是今天「上下文窗口」长度有限、很贵的根源之一。另外,生成文本时 Transformer 仍然是一个词一个词地自回归输出,并行主要体现在训练和读入提示词时。

从 RNN 到 Transformer
  1. 1读取序列保留前文信息
  2. 2遇到长依赖RNN 信息逐步衰减
  3. 3引入注意力直接查看相关位置
  4. 4并行训练充分利用 GPU

Transformer 用注意力解决了 RNN 的两类主要瓶颈,但长上下文的计算代价仍然存在。

09延伸阅读

  • 《动手学深度学习》8.4 节「循环神经网络」:zh.d2l.ai
  • 《动手学深度学习》9.2 节「长短期记忆网络(LSTM)」:zh.d2l.ai
  • 《动手学深度学习》9.7 节「序列到序列学习」:zh.d2l.ai
  • Hochreiter & Schmidhuber, Long Short-Term Memory, Neural Computation 9(8), 1997:doi.org
  • Sutskever, Vinyals & Le, Sequence to Sequence Learning with Neural Networks, 2014:arxiv.org
  • Cho et al., Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, 2014:arxiv.org
  • Bahdanau, Cho & Bengio, Neural Machine Translation by Jointly Learning to Align and Translate, 2014:arxiv.org
  • Vaswani et al., Attention Is All You Need, 2017:arxiv.org

10一分钟讲给别人

试着用自己的话讲一遍序列数据要求模型有记忆。RNN 用一个隐藏状态边读边更新,但早期信息会被冲淡,训练时梯度沿时间连乘会消失或爆炸。LSTM 用门和加法式的记忆传送带缓解了这个问题;编码器-解码器把整句压成一个向量,长句会丢信息,注意力机制由此诞生。RNN 还必须逐步串行计算,没法利用 GPU 并行。Transformer 用注意力取代循环,任意两个词一步直达,训练也能并行,所以取代了 RNN。

想一想

5 道自测

先在心里答一遍,再展开对照。能说清理由,比答对数字更重要。

  1. 01RNN 的隐藏状态起什么作用?

  2. 02回传 20 步、每步梯度乘 0.5,最终剩原来的多少?说明了什么?

  3. 03LSTM 的三个门分别是什么?

  4. 04Seq2Seq 的「信息瓶颈」指什么?哪个机制缓解了它?

  5. 05说出 Transformer 取代 RNN 的两个主要原因。

已看 0/5 题

练动手练习

在纸上从 h0=1 开始,连续 8 次乘以 0.5,再连续 8 次乘以 1.1,比较两组结果。把每次结果画成折线,观察信息如何消失或变大,这对应 RNN 训练中的哪两类问题。

完成这一课

完成这一课

读完讲义、看完自测答案,这一课就算学完了。

  • 读完讲义
  • 看完全部自测

本课为投资者教育内容,案例数字均为示意,不构成任何投资建议,也不承诺收益。规则和费率会变,实际操作前请以交易所、监管机构和产品的最新公告为准。