计算机视觉与深度学习-全连接神经网络-详解梯度下降从BGD到ADAM - [北邮鲁鹏]

news2025/2/26 14:41:15

文章目录

  • 参考文章及视频
  • 导言
  • 梯度下降的原理、过程
    • 一、什么是梯度下降?
    • 二、梯度下降的运行过程
  • 批量梯度下降法(BGD)
  • 随机梯度下降法(SGD)
  • 小批量梯度下降法(MBGD)
  • 梯度算法的改进
    • 梯度下降算法存在的问题
    • 动量法(Momentum)
      • 目标
      • 改进思想
      • 为什么有效
      • 动量法还有什么效果?
  • 自适应梯度(AdaGrad)
      • AdaGrad存在的问题
      • AdaGrad算法具有以下特点:
    • RMSProp
    • ADAM梯度下降法
    • 总结


参考文章及视频

耿直哥讲AI:https://www.bilibili.com/video/BV18P4y1j7uH/?spm_id_from=333.337.search-card.all.click&vd_source=f6c19848d8193916be907d5b2e35bce8
计算机视觉与深度学习 北京邮电大学 鲁鹏 清晰版合集(完整版):https://www.bilibili.com/video/BV1V54y1B7K3?p=5&vd_source=f6c19848d8193916be907d5b2e35bce8

导言

梯度下降的原理、过程

一、什么是梯度下降?

梯度下降(Gradient Descent)是一种常用的优化算法,主要用于寻找函数的局部最小值。在机器学习和深度学习中,我们通常使用梯度下降来优化损失函数,从而找到使损失最小的模型参数。

梯度在数学上可以看作是函数在某一点的斜率,或者说是函数在该点变化最快的方向。在多维空间中,梯度是一个向量,指向函数增长最快的方向。而"梯度下降"的思想就是,如果我们想找到函数的最小值,那么从当前位置沿着梯度的负方向,即函数下降最快的方向,进行迭代更新就可能找到这个最小值。

通俗的来讲就是:

  • 想象一下你置身于一个大山谷中,你的目标是找到山谷最低处的位置。但是你没有地图,也不能一下子看到整个山谷的形状。所以你只能根据自己当前所处位置的周围情况来判断往哪个方向走。
  • 梯度下降法就像是你通过观察地势斜率来下山。你站在某个位置上,然后观察周围的地势斜率。地势斜率的方向指示了最陡下坡的方向,而你的目标是下到山谷的最低点。
  • 开始时,你随机选择一个位置作为起点。然后你观察当前位置的地势斜率,并朝着斜率最陡的方向迈出一步。然后,你再次观察新位置的地势斜率,并再次朝着最陡的方向迈出一步。你不断重复这个过程,每次都往下坡最陡的方向前进,直到你无法再下降或者到达了山谷的最低点。
  • 通过这种迭代的方式,你能够一步步地接近山谷的最低点,也就是最优解。梯度下降法通过不断地调整位置,最终找到了函数的最小值点(或者最大值点)。

如图所示:
在这里插入图片描述
陡峭度=梯度

需要注意的是,梯度下降法中的步长(学习率)很重要。
如果步长太大,你可能会错过最低点;
如果步长太小,你会花费很长的时间才能到达最低点。
所以选择一个合适的步长是梯度下降法的一个关键因素。

二、梯度下降的运行过程

梯度下降的过程很直观,可以分为以下几个步骤:

  1. 初始化参数:给定一个初始点。
  2. 计算梯度:在当前点,计算函数的梯度,即各个参数的偏导数。
  3. 更新参数:按照以下公式更新参数:θ = θ - α * ∇f(θ)。其中,θ代表当前的参数,α是学习率(决定了步长的大小),∇f(θ)是函数在θ处的梯度。
  4. 迭代更新:重复步骤2和步骤3,直到梯度接近0,或者达到预设的迭代次数。

这个过程会持续进行,直到找到一个足够好的解,或者达到预设的迭代次

批量梯度下降法(BGD)

批量梯度下降(Batch Gradient Descent)是梯度下降算法的一种变体,用于优化机器学习模型的参数。与其他梯度下降算法相比,批量梯度下降在每次迭代中使用整个训练数据集来计算梯度和更新参数。

在这里插入图片描述
批量梯度下降通常用于小型数据集或参数空间较小的模型

  • 它的优点是能够更准确地收敛到全局最优解(如果存在),并且在参数更新方向上相对稳定。
  • 然而,由于每次迭代时都要使用整个数据集,因此它的计算成本较高。尤其是在大规模数据集上。

随机梯度下降法(SGD)

随机梯度下降(Stochastic Gradient Descent,SGD)是一种梯度下降算法的变体,用于优化机器学习模型的参数。与批量梯度下降不同,随机梯度下降在每次迭代中仅使用一个样本来计算梯度和更新参数。

