【机器学习300问】81、什么是动量梯度下降算法?

news2024/11/20 12:30:58

        动量梯度下降算法(Momentum)是利用指数加权移动平均的思想来实现梯度下降的算法。让我们先来回顾一下基础的梯度下降方法以及看看它有哪些不足之处。接着引出动量梯度下降算法,在理解了它的原理后看看它是如何规避之前方法的不足的。

        如果不知道指数加权平均是什么?可以看看我上一篇文章:

【机器学习300问】80、指数加权平均数是什么?icon-default.png?t=N7T8http://t.csdnimg.cn/4tFBg

一、通过举例来感性认识

(1)基础梯度下降法:缓慢探索的徒步者

        想象你是一位徒步者,站在一座多山的地形上,你的目标是到达最低点——山谷底部。你只能看到你周围有限的视野,看不到整个地形的全貌。为了决定往哪个方向走,你每走一步都会探测脚下的斜率,即地面倾斜的方向,然后沿着这个方向向下走一小步。这就是基础梯度下降法的工作原理,它按照当前位置的梯度(即损失函数下降最快的方向)逐步调整参数,以期达到最小损失值。

        问题:如果地形中有许多小山包和凹陷(局部极小值),基础梯度下降可能会在这些局部低点附近徘徊,很难跳出并找到全局最低点。此外,在山谷较为平坦的区域,由于梯度变小,前进速度会大大减慢,可能导致收敛速度很慢。

(2)动量梯度下降法:带上滑板的探险者

        现在,我们将徒步者换成了一个携带滑板的探险者,还是同样站在山顶,目标相同——到达山谷底部。除了根据当前的斜率决定滑行方向外,他还拥有一个特别的滑板,这个滑板能够累积之前的滑行速度。

        当探险者开始下滑时,他的滑板不仅受到当前斜坡直接影响,还保留了前一次滑行的动量。这意味着,如果他在连续的斜坡上滑行,即使某个斜坡不如之前的陡峭,他也不会立刻慢下来,而是会凭借着积累起来的速度继续快速前进。相反,如果遇到反向的斜坡(相当于梯度方向的突然改变),滑板的动量也会帮助他更加平滑地调整方向,而不是立刻停下来或倒退。

二、通过定义来理性认识

        动量梯度下降(Momentum Gradient Descent)算法是一种用于加速梯度下降算法收敛的方法,在数学上,它通过在梯度更新过程中引入“动量”来平滑序列变量更新,具体定义如下:

        对于一个要优化的目标函数J(\theta) ,其中\theta是参数向量,动量梯度下降算法在每次迭代t时对参数\theta进行更新,更新规则为:

v_t = \gamma v_{t-1} + \eta \nabla J(\theta_{t-1})

\theta_t = \theta_{t-1} - v_t

在这个更新规则中:

  • v_t是在时间步t的更新向量(可被认为是速度)它代表参数向量沿负梯度方向移动的大小和方向。
  • \gamma是动量因子(可称为摩擦系数)介于[0, 1)区间,它衡量前一时间步更新向量v_{t-1}对当前更新的影响。较大的\gamma值意味着前一步更新的影响更加持久,使得算法在参数空间内移动更加平滑。
  • \eta是学习率,控制每一步沿梯度方向更新的大小。
  •  \nabla J(\theta_{t-1})是目标函数J关于参数向量\theta\theta_{t-1}处的梯度,指示了目标函数下降最快的方向。

        通过这种方式,动量项v_t累积了过去的梯度信息,赋予了更新过程一种“惯性”,有助于算法在优化过程中更快地穿越平坦区域,减少振荡,并能更好地逃离局部极小值点。因此,动量梯度下降算法确实利用了指数加权平均的数学原理来改善了标准梯度下降的性能。

三、动量梯度下降法的优点

        动量梯度下降法通过引入动量机制,提高了在非凸优化问题中寻找较好解的能力,并且通常能够更快且更稳定地收敛。具体来说有如下优点:

(1)减少振荡

        在局部极小值附近,由于动量的作用,动量梯度下降能够减少在两侧的来回振荡,更容易跳出局部最优,寻找全局最优解。

(2)加快收敛

        在接近最优解的平坦区域,即便梯度变小,动量项仍能提供一定的更新方向,维持一定的下降速度,加快收敛过程。

(3)克服局部极小值

        在复杂的损失函数地形中,动量可以帮助算法更有效地穿越局部极小值(梯度接近零但不是极值点的地方),因为它结合了历史信息,不会轻易停止。

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

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

相关文章

AI如何推动科学的变革:AlphaFold的发展历程与科学范式的转变

