【机器学习300问】84、AdaGrad算法是为了解决什么问题?
神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优化。因为参数空间非常复杂,无法轻易找到最优解,而且在深度神经网络中,参数的数量非常庞大,导致最优化问题更加复杂。
为了找到最优参数,我们可以采取随机梯度下降算法(SGD)来一次次沿着梯度方向更新参数,逐渐靠近最优参数。SGD是个简单的方法但它有局限性,所以发明了Momentum、AdaGrad等改良的梯度下降算法。
关于SGD的局限性,我在之前的篇文章中写过,这里给出链接后就不展开啦!
基础梯度下降法:缓慢探索的徒步者http://t.csdnimg.cn/XnxSX
一、学习率衰减
在神经网络的学习中,学习率的值很重要。学习率过小,会导致学习花费过多时间;反过来学习率过大,则会导致学习发散而不能正确进行。关于学习率的有效技巧中,有一种被称之为学习率衰减的方法,它的基本思想是在训练初期使用较大的学习率以快速接近最优解,随着训练的进行,逐渐减小学习率,使得模型能够更细致地调整参数,避免因过大的学习率而错过最优解或导致发散。
二、AdaGrad算法的原理
(1)通过举例来感性认识
想象一下,AdaGrad算法就像是一个细心的园丁,负责照顾一片有着各种不同植物的花园。在这个花园里,每株植物代表模型中的一个参数,而花园的繁荣程度则对应着我们的模型性能。园丁的目标是让花园长得茂盛,但他不能给所有植物浇一样的水,因为有的植物喜湿,有的耐旱。
在传统的梯度下降中,就好比是用同一壶水均匀地浇灌整个花园,不管植物的具体需求。但AdaGrad这位智慧的园丁不同,他手里拿着一本详细的日记,记录了每株植物过去的浇水情况(即梯度的大小)。当来到新的一天,他查看每株植物的需水量(梯度),并参考之前的浇水记录,为每一株植物精细调整水量——对于那些过去经常被大量浇水(梯度变化大)的植物,这次就只给一点点水,以免淹死;而对于那些很少得到水分(梯度变化小)的植物,则慷慨地多浇一些,帮助它们更好地成长。
这样做有什么好处呢?首先,它确保了对每株植物(参数)的关照恰到好处,不会因为过度或不足的调整而导致整个花园(模型)的不平衡。其次,它能有效处理花园中那些生长环境差异大的植物,就像深度学习模型中参数的重要性各不相同一样,AdaGrad能够根据实际情况给予最合适的调整。
(2)通过定义来理性认识
Adagrad( Adaptive Gradient 的缩写),即自适应梯度算法,是一种先进的梯度下降优化方法,特别适用于处理稀疏数据和具有特征数量庞大的问题。它通过自适应地调整每个参数的学习率来优化模型训练过程,以应对不同参数在不同时间步可能需要不同学习速率的情况。
Adagrad的更新规则定义如下:
- 对于目标函数
,计算每个参数
的梯度
- 对所有参数计算梯度平方的累积和
- 更新每个参数,其中
是全局学习率,
是一个小的平滑项(如
)防止除以零:
① 自适应是如何实现的?
符号 | 解释 |
在时刻 | |
在时刻 | |
初始学习率 | |
避免分母为零而加入的一个很小的平滑项 | |
是一个对角矩阵,其中对角元素 |
自适应学习率的实现机制体现在上,它随着时间累加每个参数的梯度平方。随着训练的进行,每个参数的梯度值会被平方并累加到
中。
- 如果参数的梯度值一直很大,其平方值会大幅增加
的值,造成学习率下降,即
减小,避免这个参数在后续学习过程中作出较大的调整。
- 如果参数的梯度值较小或稀疏(不经常更新),
的值增长缓慢,这会导致该参数的学习率
相对较大,允许模型在学习这个参数时做出更大的步伐。
② 为什么要将梯度进行平方?
- 放大梯度效应:通过平方操作,小的梯度值会变得更小,而大的梯度值会被放大。这意味着对于频繁更新(通常梯度较大)的参数,其累积的平方和会迅速增长,导致这些参数的学习率下降得更快。这有助于在训练的早期快速调整那些对损失有大的影响的参数。
- 逐步降低学习率:累积的平方梯度和会在每次迭代时增加,作为学习率调整项的分母,随着训练的进行,累积的量会使得学习率逐步降低。参数的更新步长会随着迭代不断减小,有利于在接近最优解时提供更精细的调整,减少过度更新导致的振荡。
③ 为什么又要对梯度平方累加和开方?
- 缓解梯度平方累积过快:由于梯度是平方后累加的,会导致累积和很快变大,从而使学习率过快减小到非常小的程度。开方是为了缓和这种累积效应,避免学习率降低得过于急剧,这样可以在长时间的迭代训练中持续地进行参数更新。
- 保持数值稳定性:开方操作可以保证梯度更新的规模适中,防止由于累积平方梯度的巨大值导致的数值不稳定问题。换句话说,它为算法引入了一种形式的数值正则化。
- 相对梯度尺度调节:开方可以使累积的梯度影响更加平滑,算法对各个参数的更新更加敏感。它使得参数更新步伐相对于其梯度的尺度和迄今为止的梯度历史进行调节,从而实现更加精确的参数更新控制。
- 单位一致性:由于累加的是梯度的平方,直接使用累积值会破坏原始梯度的单位(变成了梯度单位的平方),开方可以将单位恢复回梯度的原始单位,保持单位的一致性。
Adagrad算法随着梯度的累积,逐渐减小学习率,适用于梯度下降的早期阶段,能更快地逼近目标函数的最小值。但它也可能会过早地降低学习率,导致优化过程在学习后期减缓。
三、AdaGrad算法能解决哪些问题
(1)学习率选择难题
传统梯度下降算法往往需要手动调整全局学习率,这对于大规模参数空间或者参数敏感性不一的问题来说是个挑战。AdaGrad通过为每个参数独立地调整学习率,自动适应不同参数的学习速度需求,减轻了手动调参的负担。
(2)稀疏数据处理
在处理稀疏数据集时,部分特征可能在整个训练集中仅出现几次,而其他特征则频繁出现。AdaGrad能够给予这些稀疏特征更多的关注,通过累积稀疏特征的梯度平方来放大其学习率,从而在不过度更新常见特征的同时,也能有效学习到稀疏特征的信息。
(3)特征尺度差异
在特征尺度差异较大的情况下,固定学习率可能导致对尺度大的特征过度更新,而对尺度小的特征更新不足。AdaGrad通过按元素调整学习率,可以自然地平衡不同尺度特征的学习进度,减少尺度差异带来的影响。
(4)梯度累积效果
通过累积过去所有梯度的平方,AdaGrad在学习过程中慢慢减小每个参数的学习率,这意味着对于每个参数,算法随着时间的推进变得越来越‘保守’。这有助于减少在训练后期的过度震荡。
相关文章:
【机器学习300问】84、AdaGrad算法是为了解决什么问题?
神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优化。因为参数空间非常复杂,无法轻易找到最优解,而且在深度神经网络中,参数的数量非常庞大,导致最优化问…...
Java算法-力扣leetcode-14. 最长公共前缀
14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: strs ["flower","flow","flight"] 输出: "fl"示…...

