随机梯度下降
Batch Gradient Descent(BGD)
BGD在训练中,每一步迭代都是用训练集中的所有数据,也就是说,利用现有参数对训练集中的每一个输入生成一个估计输出,然后跟实际输出比较,统计所有误差,求平均以后得到平均误差,并以此作为更新参数的依据.
- 优点: 由于每一步都利用了训练集中的所有数据,因此当损失函数达到最小值以后,能够保证此时计算出的梯度为0,换句话说,就是能够收敛(曲线比较平滑),因此,使用BGD时不需要逐渐降低学习率.
- 缺点: 由于每一步都要用到所有训练数据,因此随着数据集的增大,运行速度会越来越慢.
SGD与MBGD
MBGD是指在训练中,每次使用小批量(一个小批量训练m个样本)的随机采样进行梯度下降.训练方法与BGD一样,只是BGD最后对训练集的所有样本取平均,而MBGD只对小批量的m个样本取平均.SGD是指在训练中每次仅使用一个样本.MBGD与SGD统称为SGD.因为小批量不能代表整个训练集,使得梯度估计引入噪声源,因此SGD并不是每次迭代都向着整体最优化方向.虽然SGD包含一定的随机性(表现为损失函数的震荡),但是从期望来看,它是等于正确的导数的(表现为损失函数有减小的趋势).
- 优点: 训练速度比较快
- 缺点: 在样本数量较大的情况下,可能只用到了其中一部分数据就完成了训练,得到的只是局部最优解.另外,小批量样本的噪声较大,所以每次执行梯度下降,并不一定总是朝着最优的方向前进.
参数更新
其中,
Momentum
在训练中,采取的策略与SGD一样,不同的是学习率的更新方式。动量的参数更新方式为:
直观理解为:
动量方法旨在加速学习(加快梯度的下降速度),特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法累积了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。
动量SGD算法引入
带有动量的SGD的优点:
- 加快收敛速度
- 抑制梯度下降时上下震荡的情况
- 通过局部极小点
分析:假设任意时刻参数的梯度均为,则使用SGD时,时刻的梯度,Momentum算法的梯度.当,因,所以,所以,当时,Momentum更新速度是SGD的10倍
Nesterov(NAG)
Nesterov动量是Momentum的变种,即在计算参数梯度之前,前瞻一步,超前一个动量单位处:
Momentum动量与Nesterov动量的对比如下图所示,其中
注意:图中的以及应该为因为梯度方向是增长速度最快的方向,而图中所示为梯度的反方向,所以应该为、.
Nesterov动量相对于Momentum多了一个本次梯度相对上次梯度的变化量,这个变化量本质上是对目标函数二阶导的近似,由于令了二阶导的信息,Nesterov动量算法才会比Momentum具有更快的收敛速度。
AdaGrad
AdaGrad其实是对学习率进行了约束,AdaGrad独立地适应所有模型参数的学习率,缩放每个参数反比于其它所有梯度历史平方值总和的平方根。损失较大偏导的参数相应地拥有一个快速下降的学习率,而较小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。参数更新公式为:
其中,
优点:
前期
缺点:
由公式可以看出,AdaGrad依赖于人工设置一个全局学习率
Adadelta
Adadelta是对AdaGrad的扩展,AgaGrad会累加所有历史梯度的平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。参数更新方式为:
但是,此时Adadelta其实仍然依赖于全局学习率,因此,又做了一些处理,新的参数更新方式为:
新的参数更新方式,不依赖于全局学习率,并且,训练初中期,加速效果不错,很快;训练后期,反复在局部最小值附近抖动。
RMSprop
RMSprop可以算作Adadelta的一个特例:当
如果再求根的话,就变成了RMS(均方根):
特点:(1)RMSprop依然依赖于全局学习率;(2)RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间;(3)适合处理非平稳目标 - 对于RNN效果很好
Adam
Adam优化器结合了AdaGrad与RMSProp两种算法的优点。对梯度的一阶距估计
注:所有的均表示时刻。、分别是梯度的一阶距估计和二阶距估计,可以看做是对期望、的估计;、是对、的校正,这样可以近似为对期望的无偏估计。
优点:
1. 实现简单,计算高效,对内存需求少
2. 参数的更新不受梯度的伸缩变换影响
3. 超参数具有很好的解释性,且通常无需调整或仅需很少的微调
4. 更新的步长能够被限制在大致的范围内(初始学习率)
5. 能自然地实现步长退火过程(自动调整学习率)
6. 很适合应用于大规模的数据及参数的场景
7. 适用于不稳定目标函数
8. 适用于梯度稀疏或梯度存在很大噪声的问题
参考资料:
1. G-kdom:使用动量(Momentum)的SGD、使用Nesterov动量的SGD
2. 郑思座:谈谈优化算法(动量法、Nesterov法、自然梯度法)
3. https:// blog.csdn.net/u01275913 6/article/details/52302426