这里我们首先来看一下GRU是如何将LSTM的三个门简化成两个门的结构的:
这里的 r r r门(r门这里同样是一个激活函数)控制的是上一个时间戳的状态 s t − 1 s_{t-1} st−1对我们的当前时间戳状态 s t s_t st的一个影响,r的取值范围依旧是在0到1之间,也就是说,当你的r门全部关闭(r = 0)的时候,就意味着将上一个时间戳上的状态复位了,从0开始;如果r门全部打开(r = 1)的时候,就是保留了接收进来所有的上一个时间戳的状态。r就意味着是否要reset上一个时间戳的状态信息,以及reset的程度是多少。
z = σ ( x t U z + s t − 1 W z ) r = σ ( x t U r + s t − 1 W r ) h = tanh ( x t U h + ( s t − 1 ∘ r ) W h ) s t = ( 1 − z ) ∘ h + z ∘ s t − 1 \begin{aligned} z &=\sigma\left(x_{t} U_{z}+s_{t-1} W_{z}\right) \\ r &=\sigma\left(x_{t} U_{r}+s_{t-1} W_{r}\right) \\ h &=\tanh \left(x_{t} U_{h}+\left(s_{t-1} \circ r\right) W_{h}\right) \\ s_{t} &=(1-z) \circ h+z \circ s_{t-1} \end{aligned} zrhst=σ(xtUz+st−1Wz)=σ(xtUr+st−1Wr)=tanh(xtUh+(st−1∘r)Wh)=(1−z)∘h+z∘st−1
根据图分析公式:
r = σ ( x t U r + s t − 1 W r ) \begin{aligned} r &=\sigma\left(x_{t} U_{r}+s_{t-1} W_{r}\right) \end{aligned} r=σ(xtUr+st−1Wr)
- 1.由黄色的导向线得,上一个时间戳的状态
s
t
−
1
s_{t-1}
st−1与新的输入
x
t
x_t
xt分别做一个线性变换然后求和,最后经过r门的激活函数得到r门的输出。
z = σ ( x t U z + s t − 1 W z ) \begin{aligned}z &=\sigma\left(x_{t} U_{z}+s_{t-1} W_{z}\right)\end{aligned} z=σ(xtUz+st−1Wz) - 2.由蓝色的导向线得,上一个时间戳的状态
s
t
−
1
s_{t-1}
st−1与新的输入
x
t
x_t
xt分别再做一个线性变换然后求和,最后经过z门的激活函数得到z门的输出。
h = tanh ( x t U h + ( s t − 1 ∗ r ) W h ) \begin{aligned} h &=\tanh \left(x_{t} U_{h}+\left(s_{t-1} * r\right) W_{h}\right)\end{aligned} h=tanh(xtUh+(st−1∗r)Wh) - 3.由红色的导向线得,上一个时间戳的状态
s
t
−
1
s_{t-1}
st−1与r(门控变量)做一个乘积,再与经过一个线性变换后的
x
t
x_t
xt求和,最后经过激活函数tanh得到输出h。
这里的h并不是一个新的变量,对于GRU来说,它只有这样的一个状态,我们将其叫做 s t − 1 s_{t-1} st−1,你也可以将其叫做 c c c或者 h h h这只是这样的命名的习惯,对于LSTM来说有一个 c c c,一个 h h h,对于GRU来说只有一个 h h h这样的临时的变量
s t = ( 1 − z ) ∗ h + z ∗ s t − 1 \begin{aligned} s_{t} &=(1-z) * h+z * s_{t-1}\end{aligned} st=(1−z)∗h+z∗st−1 - 4.最后得到当下时间戳的状态
s
t
s_t
st。
在 s t s_t st的公式中,这里的 h h h是由 1 − z 1-z 1−z控制的, s t − 1 s_{t-1} st−1是由更新门 Z Z Z控制的,对于 h h h和 s t − 1 s_{t-1} st−1来说非大即小,也就是说如果向上的路径变强了,向右的路径就变小了,反之也这回事,就是 h h h状态和 s t − 1 s_{t-1} st−1的状态互斥的流通门。