【机器学习300问】84、AdaGrad算法是为了解决什么问题?

        神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优化。因为参数空间非常复杂,无法轻易找到最优解,而且在深度神经网络中,参数的数量非常庞大,导致最优化问题更加复杂。

        为了找到最优参数,我们可以采取随机梯度下降算法(SGD)来一次次沿着梯度方向更新参数,逐渐靠近最优参数。SGD是个简单的方法但它有局限性,所以发明了Momentum、AdaGrad等改良的梯度下降算法。

        关于SGD的局限性,我在之前的篇文章中写过,这里给出链接后就不展开啦!

基础梯度下降法:缓慢探索的徒步者icon-default.png?t=N7T8http://t.csdnimg.cn/XnxSX

一、学习率衰减

        在神经网络的学习中,学习率\eta的值很重要。学习率过小,会导致学习花费过多时间;反过来学习率过大,则会导致学习发散而不能正确进行。关于学习率的有效技巧中,有一种被称之为学习率衰减的方法,它的基本思想是在训练初期使用较大的学习率以快速接近最优解,随着训练的进行,逐渐减小学习率,使得模型能够更细致地调整参数,避免因过大的学习率而错过最优解或导致发散。

二、AdaGrad算法的原理

(1)通过举例来感性认识

        想象一下,AdaGrad算法就像是一个细心的园丁,负责照顾一片有着各种不同植物的花园。在这个花园里,每株植物代表模型中的一个参数,而花园的繁荣程度则对应着我们的模型性能。园丁的目标是让花园长得茂盛,但他不能给所有植物浇一样的水,因为有的植物喜湿,有的耐旱。

        在传统的梯度下降中,就好比是用同一壶水均匀地浇灌整个花园,不管植物的具体需求。但AdaGrad这位智慧的园丁不同,他手里拿着一本详细的日记,记录了每株植物过去的浇水情况(即梯度的大小)。当来到新的一天,他查看每株植物的需水量(梯度),并参考之前的浇水记录,为每一株植物精细调整水量——对于那些过去经常被大量浇水(梯度变化大)的植物,这次就只给一点点水,以免淹死;而对于那些很少得到水分(梯度变化小)的植物,则慷慨地多浇一些,帮助它们更好地成长。

        这样做有什么好处呢?首先,它确保了对每株植物(参数)的关照恰到好处,不会因为过度或不足的调整而导致整个花园(模型)的不平衡。其次,它能有效处理花园中那些生长环境差异大的植物,就像深度学习模型中参数的重要性各不相同一样,AdaGrad能够根据实际情况给予最合适的调整。 

(2)通过定义来理性认识

        Adagrad( Adaptive Gradient 的缩写),即自适应梯度算法,是一种先进的梯度下降优化方法,特别适用于处理稀疏数据和具有特征数量庞大的问题。它通过自适应地调整每个参数的学习率来优化模型训练过程,以应对不同参数在不同时间步可能需要不同学习速率的情况。

Adagrad的更新规则定义如下:

  1. 对于目标函数J(\theta),计算每个参数\theta_i的梯度g_{t,i}
  2.  对所有参数计算梯度平方的累积和G_{t,i} = G_{t-1,i} + g_{t,i}^2
  3. 更新每个参数,其中\eta是全局学习率,\epsilon是一个小的平滑项(如10^{-8})防止除以零:\theta_{t+1,i} = \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,ii} + \epsilon}} \cdot g_{t,i}

① 自适应是如何实现的?

符号解释
\theta_{t,i}在时刻t的第i个参数
g_{t,i}在时刻t对应\theta_{t,i}的梯度
\eta初始学习率
\epsilon避免分母为零而加入的一个很小的平滑项
G_{t,ii}是一个对角矩阵,其中对角元素G_{t,ii}是至时刻t为止所有时刻对应的g_{t,i}的平方和。

自适应学习率的实现机制体现在G_{t,ii}上,它随着时间累加每个参数的梯度平方。随着训练的进行,每个参数的梯度值会被平方并累加到G_{t,ii}中。

  • 如果参数的梯度值一直很大,其平方值会大幅增加G_{t,ii}的值,造成学习率下降,即\frac{\eta}{\sqrt{G_{t,ii}}}减小,避免这个参数在后续学习过程中作出较大的调整。
  • 如果参数的梯度值较小或稀疏(不经常更新),G_{t,ii}的值增长缓慢,这会导致该参数的学习率\frac{\eta}{\sqrt{G_{t,ii}}}相对较大,允许模型在学习这个参数时做出更大的步伐。

② 为什么要将梯度进行平方?

  1. 放大梯度效应:通过平方操作,小的梯度值会变得更小,而大的梯度值会被放大。这意味着对于频繁更新(通常梯度较大)的参数,其累积的平方和会迅速增长,导致这些参数的学习率下降得更快。这有助于在训练的早期快速调整那些对损失有大的影响的参数。
  2. 逐步降低学习率:累积的平方梯度和会在每次迭代时增加,作为学习率调整项的分母,随着训练的进行,累积的量会使得学习率逐步降低。参数的更新步长会随着迭代不断减小,有利于在接近最优解时提供更精细的调整,减少过度更新导致的振荡。

