如何更好地训练神经网络训练
作者:互联网
一、局部最小值(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
标签:minima,更好,训练,point,gradient,网络,神经网络,local 来源: https://blog.csdn.net/qq_43209693/article/details/121171164