一、介绍

在深度学习中,Momentum(动量)优化算法是对梯度下降法的一种优化, 它在原理上模拟了物理学中的动量,已成为目前非常流行的深度学习优化算法之一。在介绍动量优化算法前,需要对 指数加权平均法 有所了解,它是动量优化算法的理论基础,可参见本人另外一篇博文:深度学习: 指数加权平均。

物理学中动量的定义: 设物体的质量为 ,速度为 ,则动量 。Momentum算法模拟了动量,但是其核心公式和动量一点关系都没有。

二、背景

下图表明了传统的梯度下降法会存在的问题,即训练轨迹会呈现锯齿状,这无疑会大大延长训练时间。同时,由于存在摆动现象,学习率只能设置的较小,才不会因为步伐太大而偏离最小值。

出现锯齿状的原因是:

1、每一轮迭代使用的训练数据一般是小批量的,没有使用全部的训练数据,因此更新方向会发生锯齿状甚至随机震荡状;

2、某些梯度分量的值比另外一些分量的值要大的多,导致个别分量主导了梯度的更新方向,而期望的梯度更新方向却行进的非常缓慢,这正是Momentum算法要解决的问题。

三、优化思路

一个很朴素的想法便是让纵向的摆动尽量小,同时保持横向的运动方向比较平稳。为此,需要知道梯度在过去的一段时间内的大致走向,以消除当前轮迭代梯度向量存在的方向抖动。

设第  轮迭代的梯度向量为 ,可以简单的通过对每个分量的历史取值进行加和来实现该目的,并将  作为新的梯度更新方向。

这种方法很简单,但每一轮梯度的计算权重相同,这会存在几点问题:

1、较早的梯度对梯度的大致走向预测几乎失去了作用;

2、较早的梯度抖动的较为严重,最近的梯度抖动要弱一些,如果权重都相同,梯度的大致走向预测可能不精确;

3、在梯度下降的后期,参数的搜索空间基本上处于一个凸集上,梯度的每个分量的大小和方向基本固定,不断的将大小和方向基本固定的分量做累加,梯度会变得非常大,造成无法收敛到局部最优。

这个时候指数加权平均开始派上用场了。将上式的加和平均变成指数移动加权平均,并加入衰减率 ,并将  作为梯度的更新方向。这样较早的梯度权重几乎为 0,最近的梯度权重接近1。

通过指数加权平均,纵向的分量基本可以抵消,原因是锯齿状存在一上一下的配对向量,方向基本反向。因为从长期的一段时间来看,梯度优化的大方向始终指向最小值,因此,横向的更新方向基本稳定。新的梯度更新的轨迹如下图所示。

四、基于Momentum的梯度更新

基本的梯度更新规则如下,其中  表示学习率。

根据上述分析,引入指数加权平均后,  的更新规则为:

新的梯度更新规则变为

关于摩擦系数 

1、为 0 时,退化为未优化前的梯度更新;

2、为 1 时, 表示完全没有摩擦,如前所述,这样会存在大的问题;

3、取 0.9 是一个较好的选择。可能是 0.960 次方约等于 0.001,相当仅考虑最近的60轮迭代所产生的的梯度,这个数值看起来相对适中合理。

注: 两个方向大致一致的向量  和  相加,其相加后的向量  的方向介于两个向量之间,但范数要大于任何其中一个向量的范数。

五、Momentum算法的本质

该算法将一段时间内的梯度向量进行了加权平均,分别计算得到梯度更新过程中  和  的大致走向,一定程度上消除了更新过程中的不确定性因素(如摆动现象),使得梯度更新朝着一个越来越明确的方向前进。

深度学习中的Momentum算法原理相关推荐

  1. 深度学习中的优化算法串讲

    Datawhale原创 作者:谢文睿,Datawhale成员 寄语:优化算法是一个超参数,一个优化算法不是适合所有损失函数的,没有哪个优化算法是绝对的好或绝对的坏,是要根据损失函数判断的 本文对深度学 ...

  2. 深度学习中的优化算法之Adam

    之前在https://blog.csdn.net/fengbingchun/article/details/124909910 介绍过深度学习中的优化算法Adadelta,这里介绍下深度学习的另一种优 ...

  3. 深度学习中的优化算法之RMSProp

    之前在https://blog.csdn.net/fengbingchun/article/details/124766283 中介绍过深度学习中的优化算法AdaGrad,这里介绍下深度学习的另一种优 ...

  4. 深度学习中的优化算法与实现

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 GiantPandaCV导语:这篇文章的内容主要是参考 沐神的mxnet/gluon视频中,Aston ...

  5. 深度学习中的优化算法之MBGD

    之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...

  6. 深度学习中的优化算法之BGD

    之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...

  7. 深度学习中的优化算法之带Momentum的SGD

    之前在https://blog.csdn.net/fengbingchun/article/details/123955067介绍过SGD(Mini-Batch Gradient Descent(MB ...

  8. **深度学习 BN 、LeakyReLU算法原理

    BN和LeakyReLU def DarknetConv2D_BN_Leaky(*args, **kwargs):# 归一化# DarkNet中用到的卷积块,卷积块中包含了归一化和激活函数" ...

  9. 深度学习中的优化算法之NAG

    之前在https://blog.csdn.net/fengbingchun/article/details/124648766 介绍过Momentum SGD,这里介绍下深度学习的另一种优化算法NAG ...

最新文章

  1. 高频数字币交易所系统有哪些技术挑战?
  2. gossip 区块链_比特币奇葩8问:为何区块620826比区块620825早1秒诞生?
  3. 2019-2020 ACM-ICPC Brazil Subregional Programming Contest
  4. [Unity Editor]10行代码搞定Hierarchy排序
  5. java ftp限速_为什么Java FTP客户端的传输速率存在很大差异
  6. (王道408考研操作系统)第三章内存管理-第二节4:页面分配策略
  7. 自适应关于帧场编码问题
  8. 【Siddhi】Siddhi实时计算核心流程分析
  9. 利用c语言面向对象编程,用C语言程序实现面向对象编程
  10. RabbitMQ基础--总结
  11. PHP报错 Module ‘openssl‘ already loaded in Unknown on line 0
  12. linux 命令备份数据库,linux备份数据库命令
  13. redis基础知识——菜鸟教程
  14. 自监督学习详细介绍(学习笔记)
  15. matlab 线性拟合polyfit_Matlab 线性拟合 非线性拟合_matlab非线性拟合函数
  16. go slice作为函数参数是值传递
  17. 视频信息和信号的特点
  18. XSS 之 haozi me 题解——人生第一份CSDN题解
  19. 把linux装在移动硬盘上,我将Linux装到了移动硬盘上o(∩_∩)o
  20. 黑产反诈有方法,异常识别我在行—欺诈反洗钱等领域用得最多的经典算法

热门文章

  1. java输出abba_java - 有限状态机搜索“ABBA” - 堆栈内存溢出
  2. Keras-yolov3计算验证集acc一直为0
  3. BZOJ1972:[SDOI2010]猪国杀
  4. python葡萄酒数据_用python进行葡萄酒质量预测
  5. 死锁和饥饿-哲学家就餐问题
  6. 【面向监狱编程】反编译任何微信小程序,以及独立分包、插件的处理方式
  7. 让3个线程打印ABC
  8. 熊猫阵亡,陌陌、YY财报背后的直播江湖仍在
  9. linux 的时区设置函数tzset()
  10. Python爬取B站耗子尾汁、不讲武德出处的视频弹幕!