当前位置: 首页 > news >正文

机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法

机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法

往期回顾

机器人中的数值优化|【一】数值优化基础
机器人中的数值优化|【二】最速下降法,可行牛顿法的python实现,以Rosenbrock function为例
机器人中的数值优化|【三】无约束优化,拟牛顿法理论与推导
机器人中的数值优化|【四】L-BFGS理论推导与延伸
机器人中的数值优化|【五】BFGS算法非凸/非光滑处理
关于牛顿-共轭梯度法,笔者认为对其最直接和最根本的认识,这篇帖子写得特别好,可以参考東雲正樹的 如何理解共轭梯度法 一文。

为什么要用Conjugate Gradient method?

从前面的系列我们知道,对于一个凸的无约束优化,我们总是希望通过梯度,基于这样那样的方法来到达最优点。在前面基本的梯度下降方法中,我们每次计算一个梯度,并根据线性搜索得到的一个较为不错的步长,向前优化一步。在Newton-CG method中我们不禁要提问了:有没有一种可以有确定的搜索次数,而且次数还比较少的方法呢?这个方法就是Newton-CG method。我们知道在向量中存在标准正交集的概念,在优化问题中,我们也存在共轭梯度的概念,关于共轭梯度的具体定义和推导可以进一步查阅相关的资料。本质上,就是把原来随机走梯度的过程,变为在凸问题空间中“正交”的梯度向量上,每个向量只走一步,且是最优的一步的过程。
梯度下降与共轭梯度法
从上面的例子我们可以看到,绿色为共轭梯度法,红色为梯度下降法,我们其实要做的工作就是在椭圆的切向和法向各走“最优”的一步,一步到位即可。

Gram-Schmitd正交化/施密特正交化

理解共轭梯度法,首先我们要回顾一个东西,那就是施密特正交化。利用施密特正交化,我们可以从空间中的一组向量得到互相正交的一组向量集。如果我们有一组互不平行的向量 [ α 1 , α 2 , α 3 , α 4 , α 5 , . . . ] {[\alpha_1, \alpha_2, \alpha_3, \alpha_4, \alpha_5,...]} [α1,α2,α3,α4,α5,...],利用一下公式可以得到正交基:
β 1 = α 1 \beta_1 = \alpha_1 β1=α1
β 2 = α 2 − ( β 1 , α 2 ) ( β 1 , β 1 ) β 1 \beta_2 = \alpha_2 - \frac{(\beta_1, \alpha_2)}{(\beta_1, \beta_1)} \beta_1 β2=α2(β1,β1)(β1,α2)β1
β 3 = α 3 − ( β 1 , α 3 ) ( β 1 , β 1 ) β 1 − ( β 2 , α 3 ) ( β 2 , β 2 ) β 2 \beta_3 = \alpha_3 - \frac{(\beta_1, \alpha_3)}{(\beta_1, \beta_1)} \beta_1 - \frac{(\beta_2, \alpha_3)}{(\beta_2, \beta_2)} \beta_2 β3=α3(β1,β1)(β1,α3)β1(β2,β2)(β2,α3)β2
β 4 = α 4 − ( β 1 , α 4 ) ( β 1 , β 1 ) β 1 − ( β 2 , α 4 ) ( β 2 , β 2 ) β 2 − ( β 3 , α 4 ) ( β 3 , β 3 ) β 3 \beta_4 = \alpha_4 - \frac{(\beta_1, \alpha_4)}{(\beta_1, \beta_1)} \beta_1 - \frac{(\beta_2, \alpha_4)}{(\beta_2, \beta_2)} \beta_2 - \frac{(\beta_3, \alpha_4)}{(\beta_3, \beta_3)} \beta_3 β4=α4(β1,β1)(β1,α4)β1(β2,β2)(β2,α4)β2(β3,β3)(β3,α4)β3
. . . ... ...

线性共轭梯度法

