机器学习常用数值优化算法

本文介绍了机器学习中常用的优化算法,包括SGD及其变种(带Momentum和Nesterov Momentum),以及AdaGrad、RMSProp和Adam。这些算法通过动态调整学习率来提高梯度下降的效率。文章还对比了二阶优化算法如牛顿法和拟牛顿法,探讨了它们在深度学习中的应用和优缺点。
摘要由CSDN通过智能技术生成

假设损失函数为 J ( θ ) J(\theta) J(θ),参数为 θ ∈ R n \theta \in R^n θRn

一阶优化算法

SGD (随机梯度下降)

参数更新公式
θ t + 1 = θ t − α ∇ J ( θ t ) \theta_{t+1} = \theta_{t} - \alpha \nabla J(\theta_{t}) θt+1=θtαJ(θt)
其中, α \alpha α为学习率。
缺点: SGD靠近极小值时收敛速度会很慢,如果learning rate设置过大,还容易在极小值左右震荡,而无法达到极小值。

SGD with Momentum

目的: 加快梯度下降的收敛速度,并减少震荡。
参数更新公式:
v t + 1 = μ v t − α ∇ J ( θ t ) θ t + 1 = θ t + v t + 1 v_{t+1} = \mu v_t - \alpha \nabla J(\theta_t) \\ \theta_{t+1} = \theta_{t} + v_{t+1} vt+1=μvtαJ(θt)θt+1=θt+vt+1
其中, μ \mu μ是动量的衰减项, α \alpha α是学习率。
带动量的SGD能够很好的解决”Z“字形下降的case。如图:
在这里插入图片描述
对Y方向,希望学习率小一点从而减少抖动;而对X方向,又希望学习率大一些能够加快学习速度。而这种期望对于SGD算法的过程是矛盾的。如果加入动量的话,那么SGD算法在Y轴上的上下波动能够得到有效抑制,而在X方向又能够累计有效梯度,加快收敛速度。

SGD with Nesterov Momentum

参数更新公式:
v t + 1 = μ v t − α ∇ J ( θ t + μ v t ) θ t + 1 = θ t + v t + 1 v_{t+1}=\mu v_t - \alpha \nabla J(\theta_t+\mu v_t) \\ \theta_{t+1} = \theta_t + v_{t+1} vt+1=μvtαJ(θt+μvt)θt+1=θt+vt+1
其中, μ \mu μ是动量的衰减项, α \alpha α是学习率。
与SGDM区别为其梯度是前进一步之后的梯度,而非当前梯度,形象化的解释就是这次移动时,考虑未来的可能移动步伐,如果未来的移动步伐仍较大,则这次也可以多走一些。但如果未来的步伐缩小了,那不妨从这步开始就缩小步伐。
从数学上的理解则如下:
https://zhuanlan.zhihu.com/p/22810533

上述的方法都依赖于人工设定的学习率,所以下述几个方法,从动态设置学习率的角度入手提升SGD的效果

AdaGrad

AdaGrad根据历史的梯度值动态调整学习率,具体地,其更新公式如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值