前言
-
GRU是RNN模型的升级版,也是LSTM的弱化版,学习GRU也是为了学习LSTM做准备,这一篇文章是学习笔记;
-
RNN:RNN讲解
-
参考:李沐动手学习深度学习;
-
欢迎收藏加关注,本人将会持续更新。
文章目录
门控循环单元 (GRU)是一种循环神经网络 (RNN)的变体,我为了解决RNN在处理长时间序列数据的时候容易出现的梯度消失和梯度爆炸的问题,
回忆RNN
先看回忆RNN的神经网络结构:

可以看到,RNN每一次更新隐藏层的时候,权重W都是一样的 ,也就是说每一次更新隐藏层的时候,都是使用一样的权重,也就说看待之前的状态重要程度都是一样的。
举个例子:

这个例子中,每一个观察的值都不是同等重要,也就是说这个时候再用RNN模型就不太合适了,为了解决这种问题,RNN模型提供了许多升级的版本,其中著名的有:GRU、LSTM,而LSTM是在GRU的升级版,故本篇学习也是为了学习LSTM打基础。
GRU模型结构组成
更新门
表示:Z~t~ ,它决定了需要从 前一个时刻的隐藏状态h~t-1~和当前输入数据x~t~中要保留 多少信息来更新当前的有隐藏状态h~t~,计算公式如下:

其中,激活函数作用:将输出映射到0和1之间。
具体更新实现,在当前隐藏状态中实现。
重置门
表示:R~t~,它控制者是否要"重置"前一时刻隐藏层的 状态,可以类比记忆中的"遗忘",我们不可能记住前一天的所有事情,计算公式如下:

具体实现在候选隐藏状态中。
这个时候GRU神经网络可以表示,如下图所示:

候选隐藏状态
这个门,实现的功能:决定吸取多少之前的隐藏状态信息和当前输入的数据,计算公式和网络结构如下如下:

当**R~t~**为0的时候,就不要之前的隐藏信息的状态,**W~xh~**决定着吸取当前输入数据的多少。
当前隐藏状态
当前隐藏转态:H~t~,它决定输出的大小,融合前一层的隐藏状态和候选的隐藏状态,,如图:

这里有两个极端:
- 当Z~t~为0的时候,说明对上一层的隐藏状态选择遗忘 ,这个时候就等于重置门"吸收"多少当前输入与前一层隐藏状态的结合体了 🤠;
- 当Z~t~为1的时候,说明完全保留上一层的隐藏状态,这个其实就是RNN模型的隐藏状态更新。

工作原理
在每个时间步t:
- 首先计算更新门Zt和重置门Rt,这两个门的值决定了如何利用前一时刻的隐藏状态Ht−1和当前时刻的输入 Xt
- 然后根据重置门Rt计算候选隐藏状态 H~t~ ,它是在对前一时刻隐藏状态进行了一定程度的 "重置" 后,结合当前时刻输入得到的。
- 最后通过更新门Zt将前一时刻隐藏状态 Ht−1 和候选隐藏状态 H~t 进行融合,得到当前时刻的隐藏状态Ht。这个过程不断重复,使得 GRU 能够沿着时间序列处理数据,逐步更新隐藏状态并捕捉序列中的信息。
举个例子:
如何我们从左往右看,RNN的缺点的每一次更新隐藏层权重一样,如果我们看这个例子,如果看到一只老鼠,这个时候,老鼠的权重肯定要高于其他,尤其是后面的 ,这个时候GRU的候选隐藏层代表了这个老师前面需要吸收状态,而当前隐藏状态说明了这个后下一个猫需要吸收多少状态。
当然神经网络很深奥,好需要不断在实践学习。