其他分享
首页 > 其他分享> > 如何更好地训练神经网络训练

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

作者:互联网

一、局部最小值(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的大小、网络的训练进度进行适时调整。

假设\Theta _{i}^{t}为网络的第i个参数,在第t次更新后的值;\eta为学习率;g_{i}^{t} 为\Theta _{i}^{t}的梯度。

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

2、改进:

(1) \sigma _{i}^{t}:采用root mean square计算之前update时的gradients值。\sigma _{i}^{t}考虑了各次更新时gradient,并对它们做绝对值加和平均。当梯度开始变小时,平均值下降,总的学习率上升,避免更新停滞;反之,避免更新步距过大。

 可改进为RMSProp。

(2)\eta ^{^{t}}:lr随时间而自动调整。通常有两种方式:

        a、Learning Rate Decay

        b、Warm Up

         Warm Up是一种很奇妙的方法。 \sigma _{i}^{t}是一种经验值,统计了之前update时的gradient情况。但在训练初期, \sigma _{i}^{t}作为统计值并不一定能较好的指导网络的训练,所以在训练初期给\eta较小的值避免网络偏差太多。

(3)m^{_{i}^{t}}:momentum

 \sigma _{i}^{t}只考虑gradient的magnitude,m^{_{i}^{t}}考虑gradient的direction。

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

 四、BatchNorm

 

        

 

标签:minima,更好,训练,point,gradient,网络,神经网络,local
来源: https://blog.csdn.net/qq_43209693/article/details/121171164