每天3分钟,彻底弄懂神经网络的优化器(三)Momentum

news2024/11/17 23:30:27

前面从最初的SGD开始,介绍SGD的算法细节,以及其在深度神经网络中的劣势,本文引入Momentum算法,解决SGD的一些问题。

1. Momentum算法的提出

动量(Momentum)方法最初由B.T.Polyak在1964年提出。这一方法被用来加速梯度下降算法的收敛,特别是在处理具有较大条件数的优化问题时。B.T.Polyak在论文《Some methods of speeding up the convergence of iteration methods》[1]中描述了这一方法,这篇论文发表在了《USSR Computational Mathematics and Mathematical Physics》上。动量方法通过在每一步的更新中加入一部分上一步的速度,帮助算法在相关方向上加速,并减少在目标函数的平坦区域中的震荡。这种方法后来被广泛应用于机器学习领域,尤其是在深度学习中,成为了优化算法中的一个重要组成部分。

2. 指数加权平均

在介绍Momentum算法之前,我们先来了解一下指数加权平均(Exponential Weighted Average)的概念。

指数加权平均(Exponentially Weighted Average,EWA)是一种统计方法,用于计算一组数值的加权平均,其中最近的数据点被赋予更高的权重。这种方法在信号处理、时间序列分析、机器学习等领域中非常有用,尤其是在需要对数据的最新变化做出快速反应时。

指数加权平均的计算公式如下:

EWA t = β ⋅ EWA t − 1 + ( 1 − β ) ⋅ x t \text{EWA}_t = \beta \cdot \text{EWA}_{t-1} + (1 - \beta) \cdot x_t EWAt=βEWAt1+(1β)xt

其中:

  • $ \text{EWA}_t $ 是在时间点 t t t 的指数加权平均值。
  • β \beta β 是介于 0 和 1 之间的衰减系数(decay factor),决定了历史数据的权重。
  • x t x_t xt 是在时间点 t t t 的观测值。
  • EWA t − 1 \text{EWA}_{t-1} EWAt1 是前一时间点的指数加权平均值。

衰减系数 β \beta β 的选择对指数加权平均的影响很大。如果 β \beta β 接近 1,那么历史数据的影响会持续很长时间,平滑效果更强;如果 β \beta β 接近 0,则新数据的影响更大,对变化的反应更快。

指数加权平均的一个特性是它对异常值(outliers)不太敏感,因为每个数据点的权重都会随着时间的推移而指数级减少。这使得它在处理含有噪声的数据时非常有用。

3. Momentum

动量(Momentum)方法是一种在深度学习中广泛使用的优化策略,它通过引入动量项来加速梯度下降算法的收敛并提高其稳定性。动量方法的核心思想是模拟物理学中的动量概念,通过累积过去梯度的信息来调整参数更新的方向和幅度。动量通过指数加权平均的方式来计算。

请添加图片描述

动量方法的更新公式可以表示为:
v t = γ v t − 1 + η t ∇ J ( θ t ) θ t = θ t − 1 − v t \begin{align} v_t &= \gamma v_{t-1} + \eta_t \nabla J(\theta_t) \\ \theta_t &= \theta_{t-1} - v_t \end{align} vtθt=γvt1+ηtJ(θt)=θt1vt

其中:

  • $ v_t$ 是时间步 t t t 的动量项, 这个动量项是通过指数加权平均的方式计算得到的;
  • γ \gamma γ 是动量衰减系数,通常设置在 [ 0 , 1 ) [0,1) [0,1) 之间,如 0.9 或 0.99;
  • η t \eta_t ηt 是学习率;
  • $\nabla J(\theta_t) $ 是在参数 θ t \theta_t θt 处的损失函数梯度。

动量方法的优势包括:

  1. 加速收敛:通过累积历史梯度,可以在相关方向上加速参数更新;
  2. 抑制振荡:有助于减少训练过程中的震荡,特别是在目标函数的平坦区域或接近最小值时;
  3. 跳出局部最小值:在某些情况下,动量可以帮助算法跳出局部最小值,从而找到更好的全局最小值。

4. 指数加权平均为什么叫“指数”?

之所以被称为“指数”,是因为它在计算平均值时,给予不同时间点的数据以指数级衰减的权重。

在每次计算时,新数据 x t x_t xt 被赋予的权重是 ( 1 − β ) (1 - \beta) (1β),而之前的指数加权平均 EWA t − 1 \text{EWA}_{t-1} EWAt1 被赋予的权重是 β \beta β。由于 β \beta β 接近 1,所以越早的数据其权重会以 β \beta β 的多次方的速度迅速减小,这就是“指数”名称的来源。

