美文网首页
Tensorflow & Keras的optimizer接口总结

Tensorflow & Keras的optimizer接口总结

作者: AIPlayer | 来源:发表于2019-08-27 23:37 被阅读0次

    一、梯度下降法的分类

    从训练样本数量的角度来看,梯度下降法可以分为三个种类:

    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可能会被困在鞍点而无法逃脱。所以,如果需要更快的收敛,或者是训练更深更复杂的神经网络,建议选用自适应的学习率的方法。

    相关文章

      网友评论

          本文标题:Tensorflow & Keras的optimizer接口总结

          本文链接:https://www.haomeiwen.com/subject/frmfectx.html