ref:https://blog.csdn.net/vivian_ll/article/details/88780661
只有两个门:重置门和更新门。把细胞状态和隐藏状态进行了合并,2014年提出,与LSTM 相似,但是更易于计算。
其中,rt表示重置门,Zt 表示更新门。重置门决定是否将之间的状态忘记。当rt 趋近于0的时候,前一个时刻的状态信息ht-1会被忘掉,隐藏状态ht会被重置为当前输入的信息。更新门决定是否要将隐藏状态更新为新的状态ht,(作用相当于合并了LSTM中的遗忘门和传入门)。
与LSTM 比较:
(1)GRU 少一个门,同时少了细胞状态Ct。
(2)在LSTM中,通过遗忘门和传入门控制信息的保留和传入;GRU通过重置门来控制是否要保留原来隐藏状态的信息,但是不再限制当前信息的传入。
(3)在LSTM中,虽然得到了新的细胞状态Ct,但是还不能直接输出,而是需要经过一个过滤处理:;同时在GRU中,虽然(2)中2我们也得到了新的隐藏状态ht,但是还不能直接输出,而是通过更新门来控制最后的输出:
结构:
首先通过上一个传输下来的状态和当前节点的输入
来获取两个门控状态。如下图其中r控制重置的门控(reset gate),z 为控制更新的门控(update gate)。
tips:
为sigmoid 函数,这个函数可以将数据变换为0-1 范围内的数值,从而充当门控信号。
与LSTM 分明的层次结构不同,得到门控型号后,首先使用重置门控得到“重置”之后的数据,再将
与输入
进行拼接,再通过一个tanh 激活函数来将数据缩放到-1~1的范围内。即得到如下2-3 所示的h'。
这里的主要是包含了当前输入的
的数据。有针对性地对
,添加到当前的隐藏状态,相当于记忆了当前时刻的状态。类似于LSTM的选择记忆阶段。
最后的是GRU 最关键的一个步骤,可以称为更新记忆。
在这个阶段,我们同时进行了遗忘和记忆两个步骤,我们使用了先前得到的更新门控z(update gate)。
更新表达式:
门控信号(这里的z)的范围为0-1 。门控信号越接近1,代表“记忆”下来的数据越多,而越接近0则代表“遗忘”的越多。
GRU 很聪明的一点是:使用了同一个门控z 就同时可以遗忘和选择记忆(LSTM 则要使用多个门控)。
: 表示对原本隐藏状态的选择性忘记,这里的z 可以想象成遗忘门,忘记
维度中一些不重要的信息。
: 表示对包含当前节点信息的h‘进行选择性“记忆”。与上面类似,这里的(1-z)同理会忘记h‘维度中的一些不重要的信息。或者,这里我们更应该看做是对h' 维度中的某些信息进行选择。
:结合上述,这一步的操作就是忘记传递下来的
中的某些维度信息,并加入当前节点输入的某些维度信息。
2 LSTM 与GRU的关系
GRU 是在14年提出的,
大家看到r(reseet gate) 实际上与他的名字有点不符。我们仅仅使用它来获得了h'。
那么这里的h‘ 实际上可以看成对应于LSTM 中的hidden state;上一个节点传下来的则对应于LSTM 中的cell state。z 对应的则是LSTM 中的
forget gate,那么(1-z)我们似乎就可以看做是选择门
总结:GRU 比LSTM 内部少了一个门控,参数比LSTM 少,但是也能达到与LSTM 想当的功能。