RNN
传统的NN都是离散地处理输入的序列信息,如下图所示,一个输入得到一个输出,彼此之间没任何联系,这对于具有关联顺序的序列而言并不友好。
如果需要数据的关联性让神经网络知道,就需要让神经网络记住之前网络的信息,以达到网络信息的关联性。如下图所示,Data0 经过神经网络得到的当前状态描述S(t),由S(t)生成Y(t);到了Data1 的时候,产生了S(t+1),但Y(t+1)的生成是S(t)和 S(t+1) 共同作用的结果。
这种神经网络的结构可以看成是上图的最后一个结构图所示的那样。
循环神经网络结果具有非常大的灵活性,比如输入和输出是one2one的【图像->向量】,输入和输出是one2many的【看图说话】,输入和输出是many2one的【序列分类(由序列得类别)】,输入和输出是many2many的【语言翻译】,输入和输出是many2many的【视频分类(每一帧都按照一定数量的类来分类)】。
循环神经网络会定期得接收新的输入,依据上一次结构的状态以及新的输入得到新的状态。
其中,f_w代表W的参数方程。
由于在网络不断前进的过程中,序列会原来越大,容易造成梯度消失(Gradient Vanishing)或梯度爆炸(Gradient Exploding)的现象,所以需要限定想要的序列长度,以免序列过长难以训练。
梯度消失
在训练过程中得到误差之后要进行反向传播,如果反向传播的链足够长,且该参数的权重都小于1,那么其误差在传播中总会达到0(比如),这种在链式过程变成0的过程就称为梯度消失。反之,如果参数权重都大于1,则在足够长的情况下就会变成无穷大,这种情况称为梯度爆炸。
LSTM
LSTM,全称为long-short term memory,长短期记忆,其出现时为了解决RNN在长期记忆中可能会出现的梯度消失问题。相比较标准RNN中的重复模块包含单一的层,LSTM的重复模块包含四个交互的层。
个人理解:的作用是存储输入数据序列的联系,其经过遗忘门和输入门的作用,这时候就得到了,再经过输出门的作用,就得到了。 而记录的是输出序列的联系。其中我们称为主线,称为分线。
LSTM截图来自此
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【CS231N】笔记7_循环神经网络 - Python技术站