1. RNN基础结构与工作原理
循环神经网络(RNN)是处理序列数据的经典架构,其核心创新在于引入了时间维度上的状态传递机制。传统前馈神经网络在处理文本、语音等序列数据时面临三个根本性限制:固定输入长度要求、无法建模时序依赖关系以及参数效率低下。RNN通过循环连接和权重共享巧妙解决了这些问题。
1.1 循环单元的时间展开机制
RNN的核心是一个循环单元,在时间维度上可以被展开为链式结构。假设我们处理一个包含T个时间步的序列,这个循环单元会被复制T次,每个副本对应一个特定时间步。关键设计在于:
- 所有时间步共享相同的权重参数(W_hh, W_xh, W_hy)
- 每个时间步接收当前输入x_t和上一时间步的隐藏状态h_
- 输出h_t会作为下一个时间步的"记忆"输入
这种设计使得网络可以处理任意长度的序列,同时保持参数量恒定。例如在文本处理中,无论句子是10个词还是100个词,都使用同一套权重进行处理。
1.2 数学形式化表达
RNN的前向传播过程可以用以下方程描述:
code复制h_t = σ(W_hh * h_{t-1} + W_xh * x_t + b_h)
y_t = softmax(W_hy * h_t + b_y)
其中σ通常使用tanh激活函数,softmax用于分类任务。参数矩阵的维度为:
- W_hh ∈ R^{d_h×d_h} (隐藏状态到隐藏状态)
- W_xh ∈ R^{d_h×d_x} (输入到隐藏状态)
- W_hy ∈ R^{d_y×d_h} (隐藏状态到输出)
在实际实现中,我们通常将整个序列的输入打包为三维张量(batch_size, seq_len, input_dim),通过扫描操作高效计算所有时间步。
1.3 梯度传播与训练挑战
RNN通过时间反向传播(BPTT)算法进行训练,其本质是将展开的网络视为一个深度前馈网络。但这个过程面临两个主要问题:
梯度消失问题:当误差梯度沿时间步反向传播时,需要连续乘以权重矩阵W_hh的转置。若该矩阵的特征值小于1,梯度会指数级衰减,导致早期时间步的参数几乎得不到更新。这在处理长序列时尤为严重,网络难以学习长期依赖关系。
梯度爆炸问题:相反,若权重矩阵特征值大于1,梯度会指数级增长,导致数值不稳定。实践中通常采用
