深度学习之RNN

 

递归神经网络RNN(也称循环神经网络)是一种节点沿着序列连接形成有向图的网络,显示时间序列的temporal dynamic behavior。与前馈神经网络不同之处在于,RNN可以使用其内部状态(记忆)来处理输入序列,递归/周期性的recurrent是指其每一个节点都执行相同的任务,但是输出依赖于输入和记忆,RNN适用于连续的手写识别、语音识别、机器翻译等任务。

一、RNN的结构  

RNN的结构有两种表示方法,左图是RNN神经元(memory cell)折叠起来的形式,右图是RNN按时间维度展开的形式,下图是有复杂神经元的RNN。

深度学习之RNN

 

二、RNN的前向传播

U为输入层到隐藏层的权重,将原始输入抽象后送入隐藏层;

V为隐藏层到输出层的权重,进一步抽象从隐藏层学习到的表示;

W为隐藏层到隐藏层的权重,负责控制、调度网络的记忆;

深度学习之RNN 为t时刻的输入向量(对于语言模型,输入X为一句话,而某一时刻的 深度学习之RNN 表示一个词向量);

深度学习之RNN 为时刻t的隐状态(记忆),由输入和t-1时刻决定:深度学习之RNN,σ为tanh等**函数;

深度学习之RNN 为t时刻的预测输出:深度学习之RNN,g为softmax函数;

深度学习之RNN 为t时刻的实际输出;

深度学习之RNN 为t时刻的损失函数;

通常U V W随机初始化,深度学习之RNN 初始化为0。

 

三、RNN的反向传播

RNN与DNN反向传播的算法类似,使用BP算法通过梯度下降迭代得到适合的一组RNN模型参数U V W。由于是基于时间的反向传播,因此也成为BPTT(back-propagation through time),与DNN不同的是,RNN模型的参数在序列的各个位置是共享的,反向传播时更新的是相同一组的参数。

t时刻产生的损失 深度学习之RNN 可以用交叉熵(或平方误差等)表示,总损失为:

        深度学习之RNN

对L求解▽V时,不存在和之前状态的依赖,求导后求和即可:

        深度学习之RNN

求解▽W、▽U时计算由t和t+1两部分梯度组成,因此定义t时刻隐状态的梯度为深度学习之RNN,首先计算输出层的 深度学习之RNN,再反向递推各层 深度学习之RNN

        深度学习之RNN

        深度学习之RNN

        深度学习之RNN

得到δ(t)后就可以计算▽W、▽U:

        深度学习之RNN

        深度学习之RNN

       

四、RNN种类

1、sequence-to-sequence

输入输出都是一个序列。例如股票预测时输入前N天的价格,输出明天的价格。

        深度学习之RNN

2、sequence-to-vector

输入是一个序列,输出是一个向量。例如输入一个电影评价序列,输出一个分数表示情感趋势(喜欢还是讨厌)。

        深度学习之RNN

3、vector-to-sequence

输入单一向量,输出一个序列。

        深度学习之RNN

4、encoder-decoder

输入encoder为sequence-to-vector,输出decoder为vector-to-sequence。这是一个delay模型,经过一段延迟即把所有输入都读取后,在decoder中获取输入并输出一个序列,可用于机器翻译等。

        深度学习之RNN

 

五、RNN总结

RNN和DNN的反向传播一样会出现梯度消失和梯度爆炸问题,与回溯路径太长有关,前面的权重基本不变,没有训练效果。因此发展出了很多复杂的RNN模型如LSTM、GRU等,将信息分为长期记忆和短期记忆,长期记忆可以传播很远,改变缓慢、相对稳定;梯度较大的记忆不会像RNN一样马上被抹除,因此可以一定程度上克服梯度消失的问题。

另外克服梯度爆炸可以用gradient clipping的trick,即当梯度超过阈值c或者小于-c时,将此时的梯度设置为c或-c。RNN的误差平面如下图所示,如果不采取任何措施时,当参数在某一次更新后,刚好碰到陡峭的区域时,梯度会变得非常大,则参数更新也会非常大,容易导数震荡问题。使用gradient clipping后,即使在梯度陡峭的地方也不会发生梯度爆炸的情况,因为梯度被限制在某个阈值内。

深度学习之RNN

 

Deep Bidirectional RNN

深度双向RNN类似Bidirectional RNN,区别在于每个每一步输入有多层网络,这样的网络具有更加强大的表达能力和学习能力,但同时复杂性也提高了,同时需要训练更多的数据。

深度学习之RNN

 

参考资料

https://www.cnblogs.com/rucwxb/p/8047401.html

http://www.cnblogs.com/pinard/p/6509630.html#!comments