RNN是两种神经网络模型的缩写,一种是递归神经网络(Recursive Neural Network),一种是循环神经网络(Recurrent Neural Network)。这里讨论第二种。
1、概述
RNN是一种特殊的神经网络结构,根据人的认知是基于以往的经验和记忆这一观点提出,不仅考虑前一时刻的输入,而且赋予网络对前面内容的记忆功能。循环是指一个序列当前的输出与前面的输出也有关。具体为,隐藏层结点之间的是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。可以处理视频等有时间先后的问题,和文档等有前后文的问题。
2、模型结构
上图为隐藏层的展开图,t表示时间序列,X表示输入样本,St表示结点在t时刻的记忆,St = f(W*st-1 +U*xt)。在t=0时刻,一般初始化输入s0=0,随机初始化W,U,V,激活函数为f和g,计算如下:
这里W,U,V在每个时刻是相等的,隐藏状态可以理解为:S=f(现有输入+过去记忆的总结)
3、反向传播
每一次输出的值Ot会产生一个误差值Et,所有时刻产生总误差E。损失函数可以是交叉熵损失函数也可以是平方误差函数。
由于每一步输出不仅仅依赖于当前布的网络,还需要前面若干步的状态,这里BP改版的算法命名为Backpropagation Through Time(BPTT),将输出端的误差值反向传递,运用梯度下降法进行更新。
推导后梯度下降公式为:
4、RNN问题
虽然RNN处理时间序列问题较好,但存在一些问题,较严重的是出现梯度消失和梯度爆炸(BP算法和长时间依赖造成)。这里的梯度消失是指由于时间过长造成记忆值较小。
因此出现了一系列改进的算法,例如LSTM和GRU。
5、LSTM算法
处理问题的方法主要是:
1、对于梯度消失:用特殊的方式存储记忆,以前梯度比较大的记忆不会像简单RNN一样马上被抹除,可以在一定程度上克服梯度消失。
2、对于梯度爆炸:gradient clipping,当梯度超过阈值c或小于阈值-c时,把梯度设置成c或是-c。
RNN中ht=U*xt+W*st-1是个简单线性求和的过程,LSTM通过“门”结构增加或去除细胞状态的信息,保留重要信息和去除不重要的信息,通过sigmoid层输出一个0到1之间的概率值,描述每部分有多少量可以通过。有用于遗忘的门,用于信息增加的门,和用于输出的门。
参考资料:
⭕ 梯度推导