使用动量(Momentum)的SGD、使用Nesterov动量的SGD

2023-05-16

使用动量(Momentum)的SGD、使用Nesterov动量的SGD

参考:使用动量(Momentum)的SGD、使用Nesterov动量的SGD

一. 使用动量(Momentum)的随机梯度下降

虽然随机梯度下降是非常受欢迎的优化方法,但其学习过程有时会很慢。动量方法旨在加速学习(加快梯度下降的速度),特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法累积了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。

简单介绍一下什么是指数加权平均(exponential weight averages):指数加权平均值又称指数加权移动平均值,局部平均值,移动平均值。加权平均这个概念都很熟悉,即根据各个元素所占权重计算平均值。指数加权平均中的指数表示各个元素所占权重呈指数分布。假设存在数列 ( Q 1 , Q 2 , Q 3 , . . . ) (Q_1,Q_2,Q_3,...) (Q1,Q2,Q3,...) ,令 V 0 = 0 V_0=0 V0=0,

V 1 = β V 0 + ( 1 − β ) Q 1 V_1=\beta V_0+(1-\beta)Q_1 V1=βV0+(1β)Q1

V 2 = β V 1 + ( 1 − β ) Q 2 V_2=\beta V_1+(1-\beta)Q_2 V2=βV1+(1β)Q2

V 3 = β V 2 + ( 1 − β ) Q 3 V_3=\beta V_2+(1-\beta)Q_3 V3=βV2+(1β)Q3

其中 β ∈ [ 0 , 1 ] \beta\in[0,1] β[0,1]为衰减系数, V 1 , V 2 , V 3 . . . . V_1,V_2,V_3.... V1,V2,V3....称为该数列的指数加权平均。为了更好地理解指数这两个字,我们展开 V 100 V_{100} V100(为了方便书写,令 β = 0.9 \beta=0.9 β=0.9 1 − β = 0.1 1-\beta=0.1 1β=0.1 ):

V 100 = 0.1 Q 100 + 0.1 ∗ 0.9 Q 99 + 0.1 ∗ 0. 9 2 Q 98 + 0.1 ∗ 0. 9 3 Q 97 + . . . . . . + 0.1 ∗ 0. 9 99 Q 1 V_{100}=0.1Q_{100}+0.1*0.9Q_{99}+0.1*0.9^2Q_{98}+0.1*0.9^3Q_{97}+......+0.1*0.9^{99}Q_{1} V100=0.1Q100+0.10.9Q99+0.10.92Q98+0.10.93Q97+......+0.10.999Q1

从上式可以看出指数加权平均是有记忆的,每一个V都包含了之前所有数据的信息。

在实践中,在衰减初期我们需要对偏差进行修正:

V t = V t 1 − β t V_t=\frac{V_t}{1-\beta^t} Vt=1βtVt

动量梯度下降的参数更新公式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOJL94xu-1593960832820)(005.jpg)]

在这个公式中,我们可以看到参数更新时并不是直接减去 a d W a\mathrm{d}W adW a d b a\mathrm{d}b adb,而是计算出了一个 v d W v_{\mathrm{d}W} vdW v d b v_{\mathrm{d}b} vdb。这又是什么呢?其实这就是指数加权平均。使用上面的公式,可以将之前的 d W \mathrm{d}W dW d b \mathrm{d}b db都联系起来,不再是每一次梯度都是独立的情况。让每一次的参数更新方向不仅仅取决于当前位置的梯度,还受到上一次参数更新方向的影响。

为了更加直观地理解,画个图吧。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyS2qLoM-1593960832821)(006.jpg)]

注意 β = 0 \beta=0 β=0时,就是传统的SGD。传统的SGD和使用动量的SGD对比图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xof9NgfO-1593960832822)(007.jpg)]

**带有动量的SGD本质:使用指数加权平均之后的梯度代替原梯度进行参数更新。**因为每个指数加权平均后的梯度含有之前梯度的信息,动量梯度下降法因此得名。

**带有动量的SGD算法如下:**在传统的SGD中引入变量v, 其实这个v 就是梯度的改变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-26ycqcL7-1593960832823)(008.jpg)]

动量参数 α ∈ [ 0 , 1 ) \alpha\in[0,1) α[0,1),决定了之前梯度的贡献衰减得有多快。如果动量算法总是观察到梯度g,那么他会在方向 -g 上不停加速,直到达到最终速度,其中步长为

1 1 − α ϵ g \frac{1}{1-\alpha}\epsilon g 1α1ϵg

因此将动量的超参数视为 1 1 − α \frac{1}{1-\alpha} 1α1有助于理解。在实践中,动量参数 $ \alpha$ 的一般取值为0.5、0.9、0.99,分别对应着最大速度2倍,10倍,100倍于SGD算法。

