TensorFlow知识图谱实战
上QQ阅读APP看书,第一时间看更新

3.3.3 反馈神经网络原理与公式推导

在求导过程中,如果拉长了求导过程或者增加了其中的单元,就会大大增加其中的计算过程,即很多偏导数的求导过程会被反复计算,因此在实际中对于权值达到上十万或者上百万的神经网络来说这样的重复冗余计算所导致的计算量是很大的。

同样是为了求得对权重的更新,反馈神经网络算法将训练误差E看作以权重向量每个元素为变量的高维函数,通过不断更新权重,寻找训练误差的最低点,按误差函数梯度下降的方向更新权值。

提示

反馈神经网络算法的具体计算公式在本节后半部分进行推导。

首先求得最后的输出层与真实值之间的差距,如图3.17所示。

图3.17 反馈神经网络最终误差的计算

之后以计算出的测量值与真实值为起点,反向传播到上一个节点,并计算出节点的误差值,如图3.18所示。

图3.18 反馈神经网络输出层误差的反向传播

以后将计算出的节点误差重新设置为起点,依次向后传播误差,如图3.19所示。

注意

对于隐藏层,误差并不是像输出层一样由单个节点确定,而是由多个节点确定,因此对它的计算要求得到所有的误差值之和。

图3.19 反馈神经网络隐藏层误差的反向传播

通俗地解释,一般情况下误差的产生是由于输入值与权重的计算产生了错误。输入值往往是固定不变的,因此对于误差的调节需要对权重进行更新。权重的更新又是以输入值与真实值的偏差为基础的,当最终层的输出误差被反向一层层地传递回来后,每个节点被相应地分配适合其在神经网络地位中所担负的误差,即只需要更新其所需承担的误差量,如图3.20所示。

图3.20 反馈神经网络权重的更新

图3.20 (续)

在每一层中,需要维护输出对当前层的微分值,该微分值相当于被复用于之前每一层里权值的微分计算。因此,空间复杂度没有变化。同时也没有重复计算,每一个微分值都在之后的迭代中使用。

下面介绍一下公式的推导。公式的推导需要使用到一些高等数学的知识,因此读者可以自由选择学习。

首先是算法的分析,前面已经讲过,对于反馈神经网络算法,主要需要知道输出值与真实值之间的差值。

  • 对输出层单元,误差项是真实值与模型计算值之间的差值。
  • 对于隐藏层单元,由于缺少直接的目标值来计算隐藏层单元的误差,因此需要以间接的方式来计算隐藏层的误差项对受隐藏层单元影响的每一个单元的误差进行加权求和。
  • 权值的更新方面,主要依靠学习速率、该权值对应的输入以及单元的误差项。

1.定义一:前向传播算法

对于前向传播的值传递,隐藏层输出值定义如下:

其中,Xi是当前节点的输入值,是连接到此节点的权重,是输出值,f是当前阶段的激活函数,为当年节点的输入值经过计算后被激活的值。

对于输出层,定义如下:

其中,Whk为输入的权重,为输入到输出节点的输入值。这里对所有输入值进行权重计算后求得和值,作为神经网络的最后输出值ak

2.定义二:反向传播算法

与前向传播类似,首先需要定义两个值kd

其中,kd为输出层的误差项,其计算值为真实值与模型计算值之间的差值;Y是计算值,T是输出真实值;为输出层的误差。

提示

对于dk来说,无论定义在哪个位置,都可以看作当前的输出值对于输入值的梯度计算。

通过前面的分析可以知道,神经网络反馈算法就是逐层将最终误差进行分解,即每一层只与下一层打交道,如图3.21所示。据此可以假设每一层均为输出层的前一个层级,通过计算前一个层级与输出层的误差得到权重的更新。

图3.21 权重的逐层反向传导

因此,反馈神经网络计算公式定义为:

即当前层输出值对误差的梯度可以通过下一层的误差与权重和输入值的梯度乘积获得。在公式中,若为输出层则可以通过求得,为非输出层时则可以使用逐层反馈的方式求得的值。

提示

对于来说,其计算结果都是当前的输出值对于输入值的梯度计算,是权重更新过程中一个非常重要的数据计算内容。

或者换一种表述形式将前面的公式表示为:

可以看到,通过更为泛化的公式把当前层的输出对输入的梯度计算转化成求下一个层级的梯度计算值。

3.定义三:权重的更新

反馈神经网络计算的目的是对权重的更新,因此与梯度下降算法类似,其更新可以仿照梯度下降对权值的更新公式:

即:

其中,ji表示为反向传播时对应的节点系数,通过对的计算,就可以更新对应的权重值。的计算公式如上所示。

对于没有推导的,其推导过程与类似,但是在推导过程中输入值是被消去的,请读者自行学习。