首页 > 其他分享 >常见优化器对比:梯度下降法、带动量的梯度下降法、Adagrad、RMSProp、Adam

常见优化器对比:梯度下降法、带动量的梯度下降法、Adagrad、RMSProp、Adam

时间:2024-03-22 18:32:09浏览次数:24  
标签:leftarrow 梯度 RMSProp 学习 算法 eta 参数 Adam

系列文章目录

李沐《动手学深度学习》线性神经网络 线性回归
李沐《动手学深度学习》优化算法(相关概念、梯度下降法、牛顿法)
李沐《动手学深度学习》优化算法(经典优化算法)

文章目录


一、梯度下降法

(一)基本思想

先设定一个学习率 η \eta η,参数沿着梯度的反方向移动。假设需要更新的参数为 w w w,梯度为 g g g,则梯度下降法的更新策略为:
w ← w − η ∗ g w\leftarrow w-\eta * g w←w−η∗g

李沐《动手学深度学习》中对于随机梯度下降法的阐释:

在这里插入图片描述

(二)梯度下降法的三种不同形式

  • BGD(batch gradient descent):批量梯度下降,每次参数更新使用所有样本
  • SGD(stochastic gradient descent):随机梯度下降,每次参数更新只使用1个样本
  • MBGD(mini-batch gradient descent):小批量梯度下降,每次参数更新使用小部分数据样本

(三)优缺点

优点:

  • 算法简洁,当学习率取值恰当时,可以收敛到 全局最优点(凸函数)或 局部最优点(非凸函数)。

缺点:

  • 对超参数学习率比较敏感:过小导致收敛速度过慢,过大又越过极值点;
  • 学习率在选代过程中保持不变,很容易造成算法被卡在鞍点的位置;
  • 容易陷入局部极小值。

更优的优化算法从梯度方面和学习率方面对参数更新方式进行优化。

二、带动量的梯度下降法

(一)基本思想

每一步更新都是由前面梯度的累计v和当前梯度g组合而成,进而使得参数的更新具有惯性。

α \alpha α为动量参数, v v v是动量, η \eta η是学习率

  • 累计梯度: v ← α v + ( 1 − α ) g v\leftarrow \alpha v +(1-\alpha)g v←αv+(1−α)g
  • 梯度更新: w ← w − η ∗ v w\leftarrow w-\eta * v w←w−η∗v

(二)优点

  • 在梯度方向改变时,momentum能够降低参数更新速度,从而减少震荡;
  • 在梯度方向相同时,momentum可以加速参数更新, 从而加速收敛。
  • 动量有机会逃脱局部极小值(加入动量后,参数更新就可以保持之前更新趋势,而不会卡在当前梯度较小的点了)。

三、Adagrad:自适应学习率优化算法

Adagrad的关键就是对于不同的参数,会设置不同的学习率

主要思想: 根据每个参数在训练过程中的历史梯度信息来调整学习率,从而使得每个参数的学习率可以自适应地调整,更好地适应不同参数的特性。

特点: 对每个参数的学习率进行适应性调整,使得在训练过程中梯度较大的参数的学习率变小,而梯度较小的参数的学习率变大。

计算方式:

  • 对于每个参数,初始化一个累计平方梯度 r = 0 r=0 r=0,然后每次将该参数的梯度平方求和累加到这个变量上:
    r ← r + g 2 r \leftarrow r+g^2 r←r+g2
  • 学习率为:
    η r + δ \frac{\eta}{\sqrt{r+\delta}} r+δ ​η​
  • 权重更新:( g g g是梯度, δ \delta δ是小参数,为了避免分母为0)
    w ← w − η r + δ ∗ g w\leftarrow w-\frac{\eta}{\sqrt{r+\delta}}*g w←w−r+δ ​η​∗g

四、RMSProp:均方根传播

RMSProp全称为root mean square propagation均方根传播。

RMSProp算法是在AdaGrad算法的基础上,进一步在学习率的方向上进行优化: AdaGrad算法中,由于历史梯度的累积可能会导致学习率不断减小,从而影响算法的收敛速度。RMSProp通过引入一个衰减系数 λ \lambda λ来解决这个问题,从而使得学习率的衰减更加平缓,提高了算法的稳定性和收敛速度。

  • 对于每个参数,初始化一个累计平方梯度 r = 0 r=0 r=0,然后每次将该参数的梯度平方求和累加到这个变量上:
    r ← λ r + ( 1 − λ ) g 2 r \leftarrow \lambda r+(1-\lambda)g^2 r←λr+(1−λ)g2
  • 学习率为:
    η r + δ \frac{\eta}{\sqrt{r+\delta}} r+δ ​η​
  • 权重更新:( g g g是梯度, δ \delta δ是小参数,为了避免分母为0)
    w ← w − η r + δ ∗ g w\leftarrow w-\frac{\eta}{\sqrt{r+\delta}}*g w←w−r+δ ​η​∗g

五、Adam

Adam算法是一种用于优化神经网络训练的自适应学习率优化算法。它结合了动量梯度下降和自适应学习率方法的优点,具有广泛的应用和高效的性能。

