一文讲清楚梯度下降算法

2023-11-10

一、随机梯度下降与经典梯度下降    

1、经典梯度下降    

经典的梯度下降法采用所有训练数据的平均损失来近似目标函数    



可以看到每更新一次梯度,就需要计算所有训练数据
-- 当M很大的时候,这需要很大的计算量,耗费很长的计算时间

2、随机梯度下降    

随机梯度下降法(Stochastic Gradient Descent,SGD)用单个训练样本的损失来近似平均损失  

 

随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率
-- 该方法也非常适用于数据源源不断到来的在线更新场景

3、小批量梯度下降法(Mini-Batch Gradient Descent)    

为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据    

通常采用小批量梯度下降法解决训练数据量过大的问题。每次更新模 型参数时,只需要处理m个训练数据即可
-- 其中m是一个远小于总数据量M的常 数,这样能够大大加快训练过程。

4、随机梯度下降失效的原因    

陷入局部最优化    

这些陷阱对随机梯度下降法和批量梯度下降法都是普遍存在的。 但对随机梯度下降法来说,可怕的不是局部最优点,而是山谷和鞍点两类地形。
--  山谷顾名思义就是狭长的山间小道,左右两边是峭壁;
--  鞍点的形状像是一个马 鞍,一个方向上两头翘,另一个方向上两头垂,而中心区域是一片近乎水平的平 地。

为什么随机梯度下降法最害怕遇上这两类地形呢?
-- 在山谷中,准确的梯度方 向是沿山道向下,稍有偏离就会撞向山壁,而粗糙的梯度估计使得它在两山壁间 来回反弹震荡,不能沿山道方向迅速下降,导致收敛不稳定和收敛速度慢。
-- 在鞍 点处,随机梯度下降法会走入一片平坦之地(此时离最低点还很远,故也称 plateau)。想象一下蒙着双眼只凭借脚底感觉坡度,如果坡度很明显,那么基本 能估计出下山的大致方向;如果坡度不明显,则很可能走错方向。
-- 同样,在梯度 近乎为零的区域,随机梯度下降法无法准确察觉出梯度的微小变化,结果就停滞下来


5、解决随机梯度下降的失效--惯性保持和环境感知    

为了解决随机梯度下降法山谷震荡和鞍点停滞的问题
-- 质量越大,惯性越大
-- 想象一下纸团在山谷和鞍点处的运动轨迹,在山谷中纸团受重力作用沿 山道滚下,两边是不规则的山壁,纸团不可避免地撞在山壁,由于质量小受山壁 弹力的干扰大,从一侧山壁反弹回来撞向另一侧山壁,结果来回震荡地滚下;如 果当纸团来到鞍点的一片平坦之地时,还是由于质量小,速度很快减为零。纸团 的情况和随机梯度下降法遇到的问题简直如出一辙。直观地,如果换成一个铁 球,当沿山谷滚下时,不容易受到途中旁力的干扰,轨迹会更稳更直;当来到鞍 点中心处,在惯性作用下继续前行,从而有机会冲出这片平坦的陷阱

二、动量模型

刻画惯性的物理量是动量
-- 产生的动量不断累积,速度越来越快
-- 与随机梯度下降 法相比,动量方法的收敛速度更快,收敛曲线也更稳定

1、前进步伐−v t由两部分组成
-- 一是学习速率η乘以当前估计的梯度gt;
-- 二是带衰减的前一次步伐vt−1。

这里,惯性就体现在对前一次步伐信息的重利用上
-- 类比中学物理知识,当前梯度就好比当前时刻受力产生的加速度,前一次步伐好 比前一时刻的速度,当前步伐好比当前时刻的速度。
-- 为了计算当前时刻的速度, 应当考虑前一时刻速度和当前加速度共同作用的结果,因此vt直接依赖于vt−1和gt, 而不仅仅是gt。另外,衰减系数γ扮演了阻力的作用。

三、环境感知

1、我们期待获得对周围环境的感知

-- 即使蒙上双 眼,依靠前几次迈步的感觉,也应该能判断出一些信息
-- 比如这个方向总是坑坑 洼洼的,那个方向可能很平坦。

数据的稀疏性导致相应参数的梯度的稀疏性
-- 不频繁出现的词或词 组的参数的梯度在大多数情况下为零
-- 从而这些参数被更新的频率很低
-- 在应用中,我们希望更新频率低的参数可以拥有较大的更新步幅,而更新频率高的参数的步幅可以减小"

2、AdaGrad方法采用“历史梯度平方和”

