循环神经网络--GRU
这里我们首先来看一下GRU是如何将LSTM的三个门简化成两个门的结构的:
这里的rr门(r门这里同样是一个**函数)控制的是上一个时间戳的状态st1s_{t-1}对我们的当前时间戳状态sts_t的一个影响,r的取值范围依旧是在0到1之间,也就是说,当你的r门全部关闭(r = 0)的时候,就意味着将上一个时间戳上的状态复位了,从0开始;如果r门全部打开(r = 1)的时候,就是保留了接收进来所有的上一个时间戳的状态。r就意味着是否要reset上一个时间戳的状态信息,以及reset的程度是多少。

z=σ(xtUz+st1Wz)r=σ(xtUr+st1Wr)h=tanh(xtUh+(st1r)Wh)st=(1z)h+zst1 \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}

根据图分析公式:

r=σ(xtUr+st1Wr) \begin{aligned} r &=\sigma\left(x_{t} U_{r}+s_{t-1} W_{r}\right) \end{aligned}

  • 1.由黄色的导向线得,上一个时间戳的状态st1s_{t-1}与新的输入xtx_t分别做一个线性变换然后求和,最后经过r门的**函数得到r门的输出。
    z=σ(xtUz+st1Wz) \begin{aligned}z &=\sigma\left(x_{t} U_{z}+s_{t-1} W_{z}\right)\end{aligned}
  • 2.由蓝色的导向线得,上一个时间戳的状态st1s_{t-1}与新的输入xtx_t分别再做一个线性变换然后求和,最后经过z门的**函数得到z门的输出。
    h=tanh(xtUh+(st1r)Wh) \begin{aligned} h &=\tanh \left(x_{t} U_{h}+\left(s_{t-1} * r\right) W_{h}\right)\end{aligned}
  • 3.由红色的导向线得,上一个时间戳的状态st1s_{t-1}与r(门控变量)做一个乘积,再与经过一个线性变换后的xtx_t求和,最后经过**函数tanh得到输出h。
    这里的h并不是一个新的变量,对于GRU来说,它只有这样的一个状态,我们将其叫做st1s_{t-1},你也可以将其叫做cc或者hh这只是这样的命名的习惯,对于LSTM来说有一个cc,一个hh,对于GRU来说只有一个hh这样的临时的变量
    st=(1z)h+zst1 \begin{aligned} s_{t} &=(1-z) * h+z * s_{t-1}\end{aligned}
  • 4.最后得到当下时间戳的状态sts_t
    sts_t的公式中,这里的hh是由1z1-z控制的,st1s_{t-1}是由更新门ZZ控制的,对于hhst1s_{t-1}来说非大即小,也就是说如果向上的路径变强了,向右的路径就变小了,反之也这回事,就是hh状态和st1s_{t-1}的状态互斥的流通门。

相关文章:

  • 2021-05-27
  • 2021-04-05
  • 2021-07-20
  • 2021-04-02
  • 2021-06-06
猜你喜欢
  • 2021-09-09
  • 2021-12-30
  • 2021-07-07
  • 2021-04-25
  • 2021-07-19
  • 2021-11-05
  • 2022-12-23
相关资源
相似解决方案