最速下降法

目录

前言

一、梯度下降相关数学概念

二、最速下降法实战

2.1、例图1

2.2、Matlab代码实现

2.3、例题2

三、小结      


前言

        最速下降法,在SLAM中,作为一种很重要求解位姿最优值的方法,缺点很明显:迭代次数太多,尽管Newton法(保留目标函数的二阶项Hessian矩阵)改善了“迭代次数过多”这一缺点,但是Hessian矩阵规模庞大(参考:特征匹配点成百对),计算较为困难。Gaussian-Newton法在Newton原有基础上,用的是一阶雅克比的转置*一阶雅克比 JTJ 来近似 Hessian, 但是,这里的近似替换 JTJ并不一定正定。一般,主流非线性优化方法:Levenberg-Marquadt、Dog-leg较为常用,这里不作介绍。

        在深度学习中是一样的道理,模型训练参数可能有几百万到几千万,每次训练前向传播要计算loss,一阶偏导数,然后依据最速下降法更新梯度。

一、梯度下降相关数学概念

个人理解:

是方向偏导数,我们不仅要使得梯度下降,还要以最快的步伐下降。

x* 是无约束问题的局部最优解 =》 x*是其目标函数的驻点

(回想起SVM当中求解有约束目标函数最优值,利用拉格朗日乘子法进行转换。)

例如:在 y = x^3的曲线当中,x = 0处是 极大值点,也不是极小值点,称作:鞍点。

理解定理3:我们翻开书,看到如下概念:

性质

(1)如果一个函数f(x)在某个区间I上有f''(x)(即二阶导数)>0恒成立,那么对于区间I上的任意x,y,总有:

f(x)+f(y)≥2f[(x+y)/2],如果总有f''(x)<0成立,那么上式的不等号反向。 

几何的直观解释:如果一个函数f(x)在某个区间I上有f''(x)(即二阶导数)>0恒成立,那么在区间I上f(x)的图象上的任意两点连出的一条线段,这两点之间的函数图象都在该线段的下方,反之在该线段的上方。

(2)判断函数极大值以及极小值。

结合一阶、二阶导数可以求函数的极值。当一阶导数等于0,而二阶导数大于0时,为极小值点。当一阶导数等于0,而二阶导数小于0时,为极大值点;当一阶导数和二阶导数都等于0时,为驻点。

(3)函数凹凸性。

设f(x)在[a,b]上连续,在(a,b)内具有一阶和二阶导数,那么,

(1)若在(a,b)内f''(x)>0,则f(x)在[a,b]上的图形是的;

(2)若在(a,b)内f’‘(x)<0,则f(x)在[a,b]上的图形是的。

二、最速下降法实战

2.1、例图1

来做一道数学题,如能理解,便能深刻理解算法。

2.2、Matlab代码实现

准备相关脚本函数(Matlab脚本):

function [ y ] = GDMin2(fx,var,x,e,MAX)
% 最速梯度下降法求解函数极小点
% 参数描述------------------------------
%   fx  符号表达式 如fx = (x1-2)^4+(x1-2*x2)^2;
%   var 符号变量列表 如:syms x1 x2;var= [x1;x2];
%   x  起始位置
%   e 精度控制
%   MAX 最大迭代次数控制
% ------------------------------if nargin < 5MAX = 10;%设置默认最大迭代次数
end
precision = 3;%显示精度控制%开始循环迭代
%direction存贮搜索方向
%step 存贮步长bfound = 0;
for k=1:1:MAXdirection = getNextDirecrion(fx,var,x);disp('------------------------------');fprintf('d[%d]=:',k);disp( vpa(direction',precision) );if normest(direction) <= ey = x;bfound = 1;%得到结果时置为1break;elsestep = getNextStep(fx,var, x,direction);%计算步长if isempty(step)error('can not find a proper step.');end%打印求解过程fprintf('X[%d]=:',k);disp( vpa(x',precision) );fprintf('step(%d)=: ', k);disp( vpa(step,precision) );disp('------------------------------');x = x+step*direction;%计算下一个位置end
end
if bfound == 1disp('min value of:');disp( vpa( subs(fx,var,y),precision) );
end
end%根据位置xk,获取搜索方向
function [direction] = getNextDirecrion(fx,var,xk)gx = gradient(fx,var); %计算梯度函数direction = -subs(gx,var,xk);%计算搜索方向
end%根据位置xk和方向dk,获取搜索步长step
%注意符号表达式求导数的根时返回值转换为double类型
function [step] =getNextStep(fx,var,xk,dk)syms lambda;phix = subs(fx,var,xk+lambda*dk);phix_diff = diff(phix);step = double(solve(phix_diff,'Real',true));%求取导函数的实数根
end

在MATLAB命令行键入:

