了解深度学习优化器:Momentum、AdaGrad、RMSProp 和 Adam

@slavahead

一、介绍

        DEEP学习在人工智能领域迈出了一大步。目前,神经网络在非表格数据(图像、视频、音频等)上的表现优于其他类型的算法。深度学习模型通常具有很强的复杂性,并提出数百万甚至数十亿个可训练的参数。这就是为什么在现代使用加速技术来减少训练时间至关重要的原因。

        在训练过程中执行的最常见算法之一是反向传播,包括神经网络相对于给定损失函数的权重变化。反向传播通常通过梯度下降来执行,梯度下降试图逐步将损耗函数收敛到局部最小值。

        事实证明,朴素梯度下降通常不是训练深度网络的首选,因为它的收敛速度很慢。这成为研究人员开发加速梯度下降的优化算法的动力。

在阅读本文之前,强烈建议您熟悉优化算法中使用的指数移动平均线概念。如果没有,您可以参考下面的文章。

二、梯度下降

        梯度下降是最简单的优化算法,它计算相对于模型权重的损失函数梯度,并使用以下公式更新它们:

        梯度下降方程。w 是权重向量,dw 是 w 的梯度,α 是学习率,t 是迭代次数

        为了理解为什么梯度下降会缓慢收敛,让我们看一下下面的峡谷示例,其中两个变量的给定函数应该最小化。

        沟壑区域梯度下降的优化问题示例。起点以蓝色表示,局部最小值以黑色表示。

沟壑是表面在一个维度上比在另一个维度上陡峭得多的区域

        从图像中,我们可以看到起点和局部最小值具有不同的水平坐标,并且几乎是相等的垂直坐标。使用梯度下降来求局部最小值可能会使损失函数向垂直轴缓慢振荡。发生这些反弹是因为梯度下降不存储有关其先前梯度的任何历史记录,从而使梯度步骤在每次迭代时更加不确定。此示例可以推广到更多的维度。

因此,使用较大的学习率是有风险的,因为它可能导致收敛。

三、动量

        基于上面的例子,希望使损失函数在水平方向上执行较大的步长,在垂直方向上执行较小的步长。这样,收敛速度会快得多。这种效果正是由 Momentum 实现的。

        Momentum 在每次迭代时都使用一对方程式:

        动量方程

        第一个公式对梯度值 dw 使用指数移动平均值。基本上,这样做是为了存储有关一组先前梯度值的趋势信息。第二个方程使用当前迭代中计算出的移动平均值执行正常梯度下降更新。α是算法的学习率。

        动量对于上述情况特别有用。想象一下,我们在每次迭代中都计算了梯度,如上图所示。我们不是简单地使用它们来更新权重,而是取几个过去的值,并在平均方向上执行字面上的更新。

塞巴斯蒂安·鲁德(Sebastian Ruder)在他的论文中简明扼要地描述了动量的影响:“对于梯度指向相同方向的维度,动量项会增加,而对于梯度改变方向的维度,动量项会减少更新。因此,我们获得了更快的收敛速度并减少了振荡。

因此,Momentum 执行的更新可能如下图所示。

利用 Momentum 进行优化

在实践中,动量收敛速度通常比梯度下降快得多。借助 Momentum,使用更高的学习率的风险也更小,从而加快了训练过程。

在 Momentum 中,建议选择接近 0.9 β。

四、AdaGrad(自适应梯度算法)

        AdaGrad 是另一个优化器,其动机是根据计算出的梯度值调整学习率。在训练过程中,可能会出现这样的情况:权重向量的一个分量具有非常大的梯度值,而另一个分量的梯度值非常小。当不频繁的模型参数似乎对预测的影响很小时,尤其会发生这种情况。值得注意的是,对于频繁的参数,此类问题通常不会发生,因为对于它们的更新,模型使用了大量的预测信号。由于梯度计算会考虑来自信号的大量信息,因此梯度通常足够,并且表示朝向局部最小值的正确方向。然而,对于罕见的参数来说,情况并非如此,这会导致极大且不稳定的梯度。对于稀疏数据,如果有关某些要素的信息太少,则也会出现同样的问题。

        AdaGrad 通过独立调整每个权重成分的学习率来解决上述问题。如果对应于某个权重向量分量的梯度很大,则相应的学习率将很小。相反,对于较小的梯度,学习率会更大。这样,Adagrad 就可以处理梯度消失和爆炸问题。

        在引擎盖下,Adagrad 从所有先前迭代中累积了元素平方 dw² 的梯度。在权重更新期间,AdaGrad 不使用正常的学习率α,而是通过将α除以累积梯度 √vt) 的平方根来对其进行缩放。此外,在分母上添加了一个小的正项ε,以防止潜在的除以零。

