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

news2025/1/23 10:20:45

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

往期回顾

机器人中的数值优化|【一】数值优化基础
机器人中的数值优化|【二】最速下降法,可行牛顿法的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
在这里插入图片描述
下一节中,将介绍牛顿共轭梯度法

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

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

相关文章

Spring Boot 3.0:构建下一代Java应用的新方法

文章目录 Spring Boot 3.0:一览1. **模块化应用程序**2. **更强大的自动化工具**3. **更强大的安全性**4. **更好的性能和扩展性** 如何开始使用Spring Boot 3.01. 安装Spring Boot CLI2. 创建新项目3. 配置应用程序4. 编写业务逻辑5. 测试应用程序6. 构建和部署 结…

DataGrip 恢复数据

DataGrip 恢复数据 准备数据库 create database chap02; use chap02;恢复数据 运行sql脚本方式恢复数据到刚刚创建的数据库 数据右键—> SQL Scripts —> Run SQL Script… 选择sql脚本

基本网络协议

TCP 协议 TCP 协议是一种传输控制协议,是一种面向连接的传输层协议,它提供高可靠性的通信高可靠性:数据无错误,数据无丢失,数据无失序,数据无重复到达。 TCP 协议头部结构 下图是 TCP 协议的头部结构,如图: 16 位端口号: 告知主机…

超声波乳化具有什么特点(优点)?

梵英超声(fanyingsonic)探针式超声波乳化棒 超声波乳化是通过探针式超声波探头,高强度超声波耦合到液体中并产生声空化。超声波或声空化产生高剪切力,提供将大液滴破碎成纳米尺寸液滴所需的能量。梵英超声(fanyingsonic)提供各种探头式超声波乳化棒和配件…

QT的安装和注册

浏览器搜索qt官网或者点链接直接跳转 Index of /new_archive/qthttps://download.qt.io/new_archive/qt/尽量下载5.6版本以上的 根据系统选择下载 进入qt官网 点击注册 在安装界面输入注册的账号 然后一直点击下一步 选择需要的组件 完成安装

基于springboot+vue的新闻推荐系统

目录 前言 一、技术栈 二、系统功能介绍 管理员模块的实现 用户信息管理 排行榜管理 新闻信息管理 用户模块的实现 首页信息 新闻信息 我的收藏 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网购物的飞速发展,国内放开了自…

MeterSphere 监控方案

前言:在部署MeterSphere之后,很多时候需要看下MeterSphere服务的监控信息,虽然有监控告警脚本,但还不是太直观,所以就结合 PrometheusExporterGrafana 部署一套完整的MeterSphere监控方案。 首先我们先罗列一下需要监控…

【工具使用】如何使用Audition创建多音轨项目并验证

一,简介 本文主要介绍如何使用Audition 2020创建多音轨工程,并新增轨道,供参考。 二,操作步骤 2.1 新建多轨工程 打开Audition,新建多轨会话: 设置参数,点击确定: 工程默认有6个…

MataDoor 模块化后门:先发现后解除

👁 PT 专家安全中心的专家发现了一个新的 Dark River 组织,该组织利用名为 MataDoor 的高科技模块化后门攻击国防工业公司。请阅读我们的最新研究。 我们的专家于 2022 年 10 月在调查一家俄罗斯工业企业的事件时首次遇到这种恶意软件。 🥷…

Javascript中生成器函数和Generator对象的介绍与使用

✨Generator 🎶Generator的描述 Generator 函数是ES6提供的一种异步编程解决方案 🎉三种异步方法出现的顺序 🍧Generator的 核心语法 // 像下面这样 func 这样的函数称之为生成器函数 // 通过 * 进行声明 通过yield进行等待 function* fu…

十六,镜面IBL--预滤波环境贴图

又到了开心的公式时刻了。 先看看渲染方程 现在关注第二部分,镜面反射。 其中 这里很棘手,与输入wi和输出w0都有关系,所以,再近似 其中第一部分,就是预滤波环境贴图,形式上与前面的辐照度图很相似&#…

TensorFlow入门(五、指定GPU运算)

一般情况下,下载的TensorFlow版本如果是GPU版本,在运行过程中TensorFlow能自动检测。如果检测到GPU,TensorFlow会默认利用找到的第一个GPU来执行操作。如果机器上有超过一个可用的GPU,除第一个之外的其他GPU默认是不参与计算的。如果想让TensorFlow使用这些GPU执行操作,需要将运…

Java多线程编程-栅栏CyclicBarrier实例

前言 本文是基于《Java多线程编程实战指南-核心篇》第五章个人理解,源码是摘抄作者的源码,源码会加上自己的理解。读书笔记目前笔者正在更新如下, 《Java多线程编程实战指南-核心篇》,《How Tomcat Works》,再到《spr…

QT中计算日期差,并进行加减

1、界面上拖动两个QDateTimeEdit控件,同时设置为开始时间与结束时间,然后再来拖动个pushButton,命名为查询功能,然后槽函数中,实现如下: void Database::on_pushButton_4_clicked() {QDateTime time1 u…

ARM/X86工控机在轨道交通车站管理系统的应用(1)

车站管理系统 车站管理系统是一种集成平台,包括综合监控系统(ISCS)、火灾报警系统(FAS)、以及楼宇自动化系统(BAS)等。由于其复杂性,车站管理系统要求硬件必须稳定且可扩展,以确保24/7全天侯正常运作。信迈工业服务器级系统素以坚固耐用和广…

x86汇编基础

目录 CPU架构与指令集 x86 / x64 CPU操作模式 寄存器 数据类型 数据传送与访问 算数逻辑与运算逻辑 跳转指令和循环指令 栈与函数调用 这一部分更详细的内容可以参考我的专栏:C与汇编 CPU架构与指令集 CPU即中央处理单元(Central Processing Unit )&#…

虚拟机联网

桥接 桥接模式就是虚拟机与你的电脑平起平做,都有同样的IP,且与你的电脑在同一网段下,就能够上网。 电脑的IP的地址 虚拟机的ip地址 设置vm1的ip地址与网关与电脑相同 如果出现ssh连接虚拟机不成功的问题,无其他问题时&#xff0…

2023-09-27 LeetCode每日一题(餐厅过滤器)

2023-09-27每日一题 一、题目编号 1333. 餐厅过滤器二、题目链接 点击跳转到题目位置 三、题目描述 给你一个餐馆信息数组 restaurants,其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息…

Python经典练习题(四)

文章目录 🍀第一题🍀第二题🍀第三题 🍀第一题 题目:打印出如下图案(菱形): 我们首先分析一下,本题实现的步骤主要有两个,分别是前四行和后三行 前四行:第一…

数据结构--二叉树(2)

文章目录 二叉树的存储结构二叉树的链式结构二叉树的遍历结点个数寻找二叉树的某个结点二叉树的层遍历判断是否为完全二叉树 上一节 二叉树的堆链接入口 二叉树的存储结构 对于二叉树的存储,有两种存储方式:一种是顺序存储,另一种是链式存储…