深度学习-优化算法与梯度下降

news2025/2/1 10:38:33

文章目录

  • 前置知识
    • 指数移动平均EMA
    • L2正则(L2 Regularization)
    • 权重衰减(Weight Decay)
  • 优化器
    • SDG
    • Momentum
    • NAG
    • Adagrad
    • RMSProp
    • AdaDelta
    • Adam
    • AdamW
    • 综上
  • 学习率
    • StepLR
    • MultiStepLR
    • Exponential
    • CosineAnealing
    • RLROP(ReduceLRonPlateau)
    • lambda
    • 总结

前置知识

指数移动平均EMA

  • 给予近期数据更高权重的平均方法
    V t = α ⋅ x t + ( 1 − α ) ⋅ V t − 1 V_t = \alpha \cdot x_t + (1 - \alpha) \cdot V_{t-1} Vt=αxt+(1α)Vt1

L2正则(L2 Regularization)

  • 约束 weights 不要太大
    L ′ = L + 1 2 λ ⋅ ∑ i = 1 n w t 2 L' = L+\frac{1}{2}\lambda \cdot \sum_{i=1}^{n} w_t^2 L=L+21λi=1nwt2

权重衰减(Weight Decay)

w t = ( 1 − λ ) ⋅ w t − 1 − μ ⋅ g w_t = (1 - \lambda) \cdot w_{t-1} - \mu \cdot g wt=(1λ)wt1μg

优化器

SDG

  • mini-batch gradient descent:随机选一批量
  • 亲戚1:batch gradient descent:全部
  • 亲戚2:stochatic gradient descent:随机选一个
    w t + 1 = w t − η ⋅ ∇ J ( w t ) w_{t+1} = w_t - \eta \cdot \nabla J(w_t) wt+1=wtηJ(wt)

Momentum

  • 动量
  • 利用EMA融入历史的梯度
  • 原理:将历史梯度和当前梯度做合并
    v t = γ ⋅ v t − 1 + ( 1 − γ ) ∗ J ( w t ) v_{t} = \gamma \cdot v_{t-1} + (1-\gamma)* J(w_t) vt=γvt1+(1γ)J(wt)
    w t = w t − 1 − μ ∗ v t w_{t} = w_{t-1} -\mu* v_{t} wt=wt1μvt

NAG

  • 改进(Nesterov accelerated gradient)
  • 原理:先按照历史梯度走一小步,然后再进行合并
    v t + 1 = γ ⋅ v t + ∇ J ( w t − α ⋅ γ ⋅ v t ) v_{t+1} = \gamma \cdot v_t + \nabla J(w_t - \alpha·\gamma \cdot v_t) vt+1=γvt+J(wtαγvt)
    w t + 1 = w t − α v t + 1 w_{t+1} = w_t - \alpha v_{t+1} wt+1=wtαvt+1

Adagrad

  • 历史梯度+当前梯度的平方
  • 对学习率进行约束
  • 前期较小的时候,r较大,能放大梯度
  • 后期较大的时候,r较小,能约束梯度

g t + 1 = g t + ( ∇ J ( w t ) ) 2 g_{t+1} = g_t + (\nabla J(w_t))^2 gt+1=gt+(J(wt))2
w t + 1 = w t − η g t + 1 + ϵ ⋅ ∇ J ( w t ) w_{t+1} = w_t - \frac{\eta}{\sqrt{g_{t+1} + \epsilon}} \cdot \nabla J(w_t) wt+1=wtgt+1+ϵ ηJ(wt)

RMSProp

  • 在Adagrad上加上EMA思想
    g t + 1 = ρ g t + ( 1 − ρ ) ( ∇ J ( w t ) ) 2 g_{t+1} = \rho g_t + (1 - \rho)(\nabla J(w_t))^2 gt+1=ρgt+(1ρ)(J(wt))2
    w t + 1 = w t − η g t + 1 + ϵ ⋅ ∇ J ( w t ) w_{t+1} = w_t - \frac{\eta}{\sqrt{g_{t+1} + \epsilon}} \cdot \nabla J(w_t) wt+1=wtgt+1+ϵ ηJ(wt)

AdaDelta

  • 也是在Adagrad上进行改进,不需要提前设置学习率
  • 原理尽可能听,听不懂也没关系