视频拼接融合产品的产品与架构设计(二)
视频拼接融合产品的产品与架构设计一 以上是第一期,以前思考的时候还是比较着急,现在思考的更多了,现实世界的拼接更加需要我们沉下心来做,尤其是对于更多画面,画面更加清晰怎么做 本篇章不在于其他功能,在…...

【docker 】push 镜像到私服
查看镜像 docker images把这个hello-world 推送到私服 docker push hello-world:latest 报错了。不能推送。需要标记镜像 标记Docker镜像 docker tag hello-world:latest 192.168.2.1:5000/hello-world:latest 将Docker镜像推送到私服 docker push 192.168.2.1:5000/hello…...

Java框架精品项目【用于个人学习】
源码获取:私聊回复【项目关键字】获取 更多选题参考: Java练手项目 & 个人学习等选题参考 推荐菜鸟教程Java学习、Javatpoint学习 前言 大家好,我是二哈喇子,此博文整理了各种项目需求 此文下的项目用于博主自己学习&#x…...

每周一算法:无向图的最小环
题目链接 观光之旅 题目描述 给定一张无向图,求图中一个至少包含 3 3 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案,若最小环不唯一,输出…...

分布式websocket IM即时通讯聊天开源项目如何启动
前言 自己之前分享了分布式websocket的视频有同学去fork项目了,自己启动一下更方便理解项目嘛。然后把项目启动需要的东西全部梳理出来。支持群聊单聊,表情包以及发送图片。 支持消息可靠,消息防重,消息有序。同时基础架构有分布式权限&…...
tensorflow学习笔记(1)环境准备写个简单例子(小白手册)-20240506
一、安装python、tensorflow 1、Mac上默认python已经安装,自带pip 2、pip3 install tensorflow 如果报错,提示pip3版本较低,可以根据提示来更新pip3:/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 3、然后再使用pip3来安装tensor…...