clear all;
syms x1 x2;
X = [x1;x2];
fx = x1 - x2 + 2*x1^2 + 2*x1*x2 + x2^2;
x1 = [0;0];
e = 0.3;
minVal = GDMin2(fx,X,x1,e)

结果打印如下:

结果:------------------------------
d[1]=:[ -1.0, 1.0]X[1]=:[ 0, 0]step(1)=: 1.0------------------------------
------------------------------
d[2]=:[ 1.0, 1.0]X[2]=:[ -1.0, 1.0]step(2)=: 0.2------------------------------
------------------------------
d[3]=:[ -0.2, 0.2]min value of:
-1.2minVal =-4/5
6/5

和手动结算的结果是一样的在 x 取值 [-0.8,  1.2]的时候,取得满足精度的值。

2.3、例题2

这里再看一道简单的数学题,当梯度下降起始点x取值为3和2的时候,收敛步数是不一样的。

我们看前两步;画出其迭代路线:

clear all;
clc;
close all;
x = 0:0.1:8
fx = (x(1,:) - 4).^2plot(x, fx);
hold on%% 标出点
plot(3, 1, '-ro');
plot(4, 0, '-ro');
hold on%% 连线
%% plot([x1,x2...], [y1,y2,...])
plot([3 4],[1 0], '-g');
hold off

两步就收敛;现在,如果我们将初始值(startpoints)改为:x = 2;再根据上述求解过程,画出迭代路线:

可以看到,起始点是 x  = 2 比 x = 3的迭代次数多一次,所以选取一个好的初始值十分重要;同样,  

三、小结      

  • 在SLAM当中,例如:3D-3D映射;我们在RANSAC框架下,基于PNP/ICP 计算出位姿初始值,这样一个初始值,在后续BA当中,是一个较为理想的初始值。
  • 在深度学习中,预训练模型能够加速收敛。

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

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

相关文章

YOLO v2(2016.12)

文章目录 AbstractIntroduction当前存在的困境基于此&#xff0c;我们给出了方法 BetterBatch NormalizationHigh Resolution ClassifierConvolutional With Anchor BoxesDimension ClustersDirect location predictionFine-Grained FeaturesMulti-Scale TrainingFurther Exper…

海洋专用cmocean颜色包_共22种--全平台可用

海洋专用cmocean颜色包_共22种–全平台可用 往期推荐&#xff1a; Python语言_matplotlib包_共80种–全平台可用 Python语言_single_color_共140种–全平台可用 R语言_RColorBrewer包–全平台可用 R语言gplots包的颜色索引表–全平台可用 R语言中的自带的调色板–五种–全平台…

(后续补充)vue+express、gitee pm2部署轻量服务器

首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 首先 防火墙全部关闭算了 关闭防火墙 systemctl stop firewalld 重新载入防火墙使设置生效 firewall-cmd --reload 后端的 pm2.config.cjs …

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互&#xff0c;而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示&#xff0c;但它们忽略了对密集预测任务非常重要的被忽略的角点区…

云智慧联合北航提出智能运维(AIOps)大语言模型及评测基准

随着各行业数字化转型需求的不断提高&#xff0c;人工智能、云计算、大数据等新技术的应用已不仅仅是一个趋势。各行业企业和组织纷纷投入大量资源&#xff0c;以满足日益挑剔的市场需求&#xff0c;追求可持续性和竞争力&#xff0c;这也让运维行业迎来了前所未有的挑战和机遇…

文举论金:黄金原油全面走势分析策略独家指导

市场没有绝对&#xff0c;涨跌没有定势&#xff0c;所以&#xff0c;对市场行情的涨跌平衡判断就是你的制胜法宝。欲望&#xff01;有句意大利谚语&#xff1a;让金钱成为我们忠心耿耿的仆人&#xff0c;否则&#xff0c;它就会成为一个专横跋扈的主人。空头&#xff0c;多头都…

GitLab CI/CD使用经验,来自于莫纳什大学的考试任务解析

CI/CD简介 CI/CD的作用在于自动化和加速软件开发、测试和交付流程&#xff0c;通过持续集成确保代码协同工作和质量&#xff0c;通过持续交付降低风险&#xff0c;使每次代码变更都能够快速、高质量地交付到生产环境&#xff0c;从而提高软件开发效率、质量和协作。 作业要求…

openGauss学习笔记-115 openGauss 数据库管理-设置安全策略-设置密码安全策略

文章目录 openGauss学习笔记-115 openGauss 数据库管理-设置安全策略-设置密码安全策略115.1 操作步骤 openGauss学习笔记-115 openGauss 数据库管理-设置安全策略-设置密码安全策略 115.1 操作步骤 用户密码存储在系统表pg_authid中&#xff0c;为防止用户密码泄露&#xff…

