作者:爱你一辈子2502860605 | 来源:互联网 | 2023-09-09 16:53
http://blog.csdn.net/linmingan/article/details/50958304
循环神经网络的反向传播算法其实只是BP算法的一个简单变体而已。
首先我们先看看循环神经网络的前向传播算法:
需要注意的是,该RNN中前一时刻到当前时刻只有一个权重矩阵,该权重矩阵与时间并没有什么关系。整个前向传播算法与BP网络的前向传播算法的差别是多了一个前一时刻隐藏层的信息而已。在我们这边的前向传播算法可能与大家平时看到的会有点出入,因为这个前向传播算法将传播过程中的各个阶段都拆分开来表示。在进入激活函数前先用额外的两个变量表示,分别是进入隐藏层激活函数e前的和进入输出层激活函数g前的。进行这样的拆分是为了更好的实现反向传播算法,即链式求导法则。
RNN的前向传播算法是以时间的推移进行的,其实就是一些时序上的数据,比如音频中分帧后的得到的一系列的音频信号帧。RNN的输入数据与其他神经网络如DNN的输入数据不同的是,RNN的输入数据样本不能打乱,必须按时间进行输入,而其他的神经网络输入数据可以打乱。所RNN与其他神经网络的前向传播算法和反向传播算法的实现其实并没有什么特别之处,只是多了几个变量。因此RNN的关于时间的t循环可以看做,第t个训练样本(或者第t个批量训练样本),但是一定要保持先后顺序,不然学习出来的可能没有什么用处。
接下来给出BPTT算法:
从BPTT算法可以看出,要求和的梯度必须先求的梯度,因为从前向传播算法我们可以知道和是直接决定的值的。类似的要求和的梯度必须先求的梯度(上述算法中有错误,从第6行开始应该都改为,请大家注意一下)。这就是神经网络求导中的链式法则(chain rule)。
BPTT算法详解:
其中,
其中,
其中,
其中,
其中,
其中,
其中,
其中,
其中,
那么,在时间上的误差是怎么传播的呢?其实在一开始的BPTT算法流程中就已经显示出了,因为RNN中的参数是在一个for t from T downto 1这个的一个for循环下进行的,并且训练参数的更新,在每个t时刻上是累加的(BPTT中的步骤3,4,7,8,9)。