深度学习中的优化算法总结

简介

优化算法是一个超参数,一个优化算法不是适合所有损失函数的,没有哪个优化算法是绝对的好或绝对的坏,是要根据损失函数判断的。神经网络都是使用梯度下降这一思想来进行多次迭代,直至满足终止迭代的条件。深度学习的优化算法也是基于梯度下降法这一基础进行发散的。

基本框架

一般优化算法都是相通的。为什么是相通的呢?因为所有的优化算法均基于下面优化算法的基本框架。
在这里插入图片描述
其中,一阶动量和二阶动量分别是历史梯度的一阶函数和二阶函数。对于不同的优化算法而言,区别主要在于第一步和第二步。对于梯度的计算,一阶动量的计算,和二阶动量的计算存在差别。

SGD

SGD理论

由于SGD没有考虑动量,即历史梯度,所以 m t = g t , V t = E m_t=g_t,V_t=E mt=gt,Vt=E,则SGD参数更新公式为:
θ t = θ t − η g t {\theta}_t={\theta}_t-{\eta}g_t θt=θtηgt

批量梯度下降法(Batch Gradient Descent)

批量梯度下降法是计算所有样本的损失函数,然后利用梯度下降法更新模型参数。
优点:由于每一次迭代都用了全部样本,因此损失函数的收敛过程比较稳定。
缺点:当数据量很大时,每一次迭代计算都会计算全部数据的梯度,因此计算速度非常慢。

随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法是每迭代一次,只计算一个样本的损失函数,然后利用梯度下降法更新参数。
优点:训练速度快
缺点:准确度下降

小批量梯度下降法(mini-Batch Gradient Descent)

根据批量梯度下降法和随机梯度下降法的缺点,对所有样本分割成多个数据集,这些数据集被称为mini-Batch,每个数据集迭代一次都执行批量梯度下降算法更新参数。

SGD缺点

  • 选择合适的learning rate比较困难 ,学习率太低会收敛缓慢,学习率过高会使收敛时的波动过大
  • 所有参数都是用同样的learning rate
  • 由于SGD只考虑当前时刻的梯度,在局部最优点的当前梯度为0,SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点

Momentum

在梯度下降的基础上加入了动量,动量优化方法引入物理学中的动量思想:当我们将一个小球从山上滚下来,没有阻力时,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。momentum算法思想:参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是为了抑制SGD的震荡,梯度下降过程可以加入惯性,也就是在SGD基础上引入了一阶动量。Momentum参数更新公式为:
在这里插入图片描述
其中 β \beta β通常取值0.9或者近似值。

Nestrov

除了利用惯性跳出局部沟壑以外,我们还可以尝试往前看一步。即:在Momentum考虑历史梯度的基础上,把当前梯度转换为未来梯度,即将Momentum中的 g t g_t gt换为 Δ J ( θ t − β m t − 1 ) {\Delta}J({\theta}_t-{\beta}m_{t-1}) ΔJ(θtβmt1),参数更新公式为:
在这里插入图片描述

AdaGrad

前面介绍了几种动量法,动量法旨在通过每个参数在之前的迭代中的梯度,来改变当前位置参数的梯度,在梯度稳定的地方能够加速更新的速度,在梯度不稳定的地方能够稳定梯度。
而AdaGrad则是一种完全不同的思路,它是一种自适应优化算法。它通过每个参数的历史梯度,动态更新每一个参数的学习率,使得每个参数的更新率都能够逐渐减小。前期梯度加大的,学习率减小得更快,梯度小的,学习率减小得更慢些。参数更新公式为:
在这里插入图片描述
缺点:随着时间步的拉长,历史累计梯度平方和会越来越大,这样会使得所有维度参数的学习率都不断减小(单调递减),无论更新幅度如何。

RMSprop

AdaGrad有个问题,那就是学习率会不断地衰退。这样就会使得很多任务在达到最优解之前学习率就已经过量减小,所以RMSprop采用了使用指数衰减平均来慢慢丢弃先前的梯度历史。这样一来就能够防止学习率过早地减小。参数更新公式为:
在这里插入图片描述
RMSprop特点:

  • 其实RMSprop依然依赖于全局学习率 η \eta η
  • RMSprop算是AdaGrad的一种发展,和Adadelta的变体,效果趋于二者之间
  • 适合处理非平稳目标——对于RNN效果很好

Adam

Adam方法结合了上述的动量(Momentum)和自适应(Adaptive),同时对梯度和学习率进行动态调整。如果说动量相当于给优化过程增加了惯性,那么自适应过程就像是给优化过程加入了阻力。速度越快,阻力也会越大。参数更新公式为:
在这里插入图片描述
其中 β 1 β_1 β1 β 2 β_2 β2 是两个特有的超参数,一般设为0.9和0.999。但是,Adam还需要对计算出的矩估计进行修正,其中t是迭代的次数,修正的原因简单来说就是由于 m m m v v v的初始值为0,所以第一轮的时候会非常偏向第二项,那么在后面计算更新值的时候根据 β 1 β_1 β1 β 2 β_2 β2的初始值来看就会非常的大,需要将其修正回来。而且由于 β 1 β_1 β1 β 2 β_2 β2很接近于1,所以如果不修正,对于最初的几轮迭代会有很严重的影响。
Adam特点:

  • Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳。
  • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
  • 为不同的参数计算不同的自适应学习率
  • 也适用于大多非凸优化问题——适用于大数据集和高维空间

Adam缺点:

  • Adam算法有可能不收敛,因为二阶动量取决于一段时间内的梯度的积累,这段时间内的数据如果有异常,会导致这个二阶动量极不稳定。在学习的后期,学习率有可能不断震荡,导致整个模型无法收敛。
  • 因为动量的引入,在学习的后期,存在可能使一步过大,错过最优解。

Nadam

思想:Nadam = Nesterov + Adam。核心在于计算当前时刻的梯度时使用了未来梯度。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值