# 为什么需要注意力：RNN 的瓶颈与「每个词直接看见彼此」的直觉

从 RNN 串行处理、长程衰减、信息瓶颈三个痛点，引出注意力机制的核心动机——让序列里每个词直接看见所有其他词。

> RNN 局限 · 注意力机制动机 · 序列建模基础 · 约 4 分钟 · 07 月 08 日

## 本篇要点

1. RNN 的串行依赖导致 GPU 利用率极低（5–15%），训练慢是结构性问题而非工程问题
2. LSTM 通过 cell state 缓解了梯度消失，但有效记忆长度仍只有 200–300 个 token
3. Seq2Seq 的固定 context vector 是信息瓶颈：长句翻译质量随长度增加而暴跌
4. 注意力的核心直觉是让任意两个位置之间的信息传递路径从 O(N) 步降到 O(1) 步

---

想象你在读一篇小说，每读一个新词就必须忘记之前的大部分内容——你的工作记忆只有一张便利贴，读完第 100 个字时，第 1 个字已经被擦掉了。这就是 RNN 处理序列的方式。

今天我们要回答一个根本问题：为什么序列模型需要「注意力」？答案藏在 RNN 的三个痛点上。

## 顺序处理：一个 CPU 核心的寂寞

RNN（循环神经网络）处理序列的方式是逐词扫描。它维护一个「隐状态」向量 $h_t$，每读一个新词 $x_t$，就更新一次：

$$h_t = \tanh(W_h h_{t-1} + W_x x_t)$$

这条公式看起来简单，但有一个致命后果：要算 $h_3$，必须先有 $h_2$；要算 $h_2$，必须先有 $h_1$。每一步都在等前一步算完。这就是**串行依赖**——一个长度 $T$ 的序列，必须经过 $T$ 个时间步才能处理完。

GPU 擅长的是同时做大量矩阵乘法，而 RNN 让 GPU 大部分时间在「排队等待」。实测训练 LSTM 时 GPU 利用率常在 **5–15%** 之间，而同等规模的 Transformer 可以达到 70–95% [1]。训练一个 8 层 LSTM 的机器翻译模型，在 8 张 V100 上需要几天到一周的时间 [2]。在大模型时代，「训练得起」本身就是硬约束。

## 长距离依赖：信息在传递中衰减

第二个问题更隐蔽。RNN 把信息一步一步往前传，每传一步就经过一次非线性函数和矩阵乘法。数学上，梯度沿时间步连乘，如果权重矩阵的奇异值小于 1，梯度就会指数衰减——这就是**梯度消失**。Vanilla RNN 实际能稳定的记忆长度只有 10–20 步 [3]。

LSTM 通过引入一条「加法高速公路」（cell state $C_t$）缓解了这个问题，让梯度可以几乎不衰减地传递。但实证研究发现，LSTM 的有效记忆长度仍然只有 **200–300 个 token** 左右 [4]。超过这个范围，信息就变得模糊甚至丢失。

换个角度理解：自然语言中，句子开头的「主语」和 50 个词之后的「谓语」之间可能存在重要依赖。RNN 需要走 50 步才能把信息从主语传到谓语，每一步都可能丢失信号。这就好比玩传话游戏——传 5 个人还能还原，传 50 个人就面目全非了。

## 信息瓶颈：一个向量装不下整段话

在早期的 Seq2Seq（序列到序列）模型中，编码器把整个输入序列压缩成一个固定长度的向量，然后解码器从这个向量生成输出。Sutskever 等人在 2014 年的实验发现：句子长度从 30 个词增加到 60 个词时，翻译质量（BLEU 分数）**暴跌** [5]。

原因很直观：一个固定维度的向量承载不了无限的信息。长句子的前几个词的信息，在编码过程中会被后面的词「覆盖」或「稀释」。这就是**信息瓶颈**——压缩必然有损，序列越长，损失越大。

## 核心想法：让每个词直接看见彼此

2014 年，Bahdanau、Cho 和 Bengio 在论文中提出了一个在当时看来很激进的想法：**与其把所有信息压成一个向量，不如保留编码器每一步的隐状态，让解码器在生成每个词时，自己决定「回头看」输入的哪些部分** [6]。

这就是注意力机制的雏形。它的核心直觉是：**不再把信息一步步传过去，而是让每个词直接「看见」所有其他词。**

想象一下，如果把序列比作一间坐满人的会议室，RNN 的做法是：第一个人把话传给第二个人，第二个人传给第三个人……传到第 50 个人时，原话已经走样了。注意力机制的做法是：**每个人都可以直接对所有人说话，也可以直接听任何人的话**——信息传递的距离从 $O(N)$ 步降到了 $O(1)$ 步 [7]。

加上了注意力机制的 Seq2Seq 模型，在长句翻译上的性能不再衰减 [6]。这个「补丁」的效果如此显著，以致于研究者开始思考一个问题：如果注意力本身就能让任意两个位置直接交互，那 RNN 的循环结构是不是根本不需要？

## 从补丁到主角

2017 年，Vaswani 等人在《Attention Is All You Need》中给出了答案：**去掉 RNN，只用注意力机制**。这篇论文提出的 Transformer 架构，一次性解决了 RNN 的三个痛点：

- **并行计算**：所有位置同时计算，不再串行等待；
- **长程直达**：任意两个 token 之间的路径长度恒为 1，不再衰减；
- **动态容量**：不再把信息压缩成固定向量，而是保留所有位置的表示，按需加权组合。

代价是什么？注意力需要计算所有词对之间的相似度，复杂度是 $O(N^2)$——序列长度翻倍，计算量翻四倍。但在大多数实际场景中，这个代价换来了训练速度快 5–10 倍、长程建模能力大幅提升，是划算的交换 [7]。

这一篇我们只建立动机。下一篇会进入注意力机制的核心数学：Query、Key、Value 三件套到底是什么，以及为什么点积可以衡量「相似度」。

## 来源

1. [RNN 的根本局限：三难分析与 GPU 利用率对比数据](https://quant67.com/post/transformer/10-rnn-limits/10-rnn-limits.html)
2. [RNN 与序列建模：LSTM 训练时间与架构局限](https://quant67.com/post/transformer/09-rnn/09-rnn.html)
3. [RNN 梯度消失与 LSTM 改进的详细分析](https://yeasy.gitbook.io/llm_internals/di-yi-bu-fen-ji-chu-pian/01_introduction/1.2_rnn_cnn_limits)
4. [Attention Is All You Need — Transformer 原始论文，含并行化与长程依赖对比](https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf)
5. [固定长度 context vector 瓶颈的动机分析](https://apxml.com/courses/foundations-transformers-architecture/chapter-2-attention-mechanism-core-concepts/motivation-for-attention)
6. [Bahdanau 2014 — Neural Machine Translation by Jointly Learning to Align and Translate](https://arxiv.org/pdf/1409.0473)
7. [Google Research 对 Transformer 的官方介绍](https://research.google/blog/transformer-a-novel-neural-network-architecture-for-language-understanding/)

---

原文：https://pangzhengboyin.com/articles/why-attention-the-rnn-bottleneck-b51914f2

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