在这里插入图片描述
随机梯度下降是一种每次迭代仅使用一个样本来计算梯度并更新参数的梯度下降算法。

  • 它的优点是计算代价较低,适用于大规模数据集,这一特性有助于算法逃离局部最小值,并具有一定的探索性。
  • 然而,由于梯度估计存在噪音,参数更新可能不稳定。

小批量梯度下降法(MBGD)

小批量梯度下降(Mini-Batch Gradient Descent)是梯度下降算法的一种变体,介于批量梯度下降(Batch Gradient Descent)和随机梯度下降(Stochastic Gradient Descent)之间。
它在每次迭代中使用一小批次(mini-batch)的样本来计算梯度和更新参数。

在这里插入图片描述

梯度算法的改进

梯度下降算法存在的问题

损失函数特性:一个方向上变化迅速而在另一个方向上变化缓慢。
优化目标:从起点处走到底端笑脸处。
梯度下降算法存在的问题:山壁间振荡,往谷底方向的行进较慢。
在这里插入图片描述
仅增大步长并不能加快算法收敛速度:相当于在振荡方向加了一个更大的速度,往山谷方向也加了,但是很小。

动量法(Momentum)

动量法梯度(Momentum Gradient Descent)下降通过引入动量变量,可以在更新过程中积累之前的梯度信息,并根据历史梯度的趋势来调整参数更新的方向和幅度。这样可以使参数更新在梯度方向上更加稳定,并且可以加速学习过程,尤其在目标函数存在大体量或弯曲的情况下。

目标

改进梯度下降算法存在的问题,即减少震荡,加速通往谷底

改进思想

利用累加历史梯度信息更新梯度
在这里插入图片描述
μ取值范围[0,1)

  • 当动量系数μ等于0时,动量法梯度下降变为普通的梯度下降算法。在这种情况下,动量变量v的更新公式简化为:
    v = 0 * v + g = g
    也就是说,动量变量v只受当前梯度的影响,而不考虑历史梯度信息。参数更新时,只使用当前梯度乘以学习率进行更新。这样的更新方式使得参数更新的方向和幅度完全依赖于当前的梯度值。
  • 当动量系数μ等于1时,动量法梯度下降完全依赖于历史梯度信息。动量变量v的更新公式为:
    v = 1 * v + g = v + g
    动量变量v实际上就是历史梯度的累积,因为历史梯度乘以1之后仍然是历史梯度本身。在参数更新时,只使用动量变量v进行更新,而不再考虑当前梯度的贡献。 即使g走到平坦局域了为0 了,可是v不为0,则权值θ还在持续更新。

建议取0.9,可以将其理解为摩擦系数 v = 0.9v 多次迭代后,v会接近于0

为什么有效

累加过程中震荡方向相互抵消,平坦方向得到加强

动量法还有什么效果?

在这里插入图片描述
它在参数更新中引入了动量概念,以加速学习过程并帮助跳出局部最优解和鞍点。

自适应梯度(AdaGrad)

AdaGrad(Adaptive Gradient Algorithm)是一种自适应梯度算法,用于在机器学习中优化模型的参数。它根据参数的梯度历史信息自适应地调整学习率,使得在训练过程中较大的梯度得到较小的学习率,而较小的梯度得到较大的学习率。
AdaGrad算法的核心思想是为每个参数维护一个梯度的累积平方和,并在参数更新时将学习率除以这个累积平方和的平方根。

在这里插入图片描述
如何区分震荡方式与平坦方向?
梯度幅度的平方较大的方向是震荡方向;
梯度幅度的平方较小的方向是平坦方向。

在这里插入图片描述
震荡方向和平坦方向的梯度的平方和不断累加
在这里插入图片描述
因为震荡方向的梯度大,因此累加平方梯度r不断变大,所以ε1不断减小
因为平坦方向的梯度小,因此累加平方梯度r不断变肖,所以ε2不断增大

AdaGrad存在的问题

由于累加平方梯度r在不断的变大,在多次迭代后,r会变得非常大,则ε1和ε2都会变成一个非常小的值。失去调节作用。

AdaGrad算法具有以下特点:

  • 自适应学习率:AdaGrad算法根据参数的梯度历史信息自适应地调整学习率。当某个参数的梯度较大时,其累积平方和较大,学习率较小;当梯度较小时,累积平方和较小,学习率较大。这样可以保证在训练早期参数更新幅度较大,而在训练后期逐渐减小。

  • 处理稀疏梯度:AdaGrad算法在处理稀疏数据集时表现良好。由于累积平方和的累加,较少出现的参数梯度将获得更大的学习率,从而更快地进行参数更新。

  • 累积平方和的增长:AdaGrad算法累积了梯度的平方和,随着训练的进行,累积平方和会逐渐增大。这可能导致学习率过度下降,使得训练过程变得缓慢。为了解决这个问题,后续的优化算法如RMSprop和Adam引入了衰减系数,对累积平方和进行平滑衰减。

