RNN 模型简介
1 课程概览
本课介绍 RNN(Recurrent Neural Network,循环神经网络)的基本概念和结构。RNN 是 NLP 核心章节的重中之重,由词嵌入层、循环网络层、输出层组成。本课回顾深度学习中的 12 个参数(3×4=12),讲解循环网络层的循环特性。
2 核心概念与定义
- RNN(Recurrent Neural Network,循环神经网络):处理序列数据的神经网络,上一时刻的隐藏状态作为下一时刻的输入。
- 词嵌入层(Embedding Layer):将文本转换为词向量(数值),因为模型只认识数字。
- 循环网络层(Recurrent Layer):基于上一时刻的隐藏状态和本次输入,得到本次的隐藏状态和输出。
- 输出层(Output Layer):基于隐藏状态生成最终输出。
- 时间步(Time Step):序列中的每个时间点,如 $t-1, t, t+1$。
- 隐藏状态(Hidden State):记录历史信息的状态,如 $H_{t-1}, H_t$。
3 模型与算法详解
RNN 三层结构
| 层 | 作用 |
|---|---|
| 词嵌入层 | 将文本转为词向量(数值) |
| 循环网络层 | 基于上一时刻隐藏状态和本次输入,得到本次隐藏状态和输出 |
| 输出层 | 基于隐藏状态生成最终输出 |
循环特性
上次的输出作为下次的输入,重复做这个事。
- 一个神经元重复处理序列数据
- 不是多个神经元,而是一个神经元循环工作
- 上一时间步的隐藏层输出 → 下一时间步的隐藏层输入
时间步展开
H0 → [RNN] → H1 → [RNN] → H2 → [RNN] → H3 → ...
↑ ↑ ↑
X1 X2 X3
↓ ↓ ↓
Y1 Y2 Y3
- $H_0$:初始隐藏状态
- $X_t$:第 $t$ 时刻的输入
- $H_t$:第 $t$ 时刻的隐藏状态
- $Y_t$:第 $t$ 时刻的输出
12 个参数(3×4=12)
- 每个时间步传入 3 个参数,返回 2 个参数
- 4 个时间步 × 3 个参数 = 12 个参数
4 数学原理与推导
RNN 基本公式
$$H_t = \tanh(W_{hh} H_{t-1} + W_{xh} X_t + b_h)$$
$$Y_t = W_{hy} H_t + b_y$$
其中:
- $X_t$:第 $t$ 时刻的输入
- $H_{t-1}$:上一时刻的隐藏状态
- $H_t$:本次的隐藏状态
- $Y_t$:本次的输出
- $W_{xh}, W_{hh}, W_{hy}$:权重矩阵
- $b_h, b_y$:偏置
- $\tanh$:激活函数
循环展开
$$H_1 = f(H_0, X_1) \rightarrow Y_1$$ $$H_2 = f(H_1, X_2) \rightarrow Y_2$$ $$H_3 = f(H_2, X_3) \rightarrow Y_3$$
5 代码示例
本课为概念介绍,具体代码实现见后续课程。
import torch
import torch.nn as nn
# RNN 基本使用
rnn = nn.RNN(
input_size=100, # 输入维度
hidden_size=20, # 隐藏状态维度
num_layers=1 # 层数
)
# 输入:(seq_len, batch, input_size)
# 输出:(seq_len, batch, hidden_size), (num_layers, batch, hidden_size)
6 重难点与易错提醒
- ❗重点:RNN 三层结构——词嵌入层、循环网络层、输出层。
- ❗重点:循环特性——上次的输出作为下次的输入。
- ⚠️易错:RNN 展开后不是多个神经元,而是一个神经元重复工作。
- 💡深入理解:隐藏状态 $H_t$ 记录历史信息,结合本次输入 $X_t$ 生成新的隐藏状态。
- 💡深入理解:RNN 是 NLP 核心章节,后续将学习 LSTM、GRU 等变体。
7 课堂问答精选
Q1:RNN 的三层结构是什么?
A:①词嵌入层:将文本转为词向量;②循环网络层:基于上一时刻隐藏状态和本次输入,得到本次隐藏状态和输出;③输出层:基于隐藏状态生成最终输出。
Q2:为什么叫"循环"神经网络?
A:因为上一时间步的隐藏层输出作为下一时间步的隐藏层输入,一个神经元重复处理序列数据,形成循环。
Q3:RNN 展开后是多个神经元吗?
A:不是。RNN 展开后看起来像多个神经元,实际上是一个神经元在不同时间步重复工作。
Q4:什么是 12 个参数?
A:每个时间步传入 3 个参数(如 $H_{t-1}, X_t$ 等),返回 2 个参数($H_t, Y_t$)。4 个时间步 × 3 个参数 = 12 个参数。
8 本课小结
- RNN(循环神经网络):处理序列数据的神经网络。
- 三层结构:词嵌入层 → 循环网络层 → 输出层。
- 循环特性:上次的输出作为下次的输入。
- 隐藏状态 $H_t$ 记录历史信息。
- RNN 是 NLP 核心,后续学习 LSTM、GRU 变体。
9 延伸思考
- RNN 如何处理长序列?
- RNN 的梯度消失/梯度爆炸问题如何解决?