来衡量不同参数的梯度的稀疏性
-- 取值越小表明越稀疏

此方法更新公式如下:

最终效果即是:更新频率低的参数可以拥有较大的更新步幅,而更新频率高的参数 的步幅可以减小

四、Adam方法    

Adam方法将惯性保持和环境感知这两个优点集于一体
-- Adam记录梯度的一阶矩(first moment),即过往梯度与当前梯度的平均,这体现了惯性保持;
-- 另一方面,Adam还记录梯度的二阶矩(second moment),即过往梯度平方与 当前梯度平方的平均,这类似AdaGrad方法,体现了环境感知能力,为不同参数产生自适应的学习速率

具体来说,一阶矩和二阶矩采用指数衰退平均(exponential decay average)技术:


如何理解一阶矩和二阶矩呢?
-- 一阶矩相当于估计E[g1] :由于当下梯度gt是随机 采样得到的估计结果,因此更关注它在统计意义上的期望;
-- 二阶矩相当于估计E[g1^2] ,这点与AdaGrad方法不同,不是gt2从开始到现在的加和,而是它的期望。

它们的物理意义是
-- 当||mt||大且vt大时,梯度大且稳定,这表明遇到一个明显的大 坡,前进方向明确;
-- 当||mt||趋于零且vt大时,梯度不稳定,表明可能遇到一个峡 谷,容易引起反弹震荡; 
-- 当||mt||大且vt趋于零时,这种情况不可能出现;
-- 当||mt||趋 于零且vt趋于零时,梯度趋于零,可能到达局部最低点,也可能走到一片坡度极缓 的平地,此时要避免陷入平原(plateau)。
另外,Adam方法还考虑了mt,vt在零初始值情况下的偏置矫正
            
五、随机梯度下降算法的其他变种    

除了上述三种随机梯度下降法变种,研究者还提出了以下几种方法        

(1)Nesterov Accelerated Gradient。该方法扩展了动量方法,顺着惯性方 向,计算未来可能位置处的梯度而非当前位置的梯度,这个“提前量”的设计让算 法有了对前方环境预判的能力。 
(2)AdaDelta和RMSProp。这两个方法非常类似,是对AdaGrad方法的改 进。AdaGrad方法采用所有历史梯度平方和的平方根做分母,分母随时间单调递 增,产生的自适应学习速率随时间衰减的速度过于激进。针对这个问题,AdaDelta 和RMSProp采用指数衰退平均的计算方法,用过往梯度的均值代替它们的求和。 
(3)AdaMax。该方法是基于Adam方法的一个变种方法,对梯度平方的处理 由指数衰退平均改为指数衰退求最大值。 
(4)Nadam。该方法可看成Nesterov Accelerated Gradient版的Adam。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文讲清楚梯度下降算法 的相关文章