③ 为什么又要对梯度平方累加和开方?

  1. 缓解梯度平方累积过快:由于梯度是平方后累加的,会导致累积和很快变大,从而使学习率过快减小到非常小的程度。开方是为了缓和这种累积效应,避免学习率降低得过于急剧,这样可以在长时间的迭代训练中持续地进行参数更新。
  2. 保持数值稳定性:开方操作可以保证梯度更新的规模适中,防止由于累积平方梯度的巨大值导致的数值不稳定问题。换句话说,它为算法引入了一种形式的数值正则化。
  3. 相对梯度尺度调节:开方可以使累积的梯度影响更加平滑,算法对各个参数的更新更加敏感。它使得参数更新步伐相对于其梯度的尺度和迄今为止的梯度历史进行调节,从而实现更加精确的参数更新控制。
  4. 单位一致性:由于累加的是梯度的平方,直接使用累积值会破坏原始梯度的单位(变成了梯度单位的平方),开方可以将单位恢复回梯度的原始单位,保持单位的一致性。

        Adagrad算法随着梯度的累积,逐渐减小学习率,适用于梯度下降的早期阶段,能更快地逼近目标函数的最小值。但它也可能会过早地降低学习率,导致优化过程在学习后期减缓。

三、AdaGrad算法能解决哪些问题

(1)学习率选择难题

        传统梯度下降算法往往需要手动调整全局学习率,这对于大规模参数空间或者参数敏感性不一的问题来说是个挑战。AdaGrad通过为每个参数独立地调整学习率,自动适应不同参数的学习速度需求,减轻了手动调参的负担。

(2)稀疏数据处理

        在处理稀疏数据集时,部分特征可能在整个训练集中仅出现几次,而其他特征则频繁出现。AdaGrad能够给予这些稀疏特征更多的关注,通过累积稀疏特征的梯度平方来放大其学习率,从而在不过度更新常见特征的同时,也能有效学习到稀疏特征的信息。

(3)特征尺度差异

        在特征尺度差异较大的情况下,固定学习率可能导致对尺度大的特征过度更新,而对尺度小的特征更新不足。AdaGrad通过按元素调整学习率,可以自然地平衡不同尺度特征的学习进度,减少尺度差异带来的影响。

(4)梯度累积效果

        通过累积过去所有梯度的平方,AdaGrad在学习过程中慢慢减小每个参数的学习率,这意味着对于每个参数,算法随着时间的推进变得越来越‘保守’。这有助于减少在训练后期的过度震荡。

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

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

相关文章

【SpringBoot篇】基于Redis分布式锁的 误删问题 和 原子性问题

文章目录 🍔Redis的分布式锁🛸误删问题🎈解决方法🔎代码实现 🛸原子性问题🌹Lua脚本 ⭐利用Java代码调用Lua脚本改造分布式锁🔎代码实现 🍔Redis的分布式锁 Redis的分布式锁是通过利…

基于FPGA的音视频监视器,音视频接口采集器的应用

① 支持1路HDMI1路SDI 输入 ② 支持1路HDMI输出 ③ 支持1080P高清屏显示实时画面以 及叠加的分析结果 ④ 支持同时查看波形图(亮度/RGB)、 直方图、矢量图 ⑤ 支持峰值对焦、斑马纹、伪彩色、 单色、安全框遮幅标记 ⑥ 支持任意缩放画面,支…

远程桌面连接不上怎么连服务器,原因是什么?如何解决?

远程桌面连接不上怎么连服务器,原因是什么?如何解决? 面对远程桌面连接不上的困境,我们有办法! 当你尝试通过远程桌面连接服务器,但遭遇连接失败的挫折时,不要慌张。这种情况可能由多种原因引起…

Redis20种使用场景

Redis20种使用场景 1缓存2抽奖3Set实现点赞/收藏功能4排行榜5PV统计(incr自增计数)6UV统计(HeyperLogLog)7去重(BloomFiler)8用户签到(BitMap)9GEO搜附近10简单限流11全局ID12简单分…

【Docker】Docker部署Java程序

Maven中使用打包插件 <build><finalName>duanjian</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass…

性能测试 --概念

