pytorch中常见的优化算法介绍(代码片段)

WXiujie123456 WXiujie123456     2022-12-22     740

关键词:

常见的优化算法介绍

梯度下降算法(batch gradient descent,BGD)

每次迭代都需要把所有样本都送入,这样的好处是每次迭代都顾及了全部的样本,做的是全局最优

梯度下降:全局最优

随机梯度下降法(Stochastic gradient descent,SGD)

针对梯度下阵算法训练速度过的缺点,提出了随机梯度下降算法,随机梯度下降算法是从样本中随机抽出一组,训练后按梯度更新一次,然后再抽取一组,再更新一次,在样本量极其大的况下,可能不用训练完所有的样本就可以获得一个损失值在可接受范围之内的模型了。

torch中的api为:torch,optm.SGD()

随机梯度下降:随机地从样本中抽取一个样本进行梯度的更新

小批量梯度下降(Mini-batch gradient descent,MBGD)

SGD相对来说要快很多,但是也有存在问题,由于单个样本的训练可能会带来很多噪声,使得SGD并不是每次迭代都向着整体最优化方向,因此在刚开始训练时可能收敛得很快,但是训练一段时间就会变得很慢。在此基础上又提出了小批量梯度下降法,它是每次从样本中随机抽取一小批进行训练,而不是一组,这样既保证了效果又保证了速度。

小批量梯度下降:找一批数据计算梯度,使用均值更新参数

动量法

梯度角度

mini-batch SGD算法虽然这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊。

另一个缺点就是 mini-batch SGD需要我们挑选一个合适的学习率,当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢:当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点,我们所希望的仅仅是网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大。

所以 Momentum优化器刚好可以解决我们所面临的问题,它主要是基于梯度的移动指数加权平均,对网络的参数进行平滑处理的,让梯度的摆动幅度变得更小
KaTeX parse error: No such environment: align* at position 8: \\begin̲a̲l̲i̲g̲n̲*̲̲ &v = 0.8v + 0.…

动量法:对梯度进行平滑,防止振幅过大

AdaGrad

学习率角度

AdaGrid算法就是将每一个参数的每一次迭代的梯度取平方累加后再开方,用全局学习率除以这个数,作为学习率的动态更新,从而达到自适应学习率的效果。
KaTeX parse error: No such environment: align* at position 8: \\begin̲a̲l̲i̲g̲n̲*̲̲ &gradent = his…

AdaGrad:自适应学习率

RMSProp

学习率角度

Momentum(动量法)优化算法中,虽然初步解决了优化中摆动幅度大的问题,为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法对参数的梯度使用了平方加权平均数。(视频中说是和AdaGrid比较,在算第一步gradent的时候多了加权平均)
KaTeX parse error: No such environment: align* at position 8: \\begin̲a̲l̲i̲g̲n̲*̲̲ &gradent =0.8 …

PMSProp:对学习率进行加权

Adam

梯度+学习率角度

Adam(Adaptive Moment Estimation,自适应矩估计)算法是将Momentum算法和RMSProp算法结合起来使用的一种算法,能够达到防止梯度的摆幅过大,同时加快收敛速度的作用。

  1. 需要初始化梯度的累积量和平方累积量
    v w = 0 , s w = 0 v_w = 0,s_w=0\\\\ vw=0,sw=0
  2. 第 t轮训练中,我们首先可以计算得到Momentum和PMSProp的参数更新:
    v w = 0.8 v + 0.2 ∇ w , M o m e n t u m 计 算 的 梯 度 s w = 0.8 ∗ s + 0.2 ∗ ( ∇ w ) 2 , P M S P r o p 计 算 的 梯 度 v_w = 0.8 v +0.2\\nabla w ,Momentum计算的梯度\\\\ s_w=0.8*s+0.2*(\\nabla w)^2 ,PMSProp计算的梯度 vw=0.8v+0.2w,Momentumsw=0.8s+0.2(w)2,PMSProp
  3. 对其中的值进行处理后,得到:
    w = w − α s w + δ v w w = w - \\frac\\alpha\\sqrts_w+\\deltav_w w=wsw +δαvw
    torch中的api为:torch.optim.Adam()

Adam:动量法+PMSProp,学习率能够自适应,梯度的振幅不会太大

更多Pytorch知识梳理,请参考: pytorch学习笔记

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

机器学习几种常见优化算法介绍(代码片段)

机器学习几种常见优化算法介绍https://blog.csdn.net/class_brick/article/details/78949145 1.梯度下降法(GradientDescent)2.牛顿法和拟牛顿法(Newton‘smethod& Quasi-NewtonMethods)3.共轭梯度法(ConjugateGradient)4.启发式优化方法 5 查看详情

pytorch学习笔记

张量相关介绍梯度下降和方向传播pytorch实现线性回归Pytorch中常见的优化算法介绍未完待续························ 查看详情

