一、梯度下降法的分类
从训练样本数量的角度来看,梯度下降法可以分为三个种类:
1、批量梯度下降(BGD)
在整个训练集上计算损失函数关于参数的梯度
优点:
(1)迭代次数少;(2)若损失函数为凸函数,能够保证收敛到全局最优解;若为非凸函数,能够收敛到局部最优值(结果的准确度)。
缺点:
(1)速度很慢;(2)对内存资源要求高;(3)不能在线学习,即无法在训练过程中增加新的样本。
2、随机梯度下降(SGD)
根据每一个样本更新参数
优点:
(1)训练速度快;(2)支持在线更新;(3)有几率跳出局部最优解。
缺点:
(1)容易收敛到局部最优,并且容易被困在鞍点;(2)迭代次数多。
3、小批量梯度下降(MBGD)
在每次更新时使用n个小批量训练样本
优点:
(1)减少参数更新的方差,可以得到更加稳定的收敛结果;(2)通过矩阵优化方法可以高效地求解每个小批量数据的梯度。
二、梯度下降优化算法
梯度下降优化算法一般分为两种:固定学习率的方法和学习率自适应的方法。
1、固定学习率
-
SGD
最初始的梯度下降算法。
-
Momentum
Momentum旨在加速学习,特别是处理高曲率或带噪音的梯度。Momentum算法会观察历史梯度(动量),若当前梯度的方向与历史梯度一致(表明当前样本不太可能为异常点),则会增强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。
-
NAG
Momentum的变种,用于解决SGD容易陷入局部最优的问题。我们知道Momentum方法中梯度方向由积累的动量和当前梯度方法共同决定,与其看当前梯度方向,不妨先看看跟着积累的动量走一步是什么情况,再决定怎么走。
2、自适应学习率
-
Adagrad
通过记录每次迭代过程中的前进方向和距离,从而使得针对不同问题,有一套自适应调整学习率的方法,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。非常适合处理稀疏数据,极大提高了SGD的鲁棒性,但是存在学习率单调递减以至于最终会接近无限小的问题。
-
Adadelta
在一个窗口期内中对梯度进行求和,而不是对梯度一直累加。
-
RMSprop
Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解Adagrad算法学习率下降较快的问题。
-
Adam
以SGD作为最初的算法,Momentum在其基础上加入了一阶动量(历史梯度的累计),AdaGrad和RMSProp在其基础上加入了二阶动量(历史梯度的平方累计),Adam就是结合了一阶动量和二阶动量算法。
-
AdaMax
基于无穷范数的Adam方法的变体
-
Nadam
Nadam = Adam + NAG
在Tensorflow & Keras的接口如下:
image三、如何选择优化算法
(1)如果数据是稀疏的,建议选用自适应方法,即Adagrad, Adadelta, RMSprop, Adam。RMSprop, Adadelta, Adam 在很多情况下的效果是相似的,随着梯度变的稀疏,Adam 比 RMSprop 效果会好。整体来讲,Adam 是最好的选择。
(2)现在很多论文里都会使用不加momentum 的 SGD。SGD 虽然在一大多数情况下都能达到极小值,但是比其它算法用的时间长且依赖于鲁棒的初始化和退火策略,另外SGD可能会被困在鞍点而无法逃脱。所以,如果需要更快的收敛,或者是训练更深更复杂的神经网络,建议选用自适应的学习率的方法。
网友评论