一、BP(Back Propagation)算法
是1986年由Rinehart和McClelland为首的科学家提出,按误差逆向传播算法训练多层前馈网络,是目前最广泛的神经网络模型之一。BP网络能学习和存储大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。学习过程使用最快下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
二、BP神经网络举例
1、样本网络结构
和所有训练神经网络或深度学习模型的流程一样,首先要确定网络结构。上图表示2个输入节点,2个隐藏节点,2个输出节点。b1、b2是bias项。
2、BP算法训练过程
BP算法的目的是优化神经网络的权重,从而使得摩西能够将输入值正确的映射到实际的输出值。上图中可以看到,输入0.05,正确输出应该为0.01,输出0.10,正确输出应该为0.99,接下来咱们开始训练,得到正确的w值。
3、前向传播过程
前向传播很简单,就是在已经给定的数据和参数下,逐层计算网络每个节点的数值,一直到最后输出层,计算输出结果和正确结果之间的误差。
咱们使用激活函数logistic函数(或者sigmoid函数):
首先计算隐藏节点h1的输入值:
得到h1的输入值后,我们使用激活函数来把输入值转换为h1的输出值:
同样方式得到h2的输出值:
类似于h1和h2的过程,我们可以计算输出层节点o1,o2的值。下面o1、o2的输出值计算过程:
4、计算模型总误差
得到网络的输出值后,可以计算输出值和正确值之间的误差。这里使用平方误差来计算模型总误差:
上面的target是样本的正确真实值。输出节点o1,o2的误差为:
5、后向传播过程
后向传播过程就是迭代网络参数w的过程,通过误差的后向传播得到新的模型参数w,基于这个新的模型参数,再经过下一次的前向传播,模型误差会减小,从而使得模型输出值与实际值越接近。
我们先来看了离误差最近的输出层中涉及的参数。以w5为例,我们想知道w5的改变对整体误差的影响,那么我们自然会想到对模型总误差求关于w5的偏导数
这个值也成为误差在w5方向上的梯度。应用求导的链式法则,我们对偏导数进行如下改写:
这个公式可以对应到具体的网络结构:
为了得到偏导数的值,我们计算上面公式中每个因子的数值。首先计算误差关于o1输出值的偏导数,计算如下:
下一步计算
这个值的含义和上面的公式所示,就是激活函数对自变量的求导:
logistic函数对自变量的求导。
接下来计算最后一个因子的值:
那么对w5求偏导数就很直接了:
得到三个因子后,我们就得到总误差关于w5的偏导数:
为了减小误差,类似于使用梯度下降的方法更新w5的值:
上面公式中的η为学习率(learning rate),这里设置为0.5,在实际训练模型中,需要根据实际的样本数据调整。
类似的方式,我们同样求出
同样的方式,我们来计算隐藏层的参数值。
我们对总误差求关于w1/w2/w3/w4的偏导数来获得更新值。首先应用求导的链式法则对总误差关于w1/w2/w3/w4的偏导数,以w1为例子:
用网络结构图来表示如下物理意义:
与输出层中对权重求导数不同的地方是,由于每个隐藏层节点都会影响到输出层节点,在求总误差对隐藏层的输出变量求导时候,需要对组成总误差的每个输出层节点误差进行分别求偏导数。具体如下:
这一步可以利用输出层的计算结果。
激活函数:
最后把三个因子相乘就是我们需要计算的值:
w1权重的值更新为:
同样的方式计算出:
从上面更新隐藏层节点参数的过程中,我们可以看到,这里的更新并没有用到输出层节点更新后的参数值,还是基于老的参数来进行的。
同样bias的值,也可以通过类似方式操作。
到这里,我们已经进行了一次BP的迭代,更新参数后,再走一遍前向和后向传播,可能改变不大,但是经过无数次迭代后,最终的输出结果将会和正确值非常接近。
三、总结
经过上面一次迭代过程的简介,应该明白神经网络如何利用BP算法进行训练了。