循环神经网络

Recurrent Neural Network

循环神经网络(RNN)是一类专门用于处理序列数据神经网络。与一次只处理一个固定输入的前馈神经网络(如CNN)不同,RNN通过其内部的循环结构,能够将历史信息编码并传递到当前时间步,从而有效捕捉数据中的时间依赖关系

核心思想:记忆与循环

人类在理解一句话时,会根据前面听到的词来理解当前词的含义。RNN正是模仿了这种行为。它的核心思想是,在每个时间步,网络不仅接收当前的输入,还接收来自上一个时间步的隐藏状态 (Hidden State)。这个隐藏状态可以被看作是网络对过去所有信息的“记忆”或“摘要”。

这种将输出再次作为输入的循环结构,使得RNN能够处理任意长度的序列。

结构与工作原理

一个RNN单元可以被看作是一个“模块”,在处理序列时,这个模块被反复使用。

ht=f(Whhht1+Wxhxt+bh)yt=g(Whyht+by)

其中,Wb 是网络需要学习的权重和偏置,fg激活函数

挑战:长程依赖问题 (Long-Term Dependencies)

理论上,RNN可以处理任意长度的序列。但在实践中,标准RNN(也称“香草RNN”)难以学习到序列中相距较远元素之间的依赖关系。这主要是由梯度消失/爆炸 (Vanishing/Exploding Gradients) 问题引起的。

在通过时间反向传播 (BPTT) 训练RNN时,梯度需要在时间步之间连乘。如果梯度值持续小于1,经过多次连乘后会迅速趋近于零(梯度消失),导致网络无法学习到早期时间步的信息;反之,如果梯度值持续大于1,则会指数级增长导致数值不稳定(梯度爆炸)。

解决方案:门控RNN (Gated RNNs)

为了解决长程依赖问题,研究者们设计了更复杂的RNN单元,引入了“门控机制”来有选择地让信息通过,从而更好地控制记忆的更新、遗忘和输出。

应用领域

RNN及其变体在许多序列建模任务中都取得了巨大成功:

局限性

尽管非常强大,但RNN及其变体存在一个固有瓶颈:计算的序列依赖性。当前时间步的计算必须等待前一个时间步完成,这使得RNN难以进行大规模的并行计算。这一局限性促使了Transformer等完全基于注意力机制的并行化架构的诞生,并最终在许多领域超越了RNN。


深度学习