梯度下降优化器总结

深度学习梯度下降优化器总结

梯度下降优化器主要包含3个优化方向:单次计算样本数、训练加速以及自适应学习率,下边分别说明

调整单次计算样本数

  1. Gradient Descent
    使用全部的样本
    优点:

    • 目标函数若为凸函数,能够保证收敛到全局最优值;若为非凸函数,能够收敛到局部最优值

    缺点:

    • 由于每轮迭代都需要在整个数据集上计算一次,所以批量梯度下降可能非常慢
    • 训练数较多时,需要较大内存
  2. 随机梯度下降(Stochastic Gradient Descent)
    每训练一条数据就算一下损失函数,然后求梯度更新参数
    优点:

    • 算法收敛速度快(在Batch Gradient Descent算法中, 每轮会计算很多相似样本的梯度, 这部分是冗余的)
    • 有几率跳出一个比较差的局部最优而收敛到一个更好的局部最优甚至是全局最优

    缺点:

    • 容易收敛到局部最优,并且容易被困在鞍点
  3. Mini-batch Gradient Descent
    把数据分成若干个批,按批来更新参数,这样一批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。批的样本数与整个数据集相比小了很多,计算量也不是很大。是sgd与bgd的折中
    上述三个方法面临的主要挑战如下:

    • 选择适当的学习率α 较为困难。太小的学习率会导致收敛缓慢,而学习速度太块会造成较大波动,妨碍收敛,可能会跳过全局最优值
    • 目前可采用的方法是在训练过程中调整学习率大小,例如模拟退火算法:预先定义一个迭代次数m,每执行完m次训练便减小学习率,或者当损失函数的值低于一个阈值时减小学习率。然而迭代次数和阈值必须事先定义,因此无法适应数据集的特点
    • 上述方法中, 每个参数的 learning rate 都是相同的,这种做法是不合理的:如果训练数据是稀疏的,并且不同特征的出现频率差异较大,那么比较合理的做法是对于出现频率低的特征设置较大的学习速率,对于出现频率较大的特征数据设置较小的学习速率

训练加速

1.动量加速(Momentum)
基于时间衰减的历史梯度加权,与惯性同方向的梯度更新幅度较大,反之较小
SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力
梯度下降优化器总结_第1张图片

Momentum算法会观察历史梯度vt−1,若当前梯度的方向与历史梯度一致(表明当前样本不太可能为异常点),则会增强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。一种形象的解释是:我们把一个球推下山,球在下坡时积聚动量,在途中变得越来越快,γ可视为空气阻力,若球的方向发生变化,则动量会衰减。这里梯度需要有一个衰减值γ,推荐取0.9
2.NAG(Nesterov Accelerated Gradient 牛顿动量梯度下降)
使用牛顿法对Momentum进行进一步优化,通过引入更早的梯度信息来计算当前的梯度,从而达到更快收敛的效果

自适应学习率

在数据比较稀疏的时候,自适应的方法能得到更好的效果

1.Adagrad
上述方法中,对于每一个参数θi的训练都使用了相同的学习率α。Adagrad算法能够在训练中自动的对learning rate进行调整,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。因此,Adagrad非常适合处理稀疏数据。
Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。
实践中会发现Adagrad使用频率较高,因为现实数据是服从正态分布的,会出现稠密信息和稀疏信息共存的情况,出现频率高的参数会很快的收敛,而出现频率低的稀疏参数收敛速度慢。所以再等待系数参数收敛的过程中如果还继续更新稠密参数可能会增加其过拟合风险
2.Adadelta
对Adagrade由于梯度一直累加出现的梯度趋于0的问题改进,改进方法如下:
1.引入时间窗口,丢失过早的梯度,使其不参与计算
2.基于指数衰减的历史梯度均值加权相加,避免累积梯度增长过快
3.RMSprop
相比Adadelta的梯度平均,使用平方根的均值计算累积梯度
4.Adam
Adam(Adaptive Moment Estimation)是另一种自适应学习率的方法。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳
Adam 方法会比 RMSprop方法收敛的结果要好一些, 所以在实际应用中 ,Adam为最常用的方法,可以比较快地得到一个预估结果,其实就是Momentum+RMSProp的结合,然后再修正其偏差

你可能感兴趣的:(深度学习)