一、变量定义

 

  此文是我学习BFTT算法的笔记,参考了雷明《机器学习与应用》中的BFTT算法推导,将该本书若干个推导串联起来,下列所有公式都是结合书和资料,手动在PPT上码的,很费时间,但是也加深了自己的理解。

                循环神经网络中BFTT的公式推导

                 循环神经网络中BFTT的公式推导

 

 

二、几个预备知识

 

  (1) 乘法⊙为向量对应元素相乘

  (2) 复合函数求导:

    a.   假设有函数循环神经网络中BFTT的公式推导,假设有f(y),如果把x看成常数,y看成W的函数,则有:

      循环神经网络中BFTT的公式推导

      b.   如果将将W看成常数,y将看成x的函数,则有:

      循环神经网络中BFTT的公式推导

          c. 如果有向量到向量的映射:

      循环神经网络中BFTT的公式推导

      对于函数 f(y), 有

      循环神经网络中BFTT的公式推导

三、完整的算法推导

 

  首先,只有一个循环层和一个输出层的循环神经网络正向传播时的变化为:  

 

     循环神经网络中BFTT的公式推导

  

  损失函数的定义和全连接网络、卷积网络不同。全连接网络和卷积网络的各个训练样本之间没有关系,损失函数是所有样本损失的均值。循环神经网络的单个样本是一个时间序列,每个时刻都有损失,T 为时间序列的长度,因此损失函数定义为沿着时间轴累加:

 

  循环神经网络中BFTT的公式推导

 

  上式中的 Lt 为 t 时刻的损失函数,定义为:

 

  循环神经网络中BFTT的公式推导

 

  循环神经网络的反向传播时基于时间轴进行的,我们需要计算所有时刻的总损失函数对所有参数的梯度,然后用梯度下降法进行更新。另外需要注意的事循环神经网络在各个时刻的权重,偏置都是相同。

  由式(3)结合中复合函数求导,首先计算输出层偏置项的梯度:

 

     循环神经网络中BFTT的公式推导

 

  由式(3)结合复合函数求导,如果选择 softmax 作为输出层的激活函数,交叉熵作为损失函数,上面的梯度为:

 

     循环神经网络中BFTT的公式推导

 

  由式(3)结合复合函数求导,对权重矩阵的梯度为:

 

     循环神经网络中BFTT的公式推导

 

  下面考虑循环层。由(1)式+(2)式,得到:

 

  循环神经网络中BFTT的公式推导

 

  由推导3 + 式(1)的结论,有:

 

    循环神经网络中BFTT的公式推导

 

   由此建立了 循环神经网络中BFTT的公式推导与 循环神经网络中BFTT的公式推导 之间的递推关系。定义误差项为:

 

       循环神经网络中BFTT的公式推导

 

  在整个损失函数 L 中,比 t 更早的时刻1,2,…,t - 1 的损失函数不含有 u因此与它无关; Lt 由  ut  决定,和它直接相关;比 t 晚的时刻的  ut+1  ,ut+2,…,  ut+n 都与  ut  有关。因此有:

 

    循环神经网络中BFTT的公式推导

 

   而

 

   循环神经网络中BFTT的公式推导

 

  把 式15 代入 式14)得到:

 

  循环神经网络中BFTT的公式推导

 

  由此建立了误差项沿时间轴的递推公式。可以类比前馈型神经网络,在前馈型神经网络中,通过后面的误差项计算本层误差项。在循环神经网络中,通过后一个时刻的误差项来计算当前时刻的误差项。递推的终点是最后一个时刻的误差:

 

  循环神经网络中BFTT的公式推导

 

  根据误差项可以计算出损失函数对权重的偏置的梯度。整个损失函数是 u ,u2,…,  uT  的函数,而它们都是权重和偏置的函数。根据链式法则,结合式10、12,有:

 

 循环神经网络中BFTT的公式推导

 

  类似地:

 

    循环神经网络中BFTT的公式推导

 

  对偏置项的梯度为:

 

  循环神经网络中BFTT的公式推导

 

四、BFTT算法流程

 

  计算出对所有权重和偏置的梯度之后,由此可以得到BPTT算法的流程:

 

  循环,对 t = 1,2,…,T

    对(xt ,yt)进行正向传播

  结束循环

  计算出输出层权重和偏置的梯度

  用梯度下降法更新输出层权重和偏置的值

  循环,反向传播,对 t = T,…,2 , 1

    计算误差项 δt

    根据误差项计算循环层权重和偏置的梯度

    用梯度下降法更新循环层权重和偏置的值

  结束循环