RMSProp

RMSprop(Root Mean Square Propagation)是一种自适应梯度算法,用于在机器学习中优化模型的参数。它是对AdaGrad算法的改进主要解决AdaGrad算法累积平方梯度过度增大的问题。
RMSprop算法的核心思想是为每个参数维护一个梯度平方的移动平均,并在参数更新时使用这个移动平均来调整学习率。

算法思路:
在这里插入图片描述
当ρ等于0:不考虑历史梯度 ,r = 0 * r + (1 - 0)g * g = g * g 仅依靠当前的的梯度

  • 就把梯度大的降低一些,梯度小的增大一些

当ρ等于1:即所有的历史梯度都考虑进来,r = 1 * r + (1 - 1) g * g = r

  • 权值一直不会变了

建议取0.999, v = 0.999v + 0.001 * g * g 多次迭代后,v会不断减小

ADAM梯度下降法

Adam(Adaptive Moment Estimation)是一种自适应梯度算法,结合了动量法和RMSprop算法的优点,用于在机器学习中优化模型的参数。它在训练过程中自适应地调整学习率

算法思路:
在这里插入图片描述
修正偏差为什么可以缓解冷启动?
在进行第1次更新的时候:
v初始值为0,μ初始值为0.9
v ( 1 ) = 0 + 0.1 g v^{(1)} = 0 + 0.1 g v(1)=0+0.1g

则通过修正偏差
v ^ 1 = 0.1 g / 1 − ( 0.9 ) 1 = g \hat{v}^1 = 0.1 g / 1 - (0.9)^1= g v^1=0.1g/1(0.9)1=g
解决了开始的梯度被减少10倍的问题
在进行第10次更新的时候:
修正偏差项就不起作用了
v ^ 10 = v 9 g / 1 − ( 0.9 ) 10 = v \hat{v}^{10} = v^9 g / 1 - (0.9)^{10} = v v^10=v9g/1(0.9)10=v
所以修正项仅在初期为了解决冷启动的时候起作用,来防止初期r = v = 0,更新特别慢的问题

总结

分享一个动态查看各种梯度梯度算法下降过程的图的网站https://www.ruder.io/optimizing-gradient-descent/
这个博主写的更多更详细:https://blog.csdn.net/oppo62258801/article/details/103175179?ydreferer=aHR0cHM6Ly93d3cuYmluZy5jb20v

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

同时可以学习一下算法的实现:https://zhuanlan.zhihu.com/p/77380412

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

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

相关文章

硬件学习 PAD9.5 day02 原理图绘制中的操作,PCB 封装的制作

1. 原理图中的连线操作 1.1 点击连线按钮 1.2 点击需要连线的地方连接即可 1.3 双击即可停止连线 2. 原理图的总线绘制 2.1 按下总线绘制按钮 2.2 画一条总线 总线名称 总线名字 [ 起始数字 : 结束数字 ] 2.3 分线连接总线 注意:原理图的连线…

【Java 基础篇】Java 多线程详解

多线程是 Java 编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的性能和响应能力。本篇博客将深入探讨 Java 多线程,从基础概念到实际应用,适用于 Java 初学者和希望深入了解多线程的开发人员。 什么是多线程&#…

【JS】—垃圾回收机制

一、指令材料 1.定义 JavaScript(JS)的垃圾回收机制是一种自动管理内存的过程,它有助于释放不再使用的内存,以避免内存泄漏和提高程序的性能。 JavaScript的垃圾回收机制是一种自动管理内存的方式,以确保不再被引用的…

【RocketMQ】路由中心NameServer

【RocketMQ】路由中心NameServer 参考资料: RocketMQ Nameserver 背后的设计理念 RocketMQ之NameServer详解 深入剖析RocketMQ源码-NameServer —— vivo互联网技术 《RocketMQ技术内幕》 文章目录 【RocketMQ】路由中心NameServerNameServer架构设计NameServer工作…

上海亚商投顾:沪指震荡调整 两市成交金额跌破6000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整,创业板指续创3年多以来新低。ST板块继续走强,*ST柏龙、ST恒久等…

笔记2.2:网络应用基本原理