ffmpeg mp3截取命令,视频与mp3合成带音频视频命令

从00:00:03.500开始截取往后长度到结尾的mp3音频&#xff08;这个更有用&#xff0c;测试好用&#xff09; ffmpeg -i d:/c.mp3 -ss 00:00:03.500 d:/output.mp3 将两个音频合并成一个音频&#xff08;测试好用&#xff09; ffmpeg -i "concat:d:/c.mp3|d:/output.mp3&…

前端框架Vue学习 ——(四)Axios

文章目录 Axios 介绍Axios 入门Vue项目中使用 Axios Axios 介绍 介绍: Axios 对原生的 Ajax 进行了封装&#xff0c;简化书写&#xff0c;快速开发。&#xff08;异步请求&#xff09; 官网: https://www.axios-http.cn/ 官网介绍&#xff1a;Axios 是一个基于 promise 网络请…

20.5 OpenSSL 套接字RSA加密传输

RSA算法同样可以用于加密传输&#xff0c;但此类加密算法虽然非常安全&#xff0c;但通常不会用于大量的数据传输&#xff0c;这是因为RSA算法加解密过程涉及大量的数学运算&#xff0c;尤其是模幂运算&#xff08;即计算大数的幂模运算&#xff09;&#xff0c;这些运算对于计…

编码器类型说明

目录 光电编码器 磁性编码器 电容式编码器 对比优缺点 编码器在运动控制类产品中比较常见&#xff0c;旋转编码器都是组成运动控制反馈回路的关键元器件&#xff0c;包括工业自动化设备和过程控制、机器人技术、医疗设备、能源、航空航天等。 作为将机械运动转换为电信号的…

❤️ React的安装和使用(实战篇)

React的安装和使用 一、React的安装和使用 reactJs警告提示&#xff1a; This version of tar is no longer supported, and will not receive security updates. Please upgrade asap 翻译&#xff1a;tar2.2.2&#xff1a;此版本的tar不再受支持&#xff0c;将不会收到安全…

新大陆NVH200-AP(U)扫码枪在上位机软件开发中的应用

前言: 由于本次使用的是USB接口的扫码枪 1、先安装Nset软件,使用扫码枪扫描“启动设置条码”,然后扫描“USB CDC串口”条码 2、打开NSet软件,点击“刷新按钮” 就能找到扫码枪设备 3、设置条码后缀 点击“高级设置”,然后点击“数据编辑”,在“后缀”那里设置结束符…

1-3 docker 安装 prometheus

一、环境 1、环境准备 安装Docker 镜像加速 安装 docker 检查版本 安装Docker-compose 二、Docker-compose 安装 Prometheus 1、【方式一】手动创建 docker-compose 和 配置文件 创建prometheus监控的文件夹 创建alertmanager的配置文件 - config.yml 新建grafana的…

windows mysql安装

1、首先去官网下载mysql安装包&#xff0c;官网地址&#xff1a;MySQL :: Download MySQL Community Server 2&#xff1a;把安装包放到你安装mysql的地方&#xff0c;然后进行解压缩&#xff0c;注意&#xff0c;解压后的mysql没有配置文件&#xff0c;我们需要创建配置文件 配…

红黑树——原理刨析

众所周知&#xff0c;红黑树是从AVLTree树中衍变而来的&#xff0c;所以在学红黑树之前还是要好好的理解一下AVLTree树的原理&#xff0c;为理解红黑树减轻理解负担&#xff0c;好了进入正题。 红黑树原理&#xff1a; 由名可知&#xff0c;红黑树——肯定是与颜色有关的一个树…

操作系统——文件在外存中的分配方式(王道视频p61 P62)

1.总体概述&#xff1a; 连续分配 —— 链接分配 —— 索引分配 &#xff08;1&#xff09;对于顺序分配&#xff0c;这种方式 基本不会使用了&#xff0c; 因为 它存在一个 核心的问题就是 没法更新&#xff1b;不过&#xff0c;还是要注意它的 “文件目录”——其中存放了…

强化学习中策略的迭代

一、策略迭代 一旦使用vπ改善了策略π&#xff0c;产生了更好的策略π0&#xff0c;我们就可以计算vπ0并再次对其进行改进&#xff0c;产生更好的π00。因此&#xff0c;我们可以获得一系列单调改善的策略和值函数&#xff1a; 其中E−→表示策略评估&#xff0c;I−→表示策…

企业通配符SSL证书的特点

企业通配符SSL证书是一种数字证书&#xff0c;其可以用于保护多个企业网站&#xff0c;对网站传输信息进行加密服务。这种证书通常适用于拥有多个子域名或二级域名的企事业单位。今天就随SSL盾小编了解企业通配符SSL证书的相关信息。 1. 保护所有域名和子域名&#xff1a;企业通…