带有动量的SGD优点:

(1)可以通过局部极小点;

(2)加快收敛速度;

(3)抑制梯度下降时上下震荡的情况。

img

下面我们来看看动量法如何帮助我们缓解病态曲率的问题。下图中,梯度大多数发生更新在ž字形方向上,我们将每次更新分解为W1和W2方向上的两个分量。如果我们分别累加这些梯度的两个分量,那么W1方向上的分量将互相抵消,而W2方向上的分量得到了加强。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCYAXQ5q-1593960832823)(010.jpg)]

也就是说,基于动量法的更新,积累了W2方向上的分量,清空了W1方向上的分量,从而帮助我们更快地通往最小值。从这个意义上说,动量法也有助于抑制振荡。

动量法同时提供了加速度,从而加快收敛。但你可能想要搭配模拟退火,以免跳过最小值。当我们使用动量优化算法的时候,可以解决小批量SGD优化算法更新幅度摆动大的问题,同时可以使得网络的收敛速度更快。

在实践中,动量系数一般初始化为0.5,并在多个时期后逐渐退火至0.9。

二、使用Nesterov动量的SGD

Nesterov是Momentum的变种。与Momentum唯一区别就是,计算梯度的不同。Nesterov动量中,先用当前的速度 v v v 临时更新一遍参数,在用更新的临时参数计算梯度。因此,Nesterov动量可以解释为在Momentum动量方法中添加了一个校正因子。

完整的Nesterov动量算法如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJLyxCEA-1593960832823)(009.jpg)]

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

使用动量(Momentum)的SGD、使用Nesterov动量的SGD 的相关文章

  • 13-Websocket协议与MQ协议

    Websocket协议 基于TCP全双工协议 xff0c 即可以从客户端向服务器端发送请求 xff0c 也可以从服务器端主动向客户端发送消息 HTTP协议只能从客户端向服务器发送请求 xff0c 服务器端收到请求后 xff0c 做出响应 x
  • HeadFirest设计模式学习笔记

    设计原则 1 经常会发生变化的部分应该从整体中抽取并封装起来 xff0c 以便以后可以很轻易的对这部分代码进行改动或者是扩充 xff0c 而不会影响到不需要变化的其他部分 2 针对接口编程 xff0c 而不是针对实现编程 3 多用组合 xf
  • ROS控制UR机器人(1)-安装与配置

    一 Universal robot的软件包安装 方法1 xff1a 直接安装Universal Robots机器人的功能包 xff08 kinetic及以下版本 xff09 span class token function sudo sp
  • 机器视觉(5)-realsense相机使用教程

    realsense相机是英特尔开发的RGBD相机系列 xff0c 我们可以通过相机得到彩色图和深度图 xff0c 方便我们后续进行视觉开发 根据不同的需求 xff0c 我们一般要经过图像采集的几个步骤 xff0c 具体如下 一 打开相机并获

