深度学习常用优化算法笔记介绍,各种梯度下降法详细介绍

news2025/1/14 1:13:55

优化算法

mini-batch梯度下降法

  • 当一个数据集其数据量非常大的时候,比如上百万上千万的数据集,如果采用普通的梯度下降法,那么运算速度会非常慢,因为如果使用梯度下降法在每一次迭代的时候,都需要将这整个上百万的数据给执行一遍
  • 所以我们可以将我们的大的数据分成一个一个小一点的数据集,然后分批次处理,比如我们有100万个数据,那么我们可以将其分成1000份,每份1000个数据,这里的一份就是所谓的一个mini-batch
  • 然后我们用循环来遍历这1000个子集,针对每一次的子集做一次梯度下降,更新W和b的值。然后对下一个子集继续执行上述操作,这样在遍历完所有的mini-batch后,就相当于我们做了1000次迭代,将所有样本都遍历一遍的行为叫一个epoch
  • 在批量梯度下降法中,我们运行一次epoch就相当于运行了一次梯度下降迭代,但是在mini-batch中,我们运行一次epoch相当于运行了1000次迭代,速度当然迥然不同,很明显后者更快
  • 我们来看到mini- batch的代价曲线
  • image-20211220112546622
  • 左边的是批量梯度下降的代价曲线,右边则是mini batch代价曲线曲线
  • 可以很明显的看出,左边的代价曲线很顺滑的进行了下降,这表明每一次迭代我们的预测值的误差在一次次缩小
  • 而右边的代价曲线从整体而言也是呈下降趋势的,但是在细节之处可以看出多了很多噪声,因为mini batch梯度下降法是采用分批次下降的,每份mini batch的质量都可能不一样,所以在每次运行的时候,可能某段数据质量高,从而预测的特别好,所以在那一段是下降的,而某段数据质量低,预测的效果不好,所以在那段是上升的,但没关系,因为总体而言是呈下降趋势的
  • 在mini batch这有一个超参数,也就是每份的大小,在刚刚拿个例子当中,我们设定的每份大小为1000,也就是一份有1000个数据,当每份大小设置成样本总数m的时候,那么这就是一个批量梯度下降,因为一次运行所有的样本。
  • 而如果设置的每份大小是1,则就是随机梯度下降法了
  • 随机梯度下降法有一个缺点就是你失去了向量化的优势,因为每次迭代只会运行一个样本,所以效率会变低很多
  • 所以最好的办法就是让mini batch获得一个最合适的值
如何选择合适的mini batch值?
  • 数据集 < 2000:批量梯度下降法
    • 因为如果数据集小于2000的话,就没有使用的mini batch的必要了,因为数据量很少,可以直接使用批量下降,运行速度也很快,而且也可以避免噪声所带来的影响
  • 数据集 > 2000:mini batch选择一个2的幂数值
    • 因为和计算机的存储机制有关,采用2的幂数值会运行的更快一点,例如64,128,256等等
  • 应该选取能一次性存放进CPU或GPU的数值

指数加权平均

  • 指数加权平均是根据权重来计算近似平均值的
  • 举个例子
    • 比如我们现在有100天的温度值,要求这100天的平均温度值
    • 24,25,24,26,34,28,33,33,34,35…32
    • 我们可以使用平均值公式来计算, 24 + 25 + . . . + 32 100 \frac{24+25+...+32}{100} 10024+25+...+32
    • 但是这种方法对于非常大的数据量来说,需要的内存空间就比较大,因为你需要一次性将所有的数据都存入内存当中再计算平均值
    • 而指数加权平均就是一种求近似平均的方法
    • 公式为: v t = β v t − 1 + ( 1 − β ) θ t v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt
    • 其中 v t v_t vt为到t时刻的平均值,在上面的例子来说就到第t天的温度平均值, θ t \theta_t θt为t时刻的温度,其中的 β \beta β为超参数
    • 本质就是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权
    • 我们来如下计算步骤
    • img
    • 可以看出,指数加权平均的求解过程实际上是一个递推的过程,这样就会有一个优势
    • 在于每当我要求从0到某一时刻(n)的平均值的时候,我并不需要像普通求解平均值的作为,保留所有的时刻值,类和然后除以n
    • 而是只需要保留0-(n-1)时刻的平均值和n时刻的温度值即可。也就是每次只需要保留常数值,然后进行运算即可,这对于深度学习中的海量数据来说,是一个很好的减少内存和空间的做法
