循环神经网络的反向传播算法其实只是BP算法的一个简单变体而已。

首先我们先看看循环神经网络的前向传播算法:

循环神经网络(RNN)反向传播算法(BPTT)

需要注意的是,该RNN中前一时刻到当前时刻只有一个权重矩阵循环神经网络(RNN)反向传播算法(BPTT),该权重矩阵与时间并没有什么关系。整个前向传播算法与BP网络的前向传播算法的差别是多了一个前一时刻隐藏层的信息循环神经网络(RNN)反向传播算法(BPTT)而已。在我们这边的前向传播算法可能与大家平时看到的会有点出入,因为这个前向传播算法将传播过程中的各个阶段都拆分开来表示。在进入**函数前先用额外的两个变量表示,分别是进入隐藏层**函数e前的循环神经网络(RNN)反向传播算法(BPTT)和进入输出层**函数g前的循环神经网络(RNN)反向传播算法(BPTT)。进行这样的拆分是为了更好的实现反向传播算法,即链式求导法则。

RNN的前向传播算法是以时间的推移进行的,其实就是一些时序上的数据,比如音频中分帧后的得到的一系列的音频信号帧。RNN的输入数据与其他神经网络如DNN的输入数据不同的是,RNN的输入数据样本不能打乱,必须按时间进行输入,而其他的神经网络输入数据可以打乱。所RNN与其他神经网络的前向传播算法和反向传播算法的实现其实并没有什么特别之处,只是多了几个变量。因此RNN的关于时间的t循环可以看做,第t个训练样本(或者第t个批量训练样本),但是一定要保持先后顺序,不然学习出来的循环神经网络(RNN)反向传播算法(BPTT)可能没有什么用处。

接下来给出BPTT算法:

循环神经网络(RNN)反向传播算法(BPTT)

从BPTT算法可以看出,要求循环神经网络(RNN)反向传播算法(BPTT)循环神经网络(RNN)反向传播算法(BPTT)的梯度必须先求循环神经网络(RNN)反向传播算法(BPTT)的梯度,因为从前向传播算法我们可以知道循环神经网络(RNN)反向传播算法(BPTT)循环神经网络(RNN)反向传播算法(BPTT)是直接决定循环神经网络(RNN)反向传播算法(BPTT)的值的。类似的要求循环神经网络(RNN)反向传播算法(BPTT)循环神经网络(RNN)反向传播算法(BPTT)的梯度必须先求循环神经网络(RNN)反向传播算法(BPTT)的梯度(上述算法中有错误,从第6行开始循环神经网络(RNN)反向传播算法(BPTT)应该都改为循环神经网络(RNN)反向传播算法(BPTT),请大家注意一下)。这就是神经网络求导中的链式法则(chain
rule)。

BPTT算法详解:

循环神经网络(RNN)反向传播算法(BPTT) 

其中,循环神经网络(RNN)反向传播算法(BPTT)

循环神经网络(RNN)反向传播算法(BPTT)                     
             
       其中,循环神经网络(RNN)反向传播算法(BPTT)

循环神经网络(RNN)反向传播算法(BPTT) 

其中,循环神经网络(RNN)反向传播算法(BPTT)

循环神经网络(RNN)反向传播算法(BPTT) 

其中,循环神经网络(RNN)反向传播算法(BPTT)

 循环神经网络(RNN)反向传播算法(BPTT)                                       
                       

       其中,循环神经网络(RNN)反向传播算法(BPTT)

循环神经网络(RNN)反向传播算法(BPTT) 
     

       其中,循环神经网络(RNN)反向传播算法(BPTT)         

 循环神经网络(RNN)反向传播算法(BPTT)                   
            

       其中,循环神经网络(RNN)反向传播算法(BPTT)

 循环神经网络(RNN)反向传播算法(BPTT) 
   

       其中,循环神经网络(RNN)反向传播算法(BPTT)

循环神经网络(RNN)反向传播算法(BPTT) 
                  

       其中,循环神经网络(RNN)反向传播算法(BPTT)

第10步骤中的循环神经网络(RNN)反向传播算法(BPTT)就是用来更新第5步骤中右边的循环神经网络(RNN)反向传播算法(BPTT)