第 14 章 序列模型
序列模型用来处理有先后顺序的数据,例如文本、语音、时间序列、用户点击记录。和普通表格数据不同,序列中的每个位置不是孤立的,前后文会影响当前含义。
例如“我喜欢这部电影”和“我不喜欢这部电影”只差一个“不”,但整个句子的含义完全不同。序列模型需要在当前位置的表示中利用前后文信息。
14.1 什么是序列数据
序列数据可以看成一串按顺序排列的元素:
x1, x2, x3, ..., xt其中每个元素可以是一个词、一个语音片段、一个时间点的数值,也可以是一次用户行为。
常见任务包括:
| 任务形式 | 例子 |
|---|---|
| 一个序列对应一个结果 | 情感分类、用户是否流失 |
| 一个序列对应另一个序列 | 机器翻译、摘要生成 |
| 每个位置都要预测 | 词性标注、序列标注 |
| 根据历史预测未来 | 股票趋势、销量预测 |
序列模型关心的不只是“有哪些元素”,还关心“这些元素按什么顺序出现”。
14.2 RNN 的基本思想
RNN 是循环神经网络(Recurrent Neural Network)。它按时间步处理序列,每读入一个新元素,就根据当前输入和上一时刻的隐藏状态计算新的隐藏状态。
可以把它理解成:
读入 x1 -> 得到记忆 h1
读入 x2 -> 结合 h1 得到记忆 h2
读入 x3 -> 结合 h2 得到记忆 h3这里的
RNN 和普通全连接网络的区别在于:普通网络只看当前输入,RNN 会同时看当前输入和上一步留下的隐藏状态。
可以简写为:
这个式子表示隐藏状态由当前输入和上一时刻隐藏状态共同决定。
14.3 参数共享
RNN 处理不同时间步时,使用的是同一套参数。
也就是说,读第一个词、第二个词、第三个词时,模型使用的是同一种处理规则。这样做有两个好处:
- 序列长一点或短一点都能处理。
- 参数数量不会随着序列长度变长而无限增加。
参数共享使同一递推规则可以作用于不同长度的序列。
14.4 RNN 的问题
普通 RNN 的问题是长期记忆能力弱。
如果一句话很短,RNN 通常还能把前面的信息传到后面。但如果序列很长,早期信息要经过很多次传递,容易被后面的信息覆盖。
训练时还会出现两个典型问题:
| 问题 | 含义 | 结果 |
|---|---|---|
| 梯度消失 | 早期信息传不回来 | 学不到长期依赖 |
| 梯度爆炸 | 梯度变得过大 | 训练不稳定 |
所以普通 RNN 可以帮助理解序列建模,但实际面对长文本、长时间序列时,往往不够用。
14.5 LSTM 的基本思想
LSTM 是长短期记忆网络(Long Short-Term Memory),是为了解决普通 RNN 长期记忆弱的问题提出的。
LSTM 在隐藏状态之外引入细胞状态,并用门控机制控制信息的保留、写入和输出。模型每一步都要决定三件事:
- 旧信息哪些要忘掉。
- 新信息哪些要写入。
- 当前要输出哪些信息。
这三件事分别对应 LSTM 的三个门:
| 门 | 作用 |
|---|---|
| 遗忘门 | 控制旧记忆保留多少 |
| 输入门 | 控制新信息写入多少 |
| 输出门 | 控制当前输出使用多少记忆 |
门的取值通常在 0 到 1 之间。接近 1 表示更多通过,接近 0 表示更多抑制。
14.6 LSTM 为什么更适合长序列
普通 RNN 每一步都直接更新隐藏状态,旧信息容易被覆盖。
LSTM 多了一个细胞状态,可以让重要信息沿着序列传得更远。比如在一句很长的话里,开头出现了主语,后面才出现谓语,LSTM 更有机会把这个主语信息保留下来。
二者对比如下:
| 模型 | 记忆方式 | 特点 |
|---|---|---|
| RNN | 只靠隐藏状态传递信息 | 简单,但长期依赖弱 |
| LSTM | 用门控控制记忆保留和更新 | 更适合长序列 |
LSTM 不是万能的。序列特别长时,它仍然要一步一步处理,计算不能很好并行。
14.7 GRU
GRU 是门控循环单元(Gated Recurrent Unit),可以看成 LSTM 的简化版本。
它也使用门控机制,但结构更简单,参数更少,训练速度通常更快。很多任务中,GRU 和 LSTM 的效果接近。
三类循环结构的关系如下:
| 模型 | 适合理解为 |
|---|---|
| RNN | 最基础的序列记忆模型 |
| LSTM | 加强长期记忆的 RNN |
| GRU | 简化版 LSTM |
学习顺序上,可以先理解 RNN 的递推结构,再看 LSTM 和 GRU 如何通过门控缓解长期依赖问题。
14.8 Transformer 和序列模型
Transformer 也是处理序列的模型,但它不再像 RNN 那样一步一步递推。
RNN、LSTM 读序列的方式更像:
从左到右,一个接一个读Transformer 的方式更像:
序列中每个位置都可以直接看其他位置这靠的是注意力机制。注意力机制可以让模型判断:当前词应该重点关注句子里的哪些词。
因此 Transformer 有两个重要优势:
- 更容易捕捉长距离依赖。
- 更适合并行计算。
这也是现在自然语言处理(Natural Language Processing, NLP)和大语言模型大量使用 Transformer 的原因。
14.9 序列模型的比较
几种序列模型的主要区别如下:
| 模型 | 解决什么问题 |
|---|---|
| RNN | 让模型能按顺序读数据 |
| LSTM | 缓解 RNN 长期记忆弱的问题 |
| GRU | 用更简单的门控结构处理序列 |
| Transformer | 用注意力机制直接建模位置之间的关系 |