GRU(门控循环单元)详解
1️⃣ GRU介绍
前面介绍的LSTM可以有效缓解RNN的梯度消失问题,但是其内部结构比较复杂,因此衍生出了更加简化的GRU。GRU把输入门
和遗忘门
整合成一个更新门
,并且合并了细胞状态和隐藏状态。于2014
年被提出
2️⃣ 原理介绍
GRU的结构和最简单的RNN是一样的。当前输入为
x
t
x_t
xt,上一个节点传递下来的隐层状态为
h
t
−
1
h_{t-1}
ht−1,这个隐层状态包含了之前节点的相关信息。根据
x
t
x_t
xt和
h
t
−
1
h_{t-1}
ht−1,GRU会得到当前时间步的输出
y
t
y_t
yt和传递给下一个节点的隐层状态
h
t
h_t
ht,实际上
y
t
y_t
yt就是等于
h
t
h_t
ht
下面介绍详细的原理,下图展示了GRU的详细结构:
第一步,计算重置门
,它的参数是
W
r
W_r
Wr,用于控制之前的记忆需要保留多少。该门的输入是前一个隐层状态
h
t
−
1
h_{t-1}
ht−1以及当前时间步的输入
x
t
x_t
xt,输出为
r
t
r_t
rt,在0到1之间,:
r
t
=
σ
(
W
r
⋅
[
h
t
−
1
,
x
t
]
)
r_{t}=\sigma\left(W_{r}\cdot[h_{t-1},x_{t}]\right)
rt=σ(Wr⋅[ht−1,xt])其中,
σ
\sigma
σ表示sigmoid激活函数
第二步,我们来看更新门
,它的参数为
W
z
W_z
Wz,它将LSTM中的输入门和遗忘门结合,决定当前时间步应该保留多少以前的记忆,多少新信息应该加入。该门的输入也是前一个隐层状态
h
t
−
1
h_{t-1}
ht−1以及当前时间步的输入
x
t
x_t
xt,省略了偏置参数
b
b
b,输出为
z
t
,在
0
到
1
之间,
z_t,在0到1之间,
zt,在0到1之间,公式具体表达为:
z
t
=
σ
(
W
z
⋅
[
h
t
−
1
,
x
t
]
)
z_{t}=\sigma\left(W_{z}\cdot[h_{t-1},x_{t}]\right)
zt=σ(Wz⋅[ht−1,xt])其中,
σ
\sigma
σ表示sigmoid激活函数
第三步,计算输入值,输入值由前一个隐层状态
h
t
−
1
h_{t-1}
ht−1,当前的
x
t
x_t
xt以及重置门
r
t
r_t
rt得到。
r
t
∗
h
t
−
1
r_{t}*h_{t-1}
rt∗ht−1可以理解为之前的记忆保留多少来学习新的内容
x
t
x_t
xt,
h
~
t
\tilde{h}_{t}
h~t相当于利用之前的记忆对新的内容理解的部分
h
~
t
=
tanh
(
W
⋅
[
r
t
∗
h
t
−
1
,
x
t
]
)
\tilde{h}_{t}=\operatorname{tanh}\left(W\cdot[r_{t}*h_{t-1},x_{t}]\right)
h~t=tanh(W⋅[rt∗ht−1,xt])
第四步,计算当前输出 h t h_t ht,由两部分,一部分是之前信息的影响 h t − 1 h_{t-1} ht−1,后一部分是当前输入的影响 h ~ t \tilde{h}_t h~t。 z t z_{t} zt是更新门的输出,取值在0-1之间。给 h t − 1 h_{t-1} ht−1赋予 ( 1 − z t ) (1-z_t) (1−zt)权重,给 h ~ t \tilde{h}_t h~t赋予 z t z_{t} zt权重:
h t = ( 1 − z t ) ∗ h t − 1 + z t ∗ h ~ t \begin{aligned}h_t=(1-z_t)*h_{t-1}+z_t*\tilde{h}_t\end{aligned} ht=(1−zt)∗ht−1+zt∗h~t
我前面写的这篇文章中介绍了为什么RNN会有梯度消失和爆炸:点这里查看
主要原因是反向传播时,梯度中有这一部分:
∏
j
=
k
+
1
3
∂
s
j
∂
s
j
−
1
=
∏
j
=
k
+
1
3
t
a
n
h
′
W
\prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}}=\prod_{j=k+1}^3tanh^{'}W
j=k+1∏3∂sj−1∂sj=j=k+1∏3tanh′W
那么GRU如何缓解RNN的梯度消失问题呢?
在GRU里,隐层的输出换了个符号,从
s
s
s变成
h
h
h了。因此我们来分析一下
∂
h
t
∂
h
t
−
1
\frac{\partial h_t}{\partial h_{t-1}}
∂ht−1∂ht。 我们可以得到:
∂
h
t
∂
h
t
−
1
=
(
1
−
z
t
)
+
…
\frac{\partial h_t}{\partial h_{t-1}}=(1-z_t)+\ldots
∂ht−1∂ht=(1−zt)+…
因此我们可以通过控制更新门的输出 z t z_t zt来控制梯度,以缓解梯度消失问题
3️⃣ 总结
-
GRU和LSTM对比:
-
GRU通过控制更新门的输出 z t z_t zt来控制梯度,以缓解梯度消失问题
4️⃣ 参考
原文地址:https://blog.csdn.net/qq_42980908/article/details/143772040
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!