v 100 = 0.9 ⋅ v 99 + 0.1 ⋅ θ 100 v 99 = 0.9 ⋅ v 98 + 0.1 ⋅ θ 99 v 98 = 0.9 ⋅ v 97 + 0.1 ⋅ θ 98 v 97 = 0.9 ⋅ v 96 + 0.1 ⋅ θ 97 ⋯ v 1 = 0.9 ⋅ v 0 + 0.1 ⋅ θ 1 v 0 = 0 \begin{align*} v_{100} &= 0.9 \cdot v_{99} + 0.1 \cdot \theta_{100} \\ v_{99} &= 0.9 \cdot v_{98} + 0.1 \cdot \theta_{99} \\ v_{98} &= 0.9 \cdot v_{97} + 0.1 \cdot \theta_{98} \\ v_{97} &= 0.9 \cdot v_{96} + 0.1 \cdot \theta_{97} \\ \cdots \\ v_{1} &= 0.9 \cdot v_{0} + 0.1 \cdot \theta_{1} \\ v_{0} &= 0 \end{align*} v100v99v98v97v1v0=0.9v99+0.1θ100=0.9v98+0.1θ99=0.9v97+0.1θ98=0.9v96+0.1θ97=0.9v0+0.1θ1=0

将其展开计算 v 100 v_{100} v100

v 100 = 0.1 ⋅ θ 100 + 0.9 ⋅ 0.1 ⋅ θ 99 + 0. 9 2 ⋅ 0.1 ⋅ θ 98 + ⋯ + 0. 9 99 ⋅ 0.1 ⋅ θ 1 v_{100} = 0.1 \cdot \theta_{100} + 0.9 \cdot 0.1 \cdot \theta_{99} + 0.9^2 \cdot 0.1 \cdot \theta_{98} + \cdots + 0.9^{99} \cdot 0.1 \cdot \theta_{1} v100=0.1θ100+0.90.1θ99+0.920.1θ98++0.9990.1θ1

一般来讲,超过一定时间步后,前面的数据对最终结果的影响会变得非常小,当 β = 0.9 \beta = 0.9 β=0.9 时, 0. 9 99 ≈ 1.0 × 1 0 − 5 0.9^{99} \approx 1.0 \times 10^{-5} 0.9991.0×105,这意味着 v 100 v_{100} v100 中的 θ 1 \theta_{1} θ1 对结果的影响几乎可以忽略不计。一般来说,我们最多取到 1 / 1 − β 1/1-\beta 1/1β 个时间步的数据,之后的数据对结果的影响可以忽略不计。

根据极限公式:

l i m x → 0 ( 1 − x ) 1 x = 1 e lim_{{x\to 0}}{(1-x)^{\frac{1}{x}}} = \frac{1}{e} limx0(1x)x1=e1

这边,当 $x= 1- \beta $ 时, β 1 1 − β = 1 e {\beta^{\frac{1}{1-\beta}}} = \frac{1}{e} β1β1=e1

5. Momentum算法为什么要叫“动量”?

动量算法的命名灵感来源于物理学中的动量概念,它通过在参数更新中加入过去迭代的梯度信息,模拟了物体运动时动量的效果,使得算法在优化过程中能够保持一定的“惯性”,从而在面对目标函数的曲率变化或噪声时,能够更加平滑地调整搜索方向和步长。

在物理学中,动量是物体运动状态的量度,它与物体的质量和速度有关。类似地,动量算法在机器学习中的作用可以类比为在优化过程中增加了一种“惯性”,使得算法在迭代过程中能够根据之前的梯度信息调整当前的更新方向和步长,从而在目标函数的曲面上更加平滑地滚动,避免在局部最小值或平坦区域停滞不前。

请添加图片描述

参考

[1] Some methods of speeding up the convergence of iteration methods

欢迎关注我的GitHub和微信公众号,来不及解释了,快上船!

GitHub: LLMForEverybody

仓库上有原始的Markdown文件,完全开源,欢迎大家Star和Fork!
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IAR全面支持国科环宇AS32X系列RISC-V车规MCU

