Gradient Descent + Momentum (梯度下降+动量)

Gradient Descent + Momentum

动量(Momentum)

一个能够对抗:鞍点Saddle Point和局部最小值Local Minima 的技术。
在这里插入图片描述
物理世界:
假设 Error Surface 就是真正的斜坡,而我们的参数是一个球,你把球从斜坡上滚下来,如果今天是 Gradient Descent,它走到 Local Minima 就停住了,走到 Saddle Point 就停住了。

但在物理世界,一个球如果从高处滚下来,从高处滚下来就算滚到 Saddle Point,如果有惯性,它从左边滚下来,因惯性它还是会继续往右走,甚至它走到一个 Local Minima,如果今天它的动量够大的话,它还是会继续往右走,甚至翻过这个小坡然后继续往右走。

所以今天在物理的世界,一个球从高处滚下来的时候,它并不一定会被 Saddle Point,或 Local Minima卡住,
运用这样子的概念到 Gradient Descent ,就是Momentum 技术。

Gradient Descent

首先选取一个初始值theta0,
计算Loss在theta0处的梯度g0,
然后根据公式theta1=teta0-aita*g0,
在这里插入图片描述

往 Gradient 的反方向去 Update 参数,得到的theta1就是更新后的参数。

到了新的参数以后,再计算一次 Gradient,再往 Gradient 的反方向,再 Update 一次参数,
到了新的位置以后,再计算一次 Gradient,再往 Gradient 的反方向去 Update 参数,
这个 Process 就一直这样子下去。

在这里插入图片描述

Gradient Descent + Momentum

在这里插入图片描述

引入动量Momentum后的参数更新,不仅要考虑当前的梯度,还要考虑之前所有的梯度。
i.e. 不是只往 Gradient 的反方向来移动参数, 而是Gradient 的反方向,加上前一步移动的方向,两者加起来的结果,去调整去到我们的参数。

  • 如果前一次说要往m1蓝色及蓝色虚线这个方向走
  • Gradient 说要往红色反方向这个方向走
  • 两者相加起来,走两者的折中,也就是往蓝色m2这一个方向走,所以我们就移动了 m2,走到 θ2 这个地方

当我们使用动量的时候,即便当前梯度计算出结果是零,但是之前的梯度是不为零的,所以,参数不会卡在梯度为零的地方,

它会接着更新下去。

整合动量后的参数更新:

在这里插入图片描述

PyTorch 中的代码实现只需要在优化器中,加入一个参数momentum即可
# 3.构造loss and optimizer
criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cmy_CTO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值