BP算法,即反向传播方法,是用来训练前向网络的一种普遍算法。课本(Artifitial Intelligence: A New Synthesis, Nils J. Nilsson)提供了算法实现方式,每一个输入样本,利用递归等式,根据期望值与实际输出值的误差,从后向前逐步调整权重,从而实现网络的训练与调整。但是神经网络的反向误差传播方法远不是这么简单,通过查找一些资料,可以找到许多重要的但是没有被提及的方面。本文对batch training 与 Incremental Training的区别和学习率作简单的介绍。有一个术语叫Standard Backprop,实际指利用Delta规则进行反向传播。它可以用在两种训练中:Incremental Training 和 Batch Training。前者是在每一个样本被计算后就更新网络的权重,后者是在处理所有的样本后再更新网络的权重。显然,Nilsson的书中所给的算法是属于Incremental Training。对于Batch Training,Standard Backprop通常能够收敛到一个局部极小值,而Incremental Trainin 则不会收敛到误差表面的一个固定点。如果想达到收敛,学习率必逐渐减小,这样的算法称为“随机逼近”。
根据一个人工神经网络电子讲稿中所述,Incremental Training 中接受样本的数据对训练结果有较大的影响,它一般比较“偏爱”后来出现的样本。关于这个问题,可以从算法的实现得到一个直观的理解。对后一个样本处理时,不再考虑前一个样本的误差,通俗地来看,这如同生物随时间推移的进化。生物进化时,影响因素只是当前的环境,而此前的环境与生物下一步要进化到什么样的状态已经没有任何关系,只是在基因中有一些积累。即进化只考虑去适应当前的环境。这对于生物的进化来说,是的确可行的,因为过去的环境确实没有必要去考虑。但对于一个神经网络的训练来说,所有的样本的地位应该都是平等的,与先后顺序无关的。这就限制了Incremental Training的使用,也许可以在样本中寻找一个非常恰当的顺序,按这个顺序对网络进行训练可能会达到一个很好的效果,但是这个顺序如何找出来呢?这是一个难题。如果使用Batch Training,就不用为不收敛或者那些繁琐的学习率调整而头疼。研究者大部分的时间花在加速反向传播的工作上,但是这些方法一般都不合理,比较有效的是Quickprop (Fahlman 1989) 和 RPROP (Riedmiller and Braun 1993)。
在前向网络的训练中,学习率的确定在很大程度上决定网络的收敛速率、训练效果等,如何确定学习率是一个非常重要的问题。太小的学习率会导致网络学习得非常慢。太大的学习率导致权重和目标函数分离,网络瘫痪或不稳定,从而网络根本无法学习。如果用一个恒定的学习率去训练一个网络,那将是一个非常乏味而又冗长的过程,而且最终也可能不成功。Batch Training 没有必要考虑使用常数学习率的问题,或者根本没有必要考虑使用Standard Backprop,既然有许多有效的、快速的算法如Quickprop和RPROP等。
研究者发明了许多Standard BP的变种,但它们大部分有着与Standard BP类似的理论缺陷,即权重改变的幅度被限制为了梯度大小的函数。当用一些小随机数来初始化神经网络的时候,梯度可能很小,但是我们需要一个大的步长去改变权重。当靠近局部极小值的时候,梯度很小,我们又希望权重的改变较小,这样网络才会稳定地收敛。同样,当梯度很大时,我们可能需要大的或小的步长。任何一个将学习率乘以梯度作为步长的算法都有可能在梯度突然变化的时候产生奇怪的结果。Quickprop 和 RPROP 两种算法的优点就在于,它们没有过度地依赖于梯度去计算这个步长。好的算法不应该仅依赖梯度,而应该另外选择一个附加的条件去确定权重的变化量。通过针对书上的例子编程进行实现,我发现对于输入向量(1),无论如何调整训练的顺序,都不能训练出正确的结果。如果不用书上所给的初始权重,而用小随机数初始化权值,则结果更随意,不能达到理想的效果。分析其原因,一方面,学习率的设置不恰当;另一方面,网络的结构过于简单,解决这种线性不可分的函数,可能不能胜任。
Batch Training算法是在训练的过程中,每个样本处理后不调整权重,待所有样本处理完后,将所有的权重改变累加起来做一次调整。