循环神经网络(RNN)

循环神经网络(RNN)主要应用:机器翻译,自然语言处理,文本处理,语音识别, 图像注释, 图像问答等等。

相比较于深度神经网络(DNN)和卷积神经网络(CNN),它最大的特点是前后之间的输入和输出是有联系的,其本质是它拥有了记忆的功能,所以的它的当前输出就依赖于当前的输入和之前的记忆。RNN 是包含循环的网络,允许信息的持久化,它是在网络中不断的迭代更新(举个例子:假如你在大学学了非常好的解题方法,那你初中那时候的解题方法还要用吗?显然是不用了。RNN的想法也一样,既然我能记忆了,那我当然是只记重要的信息啦,其他不重要的)

2. RNN的原理

RNNs的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但由于该网络结构存在“梯度消失”问题,在实际的应用中,当前的预测只能利用与它相邻的前几步信息。 (  个人认为这篇博客写的通俗易懂 https://blog.csdn.net/qq_39422642/article/details/78676567)

最基本的循环神经网络包括一个输入层、隐藏层和一个输出层。

循环神经网络(RNN)

        x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);U是输入层到隐藏层的权重矩阵;o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

将上面的中间的部分展开,说白了一个单元结构重复使用。如下图所示:

循环神经网络(RNN)

用公式表示如下:

St=fw(St-1,Xt);

fw表示**函数,当网络在t时刻时,St的值取决于Xt和前一个隐藏层的值St-1,一般**函数使用tanh函数,

                                                                                    Ot=V*St

利用当前时刻的记忆St去预测t时刻的输出值。