对于如下的一个问题
a r g m i n x f ( x ) = 1 2 x T A x − b T x argmin_x f(x) = \frac{1}{2}x^TAx - b^Tx argminxf(x)=21xTAxbTx
我们要求其无约束优化。这里我们可以引入共轭梯度的概念,其概念类似于正交向量,对于一个正交向量 u , v u,v u,v,有 u T v = 0 u^Tv =0 uTv=0。一个矩阵 A A A,如果存在向量 u , v u,v u,v,有 u T A v = 0 u^TAv=0 uTAv=0,则我们认为 u , v u,v u,v关于 A A A共轭。在下降过程中,如果我们每一步选择的下降方向都是一个独立的共轭向量,且一共有 n n n个共轭向量,则最多需要 n n n步即可下降到最优点。

回顾优化过程,最核心的公式为
x k + 1 = x k + α u k x_{k+1} = x_k + \alpha u_k xk+1=xk+αuk
其中 u k u_k uk为下降方向, α \alpha α为步长。将 x k + 1 x_{k+1} xk+1代入最优化目标公式,我们有
a r g m i n x f ( x k + 1 ) = a r g m i n x f ( x k + α u k ) argmin_x f(x_{k+1}) = argmin_x f(x_k + \alpha u_k) argminxf(xk+1)=argminxf(xk+αuk)
假设下降方向已经确定了,我们要确定最优步长
a r g m i n x f ( x k + α u k ) = a r g m i n x 1 2 ( x k + α u k ) T A ( x k + α u k ) − b T ( x k + α u k ) argmin_x f(x_k + \alpha u_k) = argmin_x \frac{1}{2}(x_k + \alpha u_k)^TA(x_k + \alpha u_k) - b^T(x_k + \alpha u_k) argminxf(xk+αuk)=argminx21(xk+αuk)TA(xk+αuk)bT(xk+αuk)
α \alpha α求导,有
a r g m i n x f ′ ( x k + α u k ) = 0 argmin_x f'(x_k + \alpha u_k) = 0 argminxf(xk+αuk)=0
解得
α = b T u k − x k T A u k u k T A u k \alpha = \frac{b^Tu_k - x_k^TAu_k}{u_k^TAu_k} α=ukTAukbTukxkTAuk
这里的 α \alpha α是最优步长的一个“尺度”,也就是scalar。那么问题来了,我们想要每次下降都能够是共轭方向的,怎么办呢?

设每次迭代之后的误差量为
r k = A x k − b r_k = Ax_k - b rk=Axkb

u k = − r k + β k u k − 1 u_k = -r_k + \beta_k u_{k-1} uk=rk+βkuk1
两边乘以 u k − 1 T A u_{k-1}^TA uk1TA
u k − 1 T A u k = − u k − 1 T A r k + u k − 1 T A β k u k − 1 u_{k-1}^TAu_{k} = -u_{k-1}^TAr_k + u_{k-1}^TA\beta_ku_{k-1} uk1TAuk=uk1TArk+uk1TAβkuk1
因为我们想要得到的是共轭方向,所以认为 u k − 1 T A u k = 0 u_{k-1}^TAu_{k} =0 uk1TAuk=0
− u k − 1 T A r k + u k − 1 T A β k u k − 1 = 0 -u_{k-1}^TAr_k + u_{k-1}^TA\beta_ku_{k-1} = 0 uk1TArk+uk1TAβkuk1=0
β k = r k T A u k − 1 u k − 1 T A u k − 1 \beta_k= \frac{r_k^T A u_{k-1}}{u_{k-1}^TAu_{k-1}} βk=uk1TAuk1rkTAuk1
在这里我们就可以得到一个缩放标量 β k \beta_k βk可以迭代计算共轭向量,最后得到的算法如下所示
在这里插入图片描述

优化线性共轭梯度法

