[AI 笔记] Optimization参数优化

[AI 笔记] Optimization参数优化


参考资料:
CS231n

SGD的问题

现在假设对2维的参数空间进行优化,如下图:

其中最红的地方代表最小值点,即优化目标。

对于SGD而言,就是简单地计算梯度,然后把负梯度乘以一定的学习率后加在权重上对其更新。
在这里插入图片描述
按照SGD的更新策略,其从初始位置到达最优点的路径应该如下图所示,是之字形的路线。显然效率不高。
在这里插入图片描述
另外,如果在参数空间中遇到极小值点,或者鞍点(saddle point),由于这两处的梯度为0,SGD就会卡住,如下图所示。

在实际操作中,由于有成千上万个参数,参数空间为成千上万维。在任意一个方向上,损失都增加的概率比较小,所以极小值点出现的概率是比较小的,遇到最多的问题应该是鞍点。

对于鞍点而言,在其两边的梯度接近于0,也会导致模型训练速度过慢。
在这里插入图片描述
另外,SGD的梯度来源于minibatch,即小批量数据,而不是全局的梯度,所以相当于在真实梯度上加入了噪声,如下图所示。也会影响训练速度。
在这里插入图片描述

SGD + Momentum

一个简单的解决办法就是加动量的SGD,如下图所示。在这里插入图片描述
这里定义一个动量 v,结合下图进行理解。真实的前进方向是梯度与Velocity的矢量和。
在这里插入图片描述
加动量的SGD相当于每次都具有一个初速度,这样遇到鞍点,或者极小值点,就能跳出来了。如下图所示,其接近最小值的路径也不是之字形了。
在这里插入图片描述

AdaGrad

AdaGrad 记录了一个梯度的平方和累加,步进时,梯度除以这个平方和累加(其中的常数防止分母为零)。那么在梯度较小的维度上,其梯度也能相对地放大,从而使得AdaGrad在每一个维度上都有较好的参数更新。
在这里插入图片描述

RMSProp

由于 AdaGrad 中,记录的是梯度的平方和累加,所以随着时间推移,它会越来越大,这在凸函数中是比较好的,因为它最后会以较低的速度接近最小值,但如果是非凸函数,它可能会卡在极小值点或者鞍点。所以在 RMSProp 中,对这个平方和累加进行了一定的衰减。
在这里插入图片描述

Adam

Adam 是动量SGD和 RMSProp 的结合。如下图所示,既维护了带动量的梯度,也维护了梯度平方累加及其衰减。最后是用带动量的梯度除以梯度平方累加。

中间的 Bias correction 用来解决在刚开始的时候,Adam 可能步进过多的问题。用时间 t 来对其进行调整。
在这里插入图片描述

总结

在实际运用中,Adam 的表现一般都比较好,可以粗暴地选择 Adam。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值