AdaGrad 方程

        AdaGrad 的最大优点是不再需要手动调整学习率,因为它会在训练过程中自行调整。然而,AdaGrad 也有不利的一面:学习率随着迭代次数的增加而不断衰减(学习率总是除以正累积数)。因此,算法在最后一次迭代期间趋向于缓慢收敛,此时收敛变得非常低。

使用 AdaGrad 进行优化

五、RMSProp(均方根传播)

        RMSProp 被详细阐述为对 AdaGrad 的改进,解决了学习率衰减的问题。与 AdaGrad 类似,RMSProp 使用一对权重更新完全相同的方程。

RMSProp 方程

        但是,不是存储 vt 的梯度 dw² 的平方和,而是计算梯度 dw² 的平方移动平均值。实验表明,RMSProp 通常比 AdaGrad 收敛得更快,因为在指数移动平均值中,它更强调最近的梯度值,而不是通过简单地从第一次迭代中累积梯度来平均分配所有梯度的重要性。此外,与 AdaGrad 相比,RMSProp 中的学习率并不总是随着迭代次数的增加而衰减,从而可以在特定情况下更好地适应。

使用 RMSProp 进行优化

在 RMSProp 中,建议选择接近 1 β。

为什么不简单地使用v t的平方梯度而不是指数移动平均线呢?

众所周知,指数移动平均线将较高的权重分配给最近的梯度值。这是 RMSProp 快速适应的原因之一。但是,如果我们只考虑每次迭代时的最后一个平方梯度 (vt = dw²),而不是移动平均线,那不是更好吗?事实证明,更新方程将按以下方式转换:

使用平方梯度而不是指数移动平均线时 RMSProp 方程的变换

正如我们所看到的,得到的公式看起来与梯度下降中使用的公式非常相似。但是,我们现在没有使用正常的梯度值进行更新,而是使用梯度符号:

  • 如果 dw > 0,则权重 w 减少 α。
  • 如果 dw < 0,则权重 w 增加 α。

综上所述,如果 vt = dw²,则模型权重只能按 ±α 更改。虽然这种方法有时有效,但它仍然不灵活,算法对α的选择变得非常敏感,并且梯度的绝对幅度被忽略,这可能使该方法的收敛速度非常慢。该算法的一个积极方面是,只需要一个位来存储 gradietns 的迹象,这在具有严格内存要求的分布式计算中非常方便。

六、亚当(自适应矩估计)

        目前,Adam是深度学习中最著名的优化算法。在高层次上,Adam 结合了 Momentum 和 RMSProp 算法。为了实现它,它只是分别跟踪计算梯度和平方梯度的指数移动平均值。

亚当方程

        此外,还可以对移动平均线使用偏差校正,以便在前几次迭代中更精确地近似梯度趋势。实验表明,Adam 利用 Momentum 和 RMSProp 的优势,很好地适应了几乎任何类型的神经网络架构。

与Adam一起优化

根据 Adam 论文,超参数的良好默认值为 β₁ = 0.9,β₂ = 0.999,ε = 1e-8。

七、结论

        我们已经研究了神经网络中不同的优化算法。作为 Momentum 和 RMSProp 的组合,Adam 是其中最优越的一个,它能够稳健地适应大型数据集和深度网络。此外,它具有简单的实现和很少的内存要求,使其成为大多数情况下的首选。

资源

  • 梯度下降优化算法概述
  • Adam:一种随机优化方法

 图片作者提供

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

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

相关文章