在Grandient Descent的基础上,Adam的改进包括:

  • 梯度方面增加了momentum,使用累计梯度 v ← α v + ( 1 − α ) g v\leftarrow \alpha v +(1-\alpha) g v←αv+(1−α)g
  • 用RMSProp优化算法的方式对学习率进行优化,使用累计平方梯度: r ← λ r + ( 1 − λ ) g 2 r\leftarrow \lambda r+(1-\lambda)g^2 r←λr+(1−λ)g2
  • 偏差纠正: v ^ = v 1 − α t \hat{v}=\frac{v}{1-\alpha^t} v^=1−αtv​, r ^ = r 1 − λ t \hat{r}=\frac{r}{1-\lambda^t} r^=1−λtr​

在上述3点改进的基础上,* 权重更新: w ← w − η r ^ + δ ∗ v ^ w\leftarrow w-\frac{\eta}{\sqrt{\hat{r}+\delta}}*\hat{v} w←w−r^+δ ​η​∗v^

六、对比总结

在这里插入图片描述

参考:优化器 |SGD |Momentum |Adagrad |RMSProp |Adam

标签:leftarrow,梯度,RMSProp,学习,算法,eta,参数,Adam
From: https://blog.csdn.net/weixin_47748259/article/details/136914978

相关文章

  • 【python】Python实现梯度下降算法
    (文末包含完整代码)导入需要的包importnumpyasnpimportmatplotlib.pyplotasplt定义函数defget_y(x):y=x**2+x*2+1returny计算梯度defget_gradient(x):getgradient=2*x+2returngetgradient采用梯度下降计算函数最小值时自......
  • Optimizer: SGD, SGD with Momentum, Adagrad, RMSProp, Adam, AdamW
    ......
  • Optimizer: SGD, SGD with Momentum, Adagrad, RMSProp, Adam, AdamW
    ......
  • BSLTR-梯度下降代码的处理
    是否更新x取决于其是否被定义为nn.Parameter。这里是什么意思?在PyTorch中,是否将一个张量(x)更新(在训练过程中通过梯度下降算法调整其值)依赖于它是否被定义为nn.Parameter。nn.Parameter是Tensor的一个子类,专门用于定义模型参数,这些参数是可训练的,也就是说它们可以在模型训练过程......
  • 梯度下降算法原理 用python实现
    1.介绍我们常常说阶梯要慢慢下,但是我们的计算机不这样认为,因为他们是人类智慧的结晶,我们已经知道了最优解,在某些方面,所以我们要找到最速梯度,这样梯度下降就被广泛运用。梯度下降(gradientdescent)在机器学习中应用十分的广泛,不论是在线性回归还是Logistic回归中,它的主要目......
  • 独家原创!基于梯度Q学习机制的电力市场竞价模型程序代码!
    适用平台:Matlab+Yalmip+Cplex程序建立了发电侧和购电侧的策略性竞价模型,并采用基于深度Q网络算法的神经网络模型进行训练,以求取对各市场主体最优的竞价策略,借鉴不完全信息博弈的思想,对市场参与者未知全局信息环境下的发电商和售电商进行竞价行为模拟推演,考虑成员报价策略对市......
  • 深度学习4:感知器-三种激活函数及梯度下降算法
    文章目录1.感知器定义2.激活函数2.1常用的激活函数(1)三种激活函数的值域比较(2)三种函数对于定义域比较(3)PyTorch中的三种激活函数代码3求最优权重和偏置项(w,b)的方法3.1梯度下降算法(一元函数)实例3.2随机梯度下降算法(多元函数,单个样本)实例3.3批量梯度下降算法(......
  • 对梯度下降法中参数更新是减去学习率与偏导数之积而不是学习率与偏导数的倒数之积的理
    这是我在对比softmax回归和线性回归偏导时的一个疑问,看到知乎上有一个人同样的问题,问题链接为:https://www.zhihu.com/question/263929081。原回答里,我非常认可的一个回答是:我的理解是这两种看法都是正确的,分别衍生出不同的优化方法。首先是除以梯度,这是利用了泰勒展开式,从导数......
  • 神经网络梯度消失原因
    个人学习使用,内容来源于网络,侵权删主要原因就是反向传播链式求导某项小于1(如使用sigmoid激活函数,其求导之后值\(\leq0.25\)),越深层次网络导数连乘越多,从而导致梯度消失,反之某项大于1会导致梯度爆炸,因此初始\(W\)过大会导致梯度爆炸。如图所示,当\(\sigma\)激活函数的值太小,经过......
  • 深度学习-卷积神经网络-经典的卷积神经网络-梯度消失-44
    目录1.什么是梯度消失1.什么是梯度消失在梯度下降中,随着算法反向反馈到前面几层,梯度会越来越小,最终,没有变化,这时或许还没有收敛到比较好的解,这就是梯度消失问题,梯度爆炸或者消失!!!1,神经网络损失函数非凸的损失函数,逐步的减小步长,或者叫动态调整学习率2,梯度爆炸的解决,使用梯度......