kubernate 基本概念
一 K8S 是什么? K8S 全称:Kubernetes 1 kubernate基本概念 作用: 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如…...

【系统架构师】-选择题(十二)计算机网络
1、网闸的作用:实现内网与互联网通信,但内网与互联网不是直连的 2、管理距离是指一种路由协议的路由可信度。15表示该路由信息比较可靠 管理距离越小,它的优先级就越高,也就是可信度越高。 0是最可信赖的,而255则意味…...
代码随想录|总结篇
完结篇: 60天,还是坚持了下来,达成算法路上的一个小目标。 加入代码随想录训练营之前,也断断续续刷到了树那一章节,但后面因为导师项目等种种情况,一直耽搁到年后。年后打算重新开始刷题时,正好…...

网络编程套接字和传输层tcp,udp协议
认识端口号 我们知道在网络数据传输的时候,在IP数据包头部有两个IP地址,分别叫做源IP地址和目的IP地址。IP地址是帮助我们在网络中确定最终发送的主机,但是实际上数据应该发送到主机上指定的进程上的,所以我们不仅要确定主机&…...
通过wget下载ftp文件
通过wget下载ftp文件 基础用法带密码的http文件带密码的ftp文件补充 基础用法 在下载的过程中会显示进度条,包含百分比,已下载字节,下载速度,剩余时间。 # 下载单个文件 wget [url_file]# 下载目录全部文件 wget [url_dir/*] wg…...

Acrobat Pro DC 2023 for Mac:PDF处理的终极解决方案
Acrobat Pro DC 2023 for Mac为Mac用户提供了PDF处理的终极解决方案。它具备强大的文档处理能力,无论是查看、编辑还是创建PDF文件,都能轻松胜任。在编辑功能方面,Acrobat Pro DC 2023支持对文本、图像进行精准的修改和调整,还能添…...
map容器
目录 map构造和赋值 map大小和交换 map插入和删除 map查找和统计 map排序 map构造和赋值 map中所有元素都是pair(即一对) pair中第一个元素为key(键值),起到索引作用,第二个元素为value(…...
GNU/Linux - 是否可以多次打开同一个设备文件
使用设备/dev/ttyS1举例来说明。 一个设备文件打开多次 在 Linux 中,多次打开 /dev/ttyS1 以读取数据通常是可以接受的。多次打开 /dev/ttyS1 并向 /dev/ttyS1 发送数据时,所有打开的文件描述符都能接收数据。每个打开的文件描述符都代表与串行端口的独立…...

Visual Studio的使用方法
目录 1. 下载软件 2. 软件安装 3. 软件使用 4. VS工具的字体背景美化 5. 程序调试 1. 下载软件 官网地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 2. 软件安装 1.选中vs_Professional,鼠标右击选择“以管理员身份…...

【35分钟掌握金融风控策略18】贷前风控策略详解-3
目录 编辑 贷前风控数据源 第三方数据 贷前风控数据源 第三方数据 在金融风控过程中,金融机构通常会引入一些第三方的风控数据(或第三方金融技术)来辅助识别贷款个人或贷款企业的风险状况,帮助金融机构进行风控决策&#x…...
秋招后端开发面试题 - MySQL事务
目录 MySQL事务前言面试题什么是数据库事务为什么要有事务呢?项目中遇到的事务事务的传播机制事务的特性?事务并发存在的问题四大隔离级别四大隔离级别,都会存在哪些并发问题呢数据库是如何保证事务的隔离性的呢?如何解决加锁后的…...

C语言栈的含义与栈数据操作代码详解!
引言:在本篇博客中,我们将学到数据结构——栈,讲到栈的含义与关于栈的数据操作代码。栈可以在顺序表、双向链表以及单链表的基础上实现,而于本篇博客中,我们选择在顺序表的基础上实现栈。 更多有关C语言和数据结构知识…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...