pytorch常用优化器总结(包括warmup介绍及代码实现)(代码片段)

...小批量梯度下降法(MBGD)动量优化SGD+MomentumNAGpytorch中SGD:自适应学习率AdaGradAdadeltaRMSPropAdamwarmup优化算法大致分为:梯度下降法,动量优化法,自适应学习率三种。梯度下降法梯度下降GD通过lo 查看详情

pytorch常用优化器总结(包括warmup介绍及代码实现)(代码片段)

...小批量梯度下降法(MBGD)动量优化SGD+MomentumNAGpytorch中SGD:自适应学习率AdaGradAdadeltaRMSPropAdamwarmup优化算法大致分为:梯度下降法,动量优化法,自适应学习率三种。梯度下降法梯度下降GD通过lo 查看详情

python3中.pyi文件介绍(代码片段)

   在看PyTorch代码时,在一些模块中经常会发现.pyi文件,如下图所示,是PyTorch中torch/optim模块中的.pyi文件:   每种实现优化算法的.py文件,都有一个对应的.pyi文件,每个.pyi文件中的内容都相似,... 查看详情

pytorch.optimizer优化算法(代码片段)

https://zhuanlan.zhihu.com/p/346205754https://blog.csdn.net/google19890102/article/details/69942970https://zhuanlan.zhihu.com/p/32626442https://zhuanlan.zhihu.com/p/32230623文章目录1.优化器optimizer1.1step才是更新参数1.0常见优化器变量定义1.1SGD1.2Momentum动量1.3SGD-M1.4Nester... 查看详情

pytorch优化器全总结常用优化器性能对比含代码(代码片段)

....Adam6.Adamax7.AdaW8.L-BFGS二、优化器对比优化器系列文章列表Pytorch优化器全总结(一)SGD、ASGD、Rprop、AdagradPytorch优化器全总结(二)Adadelta、RMSprop、Adam、Adamax、AdamW、NAdam、SparseAdamPytorch优化器全总结(三)... 查看详情

机器学习常见优化器(代码片段)

在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有Adadelta,Adagrad,RMSProp等几种优化器,都是什么呢,又该怎么选择呢?在SebastianRuder的这篇论文中给出了常用优化器的比较,今天来学习一下:https://arxiv.org/pdf/16... 查看详情

几种常见的优化算法(代码片段)

https://www.cnblogs.com/xinbaby829/p/7289431.html 我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,... 查看详情

基于比较的七种常见排序算法(代码片段)

...码)三路快速排序(代码)前言本文主要介绍基于比较的七种常见排序算法,分别为:选 查看详情

高级排序算法实现与优化(代码片段)

...排序,分为自上向底和自底向上排序。对于快速排序,有常见的二路快排和系统级常用的三路快速排序。2.归并 查看详情

七大查找算法(代码片段)

...例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算... 查看详情

pytorch深度学习框架介绍+简单回归问题(代码片段)

深度学习框架id="深度学习框架">深度学习框架pytorchpytorch使用C和C++的后端,是站在torch框架基础上开发pytorch和tensorflow的基本区别是使用了动态图和静态图的区别机器学习中的常见的静态图和动态图静态图必须事先定义好静态... 查看详情

pytorch框架的深度学习优化算法集(代码片段)

文章目录前言1 优化的目标2 深度学习中的优化挑战    2.1 鞍积分    2.2 消失渐变3 凸性    3.1 convex set    3.2 凸函数4 局部极小值是全局极小值5 约束6 总结参考前言一、什么是优化器优化器或者优化算法,是... 查看详情

前端常见的加密算法介绍(代码片段)

...了https的应用,还需要对传输数据进行加解密。目前常见的加密算法可以分成三类对称加密算法:AES、…非对称加密算法:RSA、…Hash算法:MD5、…二、对 查看详情

深度学习中的优化算法之rmsprop(代码片段)

...dn.net/fengbingchun/article/details/124766283中介绍过深度学习中的优化算法AdaGrad,这里介绍下深度学习的另一种优化算法RMSProp。   RMSProp全称为RootMeanSquarePropagation,是一种未发表的自适应学习率方法,由GeoffHinto 查看详情

pytorch自定义优化器optimizer简单总结(附adamw代码分析)(代码片段)

写在前面虽然pytorch,tensorflow等主流框架已经为我们内置了很多已经被广泛使用的优化算法,比如SGD,Adam,Adagrad等等,但是有的时候往往需要对优化器做一定的改动,才能使我们的模型收敛到最优解;或者说我们就是对SGD系列算... 查看详情

pytorch自定义优化器optimizer简单总结(附adamw代码分析)(代码片段)

写在前面虽然pytorch,tensorflow等主流框架已经为我们内置了很多已经被广泛使用的优化算法,比如SGD,Adam,Adagrad等等,但是有的时候往往需要对优化器做一定的改动,才能使我们的模型收敛到最优解;或者说我们就是对SGD系列算... 查看详情