什么是 循环神经网络?
循环神经网络(RNN,Recurrent Neural Network)是一类按顺序处理数据的神经网络,在每一步把共享参数应用于当前输入与前一隐状态,并产生新的状态及可选输出。
快速了解
| 创建时间 | 1986 年由 David Rumelhart、Geoffrey Hinton 和 Ronald Williams 提出 |
|---|---|
| 规范文档 | 官方规范 |
工作原理
状态产生顺序敏感计算
输入顺序变化会改变整条 Hidden State 链。Causal RNN 只消费过去信息,可在线输出;Bidirectional RNN 同时使用两个方向,因此需要拿到完整片段。Sequence-to-One、Sequence-to-Sequence 与逐步输出的 Head 在 Loss 施加位置上不同,Padding Mask 与序列边界都属于模型契约。
BPTT 暴露训练边界
Backpropagation Through Time 会展开循环,并沿重复的状态转移累积导数。长链 Jacobian 连乘可能衰减或放大,引发 Vanishing Gradient 或 Exploding Gradient。Gradient Clipping 能控制爆炸,却无法恢复已经消失的信号;Truncated BPTT 降低内存和更新延迟,也会限制 Credit Assignment 的跨度。
LSTM 与 GRU 是缓解机制,不是彻底解决
LSTM 增加 Cell State 以及 Input、Forget、Output Gate,GRU 则把门控合并为更紧凑的状态更新。它们通常比 Vanilla RNN 更容易保留长跨度信号,但不能保证任意长度的信息都被记住。Initialization、Normalization、截断、优化器、数据与状态宽度仍会影响结果。
状态生命周期决定生产正确性
必须在 Entity 或 Session 边界重置状态,只在身份和顺序契约明确时延续状态,并阻止未来信息进入因果评测。比较 RNN、Temporal CNN、Transformer 和 State Space Model 时,应同时测量质量、上下文长度、流式延迟、内存、吞吐、事件缺失或乱序,以及间断后的恢复行为。
主要特点
- 在不同序列位置复用同一组状态转移参数
- 维护固定宽度隐状态来摘要先前输入
- 支持逐事件执行的在线因果推理
- 使用 BPTT 或 Truncated BPTT 训练循环转移
- 可能出现梯度消失、梯度爆炸、状态陈旧或跨会话污染
- 包含 Vanilla、Bidirectional、LSTM、GRU 与 Stacked 等变体
常见用途
- 使用有界逐步状态进行传感器流或音频流分类
- 观测严格有序且要求低延迟的在线预测
- 紧凑循环模型已满足质量目标的序列标注
- 受内存与 Batch Size 约束的端侧工作负载
- 具有显式重置与断流处理的有状态异常检测
示例
Loading code...常见问题
RNN 的隐状态保存了什么?
它是前一状态与当前输入的学习型压缩函数,不是逐字保存的历史记录,也没有保证的记忆长度。哪些信息能留下,取决于状态转移动力学、状态宽度、目标函数、训练序列长度、截断窗口和数据。
RNN、LSTM 和 GRU 有什么区别?
Vanilla RNN 使用简单循环状态更新;LSTM 增加独立 Cell State 与三个 Gate;GRU 使用更紧凑的门控更新。LSTM 和 GRU 通常更容易保留长跨度信号,但都不会自动解决长上下文推理或所有梯度问题。
什么是截断的随时间反向传播?
Truncated BPTT 会继续向前传递状态,但只在有限窗口内反向传播梯度。它减少 Activation Memory 与更新延迟,使长数据流可训练,同时阻止训练信号跨越截断边界,因此窗口既是资源配置,也是建模假设。
什么时候应该选择 RNN 而不是 Transformer?
当输入逐步到达、状态很小、延迟必须有界,而且所需依赖跨度适合循环建模时,可以考虑 RNN。应通过测量比较:Transformer 提供并行训练与灵活全局上下文,Temporal CNN 或 State Space Model 则可能提供其他延迟和内存权衡。
隐状态错误为什么会造成数据泄漏?
在不同用户、设备、文件或评测样本之间复用状态,会泄漏先前信息并改变预测。Bidirectional Model 还会使用未来上下文,不能按因果流式系统评测。测试应覆盖重置边界、顺序、Mask、序列化、断流恢复,以及训练与服务一致性。