机器学习(三) -- 特征工程(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 未完待续…… 目录 系列文章目录 前言 三、特征…

机器学习-生存分析:如何基于随机生存森林训练乳腺癌风险评估模型?

一、 引言 乳腺癌是女性最常见的恶性肿瘤之一&#xff0c;也是全球范围内女性死亡率最高的癌症之一。据统计&#xff0c;每年全球有超过200万人被诊断为乳腺癌&#xff0c;其中约60万人死于该疾病。因此&#xff0c;乳腺癌的早期诊断和风险评估对于预防和治疗乳腺癌具有非常重要…

npm安装 electron 报错

1、问题一 解决&#xff1a; 降低一下node版本&#xff0c; 具体降低到多少不确定&#xff0c;反正我当时用的是 node 14.16.1 2、经过上面之后&#xff0c;有可能会出现下面一个问题 解决 npm config set electron_mirror "https://npm.taobao.org/mirrors/electron/&…

异地环控设备如何远程维护?贝锐蒲公英解决远程互联难题

青岛某企业致力于孵化设备、养禽设备和养猪设备的研发、生产和服务&#xff0c;历经三十多年发展&#xff0c;目前已成长为行业主要的养殖装备及工程服务提供商&#xff0c;产品覆盖养殖产业链中绝大多数环节&#xff0c;涉及自动化设备、环控设备、整体解决方案等。 在实际应用…

是否需要跟上鸿蒙(OpenHarmony)开发岗位热潮?

前言 自打华为2019年发布鸿蒙操作系统以来&#xff0c;网上各种声音百家争鸣。尤其是2023年发布会公布的鸿蒙4.0宣称不再支持Android&#xff0c;更激烈的讨论随之而来。 本文没有宏大的叙事&#xff0c;只有基于现实的考量。 通过本文&#xff0c;你将了解到&#xff1a; Har…

鸿蒙HarmonyOS- 弹框组件库

简介 今天介绍一个基于ArkUI框架开发的弹框组件库&#xff0c;该库基于ArkUI的弹框基础功能和自定义能力。针对通用的弹框业务场景&#xff0c;该库提供了丰富的组件弹窗功能。 包括确认输入弹窗、列表展示选择弹窗、自定义底部/顶部弹窗、自定义动画弹窗、自定义全屏弹窗、消息…

【教学类-43-05】 不可用 20231229 N宫格数独5.0(n=1-9) (ChatGPT AI对话大师生成 随机数字填空 )

说明&#xff1a;本代码使用“”随机数字填空”&#xff0c;结果有误差 不能使用 背景需求&#xff1a; 大4班20号说&#xff1a;我不会做这种&#xff08;九宫格&#xff09;&#xff0c;我做的是小格子的&#xff0c; 他把手工纸翻过来&#xff0c;在反面自己画了矩阵格子。…

Vue学习计划-Vue3--核心语法(一)OptionsAPI、CompositionAPI与setup

1. OptionsAPI与CompositionAPI Vue2的API设计是Options(配置)风格的Vue3的API设计是Composition(组合)风格的 Options API的弊端&#xff1a; Options类型的API&#xff0c;数据、方法、计算属性等&#xff0c;是分散在&#xff1a;data、methods、computed中的&#xff0c;若…

【ESP-NOW Web 服务器传感器仪表板 (ESP-NOW + Wi-Fi)】

【ESP-NOW Web 服务器传感器仪表板 &#xff08;ESP-NOW Wi-Fi&#xff09;】 1. 前言2. 同时使用 ESP-NOW 和 Wi-Fi3. 项目概况4. 先决条件4.1 环境配置4.2 DHT 库4.3 ESPAsyncWebSrv服务器库4.4 Arduino_JSON4.5 所需零件4.6 获取接收板 MAC 地址4.7 ESP32 发送电路 5. ESP3…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop的任务队列中添加新任务

任务队列是一个链表&#xff0c;每个节点包含channel类型、文件描述符和操作类型。在添加节点时&#xff0c;需要考虑线程同步&#xff0c;并确保节点被正确地添加到链表中。节点的操作可以写到另一个函数中&#xff0c;以便于程序的维护。在添加任务节点时&#xff0c;需要加互…

【心得】PHP文件包含高级利用攻击面个人笔记

目录 一、nginx日志文件包含 二、临时文件包含 三、php的session文件包含 四、pear文件包含 五 、远程文件包含 文件包含 include "/var/www/html/flag.php"; 一 文件名可控 $file$_GET[file]; include $file.".php"; //用php伪协议 &#xff0…

基于矩阵乘的CUDA编程优化过程

背景&#xff1a;网上很多关于矩阵乘的编程优化思路&#xff0c;本着看理论分析万遍&#xff0c;不如实际代码写一遍的想法&#xff0c;大概过一下优化思路。 矩阵乘的定义如下&#xff0c;约定矩阵的形状及存储方式为: A[M, K], B[K, N], C[M, N]。 CPU篇 朴素实现方法 按照…