随机推荐

  • 激光雷达与毫米波雷达对比

    激光雷达是一种采用非接触激光测距技术的扫描式传感器 xff0c 其工作原理与一般的雷达系统类似 xff0c 通过发射激光光束来探测目标 xff0c 并通过搜集反射回来的光束来形成点云和获取数据 xff0c 这些数据经光电处理后可生成为精确的
  • Android Studio Build Output 栏内乱码的解决方案

    一 如图1 所示 xff0c Android Studio版本是4 1 3 xff0c AS工具Help About即可看到下图 图1 二 乱码如下图 xff1a 如图2所示 xff0c Build Output栏中出现了乱码 xff0c
  • 网络工程师必须搞清楚MPLS与专线的区别

    今天同事突然问我一个问题 xff0c MPLS与专线的区别 我想了想 xff0c 然后稀里糊涂的说了一堆 xff0c 感觉自己没讲清楚 xff0c 所以 xff0c 网上找了点资料 xff0c 结合自己的理解 xff0c 码文如下 xff1
  • 我的ADRC调参经验总结

    提示 xff1a 本文是在前人基础上搭建的ADRC模型 xff0c 并根据这一模型学习如何对其进行调参时产生的 xff0c 部分结论来自论文 目录 前言一 控制系统简介二 调参步骤1 前后结果效果对比2 调参经验 总结参考链接 前言 ADR
  • k8s client-go workqueue

    1 基础队列 1 1 基础队列接口 type Interface interface Add item interface 向队列中添加一个元素 xff0c interface 类型 xff0c 说明可以添加任何类型的元素 Len int
  • 相机与imu的标定(Kalibr)

    在进行vio算法开发前最重要的事是对设备内参外参的标定 xff0c 其准确性直接决定了算法的有效性 xff0e 这里我将对最著名的kalibr标定工具的使用步骤进行说明 xff0c 包括安装 相机标定 imu标定 相机与imu联合标定等步骤
  • 解决cv_bridge依赖opencv版本问题

    1 问题来源 在安装ros的过程中 xff0c 系统会默认安装cv bridge库 xff0c 但该库指定了依赖的opencv库路径 xff0c 拿ros melodic版本来说 xff0c 默认依赖opencv库 usr lib x86
  • 使用ORB_SLAM3运行Realsense T265

    关于硬件 官网说明 使用说明 Realsense T265是一款跟踪相机 xff0c 配有两个FOV为111 7 x 108 6的广角相机 xff0c 并且带有IMU BMI055 惯性测量单元 设备内部配有vpu处理器并嵌入了建图和定位算
  • ceres-solver和g2o性能比较

    前言 ceres solver 和 g2o 是slam领域常见的优化器 xff0c 其中ceres solver被vins mono使用 xff0c 而g2o被orb slam3使用 xff0c 因此到底哪个优化器更适合于在slam算法开发
  • FreeRTOS的vTaskDelete使用说明

    FreeRTOS的vTaskDelete使用说明 函数说明 参数 xff1a xTaskToDelete 要删除的任务的任务句柄 返回值 无 说明 删除一个用函数xTaskCreate 或者xTaskCreateStatic 创建的任务 x
  • 机器学习——随机森林(Random Forest)

    1 随机森林 xff08 random forest xff09 简介 随机森林是一种集成算法 xff08 Ensemble Learning xff09 xff0c 它属于Bagging类型 xff0c 通过组合多个弱分类器 xff0c
  • 《基础知识——C和C++的主要区别》

    C和C 43 43 的主要区别 设计思想上 xff1a C 43 43 是面向对象的语言 xff0c 而C是面向过程的结构化编程语言 语法上 xff1a C 43 43 具有封装 继承和多态三种特性 C 43 43 相比C xff0c 增加
  • 数据库原理及应用(十三)E-R图、关系模式

    数据库设计的过程 数据分析 gt 数据建模 gt 关系数据库模式 gt 关系数据库管理 用户需求 gt 概念模型 E R Model gt 逻辑模型 xff08 三层结构 xff09 现实世界 gt 信息世界 gt 机器世界 概念设计工具E
  • Ubuntu数据备份与恢复工具(一)

    在我们日常工作中 xff0c 个人文件 业务数据及应用信息的备份与恢复策略是一个重要的环节 意外删除 硬件故障 操作失误 网络攻击 xff0c 甚至是自然灾害 xff0c 都可以直接或间接导不可估价的数据损失 为了避免损失 xff0c 缩少
  • 百度移动端面试回忆

    百度一面 xff1a 1 自我介绍 2 悲观锁和乐观锁 乐观锁 xff1a 总是认为不会产生并发问题 xff0c 每次去取数据的时候总认为不会有其他线程对数据进行修改 xff0c 因此不会上锁 xff0c 但是在更新时会判断其他线程在这之前
  • Quagga编译安装

    Quagga源码编译安装 1 Quagga下载 1 官网下载quagga 1 2 4 tar gz并拖入虚拟机桌面 2 解压到 opt目录下 sudo tar zxvf Desktop quagga 1 2 4 tar gz C opt 2
  • VINS-FUSION 源码 双目 单线程 按执行顺序阅读

    VINS FUSION 源码 双目 单线程 按执行顺序阅读 Keywords xff1a VINS FUSION vins 源码解读 源码梳理 vins数据结构 vinsfusion vins双目 双目vins 双目vinsfusion 双
  • 【C语言】__attribute__使用

    一 介绍 GNU C 的一大特色就是 attribute 机制attribute 可以设置函数属性 xff08 Function Attribute xff09 变量属性 xff08 Variable Attribute xff09 和类型
  • Ubuntu20.04下CUDA、cuDNN的详细安装与配置过程(图文)

    Ubuntu20 04下CUDA cuDNN的详细安装与配置过程 xff0c 亲测试可用 xff08 图文 xff09 一 NVIDIA xff08 英伟达 xff09 显卡驱动安装1 1 关闭系统自带驱动nouveau2 2 NVIDIA
  • 使用动量(Momentum)的SGD、使用Nesterov动量的SGD

    使用动量 Momentum 的SGD 使用Nesterov动量的SGD 参考 xff1a 使用动量 Momentum 的SGD 使用Nesterov动量的SGD 一 使用动量 Momentum 的随机梯度下降 虽然随机梯度下降是非常受欢迎的