Skip to content

循环神经网络 RNN

循环神经网络 (RNN)

核心结构:隐状态 → 输入 → 更新 → 输出 → 重复

1. 数学表示

对时间步 \(t\)\(\mathbf{h}_t = \sigma(\mathbf{W}_h\mathbf{h}_{t-1} + \mathbf{W}_x\mathbf{x}_t + \mathbf{b})\)

  • \(\mathbf{h}_t\): 当前隐状态
  • \(\mathbf{x}_t\): 当前输入
  • \(\mathbf{W}_h, \mathbf{W}_x\): 权重矩阵
  • \(\mathbf{b}\): 偏置
  • \(\sigma(\cdot)\): 激活函数

2. 网络结构

组件 公式
输入 \(\mathbf{x}_t \in \mathbb{R}^d\)
隐状态更新 \(\mathbf{h}_t = \sigma(\mathbf{W}_h\mathbf{h}_{t-1} + \mathbf{W}_x\mathbf{x}_t + \mathbf{b})\)
输出 \(\mathbf{y}_t = \mathbf{W}_o\mathbf{h}_t + \mathbf{b}_o\)

3. RNN 训练方法

3.1 反向传播通过时间 (BPTT)

核心思想:展开 RNN 为等效的前馈网络,然后应用标准反向传播

数学表示: - 损失函数:\(L = \sum_{t=1}^T L_t(\mathbf{y}_t, \mathbf{\hat{y}}_t)\) - 梯度计算:\(\frac{\partial L}{\partial \mathbf{W}} = \sum_{t=1}^T \frac{\partial L_t}{\partial \mathbf{W}}\)

3.2 截断 BPTT

目的:解决长序列梯度消失/爆炸问题

方法:限制反向传播的时间步数 \(k\) \(\(\frac{\partial L}{\partial \mathbf{W}} \approx \sum_{t=T-k+1}^T \frac{\partial L_t}{\partial \mathbf{W}}\)\)

3.3 优化技巧

技巧 描述 公式/方法
梯度裁剪 防止梯度爆炸 \(\mathbf{g} \leftarrow \min(1, \frac{\theta}{\|\|\mathbf{g}\|\|}) \mathbf{g}\)
长短期记忆 (LSTM) 改进的 RNN 结构 使用门控机制
梯度累积 处理超长序列 多批次累积梯度后更新

3.4 正则化方法

  • Dropout:适用于非循环连接
  • 循环 Dropout:在时间步之间保持一致的 dropout mask
  • L2 正则化:权重衰减