本文结构:
什么是 Recurrent Neural Networks ?
Recurrent Neural Networks 的优点和应用?
训练 Recurrent Neural Networks 的问题?
如何解决?
何时用 RNN 何时用前馈网络呢?
什么是 Recurrent Neural Networks ?
普通的前馈神经网络模型,它的结构是信号以一个方向从输入走到输出,一次走一层。
![](http://upload-images.jianshu.io/upload_images/1667471-aa326d9b09ac7ba6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/306/format/webp)
在 RNN 中,前一时刻的输出会和下一时刻的输入一起传递下去。
可以把这个过程看成是一个随着时间推移的流。
在这里显示的是四个时间点,在t=1的时候,网络取到t=0的时候的输出,并且将它和下一个输入一起发送回给网络。
![](http://upload-images.jianshu.io/upload_images/1667471-6f46cb7b0e603227.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/480/format/webp)
Recurrent Neural Networks 的优点和应用?
和前馈神经网络不同,RNN 可以接收一系列的数据作为输入,而且也可以返回一系列的值作为输出。这种可以处理序列化数据的功能,使得这个网络得以非常广泛的应用。
当输入是一个的时候,输出是一个序列的时候,这可以用于 image captioning (让计算机用一句话来描述这张图片)。
![](http://upload-images.jianshu.io/upload_images/1667471-1babd058449ac398.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/749/format/webp)
输入是一个序列,输出是1个数据的时候,这个模型可以被用来分类。
![](http://upload-images.jianshu.io/upload_images/1667471-bb67772192d9d262.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/734/format/webp)
当输入是一个序列,输出也是一个序列的时候,可以用来对视频一帧一帧的分类。
![](http://upload-images.jianshu.io/upload_images/1667471-1d33b7fd1bb6794f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/770/format/webp)
当引入时间延迟的时候,就可以用于供应链计划里的需求预测。
![](http://upload-images.jianshu.io/upload_images/1667471-e31b5ccf153ca68d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/810/format/webp)
当把几个RNN堆起来时,得到的这个新的网络就可以输出比单独一个RNN更为复杂的结果。
![](http://upload-images.jianshu.io/upload_images/1667471-3208a0fb1a0873fb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/463/format/webp)
训练 Recurrent Neural Networks 的问题?
RNN 是很难被训练的,训练的时候也使用 Back Propagation,所以这也存在着梯度消失的问题,而且这个梯度消失的问题会是指数级别的。
原因就是,RNN的每个时间点,就相当于一个前馈神经网络的整个层,
所以训练100步的模型就相当于训练一个100层的前馈网络。
这就造成了随着时间的推移,梯度会以指数级的速度减小,进而造成信息的衰变。
![](http://upload-images.jianshu.io/upload_images/1667471-58ef910af4b85a10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/767/format/webp)
如何解决?
有很多方式可以解决这个问题,其中之一就是 Gating。
这个技术的好处就是它可以决定,什么时候需要忘记当前的输入,什么时候需要记住它,以便将来的步骤里会用到它。
今天最流行的 Gating 就是 LSTM 和 GRU。
当然也有一些其他的方法 Gradient clipping, Better optimizer, Steeper Gates。
![](http://upload-images.jianshu.io/upload_images/1667471-2ead3632e33448df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/721/format/webp)
训练神经网络的时候用 GPU 要比用 CPU 好。
研究表明,用 GPU 训练会比 CPU 训练快250倍。(现在可能更快了)
这就是一天和八个月的区别。
何时用 RNN 何时用前馈网络呢?
前馈神经网络,它会输出一个数据,可以用来做分类或者回归。
RNN 适合时间序列的数据,它的输出可以是一个序列值或者一序列的值。
所以说,如果要做分类或者回归的话,可以用前馈是神经网络,如果要预测的话,可以用循环神经网络。