通俗讲解-动量梯度下降法原理与代码实例

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com

目录

一.动量梯度下降法介绍   

1.1 动量梯度下降法简介与思想      

1.2 动量梯度下降法的算法流程      

二.动量梯度下降法代码实例  

2.1 动量梯度下降法实例代码


一.动量梯度下降法介绍   

本节介绍动量梯度下降法的思想以及算法流程

1.1 动量梯度下降法简介与思想      


动量梯度下降法是对梯度下降法的一种改进,
这主要是因为梯度下降法在遇到局部最优时,毫无办法

 为了解决跳出局部最优,动量梯度下降法为此模仿物体从高处滚到低处的原理,
由于物体具有动量,遇到小坑时会由于原有动量而跃出小坑,因此,动量梯度下降法在迭代的过程中引入动量的概念,它的迭代量改为"速度",而当前的负梯度只作为速度的修改量,


动量梯度下降法迭代公式如下:
v_t=mc*v_{t-1}+(1-mc)*(-\text{lr}*g)
x_t = x_{t-1} +v_{t}
其中,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             
    \text{dx = lr*(-}g)
3.计算当前的速度                                          
    \text{v = mc*v+(1-mc)*dx}
4.更新x                                                         
     \text{x = x + v}        
5.检查迭代终止条件                                      

    如果满足终止条件,就退出迭代程序        

    终止条件可设如下:                 

      (1)是否达到最大迭代次数         

      (2)目标函数值是否满足要求       

      (3) x是否多次变化极小           

 三、输出结果                                                            
      输出最终的求解结果x 

二.动量梯度下降法代码实例  

本节展示动量梯度下降法求解函数最小值的一个代码实例


2.1 动量梯度下降法实例代码


   
现求解 \small \text{y} = 0.4*x^2+3*\textbf{exp}\left (-(x+2)^2\right)的极小值
它的函数图像如下:

 

 

其中,梯度公式为\dfrac{\partial \text{y}}{\partial x}=0.8*x-6*\textbf{exp}(-(x+2)^2)*(x+2)
 按以上算法流程,编写程序如下(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入门

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

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

相关文章

2023年上半年数学建模竞赛题目汇总与难度分析

2023年上半年数学建模竞赛题目汇总与难度分析 ​由于近年来国赛ABC题出题方式漂浮不定,没有太大的定性,目前总体的命题方向为,由之前的单一模型问题变为数据分析评价优化或者预测类题目是B、C题的主要命题方向。为了更好地把握今年命题的主方…

vue3-vuex

一、概念 (1)Vuex 是一个状态和数据管理的框架,负责管理项目中多个组件和多个页面共享的数据。 (2)在开发项目的时候,我们就会把数据分成两个部分,一种数据是在某个组件内部使用,我…

【C++】STL案例1-评委打分

0.前言 1.系统自动生成的评委评分代码&#xff1a; #include <iostream> using namespace std; #include <deque> #include <vector> #include <algorithm> #include <string>//选手类 class Player { public:Player(string name, float score)…

机器学习深度学习——机器翻译(序列生成策略)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——seq2seq实现机器翻译&#xff08;详细实现与原理推导&#xff09; &#x1f4da;订阅专栏&#xff1a;机…

最新AI系统ChatGPT网站程序源码+搭建教程/公众号/H5端/安装配置教程/完整知识库

1、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;…

基于IDE Eval Resetter延长IntelliJ IDEA等软件试用期的方法(包含新版本软件的操作方法)

本文介绍基于IDE Eval Resetter插件&#xff0c;对集成开发环境IntelliJ IDEA等JetBrains公司下属的多个开发软件&#xff0c;加以试用期延长的方法。 我们这里就以IntelliJ IDEA为例&#xff0c;来介绍这一插件发挥作用的具体方式。不过&#xff0c;需要说明使用IDE Eval Rese…

Hlang社区-社区主页实现

文章目录 前言首页结构固定导航栏左侧导航itemitem标志头部推荐文章展示ITEM实现ToolTip完整实现首页完整实现前言 废话不多说,直接看到效果,这里的话是我们社区主页,不是产品宣传主页哈: 是的也许你已经发现了这个页面和某个网站长得贼像。没错是这样的,这个布局我确实…

vue3+vite+pinia

目录 一、项目准备 1.1、Vite搭建项目 1.2、vue_cli创建项目 二、组合式API(基于setup) 2.1、ref 2.2、reactive 2.3、toRefs 2.4、watch和watchEffect 2.5、computed 2.6、生命周期钩子函数 2.7、setup(子组件)的第一个参数-props 2.8、setup(子组件)的第二个参数…

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)

