前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >momentum

momentum

作者头像
mathor
发布2020-01-15 15:24:59
3680
发布2020-01-15 15:24:59
举报
文章被收录于专栏:mathormathor

momentum(动量)的概念源自于物理学,可理解为惯性,那么它是如何帮助我们寻找最优解的呢?

如果把梯度下降法比作是一个小球从山坡到山谷的过程,那么它具体的过程是这样的:从起始点A开始,计算当前A的坡度,沿着坡度最大的方向滑一段路,停下到B,再从B看一看周围的坡度,沿坡度最大的方向再滑一段路,再停下,重复这样的操作,直至到达山谷。但是真正的小球是这样运动的吗?真正的小球从A点滚动到B点的时候,小球带有一定的加速度,一般是不会停下来的,小球会越滚越快,更快的奔向谷底。momentum就是模拟这一过程来加速神经网络优化的。下图直观的解释了momentum的全部内容

深度学习的核心公式是

$$ w^{k+1}=w^{k}-\alpha\nabla f(w^k) $$

我们现在定义一个表达式

$$ z^{k+1}=\beta z^k+\alpha \nabla f(w^k) $$

$z^k$表示之前所有步骤所累积的动量和,$\beta$是一个使得梯度衰减的系数,这样的做法可以让早期的梯度对当前梯度的影响越来越小,如果没有衰减值,模型往往会震荡难以收敛,甚至发散,所以新的参数更新公式变为

$$ w^{k+1}=w^{k}-z^{k+1} $$

展开就是

$$ w^{k+1}=w^k - \alpha \nabla f(w^k) - \beta z^k $$

这样一步步下去,带着初速度的小球就会急速奔向谷底

我们以一个更实际例子讲解

下图是没有设置momentum的时候,网络仅仅只是更新到局部最优解就停止了,而且我们看最开始几次迭代的方向非常random,因为它更新方向仅取决于当前位置的梯度方向

下图是设置了momentum的情况,相比于没有momentum,网络更新更快,而且也几乎找到了全局最优解

但要注意,并不是所有的模型都适合加入momentum,有些加了反而速度变慢(因为考虑了之前的历史因素)

在pytorch中添加momentum参数十分方便,只需要在优化器设置函数中进行添加即可

代码语言:javascript
复制
optimizer = torch.optim.SGD(model.parameters(), args.lr, # learning_rate
                            momentum=args.momentum, # momentum
                            weight_decay=args.weight_decayt_decay) # L2-regularization

但要注意,对于Adam优化器来说,它没有momentum这个参数,因为它已经内置了momentum机制,只有SGD才需要额外设置

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档