16.1 循环神经网络算法概述

古人云温故而知新(见图16-1),我们在分析事物的时候总会结合自身以前的经历,即使遇到从未见过的情况,也会尽量回忆以前类似场景下是如何解决的,这个其实就和循环神经网络的思路一致。

循环神经网络(Recurrent Neural Networks,RNN)算法是深度学习算法中非常有名的一种算法。RNN之所以称为循环神经网络,是因为一个序列当前的输出与前面的输出有关。具体的表现形式为:网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。

RNN的独特能力来自于它特殊的结构,如图16-2所示,x代表输入,h代表输出,输出的一部分会作为输入的一部分重新输入,于是RNN具有了一定的记忆性。

图16-1 温故而知新

把RNN神经元展开来分析,RNN等效于一连串共享系数的神经元串联在一起,如图16-3所示,这也就解释了RNN特别适合处理时序数据的原因。

图16-2 RNN结构示例图(一)

图16-3 RNN结构示例图(二)

但是生活的经验告诉我们,在比较复杂的情况下,只分析时序数据的最近几个数据是难以得到合理的结果的,需要更长的记忆来追根溯源,于是就有了LSTM(Long Short Term Memory),LSTM可以在更长的时间范围内分析时序数据,如图16-4所示。针对LSTM的详细描写请参考经典文章:http://colah.GitHub.io/posts/2015-08-Understanding-LSTMs/

图16-4 RNN之LSTM示例图