梯度下降优化器(2)

动量SGD

动量SGD的思路很容易理解:我们可以想象一个小球从山坡上滑下来,如果速度很慢,它就很容易卡在局部最低点处。但是如果我们加大小球的动量,小球冲出局部最低点的概率将会变大。

因此若我们使用的SGD学习速率很小,就无法冲出局部最低点;若学习速率足够大,就很有可能冲出去,进入下一个下坡轨道。

为了再局部最低点或鞍部保持向前冲的势头,在梯度下降的每一步都移动小球,更新参数w时不仅要考虑当前的加速度(梯度),也要考虑上一次参数更新(当前的速度,来自之前的加速度)

在Keras的SGD优化器中,可以通过momentum选项设定动量:

optimizer = keras.optimizer.SGD(lr=0.01,      # 在优化器中设定学习速率
                               momentum=0.9# 在优化器中设定动量大小

上坡时减少动量——NAG

延续动量的思路,小球在冲过局部最低点后,顺着斜坡达到坡顶,但是由于速度过快,在寻找下一个最低点的时候会盲目选择方向。因此,更好的办法是在谷底加速之后,上坡之时重新放慢速度。涅斯捷罗夫梯度加速(Nesterov Accelerated Gradient,NAG)的思路就是在下坡时增加动量,但是在越过局部最低点后的上坡过程中,又减去动量项。

在Keras的SGD优化器中,可以通过nesterov选项设定涅斯捷罗夫梯度加速:

optimizer = keras.optimizer.SGD(lr=0.01,      # 在优化器中设定学习速率
                               momentum=0.9,  # 在优化器中设定动量大小
                               nesterov=True) # 设定涅斯捷罗夫梯度加速

各参数的不同学习速率——Adagrad

Adagrad也是一种基于梯度的优化算法,叫做自适应梯度(adaptive gradient),即不同参数拥有不同的学习速率。它可以根据前几轮迭代时的历史梯度值调整学习速率。

对于数据集中的稀疏特征,学习速率较快,步幅较大。但是对于非稀疏特征,则使用较小的速率更新。因此这个算法适合处理含有稀疏特征的数据集。比如,在文本处理的词向量(word embedding)训练过程中,对频繁出现的词汇赋予较小发更新,对于很少出现的单词则赋予较大的更新。

Adagrad有一个类似的变体叫AdaDelta,也是在每次迭代时利用梯度值随时构建参数更新值。

加权平均值计算二阶动量——RMSProp

均方根前向梯度下降(Root Mean Square Propogation,RMSProp)解决的是Adagrad中学习速率有时会急剧下降的问题。RMSProp抑制衰减的方法不同于普通的动量,它采用了滑动窗口加权平均值计算二阶动量。同时它也有保存Adagrad中每个参数自适应不同的学习速率的优点。

keras.optimizers.RMSprop()   # RMSProp优化器

多重优化思路的集大成者——Adam

Adam全称为:Adaptive Moment Estimation,相当于Adaptive+Momentum。它集成了SGD的一阶动量和RMSProp的二阶动量。而且也是一种不同参数自适应不同学习速率的方法。区别在于:其计算历史梯度衰减的方式类似动量,而不是使用平方衰减。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值