Δ w t = − Δ w t − 1 + ϵ g t + 1 + ϵ ⋅ ∇ J ( w t ) \Delta w_t = -\frac{\sqrt{\Delta w_{t-1} + \epsilon}}{\sqrt{g_{t+1} + \epsilon}} \cdot \nabla J(w_t) Δwt=gt+1+ϵ Δwt1+ϵ J(wt)

Adam

  • 用EMA更新梯度,用RMSProp更新学习率,然后进行修正,来避免冷启动,避免训练开始时梯度很小,参数更新很慢

m t + 1 = β 1 m t + ( 1 − β 1 ) ∇ J ( w t ) m_{t+1} = \beta_1 m_t + (1 - \beta_1) \nabla J(w_t) mt+1=β1mt+(1β1)J(wt)
v t + 1 = β 2 v t + ( 1 − β 2 ) ( ∇ J ( w t ) ) 2 v_{t+1} = \beta_2 v_t + (1 - \beta_2)(\nabla J(w_t))^2 vt+1=β2vt+(1β2)(J(wt))2
m ^ t + 1 = m t + 1 1 − β 1 t + 1 \hat{m}_{t+1} = \frac{m{t+1}}{1 - \beta_1^{t+1}} m^t+1=1β1t+1mt+1
v ^ t + 1 = v t + 1 1 − β 2 t + 1 \hat{v}_{t+1} = \frac{v{t+1}}{1 - \beta_2^{t+1}} v^t+1=1β2t+1vt+1
w t + 1 = w t − η v ^ t + 1 + ϵ ⋅ m ^ t + 1 w_{t+1} = w_t - \frac{\eta}{\sqrt{\hat{v}_{t+1}} + \epsilon} \cdot \hat{m}_{t+1} wt+1=wtv^t+1 +ϵηm^t+1

AdamW

  • 数学推导比AdaDelta还难,改进好Adam几乎一样

综上

  • 如果追求优化器效果,直接使用AdamW

学习率

StepLR

  • 等间隔调整学习率
    在这里插入图片描述

MultiStepLR

  • 给定间隔调整学习率

Exponential

  • 调整策略上带上指数项
    在这里插入图片描述

CosineAnealing

  • 余弦周期调整学习率
  • 比较有助于跳出局部极小值
    在这里插入图片描述

RLROP(ReduceLRonPlateau)

  • 非常实用
  • 监控Loss和acc如果不再变化就进行学习率调整

lambda

  • 自定义调整策略

总结

  • 有序调整:前4个
  • 自适应调整:RLROP
  • 自定义调整
    随机梯度下降去优化你的人生-李沐

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

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

相关文章

【图像处理】图像配准、图像增强和图像分割研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

网络编程基础知识总结——IP,端口,协议

目录 1. 什么是网络编程? 2. 网络编程的三要素 3. IP 3.1 IP地址的概念 3.2 IP地址的分类 3.3 IPv4解析 3.4 Ipv6解析 4. IPv4 的使用细节 5. 特殊IP地址 4. 端口号 5. 协议 5.1 UDP协议 5.2 TCP协议 1. 什么是网络编程? 总的来说就是一句…

RuntimeWarning: More than 20 figures have been opened

在画图操作结束后使用plt.close(all)语句,但是此时图像仍然不能正常显示,之前是可以正常显示的,然后又在最后的画图的部分添加plt.show()语句,可以正常显示图像并且不再出现警告了。

Android---DVM以及ART对JVM进行优化

Dalvik Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机,Android 工程师编写的 Java 或者 Kotlin 代码最终都是在这台虚拟机中被执行的。在 Android 5.0 之前叫作 DVM,5.0 之后改为 ART(Android Runtime)。在整个…

oracle创建数据库,导入dmp操作全家桶

背景:小明在一家IT公司就职,通过查看项目,公司使用的是oracle,几天后,经理要求他从服务器导入数据库到公司服务器,聪明的小明就开始干了起来,整理如下教程。 说明:此次演示环境oracl…

【LeetCode力扣】297. 二叉树的序列化与反序列化

