循环神经网络(Recurrent Neural Network, RNN)是一类专门处理序列数据的神经网络。与传统的前馈神经网络(Feedforward Neural Network)不同,RNN通过引入循环结构,使其能够记住之前的输入信息,从而在处理时间序列或序列数据时具有“记忆”能力。RNN特别适合处理以下场景:
传统的前馈神经网络假设输入数据是独立同分布的,无法捕捉数据之间的时序依赖关系。例如,在句子“我爱学习人工智能”中,“人工智能”依赖于前文“学习”的语义。RNN通过在时间步之间共享权重,解决了序列数据的建模问题。
RNN的核心是一个循环单元,它在每个时间步(time step)接收当前输入 x t x_t xt 和上一时间步的隐藏状态 h t − 1 h_{t-1} ht−1,并输出当前时间步的隐藏状态 h t h_t ht。其结构可以用以下公式描述:
h t = σ ( W x h x t + W h h h t − 1 + b h ) h_t = \sigma(W_{xh}x_t + W_{hh}h_{t-1} + b_h) ht=σ(Wxhxt+Whhht−1+bh)
o t = W h o h t + b o o_t = W_{ho}h_t + b_o ot=Whoht+bo
其中:
RNN的循环结构使得权重 W h h W_{hh} Whh 在所有时间步中共享,这既是其强大之处(捕捉时序依赖),也是其局限性(梯度消失/爆炸)。
为了理解RNN的计算过程,可以将其按时间步展开,如下图所示(文字描述):
展开后,RNN可以看作一个深层网络,其中每一层对应一个时间步。这种展开形式便于理解RNN的训练过程(反向传播)。
RNN的前向传播过程可以总结为: