深度学习的优化器总结

深度学习(一般指深度神经网络DNN)有几个关键的要素:训练集,网络结构,损失函数(目标函数),优化方法。这里记录一下优化方法相关知识点吧。

为什么使用优化器

训练DNN时,我们的目标是更新网络参数以使得损失函数最小化,optimizer就是更新参数的方法。不同的optimizer都遵循一个基本原则:
在这里插入图片描述
\eta是学习率,也就是每次参数更新的程度。根据是否改变学习率,可以将optimizer分为两大派别。

2. 学习率固定的optimizer

1) BGDBatch gradient descent,即在整个训练集上forwardbackward一次,然后更新一次参数。缺点:收敛速度慢,大量重复计算。

2) SGDStochastic gradient descent,即在每一个训练样本上forwardbackward一次,然后更新一次参数。优点:收敛速度快;缺点:波动大。

3) mini-batch SGD:将训练集分为小的批次(batch),在每一个批次上forwardbackward一次,然后更新一次参数。中和了前两个。一般所说的SGD即为mini-batch SGD

4) momentum SGD 动量

更新当前参数时既考虑当前梯度,又考虑之前的梯度(称之为动量)。
在这里插入图片描述
5) Nesterov SGD 牛顿动量:

添加了校正因子的momentum, 即先用旧的动量更新一遍参数,然后再依据momentum的流程走。

在这里插入图片描述
上述两种动量方法都加速了学习速率,牛顿法添加了校正因子,进一步优化了原始动量方法。

3. 改变学习率的optimizer

上述方法学习率均固定,然而选择学习率又是很困难的,太小会使得收敛速度太慢,训练花费时间太长,太大又会产生波动(可能会跨过最优点)。可以参考下面两张图:
在这里插入图片描述
1) AdaGrad SGD:

每次迭代都会改变学习率,其目的是在平缓的地方使用大学习率,在陡峭的地方使用小学习率,使得收敛速度快的同时防止波动。r 是更新学习率时用的,由公式可知,越平缓,梯度g越小,r越小,则学习率增大(实现平缓处用大梯度)。\sigma为一个小常数,为了防止分母为0。

其中学习率的改变取决于梯度平方的累积(梯度累积为指数累积)(第二个公式)。
在这里插入图片描述
2) RMSProp SGD:

AdaGrad类似,改进梯度累积为指数衰减的移动平均,对非凸函数友好。\rho为衰减指数,指的是对于遥远的过去信息使用量较小。
在这里插入图片描述
3) RMSProp + Nesterov

RMSProp也可以结合动量,既使用了动量又改变了学习率,从两个方面改进优化算法。公式如下,红色部分是RMSProp梯度衰减累积部分,黑色是牛顿动量部分。
在这里插入图片描述
4) Adam SGD (Momentum + RMSProp):

结合了momentumRMSProp,同时也引入了修正项(即衰减的指数梯度累积,和衰减的动量累积)
在这里插入图片描述
一般来说,使用动量且改变学习率,会使得收敛加速且减少波动,因此,adam SGD较为流行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值