* 英文名:GRU (Gated Recurrent Unit)
* 中文名:门控循环单元
GRU(门控循环单元) 是深度学习中针对时序数据优化的循环神经网络(RNN)变体,由Hochreiter等人于2014年提出,核心通过门控机制解决传统RNN长序列训练的梯度问题,兼顾性能与计算效率。
* 类型:RNN(循环神经网络)的改进型单元
* 用途:处理序列数据,如时间序列预测、自然语言处理、语音识别等。
• 概念:基于RNN的时序建模逻辑,引入门控结构动态调节信息流动,实现对长短期序列依赖的精准捕捉,是处理时序数据的经典模型之一。
• 原理:
1. 重置门:决定是否忽略历史隐藏状态,控制历史信息的保留程度,公式为 $r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r$ 。
2. 更新门:调节历史隐藏状态与当前候选状态的融合比例,兼具遗忘门与输入门功能,公式为 $z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z$。
3. 候选隐藏状态:结合重置门处理后的历史信息与当前输入生成,公式为 $\tilde{h}_t = \tanh(W_h \cdot [r_t \odot h_{t-1}, x_t] + b_h$。
4. 最终隐藏状态:通过更新门融合历史状态与候选状态,公式为 $h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t$ 。
* $(z_t)$:更新门向量,值在 ([0,1])
* $(x_t)$:当前输入向量
* $(h_{t-1})$:前一隐藏状态
* $(W_z, U_z)$:权重矩阵
* $(b_z)$:偏置
* $(\sigma)$:Sigmoid 激活函数
--------------------------------------------------------------------------------
* $(r_t)$:重置门向量
* 其余符号同上
--------------------------------------------------------------------------------
* $(\tilde{h}_t)$:候选隐藏状态
* $(\odot)$:元素逐位乘(Hadamard 乘积)
* $(\tanh)$:双曲正切激活函数
--------------------------------------------------------------------------------
* $(h_t)$:最终输出隐藏状态
* 核心作用:通过更新门 $(z_t)$ 权衡旧状态与新状态
--------------------------------------------------------------------------------
| 参数名 | 描述 | 值范围 | 默认值 | 建议值 |
|---|---|---|---|---|
| hidden_size | 隐藏层单元数 | 正整数 | 128 | 64~512 |
| num_layers | 网络层数 | 正整数 | 1 | 2~3 |
| dropout | Dropout 概率 | 0~1 | 0 | 0.1~0.3 |
| bidirectional | 双向 GRU | True/False | False | True |
| learning_rate | 学习率 | 0~1 | 0.001 | - |
| batch_first | 输入格式 | True/False | True | - |
1. 输入处理:获取当前输入 $(x_t)$ 和前一隐藏状态 $(h_{t-1})$
2. 计算门控:
---* 更新门 $(z_t)$ → 决定保留多少过去信息
---* 重置门 $(r_t)$ → 决定遗忘多少过去信息
3. 生成候选隐藏状态 $(\tilde{h}_t)$
4. 融合输出:用更新门 $(z_t)$ 加权组合前一状态和候选状态得到 $(h_t)$
特点:GRU 将 LSTM 的“遗忘门 + 输入门 + 输出门”合并成两个门,更简单高效。
• 解决梯度问题:门控机制有效缓解长序列训练中的梯度消失或爆炸,提升模型对长时依赖的捕捉能力。
• 结构简洁高效:相比LSTM省去细胞状态,参数更少,计算开销更低,训练速度更快。
• 适配多场景:在自然语言处理、语音识别、时序预测等领域表现优异,兼具性能与实用性。
• 参数少 → 训练速度快,内存占用低
• 长序列依赖能力强 → 能保留长期信息
• 结构简单 → 比 LSTM 更易实现与调参
• 性能接近 LSTM → 在多数序列任务中表现相当
假设我们用 GRU 预测彩票第六位数,已知历史序列:`236, 366, 599, 688, 122`。预测流程如下:
1. 输入序列编码:把每个数字序列 `[2,3,6]` → 数值向量 $(x_t)$
2. 初始隐藏状态 $(h_0) = 0$
3. 逐步更新隐藏状态:
---* 计算更新门 $(z_t)$,决定保留多少前一状态信息
---* 计算重置门 $(r_t)$,控制前一状态对候选状态的影响
---* 生成候选隐藏状态 $(\tilde{h}_t)$
---* 融合前一状态和候选状态得到新的 $(h_t)$
4. 最终输出:最后一个 $(h_t)$ 经过全连接层映射成预测值
5. 结果解释:
---* 输出为一个概率分布 `[0.1, 0.05, ..., 0.2]` 对应数字 0~9
---* 取概率最大的数字作为预测的第六位数,例如预测结果 `5`
> 这个过程中 GRU 自动学习了历史数字间的模式,输出结果即是对未来序列的预测。
无