DL优化器精简总结 | SGD, Momentum, AdaGrad, Rmsprop, Adam, AdamW

news2024/11/17 11:53:53

🔥 DL里的优化器相关考点,面试时面试官偶尔会问甚至变态点的会叫代码手撕,笔试选择题只要跟DL相关基本必考。废话不多说,直接上!

😄 当然并不是纯为了面试,只不过说你如果是搞DL的连优化器都说不清楚,那真的有点丢人~

文章目录

  • 0、先验知识
  • 1、SGD
  • 2、Momentum
  • 2、AdaGrad
  • 3、RMSprop
  • 4、Adam
  • 5、AdamW

这里有动画大家可以直观感受下各优化器带来的快感~: https://imgur.com/a/Hqolp
在这里插入图片描述

0、先验知识

  • 说白了,优化器其实就是个数学公式,用于更新模型的权重。常见的如梯度下降算法,能够让模型朝着使损失函数下降最快的方向 (梯度的负方向) 去更新权重。具体我在此链接用泰勒展开做了证明:
    梯度下降算法可能降低损失函数值的原因?(一维简单解释)

在这里插入图片描述

1、SGD

梯度下降算法:

  • SGD:随机梯度下降。每次随机基于单个样本计算梯度来更新权重。【迭代次数过多,收敛慢,容易陷入局部最优】
  • BGD:批量梯度下降。对所有样本计算梯度提取然后取平均来跟新权重。【全局最优,迭代耗时】
  • MBGD:小批量梯度下降。每次随机对小批样本计算梯度提取然后取平均来跟新权重。【最常用,前面两者的权衡】

2、Momentum

  • 思想很简单,基于上一步的梯度和当前梯度进行加权得到当前新的梯度(即滑动平均),以此新的梯度更新权重。

在这里插入图片描述
在这里插入图片描述

  • beta参数可调,经验值为0.9,这就意味着下降方向主要是此前累积的下降方向,并略微偏向当前时刻的下降方向。在梯度方向改变时,momentum能够降低参数更新速度,从而减少震荡,在梯度方向相同时,momentum可以加速参数更新, 从而加速收敛!【😄减少噪声干扰更新方向!一定程度上缓解局部最优的可能】

2、AdaGrad

  • 思想也很简单,对学习率进行约束。这是因为随着更新次数的增大,我们希望学习率越来越慢。因为我们认为在学习率的最初阶段,我们距离损失函数最优解还很远,随着更新次数的增加,越来越接近最优解,所以学习率也随之变慢。
    在这里插入图片描述
    在这里插入图片描述

  • 该方法引入了二阶动量,我们知道一阶动量决定了梯度的方向,二阶动量反映了梯度的大小和变化趋势。这里二阶动量是是迄今为止所有梯度值的平方和。

  • 从下面公式可知,梯度一直累加,并用于缩减学习率。

  • 有个缺点就是:若中后期,分母上梯度累加的平方和会过大,使得学习率为0,导致训练提前结束,无法学习。

3、RMSprop

  • 基于Adagrad做改进,又是一个骚操作(学Momentum的滑动平均):将AdaGrad的梯度平方和改为梯度平方和加权移动平均。另外地,对滑动平均的结果取期望。
  • beta作为decay rate衰减率,默认为0.9。
    在这里插入图片描述

4、Adam

👍 这再熟悉不过了吧~刚玩DL的时候基本都有事没事用Adam。优点:自适应地调整每个参数的学习率,从而提高模型的收敛速度和泛化能力。

  • 又是骚操作,对AdaGrad的优化,一种通过计算模型参数的梯度以及梯度平方的加权平均值(一阶动量和二阶动量),来调整模型的参数。【可以看到,这一路来都是结合别人的整合改进】
  • 一二阶动量如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

