RNN: 循环神经网(Recurrent Neural Network, RNN)

RNN,循环神经网络,也有人将它翻译为递归神经网络。从这个名字就可以想到,它的结构中存在着“环”。

确实,RNN 和 NN/DNN 的数据单一方向传递不同。RNN 的神经元接受的输入除了“前辈”的输出,还有自身的状态信息,其状态信息在网络中循环传递。

RNN 的结构用图形勾画出来,是下图这样的:

../../../_images/rnn_show1.jpeg

Note

注意:图中的 A 并不是一个神经元,而是一个神经网络块,可以简单理解为神经网络的一个隐层。

RNN 的这种结构,使得它很适合应用于序列数据的处理,比如文本、语音、视频等。这类数据的样本间存在顺序关系(往往是时序关系),每个样本和它之前的样本存在关联。

RNN 把所处理的数据序列视作时间序列,在每一个时刻 t,每个 RNN 的神经元接受两个输入:当前时刻的输入样本 Xt,和上一时刻自身的输出 Ht-1:

../../../_images/rnn_show2.jpeg

前图经过进一步简化,将隐层的自连接重叠,就成了下图

../../../_images/rnn_show3.jpeg

上图展示的是最简单的 RNN 结构,此外 RNN 还存在着很多变种,比如双向 RNN(Bidirectional RNN),深度双向 RNN(Deep Bidirectional RNN)等。

RNN 的作用最早体现在手写识别上,后来在语音和文本处理中也做出了巨大的贡献,近年来也不乏将其应用于图像处理的尝试。