STM32 CubeMX Freertos STM32 CubeMX &#xff08;Freertos任务&#xff1a;创建、删除、挂起、恢复&#xff09; STM32 CubeMX Freertos前言一、STM32 CubeMX 配置时钟树配置使能串口&#xff0c;用于用于检查实验现象使用STM32 CubeMX 库&#xff0c;配置Freertos创建任务 二…

概念解析 | 长尾分布:从无处不在的‘少数派’中挖掘价值

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:长尾分布(Long-Tail Distribution)。 揭秘长尾分布:从无处不在的‘少数派’中挖掘价值 What is a Long Tail Distribution? (Definition & Example) - Statology 一、背…

神经网络基础-神经网络补充概念-02-逻辑回归

概念 逻辑回归是一种用于二分分类问题的统计学习方法&#xff0c;尽管名字中带有"回归"一词&#xff0c;但实际上它用于分类任务。逻辑回归的目标是根据输入特征来预测数据点属于某个类别的概率&#xff0c;然后将概率映射到一个离散的类别标签。 逻辑回归模型的核…

多主题自适应知识变现博客论坛,支持docker一键部署

iblog 给大家推荐一个多主题自适应&#xff0c;支持付费收款的博客论坛系统&#xff0c;支持docker一键部署&#xff0c;支持企业微信通知。 前端 多主题 自适应 个人页 后端 H2 console 运行命令 docker run -d --name iblog --restartalways -p 8080:8080 -e consoletrue …

RabbitMQ简单使用

RabbitMq是一个消息中间件&#xff1a;它接收消息、转发消息。你可以把它理解为一个邮局&#xff1a;当你向邮箱里寄出一封信后&#xff0c;邮递员们就能最终将信送到收信人手中。 RabbitMq、消息相关术语如下&#xff1a; 生产者&#xff1a;生产者只发送消息&#xff0c;发…

Postman接口自动化测试实例

一.实例背景 在实际业务中&#xff0c;经常会出现让用户输入用户密码进行验证的场景。而为了安全&#xff0c;一般都会先请求后台服务器获取一个随机数做为盐值&#xff0c;然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服务器&#xff0c;后台服务器接到…

针对Android项目蓝牙如何学习

一、概述(Overview) 蓝牙是一种专有的开放式无线技术标准,用于在固定和移动设备之间进行短距离数据交换(使用2400–2480 MHz ISM波段的短波长无线电传输),从而创建具有高度安全性的个人局域网(PANs)。由电信供应商爱立信(telecoms vendor Ericsson)于1994年创建,[1…

pytest自动生成测试类 demo

一、 pytest自动生成测试类 demo # -*- coding:utf-8 -*- # Author: 喵酱 # time: 2023 - 08 -15 # File: test4.py # desc: import pytest import unittest# 动态生成测试类def create_test_class(class_name:str, test_cases:list) -> type:"""生成测试类…

TiDB数据库从入门到精通系列之一:TiDB数据库的软硬件环境要求和系统配置检查

TiDB数据库从入门到精通系列之一&#xff1a;TiDB数据库的软硬件环境要求和系统配置检查 一、软件和硬件配置要求1.操作系统及平台要求2.服务器建议配置3.网络要求4.磁盘空间要求 二、TiDB 环境与系统配置检查1.在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数2.设置 …

轻量级 Spring Task 任务调度可视化管理

Spring Task/Spring Scheduler 傻傻分不清 首先做一下“名词解释”&#xff0c;分清楚这两者的区别&#xff1a; Spring Task Spring Task 是 Spring 框架自带的一个任务调度模块&#xff0c;提供了基本的任务调度功能。它是通过 Java 的 Timer 和 TimerTask 类来实现的&…

python获取音乐文件

浏览器打开音乐地址 http://www.htqyy.com/top/hot 点击第一首歌曲&#xff0c;会打开新的网页并且可以获取 改歌曲的id&#xff0c;就是url中的33 在播放页面点击F12&#xff0c;打开开发者调试功能 如下图所示&#xff0c;在script脚本中可以获取歌曲的下载数据 host&#…

滑模控制器理论推导和matlab/simulink实例分享

滑模控制的运动轨迹主要分为两个方面&#xff1a;(1)系统的任意初始状态向滑模面运动阶段&#xff1b;(2)系统到达滑模面后并且慢慢趋于稳定的阶段。所以&#xff0c;对于滑模变结构控制器的设计&#xff0c;对应于系统运动的两个阶段&#xff0c;可以分为两个部分&#xff1a;…