偏差修正
  • 由于一开始v0都是初始化为0,导致在初始计算时会计算差别很大,如上述每月温度,假设beta为0.9,则第一天的温度为: v 1 = 0.9 ∗ 0 + ( 1 − 0.9 ) 24 = 2.4 v_1=0.9*0+(1-0.9)24=2.4 v1=0.90+(10.9)24=2.4可以明显看出,这与第一天温度相差非常大,于是为了弥补这一误差,所以采用如下公式来更新 v t v_t vt的值 v t = v t 1 − β t = β v t − 1 + ( 1 − β ) θ t 1 − β t v_t=\frac{v_t}{1-\beta^t}=\frac{\beta v_{t-1}+(1-\beta)\theta_t}{1-\beta^t} vt=1βtvt=1βtβvt1+(1β)θt通过该公式重新计算 v 1 v_1 v1的值: v 1 = 0.9 ∗ 0 + ( 1 − 0.9 ) ∗ 24 1 − 0. 9 1 = 24 v_1=\frac{0.9*0+(1-0.9)*24}{1-0.9^1}=24 v1=10.910.90+(10.9)24=24
  • 可以看出,经过偏差修正后的数值回归到了一个正常的水平,并且随着 t t t的数值越大, β t \beta^t βt会越来越趋向于0,整个分母则会越来越趋向于1,于是偏差修正也会越来越无效。

动量梯度下降法

  • 动量梯度下降法就是采用了指数加权平均之后的梯度下降法
如何计算
  • image-20211220210656791

RMSprop

如何计算
  • image-20211227112010044

Adam

  • Adam是由动量梯度下降法和RMSprop组合而成
计算方法
  1. 对于所有的迭代下来说
  2. v d w = β 1 v d w + ( 1 − β 1 ) d w , v d b = β 1 v d b + ( 1 − β 1 ) d b v_{dw}=\beta_1v_{dw}+(1-\beta_1)dw,v_{db}=\beta_1v_{db}+(1-\beta_1)db vdw=β1vdw+(1β1)dw,vdb=β1vdb+(1β1)db
  3. s d w = β 2 s d w + ( 1 − β 2 ) d w 2 , s d b = β 2 s d b + ( 1 − β 2 ) d b 2 s_{dw}=\beta_2s_{dw}+(1-\beta_2)dw^2,s_{db}=\beta_2s_{db}+(1-\beta_2)db^2 sdw=β2sdw+(1β2)dw2,sdb=β2sdb+(1β2)db2
  4. v d w c o r r e n t e d = v d w 1 − β 1 t , v d b c o r r e n t e d = v d b 1 − β 1 t v_{dw}^{corrented}=\frac{v_{dw}}{1-\beta_1^t},v_{db}^{corrented}=\frac{v_{db}}{1-\beta_1^t} vdwcorrented=1β1tvdw,vdbcorrented=1β1tvdb
  5. s d w c o r r e n t e d = s d w 1 − β 2 t , s d b c o r r e n t e d = s d b 1 − β 2 t s_{dw}^{corrented}=\frac{s_{dw}}{1-\beta_2^t},s_{db}^{corrented}=\frac{s_{db}}{1-\beta_2^t} sdwcorrented=1β2tsdw,sdbcorrented=1β2tsdb
  6. w : = w − α v d w c o r r e n t e d s d w c o r r e n t e d + ε , b : = b − α v d b c o r r e n t e d s d b c o r r e n t e d + ε w:=w-\alpha\frac{v_{dw}^{corrented}}{\sqrt{s_{dw}^{corrented}+\varepsilon}},b:=b-\alpha\frac{v_{db}^{corrented}}{\sqrt{s_{db}^{corrented}+\varepsilon}} w:=wαsdwcorrented+ε vdwcorrented,b:=bαsdbcorrented+ε vdbcorrented
超参数建议
  • alpha:需要我们自己来确定
  • beta1:一般选做0.9,也可以自己尝试其他的值
  • beta2:论文作者所推荐的值为0.999,也可以自行调整
  • epsilon:论文作者推荐为10e-8,也可以自行调整

学习率衰减