一. 网络应用的体系结构 (1)客户机/服务器结构(Client-Server, C/S) (2)点对点结构(Peer-to-Peer,P2P) (3)混合结构(Hybrid&#x…

leetcode646. 最长数对链(java)

最长数对链 题目描述贪心解法二 动态规划 dp 题目描述 难度 - 中等 leetcode646. 最长数对链(java) 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在&#xff0c;我们定义一种 跟随 关系&#xff0c;当且仅…

数字散斑干涉测量仿真研究

一、引言 数字散斑干涉技术(digital speckle pattern interferometry&#xff0c;DSPI)是一种测量物体表面微小变形的测量技术&#xff0c;在生物医学检测、缺陷无损检测、精密制造、材料与结构力学参数评估等领域起着日益重要的作用&#xff0c;具有实时性、高精度、非接触、…

npm、yarn、pnpm如何清除缓存?

前端工程化创建项目会经常使用各种安装包管理工具&#xff0c;安装各种前端依赖包。例如&#xff0c;npm、yarn、pnpm等。时间一长&#xff0c;各种安装包管理工具的在安装依赖时&#xff0c;留下的缓存文件就会变得很大&#xff0c;以至于影响系统的运行&#xff0c;因此必要时…

kdxf speex

speex import subprocess# 定义FFmpeg命令 ffmpeg_command [ffmpeg,#-f, dshow,-i, rd:\tug\iat_mp3_16k.mp3,-acodec, speex,-ar, 16000,-ab, 16000,-ac, 1,output.spx ] spxcmdspxTest -enc 16000 7 1280 D:\\tug\iat_pcm_16k.pcm 1.speex #ffmpeg -f dshow -i audio"…

易优cms安装插件时显示空白一片处理方法

检查网站权限是否自己改过&#xff0c;看下图操作

camera驱动层和硬件层简介

目录 Camera Driver 1. V4L2 框架简介 1&#xff09;关键结构体 2&#xff09;模块初始化 3&#xff09;处理用户空间请求 2. 高通KMD框架详解 1&#xff09;概览 2&#xff09;核心模块解析 3&#xff09;模块初始化 4&#xff09;处理UMD CSL请求 Camera Hardware…

孤网双机并联逆变器下垂控制策略MATLAB仿真模型

微❤关注“电气仔推送”获得资料 主体模块&#xff1a; 建议使用MATLAB2021b及以上版本打开&#xff01; 功率计算模块、下垂控制模块、电压电流双环控制模块 系统输出有功功率: 系统输出无功功率&#xff1a; 系统频率变化曲线: 参考文献&#xff1a; 微电网并网运行模式下…

智慧燃气管网监控预警系统探析

关键词&#xff1a;智慧燃气、智能管网、智慧燃气系统、智能燃气、燃气监控、数据挖掘 “智慧城市”是我国当前城市发展的新理念&#xff0c;“智慧城市”离不开天然气等清洁能源的普及和发展&#xff0c;在这一理念的指引下&#xff0c;我国城市的燃气使用普及率和使用范围都…

2023-09-20 Teaching Note for Class 1

文章目录 1. Sign-in Result2. Content of Course3. History of Computer4. Free Topic 1. Sign-in Result Let’s take a look at the sign-in result Everybody is here. 2. Content of Course the course consists of eight modules 3. History of Computer 4. Free To…

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows 大家好我是艾西&#xff0c;最近研究了下 l4d2&#xff08;求生之路2&#xff09;这款游戏的搭建以及架设过程。今天就给喜欢l4d2这款游戏的小伙伴们分享下怎么搭建架设一个自己的服务器。毕竟自己当服主是热爱游…

基于matlab实现的光折射反射(不同界面)程序

完整程序: %平面电磁波在不同介质界面上入射、反射、折射仿真 %ReadMe!!!在下述说明的用户输入区内输入入射角和两介质折射率&#xff0c; %输出反射折射示意图与反射折射系数随入射角变化的曲线 %—————————————————————————————————————…

我想设计一套游戏的奖励系统,有什么值得注意的?

游戏上&#xff1a; 游戏成就系统的价值 游戏中的成就可以延长游戏时间&#xff0c;让玩家不仅仅是将游戏通关&#xff0c;而是必须完成游戏内所有挑战及发现秘密&#xff0c;这些成就可以与游戏本身的目标一致&#xff0c;也可以独立于游戏的主要或次要目标之外&#xff0c;…

flink集群与资源@k8s源码分析-资源III 声明式资源管理

1 资源 资源分析分3部分,资源请求,资源提供,声明式资源管理,本文是第三部分声明式资源管理 2 检查资源需求/检查资源声明 检查资源需求/检查资源声明是flink声明式资源管理的核心方法 上面的资源场景分为两类,提出资源需求和提供资源, 检查资源请求/检查资源声明是交…

Unity HDRP 录制透明通道序列帧

一、插件 使用插件为Unity Recorder&#xff0c;可在PackageManager搜索Recorder安装 然后打开插件面板 二、Image Sequence 添加Image Sequence&#xff0c;摄像机选择主摄即可&#xff0c;图片格式选PNG&#xff0c;并勾选Include Alpha 此时点击 START RECORDING 即可…