累积误差逆传播怎么算?以整个训练集的累积误差为目标更新参数
累积误差逆传播算法,简称累积 BP 算法,是神经网络误差逆传播(反向传播)算法的一种变体。它的特点是以整个训练集上的累积误差作为要最小化的目标,读取完全部训练样本之后才更新一次网络的参数。本站另有“累积误差反向传播”词条介绍它与标准算法的区别,这里侧重说明它的计算过程和使用要点。
优化目标
对于每一个训练样本,可以用网络的输出与期望输出之间差值的平方和来衡量这个样本上的误差,叫作单个样本的误差。标准的误差逆传播算法每次针对的是单个样本的误差。累积误差逆传播算法针对的则是累积误差,也就是所有训练样本误差的平均值。由于整个训练集的累积误差才是我们真正想要降低的目标,累积 BP 算法的更新方向直接对应着这个目标。
计算过程
以一个包含一个隐藏层的前馈神经网络为例,一轮完整的累积 BP 计算大致是这样的:首先,把所有用于累加梯度的变量清零;然后,依次处理每一个训练样本:进行前向计算,从输入层经过隐藏层得到输出层的结果;计算这个样本的输出误差;利用链式法则,计算输出层神经元的梯度项,再把误差逆向地传播到隐藏层,计算隐藏层神经元的梯度项;根据这些梯度项,计算出这个样本对每一个连接权重和每一个神经元阈值的梯度,但不立即更新参数,而是把它们累加起来;当所有的训练样本都处理完之后,用累加的梯度除以样本的数量,得到平均梯度,再乘以学习率,对所有的权重和阈值进行一次更新。这样就完成了一轮训练。重复多轮,直到累积误差足够小,或者达到了预先设定的轮数。
与标准 BP 的对比
标准 BP 算法每处理一个样本就更新一次参数,参数更新得非常频繁,但不同样本带来的更新方向可能相互矛盾,出现“此消彼长”的现象,因此需要更多次的迭代。累积 BP 算法每一轮只更新一次,方向是全体样本的平均梯度,更新更加稳定,所需的迭代次数通常更少。但它也有不足:每一次更新都要处理完整个训练集,当数据量很大时非常耗时;而且当累积误差下降到一定程度后,进一步的下降可能变得非常缓慢。这时,标准 BP 往往能更快地获得较好的解。从优化的角度看,标准 BP 对应随机梯度下降,累积 BP 对应批量梯度下降。
使用要点
累积 BP 算法适合训练数据量不大、可以一次性处理全部数据的情况。由于每轮只更新一次,可以使用相对较大的学习率,但仍然需要注意不能过大,以免越过最优点、导致误差来回震荡。和其他基于梯度的方法一样,它也可能陷入局部最小,可以通过多次随机初始化、加入动量等方法加以缓解。为了防止过拟合,可以采用早停:把数据分出一部分作为验证集,当验证集上的误差开始上升时就停止训练;或者在误差目标中加入描述网络复杂度的正则化项。在今天的深度学习实践中,常用的是介于两者之间的小批量梯度下降,以及在显存不足时把多个小批次梯度累加后再更新的“梯度累积”技巧。