进一步的,我们可以提出更高效的线性共轭梯度法。首先引入一些定理(这里的 p p p就是 u u u
在这里插入图片描述

在这里插入图片描述
根据前面的公式,有
α = b T u k − x k T A u k u k T A u k = − r k T u k u k T A u k \alpha = \frac{b^Tu_k - x_k^TAu_k}{u_k^TAu_k} = \frac{-r_k^Tu_k}{u_k^TAu_k} α=ukTAukbTukxkTAuk=ukTAukrkTuk
由于 u k = − r k + β k u k − 1 u_k = -r_{k} + \beta_k u_{k-1} uk=rk+βkuk1
α = − r k T ( − r k + β u k − 1 ) u k T A u k \alpha = \frac{-r_k^T(-r_k+\beta u_{k-1})}{u_k^TA u_k} α=ukTAukrkT(rk+βuk1)
由于 r k T u k − 1 = 0 r_k^Tu_{k-1}=0 rkTuk1=0

α k = r k T r k u k T A u k \alpha_k = \frac{r_k^Tr_k}{u_k^TA u_k} αk=ukTAukrkTrk
由于 α k A p k = r k + 1 − r k \alpha_kAp_k = r_{k+1}-r_k αkApk=rk+1rk
继续代入有
β k + 1 = r k + 1 T r k + 1 r k T r k \beta_{k+1} = \frac{r_{k+1}^Tr_{k+1}}{r_{k}^Tr_{k}} βk+1=rkTrkrk+1Trk+1
在这里插入图片描述
下一节中,将介绍牛顿共轭梯度法

相关文章:

机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法

机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法 往期回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法,可行牛顿法的python实现,以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化…...

FastestDet---原理介绍

1.测试指标 2.算法定位 FastestDet是设计用来接替yolo-fastest系列算法,相比于业界已有的轻量级目标检测算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, FastestDet和这些算法根本不是一个量级,FastestDet无论在速度还是参数量上,都是要小好几个数量级的,但是精度自然…...

ORACLE 在内存管理机制上的演变和进化

截止目前,计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中,已成为当前各种软件和应用程序提高数据访问性能,减少访问延迟的最为有效的途径。 然而,内存作为关键的计算资源&am…...

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…...

ps智能填充功能平替:alpaca的安装和使用

为了解决ps beta 智能填充无法使用的问题,需要用alpaca来平替,下面是安装教程: 安装方法: 1、下载插件。 alpaca插件汉化-夸克网盘https://pan.quark.cn/s/1168b447a44e#/list/share 2、 根据使用的PS版本,选择对应文件…...

【前端打怪升级日志之ES6篇】玩转函数

学习资料 阮一峰老师《ECMAScript 6 入门》— 函数的扩展 总结应用 1. 函数参数默认值与对象解构赋值默认值的结合使用 // 场景:方法调用时传参希望只传第二个参数 // 方案1: function foo({x1,y2}){console.log(x,y); } foo({}) //1 2 foo({x:2}) /…...

网址静态码手机制作教程,附图文详解!

网址的静态码是如何生成的呢?静态码是二维码的一种常用类型,一般常见的静态码类型主要是文本或者网址,那么在电脑制作静态码的方法相信很多小伙伴都知道怎么做,那么手机上制作的方法,大家感兴趣吗?下面来给…...

服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建

1. export 数据采集工具 简介: export是prometheus是的数据采集组件的总称,它可以将采集到的数据转为prometheus支持的格式 node_export: 用来监控服务器硬件资源的采集器,端口号为9100mysql_export: 用来监控mysql数据库资源的采集器&…...

【24种设计模式】责任链模式

责任链模式是一种行为设计模式,它允许你将请求沿着处理链进行传递,直到有一个处理者能够处理该请求为止。这种模式将请求的发送者和接收者解耦,使多个对象都有机会处理该请求。 责任链模式的结构 责任链模式由以下几个角色组成:…...

C#异步委托的三种实现 BeginInvoke / EndInvoke / IsCompleted

本文将介绍C#异步委托的三种实现方式,并给出相关示例代码及解析。 注意事项 用委托开启线程的前提是:创建项目时必须选择“.NET Framework",如果选择的是”.Net Core“,在调用BeginInvoke时,系统会报错”Operati…...

在HTTP请求中安全传输base64编码的字符串

前言 base64是一种常见的的编码格式,它可以把二进制数据编码成一个由大小写英文字母(a-zA-Z)、阿拉伯数字(0-9),以及三个特殊字符、/、组成的字符串。 问题 但是在URL传输中,、/、这三个特殊…...

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别

在前面的一些章节中,我们已经讲如何准备打标签的素材、如何制作标签、如何训练以及得到我们最终需要的用于YOLO目标识别的模型。那么现在我们就要正式开始,利用我们训练得到的best.pt,这个模型文件来对图片视频进行识别。 1、基本思路 公安交管场景中,我们经常会遇到需要…...

LeetCode算法题---第3天

注:大佬解答来自LeetCode官方题解 121.买卖股票的最佳时期 1.题目 2.个人解答 function maxProfit(prices) {//更新最低价格和最大利润let minPrice prices[0];let maxProfit 0;for (let i 1; i < prices.length; i) {// 如果当前价格比最低价格还低&#xff0c;更新最…...

欧洲FBA专线海运与陆运的差别

随着全球电商市场的快速发展&#xff0c;越来越多的卖家选择将产品销售到欧洲市场。然而&#xff0c;面对欧洲境内的物流问题&#xff0c;卖家们往往会面临一个重要的选择&#xff1a;选择欧洲FBA专线时是选择海运还是陆运?这两种运输方式在时效、成本和服务质量上都有所不同&…...

UDS诊断

一、UDS诊断简介 汽车诊断技术是指在不拆卸车辆的情况下&#xff0c;通过读取车辆在运行过程中所记录的数据或故障码来查明故障原因&#xff0c;并确定故障部位的汽车应用技术。通过诊断&#xff0c;可以快速检测到汽车故障来提高汽车安全性和维修效率。 USD协议诊断主要采用“…...

计算材料学学习记录1

计算材料学学习记录1 平台&#xff1a;Bohrium 老师&#xff1a;单斌教授 文章目录 1.发展史背景计算材料学 2.计算方法分类3.计算材料学的应用 1.发展史 背景 材料的研究方法发展&#xff1a; 一切靠实验理论开始起作用理论撑起半边天 “……解决全部化学的规律的数学方法…...

PHP8中的构造方法和析构方法-PHP8知识详解

今日分享的内容是php8中的构造方法和析构方法&#xff0c;我们把构造方法和析构方法这两个方法分开来讲&#xff1a; 1、构造方法 构造方法存在于每个声明的类中&#xff0c;主要作用是执行一些初始化任务。如果类中没有直接声明构造方法&#xff0c;那么类会默认地生成一个没…...

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 &#x1f34a;前言&#x1f438;方法一-CUDA Runtime生成&#x1f61d;debug设置 &#x1f345;方法二-空项目配置&#x1f349;&#x1f349;&#x1f349;代码验证 &#x1f34a;前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…...

MySQL面试题-索引的基本原理及相关面试题

先了解一下MySQL的结构 下面我们重点讲一下存储引擎 MySQL的数据库和存储数据的目录是一一对应的&#xff0c;这些数据库的文件就保存在磁盘中对应的目录里 下面我们来看一下对应的具体数据文件 .frm是表的结构&#xff0c;不管什么样的索引都会有 .ibd代表我们现在使用的存…...

MySQL学习笔记19

MySQL日志文件&#xff1a;MySQL中我们需要了解哪些日志&#xff1f; 常见日志文件&#xff1a; 我们需要掌握错误日志、二进制日志、中继日志、慢查询日志。 错误日志&#xff1a; 作用&#xff1a;存放数据库的启动、停止和运行时的错误信息。 场景&#xff1a;用于数据库的…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...