Transformer(一):为什么是需要Transformer?
摘要
Transformer 不是凭空出现的。它是在 N-gram、RNN、LSTM、GRU 等序列建模方法遇到瓶颈之后,被提出的一种新架构。本文不急着讲公式,而是先回答一个更基础的问题:为什么深度学习已经有了 RNN 和 LSTM,还需要 Transformer?
一、序列建模到底在解决什么问题?
自然语言、时间序列、代码、语音,本质上都可以看成一种“序列”。
例如一句话:
工人 没有 佩戴 安全帽模型要做的事情,不只是认识每个词,还要理解:
- “工人”是谁
- “佩戴”是动作
- “安全帽”是动作对象
- “没有”改变了整个句子的含义
也就是说,序列建模要解决的是:
如何根据上下文理解当前位置的信息。
如果模型只看到“安全帽”三个字,它只能知道这是一个物品。
如果模型看到“工人没有佩戴安全帽”,它才能知道这是一个安全违规场景。
二、最早的思路:N-gram
N-gram 是一种很经典的语言建模方法。
它的基本思想是:
根据前面 N 个词,预测当前词或下一个词。
例如 2-gram 只看前 1 个词:
佩戴 -> 安全帽3-gram 看前 2 个词:
没有 佩戴 -> 安全帽4-gram 看前 3 个词:
工人 没有 佩戴 -> 安全帽N-gram 的优点
N-gram 很容易理解,也很容易实现。
它不需要复杂的神经网络,只需要统计词语出现的概率。
例如:
| 上下文 | 下一个词 | 概率 |
|---|---|---|
| 佩戴 | 安全帽 | 高 |
| 佩戴 | 手套 | 中 |
| 佩戴 | 手机 | 低 |
N-gram 的缺点
N-gram 的问题也很明显:它只能看固定长度的上下文。
假设句子很长:
进入施工现场的工人因为赶时间没有按照规定佩戴安全帽如果只看前 2 个词或前 3 个词,模型很难把“工人”和“安全帽”联系起来。
N-gram 的核心缺陷是:
| 问题 | 说明 |
|---|---|
| 上下文长度固定 | N 设多大,就只能看多远 |
| 数据稀疏 | N 越大,组合越多,很多组合没见过 |
| 无法理解语义 | 主要靠统计,不真正建模词与词的深层关系 |
可以把 N-gram 理解成一个“短视”的模型:
它能看见眼前几个词,但很难理解整句话。
三、RNN:让模型按顺序读句子
为了解决 N-gram 上下文长度固定的问题,RNN 出现了。
RNN 的全称是 Recurrent Neural Network,循环神经网络。
它的核心思想是:
按顺序一个 token 一个 token 地读取,并把前面读到的信息保存在隐藏状态中。
RNN 的计算过程
假设输入句子是:
工人 没有 佩戴 安全帽RNN 会这样处理:
工人 -> 隐藏状态 h1 没有 -> 结合 h1 得到 h2 佩戴 -> 结合 h2 得到 h3 安全帽 -> 结合 h3 得到 h4可以画成:
工人 ──> h1 ──> 没有 ──> h2 ──> 佩戴 ──> h3 ──> 安全帽 ─> h4每一步都会接收两个信息:
- 当前输入 token
- 上一步传下来的隐藏状态
因此,RNN 理论上可以把前面的信息一直传下去。
RNN 相比 N-gram 的进步
| 方法 | 上下文能力 | 是否学习语义表示 |
|---|---|---|
| N-gram | 固定窗口 | 弱 |
| RNN | 理论上可以看完整历史 | 强 |
RNN 的确比 N-gram 更像人在读句子。
人也是从左到右读,边读边记住前面的内容。
四、RNN 的两个核心问题
RNN 很自然,但它有两个非常关键的问题。
1. 长距离依赖问题
RNN 的信息是一步一步传递的。
如果两个词距离很远,信息需要经过很多步才能传到后面。
例如:
那个昨天进入施工现场并且因为天气炎热一直在休息区附近工作的工人没有佩戴安全帽“工人”和“安全帽”之间隔了很多词。
RNN 要想让“安全帽”理解它和“工人”的关系,就需要把“工人”的信息从前面一步步传到后面。
问题是,传得越远,信息越容易变弱。
这就是长距离依赖问题。
2. 无法高效并行训练
RNN 必须按顺序计算。
因为第 2 步依赖第 1 步,第 3 步依赖第 2 步。
h1 -> h2 -> h3 -> h4 -> h5这意味着:
- 不能同时计算所有 token
- 序列越长,训练越慢
- 很难充分利用 GPU 的并行能力
这对大规模语料训练非常致命。
大语言模型需要处理海量文本,如果模型只能一个词一个词慢慢读,训练效率会非常低。
五、LSTM 和 GRU 改进了什么?
为了解决 RNN 容易遗忘的问题,LSTM 和 GRU 被提出。
它们的核心思想是:
加入门控机制,让模型自己决定哪些信息应该保留,哪些信息应该遗忘。
LSTM 的直观理解
LSTM 像一个带记忆管理功能的 RNN。
它会问三个问题:
- 哪些旧信息要忘掉?
- 哪些新信息要写入?
- 当前要输出哪些信息?
因此,LSTM 比普通 RNN 更擅长保留长期信息。
GRU 的直观理解
GRU 可以看成更简洁的 LSTM。
它参数更少,计算更快,但同样通过门控机制缓解遗忘问题。
LSTM / GRU 的局限
虽然 LSTM 和 GRU 改进了 RNN,但它们仍然没有解决根本问题:
| 问题 | 是否解决 |
|---|---|
| 长距离依赖 | 缓解了,但没有彻底解决 |
| 顺序计算 | 没解决 |
| 并行训练 | 没解决 |
| 直接建模任意两个 token 的关系 | 不够直接 |
LSTM 和 GRU 仍然是一步步读句子。
只要是一步步读,就很难完全摆脱顺序计算带来的效率限制。
六、Transformer 的关键变化:不再一步步读
Transformer 的思路非常大胆:
不再按顺序一个词一个词传递信息,而是让所有 token 同时互相交流。
比如句子:
工人 没有 佩戴 安全帽Transformer 会让每个 token 都直接看见其他 token:
工人 <-> 没有 工人 <-> 佩戴 工人 <-> 安全帽 没有 <-> 佩戴 没有 <-> 安全帽 佩戴 <-> 安全帽可以用一张图理解:
工人 / | \ 没有 | 安全帽 \ | / 佩戴这就是自注意力机制的基本思想:
每个 token 都可以直接关注其他 token,并根据重要程度汇总信息。
七、Transformer 解决了什么问题?
1. 更好地处理长距离依赖
在 RNN 中,远距离信息要一步步传递。
在 Transformer 中,任意两个 token 可以直接建立联系。
例如“工人”和“安全帽”距离很远时,Transformer 仍然可以让“安全帽”直接关注“工人”。
这大大降低了长距离信息丢失的风险。
2. 更适合并行训练
Transformer 不需要像 RNN 那样按时间步顺序计算隐藏状态。
在训练阶段,一句话里的 token 可以同时参与计算。
这非常适合 GPU。
也正是因为这一点,Transformer 才能支撑后来的大规模预训练模型。
3. 上下文建模能力更强
Transformer 的每一层都会重新计算 token 之间的关系。
第一层可能关注局部词语关系。
中间层可能关注句法结构。
高层可能关注语义和任务意图。
这使得 Transformer 能逐层提炼上下文表示。
八、图表总结:几种方法的对比
| 方法 | 核心思想 | 优点 | 缺点 |
|---|---|---|---|
| N-gram | 根据固定窗口统计概率 | 简单、容易实现 | 上下文短、数据稀疏 |
| RNN | 按顺序读取并传递隐藏状态 | 能处理变长序列 | 长距离依赖弱、训练慢 |
| LSTM / GRU | 加入门控机制控制记忆 | 缓解遗忘问题 | 仍然顺序计算 |
| Transformer | token 之间直接注意力交互 | 长距离建模强、并行训练快 | 结构更复杂、计算量较大 |
再用一句话对比:
N-gram:看前几个词 RNN:一个词一个词读 LSTM:带记忆管理地读 Transformer:让所有词互相交流九、Transformer 的出现意味着什么?
Transformer 的出现,不只是换了一个模型结构,而是改变了序列建模的方式。
以前的模型更像“顺序阅读”:
词1 -> 词2 -> 词3 -> 词4Transformer 更像“全局讨论”:
每个词都能和其他词交流,然后更新自己的理解这使它天然适合处理复杂上下文。
大语言模型之所以能完成问答、写作、翻译、代码生成、推理等任务,基础就在于它可以从大量上下文中捕捉复杂关系。
十、本文小结
本文主要回答了一个问题:为什么需要 Transformer?
核心结论如下:
- N-gram 只能看固定窗口,难以理解长上下文。
- RNN 可以处理序列,但长距离依赖和并行训练能力较弱。
- LSTM / GRU 通过门控机制缓解遗忘,但仍然无法摆脱顺序计算。
- Transformer 使用自注意力机制,让 token 之间可以直接建立联系。
- Transformer 更适合长文本建模和大规模并行训练。