为什么要使用学习率衰减?
  • 在使用mini-batch梯度下降法的时候,因为我们的小批量梯度下降法会产生噪声(小批量梯度下降法每个批次的质量都不一样,所以会产生噪声),所以当我们使用一个固定的学习率的时候,刚开始的时候可能会正常的梯度下降,但是一旦快靠近我们的极小值点的时候,由于学习率是固定的,一旦设大了,则会一直围绕着我们的极小值点周围转,而不会正真的靠近,如下图所示
  • image-20211227205445751
  • 而如果我们将学习率一开始就设置成一个固定小的一个值,那么需要迭代的次数就会非常多,大大降低了算法的效率,从而浪费资源。
  • 所以我们希望我们的学习率能够自动的根据梯度下降的情况,来衰减自己的大小,从而减少上述情况发生
学习率衰退方法
  • 这里有一个常用的公式: α = 1 1 + d e c a y R a t e ∗ e p o c h N u m α 0 \alpha=\frac{1}{1+decayRate * epochNum}\alpha_0 α=1+decayRateepochNum1α0
    • 参数意义如下:
      • decayRate:衰退率,一个超参数,可以自行调整
      • epochNum:当前迭代的第几次
      • alpha0:初始学习率值
    • 假如初始学习率为0.2,衰退率为1,则每轮迭代的值如下
      1. α = 1 1 + 1 ∗ 1 0.2 = 0.1 \alpha=\frac{1}{1+1 * 1}0.2=0.1 α=1+1110.2=0.1
      2. α = 1 1 + 1 ∗ 2 0.2 = 0.06 \alpha=\frac{1}{1+1 * 2}0.2=0.06 α=1+1210.2=0.06
      3. α = 1 1 + 1 ∗ 3 0.2 = 0.05 \alpha=\frac{1}{1+1 * 3}0.2=0.05 α=1+1310.2=0.05
  • 指数衰退学习率公式: α = 0.9 5 e p o c h N u m α 0 \alpha=0.95^{epochNum}\alpha0 α=0.95epochNumα0
    • 参数意义同上
  • 常用公式三: α = k e p o c h N u m α 0 \alpha=\frac{k}{\sqrt{epochNum}}\alpha0 α=epochNum kα0
    • 参数意义:
      • k:常数超参数,可自行调整

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

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

相关文章

机器学习:基于TF-IDF算法、决策树,使用NLTK库对亚马逊美食评论进行情绪分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

第一天复习Qt文件读取

Qt文件操作&#xff1a; 1、QFile QTextStream操作文件案例&#xff1a; 1、打开文件 QFile file(absolute filepath | relative path); file.readLine()返回内容长度&#xff0c;如果为-1就是读取失败 file. Close()读取后关闭 file.errorString()返回文件打开发生的错误2、…

数据仓库实验三:分类规则挖掘实验

目录 一、实验目的二、实验内容和要求三、实验步骤1、创建数据库和表2、决策树分类规则挖掘&#xff08;1&#xff09;新建一个 Analysis Services 项目 jueceshu&#xff08;2&#xff09;建立数据源视图&#xff08;3&#xff09;建立挖掘结构 DST.dmm&#xff08;4&#xff…

16.接口自动化学习-编码处理与装饰器

1.编码和解码 编码&#xff1a;将自然语言翻译成计算机可以识别的语言 hello–01010 解码&#xff1a;将机器识别的语言翻译成自然语言 2.编码格式 UTF-8 GBK unicode 3.编码操作 #编码操作str1"hello呀哈哈哈"str2str1.encode(gbk)print(str2)print(type(str2))…

FPGA ov5640视频以太网传输

1 实验任务 使用DFZU4EV MPSoC 开发板及双目OV5640摄像头其中一个摄像头实现图像采集&#xff0c;并通过开发板上的以太网接口发送给上位机实时显示。 2 Verilog代码 2.1 顶层模块 timescale 1ns / 1ps //以太网传输视频顶层模块module ov5640_udp_pc (input sys_cl…

在WPS表格(Excel)中,每10行增加一个特定的值

注&#xff1a;如下为WPS表格操作演示 例如1&#xff0d;15的数值是1&#xff0c;16-30就变为2&#xff0c;31-45就变为3&#xff0c;类推&#xff01; 1、在B1单元格输入一个起始值&#xff0c;B2单元格输入公式IF(MOD(ROW(),15)0,B11,B1) 然后鼠标放到B2单元格右下角小点处&…

开机弹窗找不到OpenCL.dll是怎么回事,哪种修复方法更推荐

