【深度学习笔记】深度学习训练技巧——优化器

优化器

  1. 随机梯度下降及动量

    • 随机梯度下降算法对每批数据 ( X ( i ) , t ( i ) ) (X^{(i)},t^{(i)}) (X(i),t(i)) 进行优化
      g = ∇ θ J ( θ ; x ( i ) , t ( i ) ) θ = θ − η g g=\nabla_\theta J(\theta;x^{(i)},t^{(i)})\\ \theta = \theta -\eta g g=θJ(θ;x(i),t(i))θ=θηg
      随机梯度下降算法的基本思想是,在每次迭代中,随机选择一个样本 i i i,计算该样本的梯度 g = ∇ θ J ( θ ; x ( i ) , t ( i ) ) g=\nabla_\theta J(\theta;x^{(i)},t^{(i)}) g=θJ(θ;x(i),t(i)),然后按照梯度的反方向更新参数 θ \theta θ,即 θ = θ − η g \theta = \theta -\eta g θ=θηg,其中 η \eta η 是学习率,控制更新的步长。

    • 基于动量的更新过程

      为了改善随机梯度下降算法的收敛性,可以引入动量(momentum)的概念,即在更新参数时,考虑之前的更新方向和幅度,使得参数沿着一个平滑的轨迹移动。
      v = γ v − η g θ = θ + v v=\gamma v-\eta g\\ \theta =\theta+v v=γvηgθ=θ+v
      其中 v v v 是动量变量,初始为零向量, γ \gamma γ 是动量系数,控制之前更新的影响程度,一般取 0.9 0.9 0.9 左右的值。

  2. Adagrad

    Adagrad 是一种自适应学习率的梯度下降算法,它可以根据不同的参数调整不同的学习率,使得目标函数更快地收敛。

    • 梯度记为 g = ∇ θ J ( θ ; x ( i ) , t ( i ) ) g=\nabla_\theta J(\theta;x^{(i)},t^{(i)}) g=θJ(θ;x(i),t(i))

    • 更新过程

      对于每个参数 θ i \theta_i θi,维护一个累积变量 c i c_i ci,初始为 0,然后每次将该参数的梯度平方 g i 2 g_i^2 gi2 累加到 c i c_i ci 上,即 c i = c i + g i 2 c_i=c_i+g_i^2 ci=ci+gi2
      c i = c i + g i 2 θ i = θ i − η c i + ϵ g i c_i=c_i+g_i^2\\ \theta_i=\theta_i-\frac{\eta}{\sqrt{c_i+\epsilon}}g_i ci=ci+gi2θi=θici+ϵ ηgi
      在更新该参数时,使用一个自适应的学习率 η c i + ϵ \frac{\eta}{\sqrt{c_i+\epsilon}} ci+ϵ η,其中 η \eta η 是全局学习率, ϵ \epsilon ϵ 是一个小常数,用于防止除零错误。

    • 工作原理

      如果一个参数的梯度一直很大,那么它的 c i c_i ci 也会很大,从而降低它的学习率,防止过度更新;

      如果一个参数的梯度一直很小,那么它的 c i c_i ci 也会很小,从而增加它的学习率,加快更新速度。这就实现了自适应的学习率调整,有利于加速收敛和避免震荡。

    • 优点

      计算简单,不需要手动调整学习率,适合处理稀疏数据和特征。

    • 缺点

      累积变量 c i c_i ci 会随着迭代次数增加而不断增大,导致学习率过小,甚至接近于零,使得后期训练缓慢或停滞。

  3. RMSProp

    RMSProp算法在Adagrad的基础上提出改进,以解决学习率单调下降的问题

    • 基本思想

      引入一个遗忘因子 γ \gamma γ 。对于每个参数 θ \theta θ,维护一个累积变量 c c c,初始为 0,然后每次将该参数的梯度平方 g 2 g^2 g2 乘以一个衰减系数 ( 1 − γ ) (1-\gamma) (1γ),再加到 c c c 上,即 c = γ c + ( 1 − γ ) g 2 c=\gamma c+(1-\gamma)g^2 c=γc+(1γ)g2
      c = γ c + ( 1 − γ ) g 2 θ = θ − η c + ϵ g c=\gamma c+(1-\gamma)g^2\\ \theta=\theta-\frac{\eta}{\sqrt{c+\epsilon}}g c=γc+(1γ)g2θ=θc+ϵ ηg
      γ \gamma γ 是一个介于 0 和 1 之间的常数,通常为0.9、0.99、0.999,用于控制历史信息的影响程度。

    • 与Adagrad对比

      c c c 不会随着迭代次数增加而无限增大,而是保持在一个合理的范围内,从而使得学习率下降得更加平稳。

  4. Adam

    Adam 算法是一种自适应学习率的梯度下降算法,它结合了 Momentum 和 RMSProp 的优点

    • 简单形式
      KaTeX parse error: Expected 'EOF', got '&' at position 26: …m+(1-\beta_1)g &̲ \text {(积攒历史梯度…
      其中 β 1 \beta_1 β1 β 2 \beta_2 β2 是两个介于 0 和 1 之间的常数,用于控制历史信息的影响程度。一般取 β 1 = 0.9 \beta_1=0.9 β1=0.9 β 2 = 0.999 \beta_2=0.999 β2=0.999 ϵ = 1 0 − 8 \epsilon=10^{-8} ϵ=108

    • 完整形式
      m = β 1 m + ( 1 − β 1 ) g , m t = m 1 − β 1 t c = β 2 c + ( 1 − β 2 ) g 2 , c t = c 1 − β 2 t θ = θ − η c t + ϵ m t m=\beta_1m+(1-\beta_1)g\ ,m_t=\frac{m}{1-\beta_1^t} \\ c=\beta_2c+(1-\beta_2)g^2\ ,c_t=\frac{c}{1-\beta_2^t} \\ \theta=\theta-\frac{\eta}{\sqrt{c_t+\epsilon}}m_t m=β1m+(1β1)g ,mt=1β1tmc=β2c+(1β2)g2 ,ct=1β2tcθ=θct+ϵ ηmt
      为了消除偏差,还需要对 m m m c c c 进行偏差修正,即除以 1 − β 1 t 1-\beta_1^t 1β1t 1 − β 2 t 1-\beta_2^t 1β2t,其中 t t t 是迭代次数。

    Adam 算法可以利用一阶矩和二阶矩的信息,实现自适应的学习率调整,使得参数在梯度方向上加速,而在垂直梯度方向上减速,从而避免参数在最优值附近的震荡,加快收敛速度。

关于优化器的更多细节:http://cs231n.github.io/neural-networks-3

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

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

相关文章

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容,主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式,有代…

CleanMyMacX需要付费吗?多少钱?有哪些新功能

CleanMyMac X是一个付费应用程序**,需要许可证或订阅来解锁所有功能。不过,CleanMyMac X提供免费试用版供您访问其有限的功能。在试用模式下,用户可以使用部分功能进行体验,但这并非完全免费,因为某些功能会受到限制。…

怎样才能使网页跳转更加顺畅和自然?

网页跳转是用户在使用网页时经常遇到的操作,一个好的跳转设计可以提升用户体验,提高用户满意度。然而,有些网页的跳转设计却常常给用户带来不好的体验,比如页面加载缓慢、跳转速度慢、页面卡顿等问题。那么,怎样才能使…

在SpringBoot中@PathVariable与@RequestParam的区别

PathVariable GetMapping("/{userId}")public R<User> getUserById(PathVariable Long userId) {return userService.getUserById(userId);} // 根据id获取一条数据 function getStudentDataByIdAndDisplayInput(id) {// 发送 AJAX 请求$.ajax({url: /dorm/st…

Elasticsearch:将 IT 智能和业务 KPI 与 AI 连接起来 - 房间里的大象

作者&#xff1a;Fermi Fang 大象寓言的智慧 在信息技术和商业领导力的交叉点&#xff0c;蒙眼人和大象的古老寓言提供了一个富有洞察力的类比。 这个故事起源于印度次大陆&#xff0c;讲述了六个蒙住眼睛的人第一次遇到大象的故事。 每个人触摸大象的不同部位 —— 侧面、象牙…

springboot/ssm甘肃旅游服务平台Java在线旅游规划管理系统

springboot/ssm甘肃旅游服务平台Java在线旅游规划管理系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&am…

Vue3快速上手(八) toRefs和toRef的用法

顾名思义&#xff0c;toRef 就是将其转换为ref的一种实现。详细请看&#xff1a; 一、toRef 1.1 示例 <script langts setup name"toRefsAndtoRef"> // 引入reactive,toRef import { reactive, toRef } from vue // reactive包裹的数据即为响应式对象 let p…

第三篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:pyttsx3实现语音助手经典案例

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录一、项目背景和目标二、雏形示例代码三、扩展思路介绍四、与其他库和API集成示例代码五、自定义语音示例代码六、多语言支持示例代码七、语音控制应用程序示例代码八、文本转语音…

机器人初识 —— 定制AI

一、机器人设计难点 波士顿动力设计的机器人&#xff0c;尤其是其人形机器人Atlas和四足机器人Spot等产品&#xff0c;在技术上面临多重难点&#xff1a; 1. **动态平衡与稳定性**&#xff1a;双足或四足机器人在运动时需要维持极高的动态平衡&#xff0c;特别是在不平坦地面…

Linux命令-bzdiff命令(直接比较两个.bz2压缩包中文件的不同)

说明 bzdiff命令 用于直接比较两个“.bz2”压缩包中文件的不同&#xff0c;省去了解压缩后再调用diff命令的过程。 语法 bzdiff(参数)参数 文件1&#xff1a;指定要比较的第一个.bz2压缩包文件2&#xff1a;指定要比较的第二个.bz2压缩包

LiveGBS流媒体平台GB/T28181功能-自定义收流端口区间30000至30249UDP端口TCP端区间配置及相关端口复用问题说明

LiveGBS自定义收流端口区间30000至30249UDP端口TCP端区间配置及相关端口复用问题说明 1、收流端口配置1.1、INI配置1.2、页面配置 2、相关问题3、最少可以开放多少端口3.1、端口复用3.2、配置最少端口如下 4、搭建GB28181视频直播平台 1、收流端口配置 1.1、INI配置 可在lives…

基于Java SSM框架实现电影售票系统项目【项目源码】

基于java的SSM框架实现电影售票系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写&#xff0c;受到很多的追捧&#xff0c;“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架&#xff0c;通常更简单的数据源。Spring属于…

Java多线程系列——内存模型JMM

目录 核心思想 关键概念 1. 可见性 2. 原子性 3. 有序性 工作原理 并发工具类 对并发编程的影响 同步策略 JMM的实践意义 结语 Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java并发编程中的核心概念&#xff0c;其定义了Java虚拟机&#xff08;JV…

VNCTF2024misc方向部分wp

文章目录 sqlsharkLearnOpenGLez_msbOnlyLocalSql sqlshark tshark -r sqlshark.pcap -Y "http" -T fields -e frame.len -e http.file_data > data.txt不太像常规的盲注&#xff0c;一次性发送两条很类似的payload&#xff0c;比常规的多了一个least在判断passw…

如果端口显示被占用,无法重启,需要杀掉这些进程服务,再次重启即可

如果端口显示被占用&#xff0c;无法重启&#xff0c;需要杀掉这些进程服务&#xff0c;再次重启即可 jps显示当前有的服务 kill -9 要杀掉服务的对应数字

普中51单片机学习(八)

LED流水灯 循环左移右移函数 crol(a,b):循环左移函数&#xff0c;a是左移的值&#xff0c;b是左移的位数。包含在instrins.h库函数里面。 cror(a,b):循环右移函数&#xff0c;a是右移的值&#xff0c;b是右移的位数。包含在instrins.h库函数里面。 实验代码 #include "…

Eclipse - Reset Perspective

Eclipse - Reset Perspective 1. Window -> Perspective -> Reset Perspective2. Reset Perspective -> YesReferences 1. Window -> Perspective -> Reset Perspective 2. Reset Perspective -> Yes ​​​ References [1] Yongqiang Cheng, https://yo…

html的表单标签(上):form标签和input标签

表单标签 表单是让用户输入信息的重要途径。 用表单标签来完成与服务器的一次交互&#xff0c;比如你登录QQ账号时的场景。 表单分成两个部分&#xff1a; 表单域&#xff1a;包含表单元素的区域&#xff0c;用form标签来表示。表单控件&#xff1a;输入框&#xff0c;提交按…

.net和jar包windows服务部署

一.NetCore 1.创建启动脚本run_instal.bat,例如程序文件为ApiDoc.exe set serviceName"Apidoc Web 01" set serviceFilePath%~dp0ApiDoc.exe set serviceDescription"ApiDoc 动态接口服务 web 01"sc create %serviceName% BinPath%serviceFilePath% sc c…

【Java EE初阶十四】网络编程TCP/IP协议(一)

1. 网络编程 通过网络&#xff0c;让两个主机之间能够进行通信->就这样的通信来完成一定的功能&#xff0c;进行网络编程的时候&#xff0c;需要操作系统给咱们提供一组API&#xff0c;通过这些API来完成编程&#xff1b;API可以认为是应用层和传输层之间交互的路径&#xf…