那为何需要对一二阶动量纠正呢?因为上述方法求出来的一二阶动量的期望是有偏的。所以为了更准确地估计梯度的方向和大小,从而提高Adam优化器的性能和收敛速度。Adam通过如下方式进行偏置差校正后的一二阶矩估计:在这里插入图片描述

  • Adam优点:结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点。它可以根据训练过程中每个参数的历史梯度和更新情况来自适应地调整每个参数的学习率,从而加速神经网络的训练。

5、AdamW

🐮 AdamW基本是现在的预训练模型、大模型的标配了。
😄 AdamW是在Adam+L2正则化的基础上进行改进的算法。AdamW = Adam + weight decay

  • 因为Adam存在的权重过拟合问题并没有很好解决。一般做法是在loss上加l2正则来缓解过拟合,但在Adam公式中,如果本身比较大的一些权重对应的梯度也会比较大,由于Adam计算步骤中减去项会除以梯度平方的累积开根号,使得减去项偏小。按常理说,越大的权重应该惩罚越大,但是在Adam并不是这样。分子分母隐式地相互抵消掉了。

  • AdamW引入权重衰减对所有的权重都采用相同的系数进行更新,越大的权重显然惩罚越大。
    在这里插入图片描述

  • Adam+L2 与 AdamW

图片中粉色是传统的Adam+L2 regularization的方式(这一项实际上就是权重乘以L2项的导数,因为x2 的导数就是本身x。而不要粉色,要绿色那就是Adam + weight decay的方式。
在这里插入图片描述






Reference

[1]《An overview of gradient descent optimization algorithms∗》
[2] 理解AdamW+代码
[3] 大梳理!深度学习优化算法:从 SGD 到 AdamW 原理和代码解读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能测试QPS+TPS+事务基础知识分析

本篇文章是性能测试基础篇,主要介绍了性能测试中对QPSTPS事务的基础知识分析,有需要的朋友可以借鉴参考下,希望可以对广大读者有所帮助 事务 就是用户某一步或几步操作的集合。不过,我们要保证它有一个完整意义。比如用户对某一个…

#P1009. [NOIP2016提高组] 玩具小人

题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业。 有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时 singer 告诉小南一个谜題: “眼镜藏在我左数第 33 个玩具小人的右数第 11 个玩具小人的…

CMU 15-445 -- Database Recovery - 18

CMU 15-445 -- Database Recovery - 18 引言ARIESLog Sequence NumbersNormal ExecutionTransaction CommitTransaction AbortCompensation Log Records Non-fuzzy & fuzzy CheckpointsSlightly Better CheckpointsFuzzy Checkpoints ARIES - Recovery PhasesAnalysis Phas…

第四范式x百胜软件 以生成式AI改造零售软件

7月20日,在百胜软件联合探路者举办的行业数字化转型研学活动上,百胜软件联合第四范式宣布将以「式说」大模型为核心,在软件智能化升级、行业赋能等方面开展深入合作,共同推动大模型在零售行业的创新与应用。 活动上,双…

RK3588 使用OpenCL 遇到坑

资源1:本文章的源代码为:加速中... 资源2:RK3588 Android上应用使用OpenCL,所需的所有so 一:RK3588是否支持OpenCL 通过GPT一通搜索,说不支持。 感觉GPT东西不全可信啊!!! 导致自己一直怀疑RK3588不支持OpenCL使用,为什么呢? 1.通过adb shell 发现里面没有clinfo…

游戏图标有哪些素材模板推荐

游戏图标设计在游戏UI中占有非常重要的地位。例如,当我们看到一个游戏的启动图标时,很容易区分它是哪个游戏。设计游戏图标不仅是一个图形,也是一个标志。 本文将通过各种游戏图标设计素材分享游戏图标的类别和设计游戏图标的思考。 1. 游戏…

滴水逆向三期笔记与作业——02C语言——05 正向基础/05 循环语句

目录 一、缓冲区溢出的HelloWorld二、永不停止的HelloWorld三、基础知识3.1 变量的声明3.2 类型转换(一般用于小转大)3.3 表达式3.4 语句和程序块3.5 参数与返回值3.6 关系运算符3.7 逻辑运算符:&& || !3.8 单目运算符3.9 三目运算符…

人工智能TensorFlow MNIST手写数字识别——实战篇

上期文章TensorFlow手写数字-训练篇,我们训练了我们的神经网络,本期使用上次训练的模型,来识别手写数字(本期构建TensorFlow神经网络代码为上期文章分享代码) http://scs.ryerson.ca/~aharley/vis/conv/ 0、插入第三方库 from PIL import Image# 处理图片 import tensorf…

Python补充笔记5-模块化、文件

目录 一、模块 二、模块的导入 三、python中的包​编辑 四、常用的内容模块 五、第三方模块的安装与使用 六、编码格式的介绍 七、文件读写的原理 八、常用的文件打开模式 ​九、文件对象的常用方法 十、with语句​编辑 十一、os模块的常用函数 十二、os.path模块的常用方法​编…

防御第四次作业

一、结合以下问题对当天内容进行总结 1. 什么是IDS? IDS是:入侵检测系统(intrusion detection system,简称“IDS”)是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全…

跨平台力量:探索C++Qt框架的未来前景

卓越的跨平台支持:CQt可以在多个平台上运行,包括Windows、Mac、Linux、Android和iOS等。这使得开发者能够使用同一份代码构建跨平台的应用程序,从而显著降低了开发成本和时间投入。 丰富的类库和工具:CQt提供了广泛的类库和工具&…

上位机编程 VS 嵌入式编程:哪个更有前途?揭秘行业发展秘密

上位机和嵌入式是计算机的两个具体应用领域,它们在语言、工具和应用方面存在一定的差异。上位机更加注重高层逻辑和抽象,提供了多种语言和工具供开发者选择。而嵌入式开发通常局限于使用C语言,并且在过去甚至需要使用汇编语言,开发…

QT Http协议

文章目录 前言一、HTTP概述二、HTTP的两种模型1.B/S模型2.C/S模型 三、请求报文和响应报文三、调试软件Postman四、QT中的HTTP类总结 前言 本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这…

设计灵感充电!挂在悬崖边的建筑效果图,你会怎么设计?

我相信大部分人都看到过类似下面这张的民宿图片: 挂在悬崖边,四四方方的“盒子”,没有任何实用性和审美性可言。很多网友戏称:“这不是《消失的她》空中版吗?”那如果让你设计一个悬崖边的建筑,你会从何入手…

Python编程——while循环语句讲解

作者:Insist-- 个人主页:insist--个人主页 本文专栏:python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、怎么理解循环? 二、while语句基础格式…

跨境电商多语言带直播功能功能列表

一、直播导购 1.直播入驻管理:直播入驻实际上就是商家入驻,开通商家后会获得直播权限 2.直播观看/拉流页面(分三屏,可以左右滑动): 左屏: 直播间信息:直播间名称、直播封面、房间号、在线人数、…

Android性能优化 — ANR问题定位分析

ANR(Application Not Response)应用程序未响应,当主线程被阻塞时,就会弹出如下弹窗 一、traces.txt文件 Android的traces.txt文件记录了进程的堆栈情况,对于分析应用响应慢,以及ANR的原因很有帮助。trac…

Spring Boot 2.7.8以后mysql-connector-java与mysql-connector-j

错误信息 如果升级到Spring Boot 2.7.8&#xff0c;可以看到因为找不到mysql-connector-java依赖而出现错误。 配置&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&l…

仿VScode MDK背景配色方案

效果如果所示 操作方法&#xff1a;备份后修改~/UV4文件夹下的global.prop&#xff0c;用以下的代码代替。 # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page936 caretline.visible1 highlight.matchingbraces1…

网络传输层协议:UDP和TCP

背景知识 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序&#xff1b; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -…