随着深度学习的火热,人们在惊呼其效果之外,对其表现出如此效果的内在原理却知之甚少,为此,本文基于自己在之前课堂上学习到的知识对其内部工作情况做一个较为详细的介绍,考虑到目前主流深度学习还是基于随机梯度下降及BP算法进行网络参数的调整,为此本章将对BP算法进行详细的推导,希望能对刚入门的读者有所帮助,当然读者首先需要对神经网络有一定的了解。

我们首先说一下梯度下降算法,假设我们有一个损失函数:

bigru怎么梯度下降 bp和梯度下降_神经网络


现在我们基于梯度下降算法,需要更新参数,从而降低损失函数的值,即:

bigru怎么梯度下降 bp和梯度下降_神经网络_02


为此我们可以得到参数更新公式(即梯度下降算法):

bigru怎么梯度下降 bp和梯度下降_bigru怎么梯度下降_03


这个式子看不懂?没关系,下面解释一下,为什么通过这个简单式子更新参数就能降低损失函数值呢?

在高中的时候,我们就学过导数,假设有一个函数:

bigru怎么梯度下降 bp和梯度下降_机器学习_04


其关于x的导数为:

bigru怎么梯度下降 bp和梯度下降_神经网络_05


同时我们知道:

bigru怎么梯度下降 bp和梯度下降_BP算法_06


而在这里的

bigru怎么梯度下降 bp和梯度下降_神经网络_07


称为偏导数,因为变量是不再是一个单一的变量,可能是一个向量,甚至是一个张量。但是其意义却并没有变化,依然满足偏导数大于零,则递增,偏导数小于零则递减。

还记得我们的目标吗?通过增加或者减少参数从而降低损失函数的值。回到上面参数更新的式子,我们暂忽略掉学习速率:

bigru怎么梯度下降 bp和梯度下降_bigru怎么梯度下降_08


对于偏导数,我们暂不考虑偏导数为零的情况(如果偏导数为零,则参数更新前的值同更新后的值没有变化,即参数并没有得到更新),那么其结果要么大于零,要么小于零。接下来我们分别考虑这两种情况,看参数更新后的变化。

1.偏导数结果大于零

此时,损失函数随着参数值的减少而减少,因此为了能够让损失函数减少,我们需要更新参数,使参数值减少,我们观察上式,更新后的结果有:

bigru怎么梯度下降 bp和梯度下降_BP算法_09


满足降低损失函数值的条件。

2.偏导数结果小于零

此时,损失函数随着参数值的增加而减少,因此为了能够让损失函数减少,我们需要更新参数,使参数增加,我们观察上式,更新后的结果有:

bigru怎么梯度下降 bp和梯度下降_梯度下降_10


满足降低损失函数值的条件。

所以简简单单的上式,即达到通过更新参数(增加或者降低参数值)减少损失函数值的效果。

清楚了梯度下降算法,那么我们接下来谈谈BP算法。我们知道目前主流神经网络中的参数基本都是通过误差反向传播(BP)来进行更新的。为了更好的推导和理解,我们先给出这个让人一目了然的图(此处应该给我们信息学院的朱院长掌声):

bigru怎么梯度下降 bp和梯度下降_机器学习_11


图1:神经网络前向及误差反向传播过程

其中黑色箭头表示前向传播过程,红色箭头表示误差方向传播过程。

我们随便选择神经网络中连续的三个层及不同的节点,我们只要推导出如何更新任何连接的两个层之间的任何节点之间的权重Wij,那么也就可以得到整个网络参数更新过程(我们在这里为了更清楚了解BP过程,所以舍去一些必要的Trick,在实际工作中,会对BP做一些补充或改进,但最基础的还是这些)。所以我们接下来的工作就是怎么得到Wij的更新公式。可能有些读者会说那还不简单,直接按照之前那个梯度下降算法,直接套用不就可以了吗?即得到:

bigru怎么梯度下降 bp和梯度下降_神经网络_12


你只是答对了一部分,但是这个并不适用更新网络中所有层的参数,对于神经网络,损失函数是指网络最后一层的输出,所以当误差反向传播时,对于其他层的参数,误差(损失值)是会变化的。

在推导BP之前,我们先对图1中的几个变量进行简单的表示:

bigru怎么梯度下降 bp和梯度下降_bigru怎么梯度下降_13


为此我们可以得到:

bigru怎么梯度下降 bp和梯度下降_机器学习_14


继续推导有:

bigru怎么梯度下降 bp和梯度下降_神经网络_15


即有:

bigru怎么梯度下降 bp和梯度下降_神经网络_16


基于我们之前的分析,对于输出层(即网络最后一层)及隐藏层,其参数更新公式会有些许的不同,接着我们就输出层及隐藏层中的参数更新公式进行推导。

1.输出层

在这里为了推导的方便,我们假设输出层的损失函数是平方损失,网络共L层,则单样本的损失函数值为:

bigru怎么梯度下降 bp和梯度下降_机器学习_17


则有:

bigru怎么梯度下降 bp和梯度下降_BP算法_18


即有:

bigru怎么梯度下降 bp和梯度下降_梯度下降_19


2.隐藏层

为了更好的理解下面的内容,读者需要对导数的链式法则有一定的了解,如下图所示:

bigru怎么梯度下降 bp和梯度下降_梯度下降_20


图2. 梯度链式法则

在网络前向传播的过程中(如图2中的黑色箭头所示),k-1层中的节点i流向下一层的节点j1,j2,j3,然后流向下一层节点r,为此在误差反传的时候(如图2中的红色箭头所示),即将黑色箭头反向。因此我们知道节点i的梯度来源于节点j1,j2,j3梯度之和,所以我们可以得到:

bigru怎么梯度下降 bp和梯度下降_BP算法_21


故隐藏层的参数更新公式为:

bigru怎么梯度下降 bp和梯度下降_bigru怎么梯度下降_22


为此我们便得到所有层之间参数的更新公式。