如何更好地训练神经网络训练

一、局部最小值(local minima)与鞍点(saddle point) 

        梯度为零的地方统称为critical point。local minima已处于局部最低点,网络训练停止;而在saddle point处,可以通过Hessian矩阵计算出梯度下降的新方向。

如何更好地训练神经网络训练

          一般来说,低维空间中的local minima可能在高维度中以saddle point的形式呈现。神经网络的参数个数极多,所以error surface具有极高的维度,实际训练中极少有local minima出现。

二、BatchSize与momentum

        采用BatchSize将训练数据进行分批次遍历,每喂入一个Batch,便计算Loss并反向传播更新参数。

        在训练过程中,当BatchSize较小时,网络所计算的梯度由于只考虑了当前Batch的数据,更具有随机性,不容易陷入critical point。较小的BatchSize使得网络不会陷入过窄的局部最优点,而是驱使其停留在较为平坦的局部最优点。若测试集与训练集的分布有差异,小Batchsize训练的模型会在测试集上有更好的表现。

        momentum方法下,梯度的方向会结合上一次update的方向,有机会突破critical point。

三、Learning Rate的调整

        lr应随着网络训练的进度更新,这样才能保证train的效果。避免当前gradient过大时卡在error surface的山谷的两个谷壁间(loss不下降不一定是因为saddle point或者local minima);避免gradient过小时,网络更新停滞。所以lr应根据当前gradient的大小、网络的训练进度进行适时调整。

假设如何更好地训练神经网络训练为网络的第i个参数,在第t次更新后的值;如何更好地训练神经网络训练为学习率;如何更好地训练神经网络训练 为如何更好地训练神经网络训练的梯度。

1、对于原始的Gradient Descent方式:

如何更好地训练神经网络训练

2、改进:

如何更好地训练神经网络训练

(1) 如何更好地训练神经网络训练:采用root mean square计算之前update时的gradients值。如何更好地训练神经网络训练考虑了各次更新时gradient,并对它们做绝对值加和平均。当梯度开始变小时,平均值下降,总的学习率上升,避免更新停滞;反之,避免更新步距过大。

如何更好地训练神经网络训练

 可改进为RMSProp。

(2)如何更好地训练神经网络训练:lr随时间而自动调整。通常有两种方式:

        a、Learning Rate Decay

如何更好地训练神经网络训练

        b、Warm Up

如何更好地训练神经网络训练

         Warm Up是一种很奇妙的方法。 如何更好地训练神经网络训练是一种经验值,统计了之前update时的gradient情况。但在训练初期, 如何更好地训练神经网络训练作为统计值并不一定能较好的指导网络的训练,所以在训练初期给如何更好地训练神经网络训练较小的值避免网络偏差太多。

(3)如何更好地训练神经网络训练:momentum

 如何更好地训练神经网络训练只考虑gradient的magnitude,如何更好地训练神经网络训练考虑gradient的direction。

 Pytorch中的Adam函数集成了RMSProp + Momentum。

 四、BatchNorm

 

        

 

上一篇:C语言-初阶笔记2


下一篇:拒绝低效丨只需十分钟,提升十倍3D点云连续帧标注效率