热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

优化方法(随即梯度下降的改进方法)

目录1前提2动量(Momentum)方法3AdaGrad方法4RMSProp方法5Adam方法6总结与扩展1前提进一步地,有

目录

1 前提

2 动量(Momentum) 方法

3 AdaGrad方法

4 RMSProp方法

5 Adam方法

6 总结与扩展




1 前提

进一步地, 有人会说深度学习中的优化问题本身就很难, 有太多局部最优点的陷阱。 没错, 这些陷阱对随机梯度下降法和批量梯度下降法都是普遍存在的。但对随机梯度下降法来说, 可怕的不是局部最优点, 而是山谷鞍点两类地形。


  • 山谷顾名思义就是狭长的山间小道, 左右两边是峭壁;
  • 鞍点的形状像是一个马鞍, 一个方向上两头翘, 另一个方向上两头垂, 而中心区域是一片近乎水平的平地。

为什么随机梯度下降法最害怕遇上这两类地形呢?


  • 在山谷中, 准确的梯度方向是沿山道向下, 稍有偏离就会撞向山壁, 而粗糙的梯度估计使得它在两山壁间来回反弹震荡, 不能沿山道方向迅速下降, 导致收敛不稳定和收敛速度慢。
  • 在鞍点处, 随机梯度下降法会走入一片平坦之地( 此时离最低点还很远, 故也称plateau) 。

想象一下蒙着双眼只凭借脚底感觉坡度, 如果坡度很明显, 那么基本能估计出下山的大致方向; 如果坡度不明显, 则很可能走错方向。 同样, 在梯度近乎为零的区域, 随机梯度下降法无法准确察觉出梯度的微小变化, 结果就停滞下来。

        为了改进随机梯度下降法, 研究者都做了哪些改动? 提出了哪些变种方法?它们各有哪些特点?

        随机梯度下降法本质上是采用迭代方式更新参数, 每次迭代在当前位置的基础上, 沿着某一方向迈一小步抵达下一位置, 然后在下一位置重复上述步骤。 随机梯度下降法的更新公式表示为

        

        其中, 当前估计的负梯度表示步子的方向, 学习速率 η 控制步幅。 改造的随机梯
度下降法仍然基于这个更新公式。 


2 动量(Momentum) 方法

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

        

        

        具体来说, 前进步伐由两部分组成。 一是学习速率η乘以当前估计的梯度; 二是带衰减的前一次步伐。 这里, 惯性就体现在对前一次步伐信息的重利用上。类比中学物理知识, 当前梯度就好比当前时刻受力产生的加速度, 前一次步伐好比前一时刻的速度, 当前步伐好比当前时刻的速度。 为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用的结果, 因此vt直接依赖于,而不仅仅是。 另外, 衰减系数 γ 扮演了阻力的作用。

        中学物理还告诉我们, 刻画惯性的物理量是动量, 这也是算法名字的由来。沿山谷滚下的铁球, 会受到沿坡道向下的力和与左右山壁碰撞的弹力。 向下的力稳定不变, 产生的动量不断累积, 速度越来越快; 左右的弹力总是在不停切换,动量累积的结果是相互抵消, 自然减弱了球的来回震荡。 因此, 与随机梯度下降法相比, 动量方法的收敛速度更快, 收敛曲线也更稳定, 如图7.5所示。

 


3 AdaGrad方法

        惯性的获得是基于历史信息的, 那么, 除了从过去的步伐中获得一股子向前冲的劲儿, 还能获得什么呢? 我们还期待获得对周围环境的感知, 即使蒙上双眼, 依靠前几次迈步的感觉, 也应该能判断出一些信息, 比如这个方向总是坑坑洼洼的, 那个方向可能很平坦。

        随机梯度下降法对环境的感知是指在参数空间中, 根据不同参数的一些经验性判断, 自适应地确定参数的学习速率, 不同参数的更新步幅是不同的。 例如,在文本处理中训练词嵌入模型的参数时, 有的词或词组频繁出现, 有的词或词组则极少出现。 数据的稀疏性导致相应参数的梯度的稀疏性, 不频繁出现的词或词组的参数的梯度在大多数情况下为零, 从而这些参数被更新的频率很低。 在应用中, 我们希望更新频率低的参数可以拥有较大的更新步幅, 而更新频率高的参数的步幅可以减小。 AdaGrad方法采用“历史梯度平方和”来衡量不同参数的梯度的稀疏性, 取值越小表明越稀疏, 具体的更新公式表示为

         其中表示(t+1) 时刻的参数向量的第i个参数, 表示k时刻的梯度向量
的第 i 个维度(方向) 。 另外, 分母中求和的形式实现了退火过程, 这是很多优化技术中常见的策略, 意味着随着时间推移, 学习速率 越来越小, 从而保证了算法的最终收敛。


4 RMSProp方法

        针对 AdaGrad 算法每个元素的学习率在迭代过程中一直在降低(或不变),在迭代后期由于学习率过小,可能较难找到一个有用的解。为解决这一问题,RMSProp 算法对 AdaGrad 算法做了一点小小的修改。

        不同于AdaGrad算法里状态变量 是截至时间步 t 所有小批量随机梯度  按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。具体来说,给定超参数 ,RMSProp 算法在时间步  计算

       

        和AdaGrad算法一样,RMSProp算法将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量 

        

         其中 η 是学习率,ε 是为了维持数值稳定性而添加的常数,如 。因为 RMSProp 算法的状态变量  是对平方项  的质数加权移动平均,所以可以看作是最近  个时间步的小批量随机梯度平方项的加权平均。如此一来,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。


