RNN(递归神经网络)
循环神经网络是一种特殊的神经网络结构,他是具有记忆功能,是一个序列模型,原则上来说只考虑时间先后顺序的问题都可以用RNN来解决。
从上图我们可以看出,输入x,然后特征提取后得到,s = w * x + b,这部分数据可以直接输出得到O,然后这部分数据再放入记忆模块,再和下一次输入一起做特征提取,也就是每一次的输出都是前面的输入提取到特征的结果。
在t =11时刻,一般初始化输入S0=0,随机初始化W,U,V,可以用一个公式表示:
其中 f 和 g 均为**函数,f 可以是tanh,relu,sigmoid等**函数,g可以是softmax
这样会有一个问题,就是再输出多了的情况下,前面对后面的影响就变得不那么大了,记忆模块会稀释掉前面的输入。比如说在你背了几篇作文后,是不是会后面背的作文比前面背的,记忆力更深。下面从一张图像来更深的理解RNN。
我们可以看到,每一个时间片的输出,不仅取决于当前单词,还取决于先前单词。RNN在不同的时间步长共享参数。RNN同样会有梯度消失和梯度爆炸的问题,主要是因为时间片过程从而导致记忆值较小的现象。
LSTM(Long Short Term Memory, 长短期记忆网络)
首先看下LSTM的结构,LSTM也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。
LSTM核心思想:细胞状态。用来保证信息不变的流过整个网络。
LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。
门结构相当于输出一个x1,然后通过一个**函数(比如说sigmoid),得到 h = s(x1),然后再与 x2 做点乘, 也就是 f = x2 + h。因为sigmoid的值域是(0,1),因此可以用1表示通过,0表示不通过。
LSTM有三个门,分别是忘记门、输入门、输出门。
忘记门:通过一个sigmoid来决定细胞状态需要丢弃掉的信息。传入两个输入,到sigmoid中,得到(0,1)的输出,通过细胞状态来决定丢弃和保留。
输入门:决定细胞状态添加哪些东西。利用通过输入门再经过一个sigmoid来决定更新哪些信息,然后利用通过一个tanh层来得到新的候选细胞信息。
更新细胞状态,得到新的细胞状态,更新的规则是通过忘记门来选择忘记旧细胞状态中的一部分信息,通过输入门添加候选细胞信息,得到新的细胞信息。
输出门:更新完细胞状态后,需要根据输入的来判断输出细胞的状态特征,还是通过输入到sigmoid中判断保留或者丢弃,然后根据更新后的细胞状态经过一个tanh层,然后再与做点乘,最终得到输出。
LSTM的变种
peephole connections
从图中我们可以看到,这个变种主要是在每一个sigmoid之前加了一个细胞状态,前面两个门加的细胞状态是,后面一个门加的细胞状态是。
coupled
这个变种的方式是在忘记门删除历史信息的位置加入新的信息,在加入新信息的位置删除旧信息。就是让忘记门与输入门关联起来,以前是把通过sigmoid的所有信息去与做点乘,现在是1-sigmoid(x)后的信息去做点乘,这样做可以忘记掉一些不重要的信息。
GRU(门循环单元)
GRU只有两个门,分别是更新门(LSTM忘记门和输入门合并)、重置门。
值得一提的是,GRU用了一个门控来进行遗忘和选择记忆
同样,用(1-z)进行遗忘,就是对信息的一个选择。
运算步骤:这个以后有空的时候再补的更加详细吧。
参考链接:https://www.jianshu.com/p/95d5c461924c