RNN让计算机学会"记忆"

系列文章见: 《回忆AI时代-从图灵机到人工智能》

什么是RNN

RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络,它最大的特点就是具有记忆能力,能够利用之前的信息来理解当前的信息。

譬如,我们让计算机理解这句话今天天气很好,对于人来说我们按顺序阅读今天 → 天气 → 很好当看到”很好”时,我们的大脑已经记住了前面的”今天”和”天气”,因此能够理解整句话,如果只看到最后两个字很好你并不知道到底是什么很好。

因此语言的理解依赖上下文,而上下文本质上就是一种”记忆”,RNN正是为了解决这个问题而设计的。

RNN工作流程

RNN在普通神经网络的基础上,多增加了一份隐藏状态,它可以理解为:

1
2
3
4
5
6
7
          上一次记忆


输入 → RNN单元 → 新记忆


输出

每处理一个词,RNN都会:

  • 接收当前输入
  • 读取上一时刻保存的记忆
  • 更新新的记忆
  • 输出结果

然后,把新的记忆继续传递给下一步。

虽然RNN引入了记忆机制,但它并不完美,例如,一篇几千字的文章:

1
2
3
4
5
第一句话
...
(中间几千个词)
...
最后一句

RNN在处理最后一句时,往往已经忘记了第一句话的内容,这就是长期依赖问题。此外,由于 RNN 需要按时间顺序一步一步计算,还存在:

  • 梯度消失或梯度爆炸,导致训练困难;
  • 无法充分并行计算,训练速度较慢。

为了克服这些问题,后来出现了带门控机制的LSTM和GRU。

什么是LSTM

LSTM(Long Short-Term Memory,长短期记忆网络)是一种专门处理序列数据的循环神经网络RNN架构,旨在缓解传统RNN在长序列训练中出现的梯度消失问题。

它自1997年提出以来,长期是自然语言处理、语音识别、时间序列预测等领域最重要的深度学习模型之一,并且至今仍在许多资源受限或时间序列场景中广泛使用。

为什么需要LSTM

譬如,用户问模型这样一个问题我出生在北京,后来去了上海工作,现在别人问我来自哪里?,模型在回复时需要记住最开始的北京,普通的RNN网络,经过几十步计算后,北京的信息会变得很弱甚至丢失:

1
2
3
4
5
6
7
8
北京的信息
████████
↓↓↓↓↓↓
███
↓↓↓↓

↓↓
几乎没有了

而LSTM却一直会保存它。 因为和RNN相比LSTM的创新是引入了一个细胞状态(cell state),如下:

1
2
3
4
5
6
7
8
9
10
11
           h(t-1)


┌────────────┐
C(t-1) │ │
───────►│ LSTM │──────► C(t)
│ │
└────────────┘


h(t)

其中:

  • C(Cell State):长期记忆
  • h(Hidden State):当前输出

它可以跨越多个时间步携带信息,同时通过多个门(gate)控制信息流动:

  • 遗忘门(Forget Gate):决定哪些历史信息应该保留或丢弃。
  • 输入门(Input Gate):决定哪些新的信息写入记忆。
  • 输出门(Output Gate):决定当前隐藏状态输出哪些信息。

RNN与LSTM对比

特性 RNN LSTM
是否有长期记忆
是否有门控机制 ✅(遗忘门、输入门、输出门)
是否容易梯度消失 大幅缓解
能处理长序列 较差 较好
计算复杂度 较低 较高
应用 简单序列 长文本、语音、时间序列预测等

什么是GRU

GRU(Gated Recurrent Unit,门控循环单元)就是一种更简单、更轻量的LSTM

RNN、LSTM和GRU三个对比:

特性 RNN LSTM GRU
长期记忆
门数量 0 3 2
Cell State
Hidden State
参数数量 最少 最多 中等
训练速度 最快 最慢 较快
长距离依赖 很好 很好