通俗讲解-动量梯度下降法原理与代码实例
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
目录
一.动量梯度下降法介绍
1.1 动量梯度下降法简介与思想
1.2 动量梯度下降法的算法流程
二.动量梯度下降法代码实例
2.1 动量梯度下降法实例代码
一.动量梯度下降法介绍
本节介绍动量梯度下降法的思想以及算法流程
1.1 动量梯度下降法简介与思想
动量梯度下降法是对梯度下降法的一种改进,
这主要是因为梯度下降法在遇到局部最优时,毫无办法
为了解决跳出局部最优,动量梯度下降法为此模仿物体从高处滚到低处的原理,
由于物体具有动量,遇到小坑时会由于原有动量而跃出小坑,因此,动量梯度下降法在迭代的过程中引入动量的概念,它的迭代量改为"速度",而当前的负梯度只作为速度的修改量,
动量梯度下降法迭代公式如下:
其中,mc是动量系数,一般设为0.9,g是梯度
这样做的好处是,在遇到“小坑”的时候,会因为原有的速度方向,冲出小坑
1.2 动量梯度下降法的算法流程
动量梯度下降法的具体算法流程如下
一、设置参数与初始化相关变量
1. 设置学习率lr
lr一般设为0.1
2. 设置动量系数mc
mc一般设为0.9
3. 初始化速度v
v一般初始化为0
4. 初始化初始解x
x随机初始化,或者具体问题具体设定
二、循环迭代
按如下步骤进行迭代
1.计算当前的梯度g
2.计算当前的梯度对v带来的修改量dx
3.计算当前的速度
4.更新x
![]()
5.检查迭代终止条件如果满足终止条件,就退出迭代程序
终止条件可设如下:
(1)是否达到最大迭代次数
(2)目标函数值是否满足要求
(3) x是否多次变化极小
三、输出结果
输出最终的求解结果x
二.动量梯度下降法代码实例
本节展示动量梯度下降法求解函数最小值的一个代码实例
2.1 动量梯度下降法实例代码
现求解的极小值
它的函数图像如下:
其中,梯度公式为
按以上算法流程,编写程序如下(matlab):
% 本代码用动量梯度下降法求解函数y = 0.4*x^2+3*exp(-(x+2)^2) 的极小值
% 代码主旨用于教学,供大家学习理解动量梯度下降法的原理
% 转载请说明来自 《老饼讲解神经网络》 bp.bbbdata.com
clc;clear all ;
line_x = -5:0.1:5; % 目标函数曲线x
line_y = 0.4*line_x.^2+3*exp(-(line_x+2).^2); % 目标函数曲线y
lr = 0.1; % 学习率
mc = 0.9; % 动量系数
x = -4; % x的初始值
v = 0; % 初始速度
for i = 1:100gx = -(0.8*x-6*exp(-(x+2).^2)*(x+2)); % 计算负梯度v = mc*v+(1-mc)*lr*gx; % 将负梯度叠加到上一次速度中,作为本次的速度x = x+v; % 更新xy = 0.4*x.^2+3*exp(-(x+2).^2); % 计算当前的目标函数值fprintf('第%d轮x的迭代值x=%f\n',i,x)plot(line_x,line_y,x,y,'or') % 画出曲线与当前迭代点drawnow; % 展示图象
end
运行结果如下
第0轮x的迭代值x=-3.970198
第1轮x的迭代值x=-3.914051
第2轮x的迭代值x=-3.835152
第3轮x的迭代值x=-3.737256
第4轮x的迭代值x=-3.624348
....
第95轮x的迭代值x=0.033763
第96轮x的迭代值x=0.037061
第97轮x的迭代值x=0.041660
第98轮x的迭代值x=0.047361
第99轮x的迭代值x=0.053971
经过100步迭代,求得最后y在x=0.053971处取得极小值
相关文章
1-LVQ的学习目录:老饼|BP神经网络-竞争神经网络
2-SVM的学习目录:老饼|BP神经网络-感知机与SVM
3-BP的学习目录:老饼|BP神经网络-BP入门
相关文章:
通俗讲解-动量梯度下降法原理与代码实例
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一.动量梯度下降法介绍 1.1 动量梯度下降法简介与思想 1.2 动量梯度下降法的算法流程 二.动量梯度下降法代码实例 2.1 动量梯度下降法实例代码 一.动量梯度下降法介绍…...
【【STM32-USART串口协议】】
STM32-USART串口协议 USART串口协议 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 •通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&…...
vue3.0组件通信
1、props 没有加TS限制类型的时候 1. 数组写法 defineProps([count, changCount]) 2. 对象写法 defineProps({count: Number,changCount: Function }) 3. 配置对象 defineProps({count: {type: Number,default: 2},changCount: {type: Function,required: true} })注意: defi…...
费曼学习法
费曼学习法 费曼学习法(Feynman Technique)是一种学习和理解复杂概念的方法,以理查德费曼(Richard Feynman)这位著名的理论物理学家命名。该方法的核心思想是通过将学习内容简化并用自己的话解释给别人,来…...
Kubernetes介绍和部署,使用
1.k8s kubernetes来自希腊语舵手,google, 8是ubernete 1.管理docker容器 go写的(并发) 2.用于微服务 3.cncf云原生基金会 2.mater(管理节点)和nodes(微服务节点) 3.部署 1.minikube kind官网在线测试语句 2.kubeadm(官方)(安装比较方便 添加) 3.github下载二进制包 4.yum(老) …...
视频汇聚平台EasyCVR视频监控播放平台WebRTC流地址无法播放的问题解决方案
开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...
node.js 基础高并发案例
什么是高并发 高并发是指系统在同一时间段内需要处理大量的并发请求或同时进行大量的操作。在计算机领域中,高并发通常指的是在短时间内有大量的用户或客户端同时访问系统或进行操作,对系统的并发处理能力提出了较高的要求。 高并发的特点包括 大量的…...
OpenCV实例(八)车牌字符识别技术(二)字符识别
车牌字符识别技术(二)字符识别 1.字符识别原理及其发展阶段2.字符识别方法3.英文、数字识别4.车牌定位实例 1.字符识别原理及其发展阶段 匹配判别是字符识别的基本思想,与其他模式识别的应用非常类似。字符识别的基本原理就是对字符图像进行…...
svn文章五:问题排查与修复 - 出了问题怎么办?SVN故障排除与修复指南
文章五:问题排查与修复 - “出了问题怎么办?SVN故障排除与修复指南” 概述:在使用SVN时,难免会遇到一些问题和错误。在这篇文章中,我们将教您如何进行故障排查和修复,保护您的SVN仓库和数据安全。 1. 引言…...
国产开源ambari之DataSophon部署
介绍 DataSophon致力于快速实现部署、管理、监控以及自动化运维大数据云原生平台,帮助您快速构建起稳定、高效、可弹性伸缩的大数据云原生平台。 主要特性有: 快速部署,可快速完成300个节点的大数据集群部署兼容复杂环境,极少的依赖使其很容易适配各种复杂环境监控指标全面丰…...
面试之快速学习STL- vector
1. vector底层实现机制刨析: 简述:使用三个迭代器表示的:  这也就解释了,为什么 vector 容器在进行扩容后,与其相关的指针、引用以及迭代器可能会失效的原因。 insert 整体向后移 erase 整体向前移…...
LeetCode_03Java_1572. 矩阵对角线元素的和
给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入:mat [[1,2,3],[4,5,6],[7,8,9]] 输出:25 解释:对角线的和为:1 5 9 3 7 2…...
系统架构设计师---职责及与其他角色的关系区别
一. 系统架构设计师的职责如下: 系统架构设计师是系统或产品线的设计责任人,是一个负责理解和管理并最终确认和评估非功能性系统需求(比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等),给出 开发规范,搭建系统实现的核心构架,对整个软件架构、关键构件、…...
【Visual Studio Code】--- Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径
Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径 一、概述二、修改 Code 插件数据和缓存的保存路径 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成…...
mapbox-gl中mvt、pbf 矢量切片 feature id bug
1.版本:mapbox-gl.js 2.13.0,pbf采用 postgis生成 2.调用矢量切片时,采用如下方法查询矢量切片要素,报错 map.on(mousemove, function(e) { var bbox = [ [e.point.x - 5, e.point.y - 5], [e.point…...
206、仿真-51单片机锂电池蓄电池电压电流加按键控制开关状态Proteus仿真设计(程序+Proteus仿真+配套资料等)
毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…...
【Realtek sdk-3.4.14b】RTL8197F+RTL8812F欧洲屏蔽5G天气雷达信道DFS信道120、124、128方法
需求描述 对于欧洲国家来说,默认支持DFS信道,但是有三个信道比较特殊,是天气雷达信道,如下图所示120、124、128,天气雷达信道有个特点就是在信号可以发射之前需要检测静默15min,如果信道自动选择到了天气雷达信道,就会有15min的时间无法连接到WiFi热点,严重影响用户体验…...
【嵌入式学习笔记】嵌入式入门7——IIC总线协议
1.IIC简介 IIC即Inter Integrated Circuit,集成电路总线,是一种同步,串行,半双工通信总线。 IIC总线协议——总线就是传输数据通道,协议就是传输数据的规则,有以下特点: 由时钟线SCL和数据线S…...
你永远想象不到有多折磨的 Android 开发 react-native gradle*!¥%#
很难过,拿到项目运行不起来,错误报告研究几天没研究明白,改代码,装gradle,忙和好久还是一个样,也不知道是码的问题还是什么,一开始 后面装完gradle,不报错了,但是也跑不起…...
关于STM32 hal printf重定向 “FILE“ is undefined
> 关于STM32 hal printf重定向,及报错。“FILE” is undefined 增加以下内容: #include "string.h" #include "stdio.h" #pragma import(__use_no_semihosting) 标准库需要的支持函数 struct __…...
AArch64虚拟化调试:HDFGWTR2_EL2寄存器详解与应用
1. AArch64系统寄存器与虚拟化调试概述在Armv8/v9架构中,系统寄存器是处理器核心的控制中枢,负责管理处理器的各种关键功能和行为。AArch64架构通过异常级别(EL0-EL3)实现了严格的权限分级机制,其中EL2作为Hypervisor层…...
XHS-Downloader:小红书内容采集的技术架构与多模式部署方案
XHS-Downloader:小红书内容采集的技术架构与多模式部署方案 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…...
快马AI生成高性能JMeter压测脚本的核心原理与实战
1. 这不是“又一个AI写脚本工具”,而是压测工程师终于能睡整觉的转折点快马AI、JMeter、一键生成高性能测试脚本——这三个词凑在一起,很多老压测人第一反应是皱眉:又来个包装成“智能”的模板填充器?我亲手调过37版登录接口的Thi…...
GitHub中文界面转换指南:3步打造专属中文GitHub环境
GitHub中文界面转换指南:3步打造专属中文GitHub环境 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 当我们第一次接触GitH…...
从芯片到产品:嵌入式AI与安全设计实战解析
1. 项目概述:一次面向未来的技术对话最近,我作为启扬智能的一员,有幸参与了「2025恩智浦技术巡回研讨会」的线下活动。这不仅仅是一次简单的产品展示或技术宣讲,更像是一场与产业链上下游伙伴、众多开发者同行进行的深度技术对话。…...
Arty S7 FPGA开发板实战指南:从硬件解析到项目开发
1. 项目概述:为什么是Arty S7?如果你是一名嵌入式开发者、数字电路设计爱好者,或者正在寻找一块能兼顾学习、原型验证和低成本部署的FPGA开发板,那么Digilent的Arty S7系列很可能已经进入了你的视野。我最初接触这块板子ÿ…...
影刀RPA 企业级专题篇:多租户自动化平台与账号环境隔离设计
影刀RPA 企业级专题篇:多租户自动化平台与账号环境隔离设计 作者:林焱 很多自动化系统前期。 其实都默认只有一个“使用方”。 几个流程。 几台执行机。 统一浏览器环境。 前期问题不大。 但真正进入企业级阶段以后。 系统会逐渐出现࿱…...
内网服务器福音:手把手教你搞定Supervisor 4.0.4离线安装(附CentOS 7.6 + Python 2.7.5环境避坑指南)
内网环境下的Supervisor 4.0.4离线部署全攻略:从依赖解析到避坑实践 在金融、政务等安全敏感领域,生产服务器往往部署在严格隔离的内网环境中。这种架构虽然保障了系统安全性,却给运维工具链的部署带来了独特挑战——无法直接通过pip install…...
CANN/asc-devkit同步通知API文档
asc_sync_notify 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcod…...
深入拆解 MySQL InnoDB 隔离级别:从 MVCC 到临键锁
前言 关于 MySQL InnoDB 的事务隔离级别,90% 的开发者都存在至少一个致命误区: 误区1:RR(可重复读) 临键锁 彻底解决了幻读误区2:Serializable 只是比 RR 加的锁更多,本质还是用 MVCC误区3&a…...



