GRU是在LSTM后提出的,效果上GRU和LSTM差不多,用谁都差不多。两网络本质都是在权衡要不要忘记过去的状态,尽量去看现在的输入数据。GRU和LSTM就是在隐状态的计算上和RNN不同,其他都一样,所以下文重点关注和RNN的不同之处,即Ht的计算上。
目录
门控循环单元 GRU(Gate Recurrent Unit)
长短期记忆网络 LSTM( Long Short Term Memory)
门控循环单元 GRU(Gate Recurrent Unit)
首先了解我们为什么需要“门控”,RNN处理不了太长的序列信息,因为历史信息放在隐藏状态h里,当时间很长,隐藏状态累积太多东西,对于很久以前的信息就不好抽取出来。同时我们注意到,一个序列的各个观察值x并不同等重要,但之前的RNN并没有机制去特别关心某些信息,遗忘某些信息。因此我们需要“门控”,GRU中的gate,可以通过额外的控制单元(即更新门和重置门),使得在构造隐藏状态h时可以关注于某一部分。
那么“门”是什么?GRU中有两种门/控制单元:更新门update gate,能关注的机制,意思是若这个数据重要,那么相关信息尽量放入隐藏状态;遗忘门/重置门reset gate,能遗忘的机制。这两个门都是和隐藏状态h长度相等的向量,向量中每个元素都是0~1之间的数。
上图是GRU中两个门的计算方式,可以看出门R和Z是和隐藏状态H长度一样的向量,由公式可以看出其计算方式和RNN中计算隐藏状态的方式一样,只是各自有自己的权重。其中是指的sigmoid函数,可以将数值变到0~1之间。
有了两个门后,再来看如何用这两个门计算隐藏状态,GRU的做法是先利用Rt得到候选隐状态,再由Zt和候选隐状态得到隐状态Ht,
⊙是按元素做乘法,如果Rt向量中一些元素经过sigmoid之后数值接近0,就会把隐藏状态里一些信息忘掉。
这里,Zt越接近1,表示越不更新隐藏状态。
总结,GRU的可学习的权重参数是RNN三倍。当Zt全0,Rt全1时就回到之前的RNN。两个极端:Zt全1,表示不更新隐藏状态不更新历史信息,不看输入Xt;Rt全0,过去全部遗忘,只看Xt。
长短期记忆网络 LSTM( Long Short Term Memory)
LSTM和RNN,GRU不一样的地方在于,其状态有两个,一个是C(下面会提到记忆单元),一个是H(就是之前的隐状态)。
LSTM比起RNN,也是在隐状态的计算上做了创新。和GRU类似,它当然也有门的概念,LSTM有三种门:
这三个门分别为:忘记门,将值朝0减少;输入门,决定要不要忽略输入信息;输出门,决定要不要用隐藏状态。
先利用上一时刻隐状态和输入计算候选记忆单元,
候选记忆单元,取值-1到1,观察公式,计算和RNN里算Ht没有区别。
利用忘记门,输入门,候选记忆单元算记忆单元,这个记忆单元的范围比较大,无法保证范围一定在某个区间,所以计算隐状态需要用个tanh来限制范围
总结LSTM中Ht的计算: