RNN

  传统的NN都是离散地处理输入的序列信息,如下图所示,一个输入得到一个输出,彼此之间没任何联系,这对于具有关联顺序的序列而言并不友好。

【CS231N】笔记7_循环神经网络

  如果需要数据的关联性让神经网络知道,就需要让神经网络记住之前网络的信息,以达到网络信息的关联性。如下图所示,Data0 经过神经网络得到的当前状态描述S(t),由S(t)生成Y(t);到了Data1 的时候,产生了S(t+1),但Y(t+1)的生成是S(t)和 S(t+1) 共同作用的结果。
【CS231N】笔记7_循环神经网络

【CS231N】笔记7_循环神经网络

这种神经网络的结构可以看成是上图的最后一个结构图所示的那样。

  循环神经网络结果具有非常大的灵活性,比如输入和输出是one2one的【图像->向量】,输入和输出是one2many的【看图说话】,输入和输出是many2one的【序列分类(由序列得类别)】,输入和输出是many2many的【语言翻译】,输入和输出是many2many的【视频分类(每一帧都按照一定数量的类来分类)】。
  循环神经网络会定期得接收新的输入,依据上一次结构的状态以及新的输入得到新的状态。

ht=fw(ht1,xt)

其中,f_w代表W的参数方程。
  由于在网络不断前进的过程中,序列会原来越大,容易造成梯度消失(Gradient Vanishing)或梯度爆炸(Gradient Exploding)的现象,所以需要限定想要的序列长度,以免序列过长难以训练。

梯度消失

  在训练过程中得到误差之后要进行反向传播,如果反向传播的链足够长,且该参数的权重都小于1,那么其误差在传播中总会达到0(比如0.99),这种在链式过程变成0的过程就称为梯度消失。反之,如果参数权重都大于1,则在足够长的情况下就会变成无穷大,这种情况称为梯度爆炸

LSTM

  LSTM,全称为long-short term memory,长短期记忆,其出现时为了解决RNN在长期记忆中可能会出现的梯度消失问题。相比较标准RNN中的重复模块包含单一的层,LSTM的重复模块包含四个交互的层。

【CS231N】笔记7_循环神经网络

【CS231N】笔记7_循环神经网络
LSTM多了三个控制器:forget, input, output三个控制器。forget门由ht1xt共同决定该状态需要遗忘哪些东西,再与主线状态相乘达到遗忘的目的(经过sigmoid函数输出0~1的结果);input门用来决定我们要更新什么值;output门由主线状态与ht1xt决定需要输出什么ht
【CS231N】笔记7_循环神经网络

  个人理解:Ct1的作用是存储输入数据序列的联系,其经过遗忘门和输入门的作用,这时候就得到了Ct,再经过输出门的作用,就得到了ht。 而ht记录的是输出序列的联系。其中Ct我们称为主线,ht称为分线。
LSTM截图来自此