什么是性能测试 性能测试和功能测试都是在系统测试阶段运行, 两者有什么区别呢? 案例:豌豆射手和三线射手都是射手, 它们的功能都是向前发射豌豆进行攻击, 能够攻击到地面的僵尸. 但是从性能上来讲, 豌豆射手只能攻击到一路的僵尸, 而三线射手能同时攻击三路(注:放在边路实际…

【unity】用代码实现“碰到障碍后 运动对象的运动方向如何改变(反弹/滑行)”

想要实现的效果&#xff1a; 例1&#xff1a;飞出的弹丸&#xff0c;碰到墙壁后&#xff0c;反弹。【↘️| 】——>【↙️| 】 例2&#xff1a;向右下方【↘️】移动的对象&#xff0c;碰到右侧的墙壁 【↘️| 】 后&#xff0c;继续沿着着墙壁向下方移动【↓ | 】 为什么要…

npm run build 时出现语法报错 Module parse failed: Unexpected token

错误原因 出现这个错误一般是你使用了或者引用的包里出现了ES6的语法&#xff0c;但是你的webpack可能是4.x或者更低版本的&#xff0c; 这时候单靠webpack本身无法识别ES6的语法&#xff0c;但是升级webpack到5可能会与现有的代码产生兼容性问题&#xff0c;因此就需要引入b…

服务器内存占用不足会怎么样,解决方案

在当今数据驱动的时代&#xff0c;服务器对于我们的工作和生活起着举足轻重的作用。而在众多影响服务器性能的关键因素当中&#xff0c;内存扮演着极其重要的角色。 服务器内存&#xff0c;也称RAM&#xff08;Random Access Memory&#xff09;&#xff0c;是服务器核心硬件部…

回炉重造java----双列集合(HashMap,TreeMap)

体系结构 ①基本操作: ②遍历方式: 第一种: 键找值&#xff0c;通过map.keySet()获取Map的键集合&#xff0c;通过键去匹配Map中的值 Set<String> strings map.keySet();for (String string : strings) {System.out.println(map.get(string));} 第二种: 键值对&…

【linux】vmtouch文件缓存管理工具

目录 vmtouch简介 用法 例子 统计文件或者目录在缓存中的记录 缓存文件到内存 其他类似工具 vmtouch简介 vmtouch是用c语言编写的文件缓存管理工具&#xff0c;适用用于所有类Unix系统。 作用&#xff1a; 1&#xff0c;查看文件系统缓存情况 2&#xff0c;将文件或目…

多个.C文件被编译为一个可执行文件的详细过程

多个.C文件被编译为一个可执行文件的详细过程 文章目录 多个.C文件被编译为一个可执行文件的详细过程前言一、一个.C文件的编译过程二、多个.C文件的链接过程1.文件信息2.链接过程3.makefile 总结 前言 C语言经典的 “hello world ” 程序从编写、编译到运行&#xff0c;看到屏…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 多元素控件 | List Widget的说明及介绍 文章编号&#x…

线性表

1.1线性表的定义 线性表&#xff1a;零个或多个数据元素的有限序列。 注&#xff1a; &#xff08;1&#xff09;它是一个序列。元素之间是有顺序的&#xff0c;若元素存在多个&#xff0c;则第一个元素无前驱&#xff0c;最后一个元素无后继&#xff0c;其他元素有且只有一个…

dragonbones 5.6.3不能导出的解决办法

问题描述 使用dragonbones 5.6.3导出资源时无反应。 解决方法 第一步安装node.js&#xff0c;我这里使用的是V18.16.0第二步进入到DragonBonesPro\egretlauncher\server\win目录&#xff0c;然后把里面的node.exe替换为刚刚下载的node文件夹即可&#xff0c;如下图&#xff…

FonePaw Data Recovery for Mac:轻松恢复丢失数据

FonePaw Data Recovery for Mac是一款功能强大的数据恢复软件&#xff0c;专为Mac用户设计&#xff0c;帮助用户轻松恢复因各种原因丢失的数据。该软件支持从硬盘驱动器、存储卡、闪存驱动器等存储介质中恢复丢失或删除的文件&#xff0c;包括照片、视频、文档、电子邮件、音频…

[windows系统安装/重装系统][step-3]装驱动、打驱动、系统激活

重装系统三部曲 [windows系统安装/重装系统][step-1]U盘启动盘制作&#xff0c;微软官方纯净系统镜像下载-CSDN博客 [windows系统安装/重装系统][step-2]BIOS设置UEFI引导、磁盘分区GPT分区、安装系统[含完整操作拍照图片]-CSDN博客 [windows系统安装/重装系统][step-3]装驱动…

数据分析:基于sparcc的co-occurrence网络

介绍 Sparcc是基于16s或metagenomics数据等计算组成数据之间关联关系的算法。通常使用count matrix数据。 安装Sparcc软件 git clone gitgithub.com:JCSzamosi/SparCC3.git export PATH/path/SparCC3:$PATHwhich SparCC.py导入数据 注&#xff1a;使用rarefy抽平的count ma…

web安全之登录框渗透骚姿势,新思路

不管漏洞挖掘还是挖SRC&#xff0c;登录框都是重点关注对象&#xff0c;什么漏洞都有可能出现&#xff0c; 本篇文章做个总结&#xff0c;后面发现新思路后会继续更新 万能密码 or 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露 验证码DOS XSS万能密…

Redis数据结构-Dict

1.3 Redis数据结构-Dict 我们知道Redis是一个键值型&#xff08;Key-Value Pair&#xff09;的数据库&#xff0c;我们可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。 Dict由三部分组成&#xff0c;分别是&#xff1a;哈希表&#xff08;DictHashTa…