深入理解Backpropagation(反向传播)算法

神经网络是通过错误进行学习的。在训练阶段,针对一个学习样本,如果模型作出错误的预测,我们就使用一种叫做Backpropagatiion(反向传播),也叫Backprop的算法更改Weights(权重)的值,进而改善训练模型。Backprop算法的实质是对于每一个学习样本,通过调整 Weights(权重)的值,减少整体的错误值。Backprop算法是非常简单的,这也是它实现起来非常高效的原因,下面进行详细解释。

Backprop算法分为两步,第一步,在神经网络的每个neuron(神经元),计算并存储一个叫delta的变量,这个变量跟神经网络的错误值有关。第二步,利用这些delta值对Weights(权重)值进行更新。

先讲神秘的delta。

出于简化模型的考虑,暂时忽略activation(激活函数),等讲完了基本概念,再把activation加进来。

首先,通过观察,我们发现神经网络有如下性质:

当神经网络中的任何一个neuron的输出值发生改变时,神经网络的错误值成比例变化。

这是因为整个神经网络进行的操作只是乘法与加法,neuron输出值的变化必然引起神经网络错误值的线性变化。而神经网络的错误值变化量与neuron输出值的比值就叫做delta or δ。

如图所示,我们通过向neuron的和值增加一个任意的量m来改变neuron的输出值,m乘以δ表示

神经网络错误的增加值。

通过向neuron B的输出值增加一个变化量m,同样可以计算神经网络错误的增加量。这个δ

同样是D的delta值。

介绍完了delta,来看看如何计算delta的值。

这里举个简单的神经网络做为例子,该例把一个二维顶点分类为两个类别。对于一个给定的样本,提供两个特征值X,Y到神经网络,输出值为预测值P1,P2,然后我们根据error formula计算出error值,

当error值为0,表示完美预测,error越大误差越大。

神经网络错误值的可视化显示。左上角表示label为(0,1)时,P1,P2的值与神经网络错误值的关系,

error是一个碗形的图像,在P1=0,P2=1时,取得最小值。左下角表示label为(1,0)时,P1,P2的值与神经网络错误值的关系,error是一个碗形的图像,在P1=1,P2=0时,取得最小值。

左边的图像表示图4的切片图,表示,label(1,0),P2=0,时,P1值的图像。右边的图像表示左边图像 横截面的曲线,我们可以看到神经网络错误值与P1的关系。

考虑到P1=Co,P2=Do,由此可知,delta = 导数

计算出了Cδ和Dδ,再来看其他neuron的delta的计算。

左边表示当neuron A的输出值发生变化时,neuron C的输出值也发生相应的变化,并最终导致神经网络错误值也发生变化。右边表示neuron A与neuron C的delta值之间的关系。

由于neuron A连接neuron C和neuron D,neuron A的输出值发生变化,必然导致neuron C和neuron D的输出值也发生变化,进而导致神经网络错误值也发生变化。

左(a)表示neuron A的正向和反向输出模型。左(b)表示正向输出模型。左(c)表示反向输出模型。右边分别为计算输出值和delta值的计算方法。

Backprop算法运行中。

至此完成了Backprop算法的第一步,下面来看第二步的计算,

假设我们对AC的weight值增加ACm,则神经网络的错误值增加(Ao×ACm)×Cδ,现在假设ACm=1,则可以得到如下图的对应关系,

AC的更新,ACm = -11/(AoCδ);此为当神经网络错误值变化量为1时的AC变化量。

开始讲到忽略activation,现在把activation纳入进来考虑。