1. RNN简介
1.1 什么是RNN?
循环神经网络(Recurrent Neural Network, RNN)是一类专门处理序列数据的神经网络。与传统的前馈神经网络(Feedforward Neural Network)不同,RNN通过引入循环结构,使其能够记住之前的输入信息,从而在处理时间序列或序列数据时具有“记忆”能力。RNN特别适合处理以下场景:
- 自然语言处理(NLP):如机器翻译、文本生成、情感分析。
- 时间序列分析:如股票价格预测、语音信号处理。
- 视频序列分析:如动作识别。
1.2 为什么需要RNN?
传统的前馈神经网络假设输入数据是独立同分布的,无法捕捉数据之间的时序依赖关系。例如,在句子“我爱学习人工智能”中,“人工智能”依赖于前文“学习”的语义。RNN通过在时间步之间共享权重,解决了序列数据的建模问题。
2. RNN的核心结构与原理
2.1 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
其中:
- x t x_t xt:时间步 t t t 的输入向量。
- h t h_t ht:时间步 t t t 的隐藏状态(包含“记忆”)。
- h t − 1 h_{t-1} ht−1:上一时间步的隐藏状态。
- W x h W_{xh} Wxh、 W h h W_{hh} Whh、 W h o W_{ho} Who:权重矩阵,分别对应输入到隐藏、隐藏到隐藏、隐藏到输出的权重。
- b h b_h bh、 b o b_o bo:偏置项。
- σ \sigma σ:激活函数,通常是tanh或ReLU,用于引入非线性。
- o t o_t ot:时间步 t t t 的输出(可选,视任务而定)。
RNN的循环结构使得权重 W h h W_{hh} Whh 在所有时间步中共享,这既是其强大之处(捕捉时序依赖),也是其局限性(梯度消失/爆炸)。
2.2 RNN的展开
为了理解RNN的计算过程,可以将其按时间步展开,如下图所示(文字描述):
- 时间步 t = 1 t=1 t=1:输入 x 1 x_1 x1,初始隐藏状态 h 0 h_0 h0(通常初始化为零向量),计算 h 1 h_1 h1。
- 时间步 t = 2 t=2 t=2:输入 x 2 x_2 x2,结合 h 1 h_1 h1,计算 h 2 h_2 h2。
- 以此类推,直到时间步 t = T t=T t=T。
展开后,RNN可以看作一个深层网络,其中每一层对应一个时间步。这种展开形式便于理解RNN的训练过程(反向传播)。
2.3 前向传播
RNN的前向传播过程可以总结为:
- 对于每个时间步 t t t,根据输入 x t x_t xt 和上一时间步的隐藏状态 h t − 1 h_{t-1} ht−1,计算当前隐藏状态 h t h_t ht。
- (可选)根据任务需求,基于 h t h_t ht 计算输出 o