线材下料优化python算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)

8dcbef35209d108c8bcdb3c437ba8409.png

AdaGrad(Adaptive Gradient)

AdaGrad[1]是2011年发表的一种亚梯度方法,在很多大规模问题上验证了有效性.

它的迭代为:

关于数学符号,请看

郝曌骏:机器学习中的优化算法(1)​zhuanlan.zhihu.com
f8c9886f89726e706d0b3643076ef28e.png


AdaGrad有类似于learning rate annealing的效果,不过学习率衰减不是迭代次数的函数,而是梯度平方和的平方根的函数.
预期达到的效果就是:- 之前梯度相对比较大的维度上更新幅度相对小.不同的维度的更新幅度的差距会减小- 随着梯度平方和的增加,更新幅度会越来越小,接近0

2a415c09decd2463a539a430177bf02b.png
AdaGrad超参对比1

fd2bcbf1cffc0c8b5a606d27a928f380.png
AdaGrad超参对比2


缺点:

  • 分母持续增大,更新幅度会趋近于0,后期停滞
  • 梯度的量级被消除,更新量对学习率很敏感
  • 算法对学习率
    很敏感,参考上面不同量级的学习率下算法的表现

Adadelta

Adadelta[2]是2012年作者在Google实习时提出的对AdaGrad的改进.

每次迭代为

其中

不仅为了稳定数值计算,同时也是为了初始化
.

Adadelta对于AdaGrad的改进主要是

  • 对于每个维度,用梯度平方的指数加权平均代替了至今全部梯度的平方和,避免了后期更新时更新幅度逐渐趋近于0的问题
  • 用更新量的平方的指数加权平均来动态得代替了全局的标量的学习率,避免了对学习率的敏感
  • 同时,文章作者提出Adadelta保证了更新量的量纲和参数一致

e593f75e6ff9a1f57b2a1b007d52aa53.png
Adadelta超参对比1

9c85d305cafe88b998aac4023a70f4bd.png
Adadelta超参对比1

但是,实验中发现不需要人工设定的学习率,但是对

很敏感,因为第一步的步长是
  • 小了的话,前期步长很小
  • 大了的话,后期容易引起震荡

作为对比,以下是带Momentum的GD和RMSProp的效果

9597b4b77fdfb31b09d1cbf7fb803bfb.png

附录1

画图的代码

import 

附录2

AdaGrad和Adadelta在pytorch中的实现为

import torch
torch.optim.Adagrad() # 学习率默认为1
torch.optim.Adadelt() # 学习率默认为0.01

参考

  1. ^AdaGrad的论文 http://jmlr.org/papers/volume12/duchi11a/duchi11a.pdf
  2. ^Adadelta的论文 https://arxiv.org/abs/1212.5701
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值