GRU 模型 - 原理图解
1 课程概览
本课讲解 GRU(门控循环单元)模型的原理。GRU 是为了解决 LSTM 内部结构复杂的问题,将 LSTM 的 4 个神经网络压缩成 3 个。GRU 有两个门:重置门和更新门,没有细胞状态。
2 核心概念与定义
- GRU:Gate Recurrent Unit,门控循环单元结构。
- 重置门(Reset Gate):决定对上部要使用多少。
- 更新门(Update Gate):决定本次内部要使用多少。
- 门控循环单元:传统 RNN 的变体。
3 模型与算法详解
GRU 简介
门控循环单元结构,简化版的 LSTM。
- 全称:Gate Recurrent Unit
- 作用:解决 LSTM 内部结构复杂的问题
- 特点:将 LSTM 的 4 个神经网络压缩成 3 个
GRU vs LSTM
| 特性 | LSTM | GRU |
|---|---|---|
| 神经网络数量 | 4 个 | 3 个 |
| 门 | 遗忘门、输入门、输出门 | 重置门、更新门 |
| 细胞状态 | 有 | 无 |
| 结构 | 复杂 | 简单 |
GRU 的门
两个门:重置门和更新门。
| 门 | 作用 |
|---|---|
| 重置门(Reset Gate) | 决定对上部要使用多少 |
| 更新门(Update Gate) | 决定本次内部要使用多少 |
更新门的作用
更新门决定了保留多少新的候选记忆。
- 更新门 $Z_t$ 越大:越保留新的候选记忆
- 更新门 $Z_t$ 越小:越保留之前旧的记忆
GRU 的核心设计思路
在 LSTM 的基础上对门做合并。
- LSTM:遗忘门、输入门、输出门
- GRU:重置门、更新门(合并了遗忘门和输入门)
- GRU 没有细胞状态
4 数学原理与推导
重置门
$$r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r)$$
更新门
$$z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z)$$
候选记忆
$$\tilde{h}t = \tanh(W \cdot [r_t \cdot h{t-1}, x_t] + b)$$
最终记忆
$$h_t = (1 - z_t) \cdot h_{t-1} + z_t \cdot \tilde{h}_t$$
其中:
- $z_t$ 是更新门
- $1 - z_t$ 表示保留之前的信息
- $z_t$ 表示保留新的候选记忆
更新门的含义
| 更新门 $z_t$ | 含义 |
|---|---|
| $z_t = 0$ | 不更新,完全用以前的 |
| $z_t = 1$ | 完全更新,之前啥都不要 |
5 代码示例
import torch
import torch.nn as nn
# GRU 模型(与 RNN 类似)
gru = nn.GRU(
input_size=5,
hidden_size=6,
num_layers=1,
batch_first=True,
bidirectional=False
)
# 输入数据
input_data = torch.randn(1, 3, 5)
# 初始隐藏状态(GRU 没有细胞状态)
h0 = torch.zeros(1, 1, 6)
# 前向传播
output, hn = gru(input_data, h0)
print(f"输入: {input_data.shape}")
print(f"输出: {output.shape}")
print(f"隐藏状态: {hn.shape}")
6 重难点与易错提醒
- ❗重点:GRU 是为了解决 LSTM 内部结构复杂的问题。
- ❗重点:GRU 将 LSTM 的 4 个神经网络压缩成 3 个。
- ❗重点:GRU 有两个门:重置门和更新门。
- ❗重点:GRU 没有细胞状态。
- 💡技巧:更新门 $z_t$ 越大,越保留新的候选记忆。
7 课堂问答精选
Q1:GRU 是什么?
A:GRU(Gate Recurrent Unit)是门控循环单元结构,是传统 RNN 的变体,为了解决 LSTM 内部结构复杂的问题,将 LSTM 的 4 个神经网络压缩成 3 个。
Q2:GRU 和 LSTM 有什么区别?
A:LSTM 有 4 个神经网络(遗忘门、输入门、输出门、细胞状态),GRU 有 3 个(重置门、更新门),GRU 没有细胞状态,结构更简单。
Q3:更新门的作用是什么?
A:更新门 $z_t$ 决定了保留多少新的候选记忆。$z_t$ 越大,越保留新的候选记忆;$z_t$ 越小,越保留之前旧的记忆。
8 本课小结
- GRU 是门控循环单元结构,简化版的 LSTM。
- 将 LSTM 的 4 个神经网络压缩成 3 个。
- 有两个门:重置门和更新门。
- 没有细胞状态。
9 延伸思考
- GRU 的代码如何实现?
- GRU 的优缺点是什么?