5 Adam方法

        Adam方法将惯性保持和环境感知这两个优点集于一身。


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

        一阶矩和二阶矩采用类似于滑动窗口内求平均的思想进行融合, 即当前梯度和近一段时间内梯度的平均值, 时间久远的梯度对当前平均值的贡献呈指数衰减。 具体来说, 一阶矩和二阶矩采用指数衰退平均(exponential decay average) 技术, 计算公式为

         

         

         其中β1, β2为衰减系数, 是一阶矩, 是二阶矩。

         如何理解一阶矩和二阶矩呢?


  • 一阶矩相当于估计 : 由于当下梯度是随机采样得到的估计结果, 因此更关注它在统计意义上的期望;
  • 二阶矩相当于估计, 这AdaGrad方法不同, 不是从开始到现在的加和, 而是它的期望。

        它们的物理意义是:


  • 大且大时, 梯度大且稳定, 这表明遇到一个明显的大坡, 前进方向明确;
  • 趋于零且大时, 梯度不稳定, 表明可能遇到一个峡谷, 容易引起反弹震荡;
  • 大且趋于零时, 这种情况不可能出现;
  • 趋于零且趋于零时, 梯度趋于零, 可能到达局部最低点, 也可能走到一片坡度极缓的平地, 此时要避免陷入平原(plateau) 。

        另外, Adam方法还考虑了在零初始值情况下的偏置矫正。 具体来说, Adam的更新公式为

       

 


6 总结与扩展

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

(1) Nesterov Accelerated Gradient。 该方法扩展了动量方法, 顺着惯性方向, 计算未来可能位置处的梯度而非当前位置的梯度, 这个“提前量”的设计让算法有了对前方环境预判的能力。

(2) AdaDelta和RMSProp。 这两个方法非常类似, 是对AdaGrad方法的改进。 AdaGrad方法采用所有历史梯度平方和的平方根做分母, 分母随时间单调递增, 产生的自适应学习速率随时间衰减的速度过于激进。 针对这个问题, AdaDelta和RMSProp采用指数衰退平均的计算方法, 用过往梯度的均值代替它们的求和。

( 3) AdaMax。 该方法是基于Adam方法的一个变种方法, 对梯度平方的处理由指数衰退平均改为指数衰退求最大值。

( 4) Nadam。 该方法可看成Nesterov Accelerated Gradient版的Adam。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • 浪潮AI服务器NF5488A5在MLPerf基准测试中刷新多项纪录
    近日,国际权威AI基准测试平台MLPerf发布了最新的推理测试结果,浪潮AI服务器NF5488A5在此次测试中创造了18项性能纪录,显著提升了数据中心AI推理性能。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 智能投顾机器人:创业者如何应对新挑战?
    随着智能投顾技术在二级市场的兴起,针对一级市场的智能投顾也逐渐崭露头角。近日,一款名为阿尔妮塔的人工智能创投机器人正式发布,它将如何改变投资人的工作方式和创业者的融资策略? ... [详细]
  • NVIDIA Titan RTX深度评测
    NVIDIA的Titan RTX被誉为当前最强大的桌面显卡之一,其卓越的性能和高昂的价格吸引了众多专业人士和技术爱好者的关注。本文将详细介绍Titan RTX的技术规格、性能表现及应用场景。 ... [详细]
  • 新手指南:在Windows 10上搭建深度学习与PyTorch开发环境
    本文详细记录了一名新手在Windows 10操作系统上搭建深度学习环境的过程,包括安装必要的软件和配置环境变量等步骤,旨在帮助同样初入该领域的读者避免常见的错误。 ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 图像分类算法的优化策略与实践
    本文探讨了《Bag of Tricks for Image Classification with Convolutional Neural Networks》论文中的多项技术,旨在通过具体实例和实验验证,提高卷积神经网络在图像分类任务中的性能。文章详细介绍了从模型训练加速、网络结构调整到训练参数优化等多个方面的改进方法。 ... [详细]
  • 随着5G、云计算、人工智能、大数据等新技术的广泛应用,人们的生活生产方式发生了深刻变化。从人际互联到万物互联,数据存储与处理需求激增,推动了数据与算力设施的发展。 ... [详细]
  • 吴恩达推出TensorFlow实践课程,Python基础即可入门,四个月掌握核心技能
    量子位报道,deeplearning.ai最新发布了TensorFlow实践课程,适合希望使用TensorFlow开发AI应用的学习者。该课程涵盖机器学习模型构建、图像识别、自然语言处理及时间序列预测等多个方面。 ... [详细]
  • 强人工智能时代,区块链的角色与前景
    随着强人工智能的崛起,区块链技术在新的技术生态中扮演着怎样的角色?本文探讨了区块链与强人工智能之间的互补关系及其在未来技术发展中的重要性。 ... [详细]
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 京东AI创新之路:周伯文解析京东AI战略的独特之处
    2018年4月15日,京东在北京举办了人工智能创新峰会,会上首次公开了京东AI的整体布局和发展方向。此次峰会不仅展示了京东在AI领域的最新成果,还标志着京东AI团队的首次集体亮相。本文将深入探讨京东AI的发展策略及其与BAT等公司的不同之处。 ... [详细]
author-avatar
宅妈每日贴_889
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有