Optimizer(优化器) -- SGD、Momentum、Adam等介绍

本文详细介绍了传统梯度优化算法(如SGD)及其不足,重点分析了Momentum、AdaGrad、RMSProp和Adam等优化器的工作原理和优势,强调了它们在调整学习率、防止震荡和适应不同场景中的应用。
摘要由CSDN通过智能技术生成

在学习RL代码过程中,对优化器的概念与作用一直不是很清晰,因此重新学习记录一下

1、传统梯度优化(SGD等)

       传统梯度优化在此指BGD、SGD、MBGD,分别为批量梯度下降算法、随机梯度下降算法、小批量梯度下降算法。BGD在训练的时候选用所有的训练集进行计算,SGD在训练的时候只选择一个数据进行训练,而MBGD在训练的时候只选择小部分数据进行训练。这三个优化算法在训练的时候虽然所采用的的数据量不同,但是他们在进行参数优化的时候是相同的。

       在训练的时候一般都是使用小批量梯度下降算法,即选择部分数据进行训练,在此把这三种算法统称为传统梯度更新算法,因为他们在更新参数的时候采用相同的方式,而更优的优化算法从梯度方向学习率方面对参数更新方式进行优化。

       传统梯度更新算法为最常见、最简单的一种参数更新策略。其基本思想是:先设定一个学习率\lambda,参数沿梯度的反方向流动。假设需要更新的参数为\theta,梯度为g,则其更新策略可表示为:
                                                                     \theta \leftarrow \theta - \lambda g
       这种梯度更新算法简洁,当学习率取值恰当时,可以收敛到全面最优点(凸函数)或局部最优点(非凸函数)。但其还有很大的不足点:

  1. 对超参数学习率比较敏感(过小导致收敛速度过慢,需要迭代多次,要求计算资源多;过大又会跳变,跳过极值点)。
  2. 学习率除了敏感,有时还会因其在迭代过程中保持不变,很容易造成算法被卡在鞍点。
  3. 在较平坦的区域,由于梯度接近于0,优化算法会因误判,在还未到达极值点时,就提前结束迭代,陷入局部极小值。

2、Momentum

       与梯度下降不同的是在计算梯度地方,当前时刻的梯度是从开始时刻到当前时刻的梯度指数加权平均,并给这个梯度的指数加权值取了个名字速率v, 既有方向也有大小,即让梯度保留之前的一部分速度和方向。 动量算法每下降一步都是由前面下降方向的一个累积和当前点梯度方向组合而成。含动量的随机梯度下降算法,其更新方式如下:

 v \leftarrow \beta v + (1-\beta)g

 \theta \leftarrow \theta - \lambda v

       既然每一步都要将两个梯度方向(历史梯度、当前梯度)做一个合并再下降,因此可以按照前面一小步位置的“超前梯度”来做梯度合并。这样就可以先往前走一小步,在靠前一点的位置看到梯度,然后按照那个位置再来修正这一步的梯度方向。这样就得到动量算法的一种改进算法,称为Nesterov Accelerated Gradient,简称NAG算法。这种更新的算法能够防止大幅振荡,不会错过最小值,并会对参数更加敏感。

3、AdaGrad

       AdaGrad算法是通过参数来调整合适的学习率,是能独立自动调整模型参数的学习率,对稀疏参数进行大幅更新和对频繁参数进行小幅更新,因此,AdaGrad方法非常适合处理稀疏数据。AdaGrad算法在某些深度学习模型上效果不错。但还是有些不足,可能是因其累积梯度平方导致学习率过早或过量的减少所致。以下是AdaGrad算法的更新步骤:

 r \leftarrow r + g * g

\Delta \theta \leftarrow - \frac{\lambda }{\delta + \sqrt{r}} * g

\theta \leftarrow \theta + \Delta \theta

       \delta为小参数,避免分母为零;r为累计平方梯度。

       简单来讲,通过类似学习率退火的trick来使学习率动态变化,由公式可以看出,在参数空间较为平缓的地方,梯度较小,因此可以获得更快的收敛速度;而在参数空间较陡峭的地方,梯度较大,因此学习率更小,变化更为缓慢,防止越过极值点。

        缺点:学习率以平方的速度积累,过快接近零。

4、RMSProp

        RMSProp是在AdaGrad的基础上进行改进,针对梯度平方和累计越来越大的问题,其用指数加权的移动平均代替梯度平方和。RMSProp为了使用移动平均,还引入了一个新的超参数用来控制移动平均的长度范围。以下是RMSProp算法的更新步骤:

                                                         r \leftarrow \rho r + (1-\rho )g * g

                                                             \Delta \theta \leftarrow - \frac{\lambda }{\delta + \sqrt{r}} * g

                                                                  \theta \leftarrow \theta + \Delta \theta

        因为其采用了指数加权的移动平均来代替梯度的平方和,所以在non-stationary的场景下效果会比较好(可以随意选择窗口N的大小)。

5、Adam

        Adam是结合了Momentum和Adagrad优点的optimizer,从其迭代公式可以看出,其公式如下:

一阶矩估计:m_{t} \leftarrow \beta _{1} * m_{t-1} + (1-\beta_{1}) * g_{t}

二阶矩估计:v_{t} \leftarrow \beta _{2} * v_{t-1} + (1-\beta_{2}) * g_{t}^{2}

一阶矩估计偏差校正:\hat{m}_{t} \leftarrow \frac{m_{t}}{1-\beta_{1}^{t}}

二阶矩估计偏差校正:  \hat{v}_{t} \leftarrow \frac{v_{t}}{1-\beta_{2}^{t}}

更新新参数:\theta_{t} \leftarrow \theta_{t-1} - \alpha * \frac{\hat{m}_{t}}{\epsilon +\sqrt{\hat{v}_{t}}}

        由上式可以看出,一阶矩估计采用的是Momentum的计算法则,二阶矩估计采用的是Adagrad的计算法则,同时,还针对两种指数加权移动平均进行了偏差校正,防止拟合的初始位置与实际值产生较大偏差。

        Adam具有Momentum与Adagrad二者的优点,计算简单,节省内存,同时超参具有可解释性,同时可以进行学习率退火,目标参数不稳定时也可以使用,适用于大规模的数据以及参数的场景,因此被学术界大范围使用,也进化出了诸如AdamW之类的Adam变体等optimizers。

       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值