正文
循环神经网络(Recurrent Neural Network,RNN)
RNN 是一种专门处理序列数据(如文本、语音、时间序列)的神经网络。
与传统的前馈神经网络不同,RNN **具有“记忆”能力**,能够保存之前步骤的信息。
循环神经网络能够利用前一步的隐藏状态(Hidden State)来影响当前步骤的输出,从而捕捉序列中的时序依赖关系。

RNN:通过循环连接(Recurrent Connection)将上一步的隐藏状态传递到下一步,形成”记忆”。
- 每一步的输入 = 当前数据 + 上一步的隐藏状态。
- 输出不仅依赖当前输入,还依赖之前所有步骤的上下文。
RNN 在每个时间步 t 执行以下计算:
1. 接收当前输入 xₜ 和前一时刻的隐藏状态 hₜ₋₁
2. 计算新的隐藏状态 hₜ = f(Wₕₕ·hₜ₋₁ + Wₓₕ·xₜ + b)
3. 产生输出 yₜ = g(Wₕᵧ·hₜ + c)
其中 f 和 g 通常是激活函数(如 tanh 或 softmax)。
优点:
- 能够处理变长序列
- 理论上可以记住任意长度的历史信息
- 参数共享(同一组权重用于所有时间步)
缺点:
- 梯度消失/爆炸问题(难以学习长期依赖)
- 计算效率较低(无法并行处理时间步,因为每一步的结果都依赖上一步的结果)
长短期记忆网络(Long Short-Term Memory,LSTM)
LSTM是 RNN 的一种改进架构,专门设计来解决标准 RNN 的长期依赖问题。
| 组件 | 功能 |
|---|---|
| 输入门 | 控制新信息的流入 |
| 遗忘门 | 决定丢弃哪些旧信息 |
| 输出门 | 控制输出的信息量 |
| 记忆单元 | 保存长期状态 |
为什么”遗忘”信息会”记住”更长期信息?
- 为了保真,必须降噪。必须要遗忘一些不相关信息。
遗忘门是如何实现的?
在神经网络层中,“门”的物理形态就是:一层普通的线性计算层(全连接层) + 一个 Sigmoid 激活函数。
这里的“门”,本质上就是一个 “过滤器”。 在数学上,这个“阀门调节水流”的过程,就是简单的乘法:
Sigmoid 函数 : 无论你给它输入什么数字(负无穷大到正无穷大),它都会把结果压缩到 0 到 1 之间。

LSTM 如何解决长期依赖问题
- 选择性记忆:遗忘门可以决定保留或丢弃特定信息
- 梯度通路:记忆单元提供了相对直接的梯度传播路径
- 信息保护:记忆内容不会被每个时间步的操作直接修改
LSTM 不足:
无法并行