循环神经网络 (RNN) 是一种旨在通过维护先前输入的“记忆”来处理顺序数据的神经网络。 与处理每个输入独立的标准前馈网络不同,RNN 使用循环将信息从序列中的一个步骤传递到下一步。 这使得它们特别适用于数据顺序重要的任务,例如时间序列分析、自然语言处理 (NLP) 或语音识别。 例如,在预测句子中的下一个单词时,RNN 会考虑之前的单词,并在每个步骤更新内部“隐藏状态”以捕获上下文。
RNN 通常应用于涉及不同长度序列的任务。 例如,在机器翻译中,RNN 可以一次处理一个输入句子,将其编码为隐藏状态,然后逐步生成翻译后的句子。 然而,由于“梯度消失”问题,传统 RNN 在处理长期依赖关系方面存在困难,其中梯度(用于在训练期间更新网络)变得太小而无法影响序列的早期部分。 为了解决这个问题,开发了长短期记忆 (LSTM) 网络和门控循环单元 (GRU) 等变体。 LSTM 使用门来控制信息的流动,使它们能够在较长的序列中保留重要的上下文。 GRU 通过使用较少的门简化了这个概念,从而平衡了效率和性能。
对于开发人员来说,实现 RNN 通常涉及 TensorFlow 或 PyTorch 等框架,它们提供预构建的层。 例如,PyTorch 中的一个简单 RNN 层可以定义为 torch.nn.RNN(input_size, hidden_size, num_layers)
,其中 input_size
是每个输入元素(例如,单词嵌入)的维度,hidden_size
定义了存储容量。 训练需要逐步处理序列,通常使用时间反向传播 (BPTT),这是专为序列定制的反向传播的变体。 实际考虑因素包括处理可变长度序列(通过填充或掩码)和管理计算效率,因为 RNN 对于非常长的序列来说可能很慢。 尽管基于 Transformer 的模型兴起,但 RNN 对于轻量级任务或顺序处理本质上很直观的场景仍然具有相关性,例如实时传感器数据分析。