随机推荐

  • 人工智能技术发展历史

    人工智能 Artificial Intelligence 简称 AI 的历史可以追溯到上世纪50年代 以下是其中的关键点 1956年 达特茅斯会议 1956年 美国达特茅斯学院举办了一次会议 邀请了一些研究者共同探讨人工智能的概念 目标和方
  • 【NLP入门教程】三、词性标注

    词性标注 Part of Speech Tagging POS Tagging 是自然语言处理中的另一个基本任务 它涉及将文本中的每个词元 Token 标注为其对应的词性 如名词 动词 形容词等 词性标注有助于我们理解文本的语法结构 进而支
  • win10 家庭版系统安装docker desktop遇到那些坑

    最近开发中需要用到docker来打包镜像 由于我的电脑系统是win10 家庭版 而docker desktop针对win10系统只支持64 位的 Windows 10 专业版 企业版和教育版 我又不想重装系统 因为要重装一堆工具 太麻烦了
  • FILCO Majestouch Convertible 2 键盘连接电脑说明

    键盘连接新电脑频次比较低 每次都忘记了怎么操作 要去翻说明书 上网找方法 在此记录下圣手2代键盘连接新电脑或者切换电脑的连接方式
  • Python数据可视化matplotlib.pyplot的使用

    1 生成数据 安装matplotlib windows cmd中 pip install matplotlib 在Python环境下 使用import matplotlib检测是否安装成功 不报错就是安装成功 重启写py的工具就可以进行使用
  • 2020东京奥运会奖牌排行--数据可视化

    爬取数据1 1 数据来源 https 2020 cctv com medal list index shtml 数据为下面图片的表格数据 2 具体代码 2 1需要提前下载好的pip install 库名 from selenium impo
  • Windows 下 VSCode 使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决

    Windows 下 VSCode 使用 SSH 连接报 Bad owner or permissions on C Users Administrator ssh config 错误问题解决 vscode ssh 链接报错情况 解决方法 v
  • JAVA环境变量配置方法(Windows)

    编写一个JAVA程序后 如果想让自己编写的代码可以正常运行 我们便需要对它进行编译和运行 而Java环境变量的配置就显得尤为重要 本篇文章 我们来谈一谈关于Java环境变量配置的一些方法 目录 方法一 方法二 方法三 方法一 1 右击 我的
  • ARP协议

    什么是ARP 地址解析协议 即ARP Address Resolution Protocol 是根据IP地址获取物理地址的一个TCP IP协议 主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机 并接收返回消息 以此确定
  • vue 字符串、数组之间的相互转换

    1 字符串转数组 str split 以分号拆分字符串 2 数组转字符串 arr join 把数组项拼接成字符串 并以分号隔开 默认情况下是以逗号隔开
  • Linux系统迁移(同一台电脑),重建UEFI启动文件

    电脑型号 hp 暗影精灵5 Air 显卡 RTX 2060 CPU i7 9750H 硬盘 500G固态 1T固态 启动方式 UEFI 操作系统 Ubuntu16 04 之前安装Ubuntu的时候给Ubuntu系统分配的空间太小了 安装新硬
  • 函数调用时的堆栈变化(实例)

    函数调用时的堆栈变化 关于函数调用是的堆栈变化 在网上找到的资料大都是一些配图文字等 理解起来尚有些困难 不过建议大家还是先了解一下基本的原理 下面我主要通过一个调用函数的实例来讲解一下函数调用时的堆栈变化 Ps 图片有点糊 大家最好自己跟
  • 一、时间序列分析---滞后算子(lag operator)

    1 基本概念 时间序列是以观测值发生的时期作为标记的数据集合 一般情况下 我们是从某个特定的时间开始采集数据 直到另一个固定的时间为止 我们可以将获得的数据表示为 y 1 y
  • 【hadoop——HDFS操作常用的Shell命令】

    1 Hadoop分布式文件系统 Hadoop Distributed File System HDFS 是Hadoop核心组件之一 我们已经安装好了Hadoop 2 7 1 其中已经包含了HDFS组件 不需要另外安装 最基本的shell命令
  • 最新阿里云ECS服务器挂载数据盘亲测好用挂载成功分享一下

    最近网站打不开了 发现服务器系统盘不够用了 查看磁盘占用情况 系统盘已经快满了 不能考虑到后期的需求 不能每次都去清理 不得不增加数据盘 这里记录下数据盘的挂载过程 也是找了好多参考方法亲测成功分享出来希望可以帮助有需要朋友 总结方法如下
  • 【无标题】BTY-DNS推广机制及首次空投规则

    BTY DNS 致力于创建Web3领域中的去中心化身份 DID BTY DNS的 yuan域名自开放上线以来 获得广大用户的喜爱与勇跃注册 目前 yuan的域名注册量已近千个 BTY DNS具有推广奖励机制 同时对于持有DNS的用户将进行第
  • 软件人员kpi制定模板_软件项目团队绩效考核设计与薪酬激励设计

    关注 本头条号 更多关于制度 流程 体系 岗位 模板 方案 工具 案例 故事 图书 文案 报告 技能 职场等内容 弗布克15年积累免费与您分享 阅读导航 01 软件项目团队绩效考核设计 02 软件项目团队薪酬激励设计 研发部 软件项目团队绩
  • 图像通用操作Python的实现

    平时经常会对一个目录下的图像做统一处理 如缩放 旋转等等 之前使用C 处理 有时不是很方便 发现使用Python比较简单 代码量又很少 在Anacanda下执行起来也比较方便 因此 打算在后面遇到图像的常规处理时都将其实现放入到同一个py文
  • Java:数据集合List与Map的性能比较案例

    假设有这样的一个场景 一组学生数据 一组老师的数据 属性分别如下 public class Student private String courseId private String sduName public Student Stri
  • 一文讲清楚梯度下降算法

    一 随机梯度下降与经典梯度下降 1 经典梯度下降 经典的梯度下降法采用所有训练数据的平均损失来近似目标函数 可以看到每更新一次梯度 就需要计算所有训练数据 当M很大的时候 这需要很大的计算量 耗费很长的计算时间 2 随机梯度下降 随机梯度下