之前我们的文章介绍了DeepMind最新的研究成果AlphaFold3,在近期的访谈中,DeepMind的科学副总裁普什梅特科利(Pushmeet Kohli)与斯坦福大学教授维杰潘德(Vijay Pande)深入讨论了人工智能(AI&…

Vue入门到关门之Vue3学习

一、常用API 注意:本文项目均使用脚手架为 Vite 1、setup函数 (1)介绍 如果在项目中使用配置项API,那么写起来就和vue2的写法是一样的;但是如果在项目中写的是组合式API,那么组件中所用到的&#xff1a…

【c++】全面理解C++多态:虚函数表深度剖析与实践应用

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,通过本篇文章,来详细理解多态的内容 目录 1.多态的定义及实现1.1多态的构成条件1.2虚函数的重写1.3 C11 override 和 final1.4重载、覆盖(重写)、隐藏…

Docker 部署 Nginx 实现一个极简的 负载均衡

背景: Nginx是异步框架的网页服务器,其常用作反向代理(负载均衡器)。在一般的小项目中, 服务器不多, 如果不考虑使用服务注册与发现, 使用Nginx 可以容易实现负载均衡。 在特此写一个快速入门 Nginx 的技术贴, 使用 Docker 部署 Nginx, 实现一个极简的加权轮询负载均…

信息与未来2017真题笔记

T1. 龟兔赛跑 题目描述 兔子又来找乌龟赛跑啦!同样的错误兔子不会犯两次,所以兔子提出赛跑的时候,乌龟就觉得这场比赛很不公平。于是兔子进一步放宽了条件,表示他可以在比赛开始以后先睡 t t t 分钟再开始追乌龟。 乌龟这下没…

瑞_Docker安装教程(超详细图文步骤,含卸载、离线安装)

文章目录 1 CentOS 在线安装 Docker1.1 卸载旧版Docker1.2 安装Docker1.2.1 安装Docker的yum库1.2.2 配置Docker的yum源1.2.3 安装Docker-CE1.2.4 启动和校验(开机自启)1.2.5 配置镜像加速 1.3 安装 Docker Compose1.4 启动和校验(开机自启&a…

神级框架!!不要再封装各种 Util 工具类了【送源码】

这个工具类就比较厉害了,不过我在 Halo 当中用得最多的还是 HtmlUtil.encode,可以将一些字符转化为安全字符,防止 xss 注入和 SQL 注入,比如下面的评论提交。 comment.setCommentAuthor(HtmlUtil.encode(comment.getCommentAutho…

MQTT学习(一)

MQTT是一种与HTTP类似的应用层协议。 在某些物联网应用中,MQTT优于HTTP。 首先,HTTP是用于客户端服务器计算的以文档为中心的请求-响应协议。 HTTP是万维网的基础,但它不是专门为机器之间通信而设计的。 MQTT是一种机器对机器、以数据为中…

栅格地图、障碍物地图与膨胀地图(障碍物地图(三)写一张障碍物地图)

花了不少时间看完了障碍物地图的大致思路,这里简单根据前面的思路来写一个简易版的障碍物地图。 1.订阅一张地图 首先,我们需要一张静态地图作为原始数据,这个我们可以订阅当前的map来获取: void map_test1::MapCallback(const…

一文读懂 Pencil 积分,打开 Pencils Protocol 生态权益大门

近日,Scroll 生态项目 Penpad 近期将品牌全新升级为 Pencils Protocol ,在升级后,其从一个 Scroll 生态的原生 LaunchPad 平台进一步拓展为集 Staking、Vault 以及 Shop 等功能于一体的全新生态。全新的品牌升级不仅让 Pencils Protocol 生态…

鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main ()

这应该是系列篇最难写的一篇,全是汇编代码,需大量的底层知识,涉及协处理器,内核镜像重定位,创建内核映射表,初始化 CPU 模式栈,热启动,到最后熟悉的 main() 。 内核入口 在链接文件…

nginx配置域名与IP访问服务冲突问题

在最近的一次开发中遇到一个问题,我在云服务器上部署了两个服务,A服务和B服务, A服务在服务器中用的端口是80端口,所以我在浏览器访问的地址就是 B服务在服务器中用的是9818端口,所以我在浏览器访问的是 现在我给B服务…

Network Compression

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了Network Compression,包括为什么要压缩,压缩的主要手段(pruning,knowledge distillation,parameter quantization,architect…

Linux线程(四) 生产者消费者模型

目录 一、什么是生产者消费者模型 基本概念 优点以及应用场景 二、 基于阻塞队列的生产者消费者模型 三、POSIX信号量 四、基于环形队列的生产消费模型 一、什么是生产者消费者模型 Linux下的生产者消费者模型是一种经典的多线程或多进程编程设计模式,它用于解…

2024年3月 电子学会青少年等级考试机器人理论真题六级

202403 青少年等级考试机器人理论真题六级 第 1 题 下列选项中,属于URL的是?( ) A:192.168.1.10 B:www.baidu.com C:http://www.kpcb.org.cn/h-col-147.html D:fe80::7998:ffc8…

【MIT6.S081】Lab7: Multithreading(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab7.html 本实验的代码分支:https://gitee.com/dragonlalala/xv6-labs-2020/tree/thread2/ Uthread: switching between threads 关键点:线程切换、swtch 思路: 本实验完成的任务为用户级线程系统设计上下文切换机制…

x264 帧类型代价计算原理:slicetype_frame_cost 函数分析

slicetype_frame_cost 函数 函数功能 这个函数的核心是计算编码一系列帧(从 p0 到p1,以 b 为当前帧)的代价 cost,并根据这个代价 cost来辅助帧类型决策。它考虑了运动搜索的结果、帧间和帧内预测的成本,并且可以并行处理以提高效率。该函数在帧类型决策、MBtree 分析、场…

有一个21年的前端vue项目,死活安不上依赖

在公司开发的时候遇到的一个很玄幻的问题,这个项目是21年开发的,现在我是24年中途二开增加新功能 这个项目经过多人之手,现在已经出现了问题------项目依赖安不上,我能启动完全是因为在23年的时候写这个项目的时候将依赖费九牛二虎之力下载好后打成了压缩包发给另外一个安不上依…

【Java学习笔记10 Java Web 应用——JSP

JSP(Java Script Pages)技术是一种网站开发技术,可以让Web开发人员快速、高效的开发出易于维护的动态网页。使用JSP技术开发的Web应用程序具有跨平台性,不需要修改程序,发布后即可在Windows、Linux等不同的操作系统中运行。 10.1 JSP技术概述…

【JavaWeb】前后端分离SpringBoot项目快速排错指南

1 发起业务请求 打开浏览器开发者工具,同时显示网络(Internet)和控制台(console) 接着,清空控制台和网络的内容,如下图 然后,点击你的业务按钮,发起请求。 首先看控制台…