循环神经网络 (RNN) 是一种设计用于处理序列数据的神经网络,它通过维护一个隐藏状态来捕获序列中先前步骤的信息。与独立处理输入的传统前馈神经网络不同,RNN 使用循环将信息从一步传递到下一步。 这使得它们非常适合时间序列分析、自然语言处理或语音识别等任务,在这些任务中,输入的顺序很重要。 例如,在文本处理中,RNN 可以逐字分析一个句子,使用前面单词的上下文来解释后面的单词。
RNN 的工作方式是迭代序列中的每个元素,并在每个步骤更新隐藏状态向量。 在每个时间步,网络接收两个输入:当前数据点(例如,句子中的一个词)和上一步的隐藏状态。 这些输入使用权重和激活函数(如 tanh 或 ReLU)组合以产生新的隐藏状态和可选输出。 关键特征是同一组权重在每个步骤重复使用,允许网络推广到不同长度的序列。 例如,在预测句子中的下一个词时,隐藏状态可能会跟踪语法结构或主题上下文。 然而,由于梯度消失问题,基本 RNN 在处理长期依赖性方面存在困难,其中梯度在反向传播期间呈指数收缩,使得难以学习远处步骤之间的关系。
为了解决这些限制,开发了长短期记忆 (LSTM) 和门控循环单元 (GRU) 网络等变体。 LSTM 引入了调节信息流的门,有选择地记住或忘记过去的状态。 GRU 通过更少的门简化了这一点,同时保留了类似的好处。 这些架构广泛应用于机器翻译(例如,Google 翻译)或语音转文本系统等应用中。 对于开发人员来说,TensorFlow 或 PyTorch 等框架提供了内置的 RNN 层。 例如,在 Keras 中,可以使用 SimpleRNN
、LSTM
或 GRU
层实现简单的 RNN。 尽管 Transformer 模型兴起,但 RNN 在需要轻量级顺序处理或训练数据有限的任务中仍然具有重要意义。 它们处理可变长度输入和建模时间动态的能力使它们成为许多场景中的实用工具。