IAR嵌入式开发解决方案将全面支持国科环宇AS32X系列ASIL-B MCU,共同推动汽车高品质应用的安全开发 中国上海,2024年9月29日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司(以下简称“国科环宇”&#xf…

Rust语言桌面应用开发GTK3 Gtk3-rs Glade

文章目录 GTK-RSGithub官网Rust 教程Rust 环境安装 GTK安装 Gladedemo.glade 文件完整示例 main.rs创建 Rust 项目Cargo.toml 文件main.rs 文件 编译运行GTK主题 GTK-RS gtk-rs 是一个用于在 Rust 编程语言中使用 GTK 图形用户界面工具包的库。GTK 是一个流行的跨平台 GUI 工具…

每日论文7-17MWCL基于IMOS的小vco增益变化的VCO

《Small VCO-Gain Variation Adding a Bias-Shifted Inversion-Mode MOS Varactor》17MWCL 对于PLL来说,其中VCO的调谐增益KVCO越线性,其变化程度ΔKvco越小,对PLL的稳定有较大的好处。这篇文章给了一个很简单朴素而有效的补偿var非线性的方…

Maven 编译和Nexus 构建私有仓库

Java 程序编译 编译流程 C 语言源码编译过程,对于单文件,我们可以使用 gcc 命令直接编译即可,但如果是大型商业项目,源码文件多,存在各种依赖,各种配置路径,各种库的支持等,几乎无法…

C0004.Qt中QComboBox设置下拉列表样式后,下拉列表样式无效的解决办法

问题描述 我们平时在使用Qt Creator对控件QComboBox的样式进行设置后,在运行程序启动界面时,发现设置的样式无效,效果如下: /* 设置下拉菜单框的样式 */ QComboBox QAbstractItemView {border: 1px solid rgb(161,161,161); /* 下拉菜单框的边框样式 */ }/* 设置下拉菜单…

现在转行AI晚不晚,应该怎么做呢?

对于40岁以上的非AI程序员来说,转行进入AI领域虽然可能面临一些挑战,但并非不可实现。凭借你已有的编程经验和技术背景,加上适当的学习策略和实践,你可以成功跨入AI领域。以下是一些针对40岁程序员转行AI的建议,特别是…

GCC使用入门

文章目录 GCC简介单个文件编译过程预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking) 多文件编译过程头文件搜索路径三种不推荐的方法两种推荐的方法 库文件静态库文件创建和使用静态库链接顺序 动态库文件创建和使用动态库 Warning编译选项调试信息(-g)编译…

快递单号物流跟踪管理快速筛选出已签收单号

看着满屏的单号,是不是感觉眼前一黑要查询到什么时候?别灰心,这不快递批量查询高手来了!这神器就是用来查询物流的好帮手。一键筛选已签收件单号,并导出表格。有了它,你也能轻松查询大量的单号物流。一起试…

买前必看,教你挑选适合自己的蓝牙耳机(我早点刷到该多好啊)

无论是运动、通勤,还是休闲娱乐时,蓝牙耳机已经成为我们便捷生活的一部分。那么,市场上这么多款蓝牙耳机,我们究竟该怎么选?耳机挑不对,买了也白费!买蓝牙耳机之前要搞清楚耳机的这些参数&#…

【算法业务】关于数据驱动的用户增长思考

这篇内容是多年之前(2020年)的用户增长项目时自己写的总结,这里做一下对于实践和思考的回顾,便于知识的记录和经验分享,内容涉及用户增长理解、个性化推送系统框架、个性化推送问题建模、推送内容池构建、智能文案生成…

BMT Building Maker Toolset 房屋建筑快速创建工具

BuildingMakerToolset提供了一个用于创建建筑和放置预制件的自定义工作流程。 如果你需要为你的游戏设计一些带室内装饰的建筑,或者你是一名关卡设计师,你想让你的工作流程更有效,这可能是适合你的资产。 该工具集与200多个墙壁、电缆、管道等预制件配对。所有预制件都指定了…

基于NXP LS1046+FPGA的轨道交通3U CPCI多网口解决方案,支持QNX/VXWOKRS/LINUX

Feature Summary Specification Description 处理器 NXP LS1046A at up to 1.4GHz 存储 DDR4, 16GB Emmc,16MB QSPI FLASH 板卡形状 3U标准CPCI板卡 尺寸 160.00 100.00mm 接口 2路2.5GE 2路1GE 1路RS232 1路IRIGB 调试接口 JTAG / COP de…

AI生成头像表情包副业,每天仅需十分钟,无脑操作月入过万!

项目介绍 今天我想与大家分享一个有趣的项目:AI生成表情包和头像。这对于我们进行IP打造来说,实在是个不错的选择,尤其是像我这样的头像。那为什么说每天只需花费10分钟呢?接下来我们来探讨一下。 这个项目的核心在于利用AI技术…

读取到json数据拿出来,修改后重新写入json文件

在写程序过程中,有些时候需要拿到json里面的数据,再进行修改,哪该怎么操作呢?跟着我以下的操作进行,就能更改json文件的内容了。 比如说我要修改年级的状态,修改为0 先创建一个json文件,数据格…

vue3项目中引入Cesium

1、创建项目 本文章是我学习Cesium时记录下来的,是我用来学习使用的。 使用vitevue3创建项目,组件库使用element plus,项目地址在我的gitee仓库中有,https://gitee.com/the-world-keeps-blooming/my-vite-vue-cesium。 在vite中有…

高效修复MySQL数据库

介绍 MySQL被广泛认为是最著名的数据库管理系统之一,是跨各种行业的许多应用的基础。mysql数据库的耐用性和效率是决定这些应用程序是否能不受任何干扰地运行的重要因素。需要对MySQL数据库进行定期维护,以防止发生以下情况:数据丢失和系统中断。此外&a…

springboot购物网站源码分享

开头:springboot购物网站源码分享 题目:springboot购物网站源码分享 主要内容:毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来&#xff…

YOLOv8改进,YOLOv8主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…

大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)

目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点: 伪元素补充文本溢出属性转换 没有基础的朋友&#xff…