Course 5:循环神经网络基础
课程简介
RNN、GRU、LSTM 原理与文本处理应用。
一、循环神经网络基础
循环神经网络(RNN)是处理序列数据的核心技术,适用于文本、语音、时间序列等具有时序关系的数据。
1.1 为什么需要RNN
标准神经网络处理序列数据的三个问题:
1. 输入输出长度可变:句子有长有短,全连接网络需要固定尺寸输入
2. 不共享参数:句子开头和结尾的相同单词由不同参数处理
3. 缺乏时序记忆:无法利用上下文信息
1.2 RNN的基本结构
在时间步 $t$,RNN的隐藏状态更新:
$$a^{
$$\hat{y}^{
其中 $a^{
参数共享:$W_{aa}, W_{ax}, W_{ya}$ 在所有时间步共享——这是RNN的关键特性。
1.3 RNN架构变体
Many-to-Many(多对多):机器翻译、语音识别
- $T_x$ 和 $T_y$ 长度可以不同(使用Encoder-Decoder结构)
Many-to-One(多对一):情感分类
- 输入序列,输出单个分类结果
One-to-Many(一对多):图像描述生成
- 输入单个图像,输出描述序列
1.4 语言模型与序列生成
语言模型的任务是计算一个句子的概率 $P(y^{<1>}, y^{<2>}, ..., y^{
RNN语言模型训练:
1. 输入 $x^{<1>} = \vec{0}$,输出 $\hat{y}^{<1>}$ 预测第一个词的概率分布
2. 输入 $x^{<2>} = y^{<1>}$(真实第一个词),输出 $\hat{y}^{<2>}$ 预测第二个词
3. 以此类推
损失函数:交叉熵
$$\mathcal{L} = -\sum_{t} \sum_{i} y_i^{
训练好的语言模型可以用于生成新文本——在每个时间步根据概率分布采样下一个词,并把采样结果作为下步输入。
1.5 梯度消失与梯度爆炸
RNN的梯度在时间维度上通过链式法则传播:
$$\frac{\partial \mathcal{L}}{\partial W} = \sum_{t} \frac{\partial \mathcal{L}}{\partial a^{
其中 $\frac{\partial a^{
如果权重矩阵的特征值小于1,经过T次幂后趋近于0——梯度消失
如果特征值大于1,经过T次幂后爆炸——梯度爆炸
梯度消失在RNN中尤其严重:早期时间步的信息无法传到后期(长期依赖问题)。梯度爆炸相对容易处理(梯度裁剪)。
1.6 GRU(门控循环单元)
GRU(2014年,Cho等人)通过引入门控机制来解决RNN的长期依赖问题。
更新门 $\Gamma_u$:决定何时更新隐藏状态
$$\Gamma_u = \sigma(W_u [a^{
重置门 $\Gamma_r$:决定何时忽略之前隐藏状态
$$\Gamma_r = \sigma(W_r [a^{
候选隐藏状态:
$$\tilde{c}^{
最终更新:
$$c^{
当 $\Gamma_u = 0$ 时,$c^{
GRU通过更新门控制信息流,让梯度可以跨越长时间步传播。
1.7 LSTM(长短期记忆网络)
LSTM(1997年,Hochreiter & Schmidhuber)是比GRU更强大的门控RNN结构,包含三个门:
遗忘门:$f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)$
输入门:$i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)$
输出门:$o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)$
候选记忆:$\tilde{C}t = \tanh(W_C [h{t-1}, x_t] + b_C)$
记忆更新:$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$
隐藏状态:$h_t = o_t \odot \tanh(C_t)$
LSTM的关键是细胞状态 $C_t$,信息通过遗忘门和输入门的控制流经细胞状态。遗忘门控制丢弃多少旧信息,输入门控制添加多少新信息。
LSTM vs GRU:LSTM更强大、更灵活(有独立遗忘门和输入门),GRU更简单、计算更快。在大规模数据上LSTM通常表现更好,在数据量有限时GRU可能更优。
1.8 双向RNN和深层RNN
双向RNN(BRNN):在每个时间步同时使用过去和未来的信息。适合需要完整上下文的任务(如命名实体识别)。
深层RNN(Deep RNN):在时间维度上堆叠多个RNN层。每层在不同时间尺度上学习特征表示。
延伸阅读
- 📺 B 站播放列表:Deep Learning Specialization — 深度学习专项课程
- 📚 更多学习资源,请访问 deeplearning.ai 官网