当用户在操作电脑过程中遇到系统提示“OpenCL.dll丢失”时&#xff0c;这究竟是怎么一回事呢&#xff1f;OpenCL.dll&#xff0c;作为Open Computing Language&#xff08;开放计算语言&#xff09;的重要动态链接库文件&#xff0c;它在图形处理器&#xff08;GPU&#xff09;…

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq&#xff0c;并且项目已经引入rabbitmq&#xff0c;完成了配置。 不同模式所需参数不同&#xff0c;生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

县供电公司员工向媒体投稿发文章用亲身经历告诉你并不难

在县供电公司的日子里,我肩负着一项至关重要的使命——信息宣传工作。这不仅仅是一份职责,更是连接公司与外界的桥梁,通过新闻稿件传递我们的声音,展示我们的成果。然而,回忆起刚刚踏入这个领域的时光,那段经历至今让我感慨万千。 初涉投稿,步履维艰 刚接手这项工作时,我的投稿…

信息化飞速发展下,源代码防泄密方案该如何选择?常见四种有效方案分享

信息化时代发展迅速&#xff0c;数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位&#xff0c;无纸化办公场景越来越多&#xff0c;数据泄露的时间也层出不穷。例如&#xff1a;世界最大职业中介网站Monster遭到黑客大规模攻击&#xff0c;黑客窃取在网站注册的数百万…

Dockerfile实践java项目

目的&#xff1a;用java项目测试dockerfil部署&#xff08;前提是安装好了docker&#xff09; 部署准备文件如下 1. java项目 java项目demo地址 https://gitee.com/xiaoqu_12/dockerfileDemo.git 或者百度网盘直接下载打包好的jar包 链接&#xff1a;https://pan.baidu.com/s/…

PostgreSQL的学习心得和知识总结(一百四十一)|深入理解PostgreSQL数据库数据库角色的使用及预定义角色的原理

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

【计算机毕业设计】基于SSM++jsp的电子竞技管理平台【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

您的浏览器不支持 undefined 代理认证!如有问题请联系您的浏览器支持,请勿反馈此问题给 SwitchyOmega.

一、【问题描述】 PAC 文件是一个 JavaScript 文件&#xff0c;用于定义客户端的代理规则。您可以在 PAC 文件中编写规则&#xff0c;根据不同的目标网址或其他条件&#xff0c;决定是否通过代理服务器进行访问。您可以将 PAC 文件部署到服务器上&#xff0c;并在客户端配置浏…

QT学习PCL库代码

找关键点keypoints 绿色的点就是keypoints outofcore

应用软件安全保证措施方案书

系统安全保证措施方案—word原件 软件全套资料进主页获取或者本文末个人名片直接获取。

【Docker学习】docker run的端口映射-p和-P选项

docker run的端口映射选项分为-p&#xff08;小写&#xff0c;全称--publish&#xff09;&#xff0c;-P&#xff08;大写&#xff0c;全称--publish-all&#xff09;&#xff0c;之前认为只有改变容器发布给宿主机的默认端口号才会进行-p的设置&#xff0c;而不改变默认端口号…

STC8增强型单片机开发 【第一个程序 - 点亮第一盏灯】

目录 一、创建项目 1. 创建一个新的项目 ​编辑 2. 配置开发板信息 ​编辑 3. 取消汇编配置 4. 项目结构 二、编码实现 1. 项目准备 2. 代码实现 点灯&#xff1a; 熄灯&#xff1a; 3. 编译烧录运行 配置编译输出 保存和编译代码 ​编辑 烧录 一、创建项目 1. …

静态照片怎么合成gif?详细介绍一个方法

我们在各大平台中都能看到各种样式的gif动图。Gif动图其实就是由一帧一帧的静态图片合成的动态效果的gif&#xff0c;想要制作gif动画可以通过使用在线图片合成&#xff08;https://www.gif5.net/&#xff09;工具-GIF5工具网&#xff0c;手机、pc均可操作&#xff0c;只需要上…

STC8增强型单片机开发——C51版本Keil环境搭建

一、目标 了解C51版本Keil开发环境的概念和用途掌握C51版本Keil环境的安装和配置方法熟悉C51版本Keil开发环境的使用 二、准备工作 Windows 操作系统Keil C51 安装包&#xff08;可以从Keil官网下载&#xff09;一款8051单片机开发板 三、搭建流程 环境搭建的基本流程&#xf…