目录 1、题目介绍 2、解题思路 2.1、详细过程图解 2.2、代码描述 2.3、完整代码 1、题目介绍 原题链接:297. 二叉树的序列化与反序列化 - 力扣(LeetCode) 示例 1: 输入:root [1,2,3,null,null,4,5] 输出&#…

代码随想录算法训练营第二十二天丨 二叉树part09

669. 修剪二叉搜索树 思路 递归法 从图中可以看出需要重构二叉树,想想是不是本题就有点复杂了。 其实不用重构那么复杂。 在上图中我们发现节点0并不符合区间要求,那么将节点0的右孩子 节点2 直接赋给 节点3的左孩子就可以了(就是把节点…

mac 移动硬盘推出

最近移动硬盘推出总是出现 磁盘无法推出,因为一个或多个程序正在使用它 的问题 解决办法 首先尽可能关闭所有的应用,然后点击左上角的 点击强制退出,注意其中的预览,这个通常就卡在了这里 然后就可以正常退出了

Python点击exe后报错:Failed to execute script xxxx问题的解决办法

最近工作在弄人脸识别的问题,从gitee来pull了一个但是发现报了一个Failed to execute script XXX的问题 造成这个问题的原因是执行文件exe存放的目录不对,可能在打包前exe文件并不是存在在这个位置。 解决方案将exe文件尝试存在在不同目录下&#xff…

【已解决】No Python at ‘D:\Python\python.exe‘

起因,我把我的python解释器,重新移了个位置,导致我在Pycharm中的爬虫项目启动,结果出现这个问题。 然后,从网上查到了这篇博客: 【已解决】No Python at ‘D:\Python\python.exe‘-CSDN博客 但是,按照上述…

数据结构 - 5(二叉树7000字详解)

一:二叉树的基本概念 1.1树形结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 注意&am…

如何删除错误堆栈里的数据

修改某个主数据。然后发现N年前,某位开发在DTP上做了一个错误堆栈。 这里面有很多历史错误信息,有几千条了,一条条删肯定不可能。 如果不删除,DTP增量无法激活,明天处理链肯定出问题。 于是找到一位印度大神的方法&a…

java劳务外包管理系统springboot+vue

当前,系统开发的技术已经发展成熟,而且通过计算机网络可以获取开发工具的使用方法,以及规范化编写的模块化代码,这些知识可以帮助开发者顺利完成本系统的编码工作。 采用JavaMysql的方式设计制作的劳务外包管理系统,在…

【Python、Qt】使用QItemDelegate实现单元格的富文本显示+复选框功能

主打一个 折磨 坑多 陪伴。代码为Python,C的就自己逐条语句慢慢改吧。 Python代码: import sys from types import MethodType from PyQt5.QtCore import Qt,QPoint,QSize,QRect,QEvent from PyQt5.QtGui import QStandardItemModel, QStandardItem,QTe…

LeetCode - 318 最大单词长度乘积(Java JS Py C)

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 318. 最大单词长度乘积 - 力扣(LeetCode) 题目描述 给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词…

关于vue3启动的一些错误总结

一、成功解决 npm ERR! ERESOLVE could not resolve 解决办法: npm i --legacy-peer-deps –legacy-peer-deps 作用: 在NPM v7中,现在默认安装peerDependencies。 在很多情况下,这会导致版本冲突,从而中断安装过程。 …

【Transformer系列】关于Transformer的若干问题FAQ解析

一、参考资料 Transformer的细节到底是怎么样的?Transformer 18问 答案解析(1)—史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer 关于Transformer的若干问题整理记录 Transformer的细节与技巧 二、FAQ Q:什么是Transformer&…

ubuntu修改IP地址

参考:ubuntu修改配置IP地址和DNS的方法总结(4种)_ubuntu设置ip地址-CSDN博客 面对ubuntu18以上的版本,主要有两种界面:图形化界面和纯命令行界面。 图形化界面配置比较简单,命令行配置稍许复杂&#xff0c…

python中的logging的使用

初级应用 import logginglogging.basicConfig(levellogging.INFO,format%(asctime)s| %(filename)s[line:%(lineno)s] |%(levelname)s| %(message)s,datefmt%Y-%m-%d %H:%M:%S,filenamesys.path[0]/running_log.log,filemodea) logging.info(This is log)高级应用 # logging的…