RNN与卷积最大的不同是,他的cell输出会成为下一个cell的输入,这代表了RNN是有一定**记忆能力**的,因为我的输出成为了我的输入,所以训练参数是有记忆性的,如果卷积神经网络是人类视觉的模拟,那循环神经网络是人类记忆信号的模拟,它通过看从时序序列上的相关性产生了一定程度的记忆,这种记忆包含语义,语法等信息。
它的应用
1.预测一个时序信号的未来数据,比如房价,股价,公司效益的预测。
2.自然语言处理
人在看一篇文章的时候,要是想产生理解,往往需要看完全部的段落或句子,而不是只看完某个字,然后才可以从全局上理解文章的内容,而让我们产生理解的这种东西,就是语言的特征:语义,他是一种抽象的特征,它不像CV的图像特征那样直观,但他是一种深刻且更具智慧性的特征。
它的类型
1对多例子:文章,摘要的生成:我给他前一个字或是词,他就会生成后面的一大段文字
多对一例子:股票房价预测,自动驾驶轨迹预测
多对多例子:比如机器翻译等
普通RNN缺点
对长期记忆丢失的特别快,由于一直用同一个单元训练,梯度不停的往后累加,为了防止梯度爆炸和梯度消失的情况,我们通常选sigmoid函数去计算而不是relu,这就导致一个问题:输入信号的结尾会有比较大的梯度信号,而当我们一直回溯到信号最初的开头部分,梯度就很小了,就不太会改变训练参数了。
直观上讲,就是这句话最初的部分好像被忘掉一样,就比如,我看完一句话,我已经忘记这句话的主语是什么了。这就导致我几乎不可能理解这句话。
因此缺点,引入了LSTM
LSTM
它由4个全连接层组成:
看起来很吓人,但是实际上不难,I,F,G,O皆由全连接层训练得来,其中
G是短期记忆信息,它在普通RNN计算公式中也出现过
短期记忆G会通过一个input gate门,这个门由I决定,i的值在[0,1]之间,I越大,G被保存下来的信息越多。
C是长期记忆信息,因为Ct的计算公式中包含了Ct-1。
长期记忆C会通过一个forget gate门,这个门由F决定,F的值也在[0,1]之间,F越大,长期记忆被保存下来的越多。
假如对于当前状态,短期记忆比长期更重要,那么就会把F系数调低,反过来一样。
然后O代表输出门,综合信息上面可以得到最终结果yt和ht
由于LSTM训练了4个全连接层,所以它的参数多很复杂,因此设计出了简化版GRU
GRU
GRU与LSTM三个区别:
1.砍掉了输入信息Ct,
2.因为Rt是经过全连接层后的信息,所以他是两层结构,
3.因为它砍掉了一个全连接层所以参数少,速度比lstm快
双向循环神经网络
由于有的时候我们想理解前面的句子意思,就要知道后面的句子是什么,所以就有了双向循环神经网络,可以从前往后,从后往前的两个角度去理解句子语义
RNN的其他信息
RNN不能用relu去做激活函数:因为它本身是同样的参数走了很多层,他不是每一层不同的参数,如果是后者,你可能会担心梯度会弥散,梯度消失,训练停止,但现实情况是前者,对于RNN而言,梯度爆炸是更重要的问题,以及梯度不稳定问题,即前一个输入导致它上升,后一个输入导致它下降,解决不稳定的问题方法有很多:dropout,BN等。
其中BN可以在某个输出层,去把各个样本的均值和方差固定在一个小的范围内在输出到下一层,这会导致参数幅度变化相对稳定,这有助于稳定性。
BN工作方式:我的batch有1000个句子,我对所有句子中的第一个词进行标准化,它是样本层面的标准化
相对应的LN的工作方式:它是层层面的标准化,对应于每个样本本身从第一个词到最后一个词的标准化。