无约束优化:修正阻尼牛顿法

news2025/2/3 15:15:41

文章目录

  • 无约束优化:修正阻尼牛顿法
    • 梯度法的困难
    • 经典牛顿法
      • 定义
      • 收敛性证明
    • 修正阻尼牛顿法
      • 考虑修正阻尼牛顿法的起因
      • 如何构造修正矩阵M
    • 参考文献

无约束优化:修正阻尼牛顿法

梯度法的困难

无约束优化:线搜索最速下降

对于光滑函数而言,当函数的曲率很大或者条件数 κ ≈ cond ⁡ ( ∇ 2 f ( x ) ) \kappa \approx \operatorname{cond}\left(\nabla^2 f(x)\right) κcond(2f(x))很大时,最速梯度下降法的效果很差。最速梯度下降法只利用了函数的一阶信息即梯度,而曲率或条件数是二阶信息。因此,如果函数 f ( x ) f(x) f(x)足够光滑,我们可以利用 f ( x ) f(x) f(x)的二阶信息改进下降方向,以加速算法的迭代。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

经典牛顿法

定义

经典牛顿法利用二阶信息,其实际表现会比梯度法要好,但该方法对函数 f ( x ) f(x) f(x)的要求较高,需要二阶连续可微。

在这里插入图片描述

下面考虑多维情况(N>1),对于二阶连续可微函数 f ( x ) f(x) f(x),考虑 f ( x ) f(x) f(x)在迭代点 x k x^k xk处二阶泰勒展开:
f ( x k + d k ) = f ( x k ) + ∇ f ( x k ) T d k + 1 2 ( d k ) T ∇ 2 f ( x k ) d k + o ( ∥ d k ∥ 2 ) . f\left(x^k+d^k\right)=f\left(x^k\right)+\nabla f\left(x^k\right)^{\mathrm{T}} d^k+\frac{1}{2}\left(d^k\right)^{\mathrm{T}} \nabla^2 f\left(x^k\right) d^k+o\left(\left\|d^k\right\|^2\right) . f(xk+dk)=f(xk)+f(xk)Tdk+21(dk)T2f(xk)dk+o( dk 2).
忽略上式的高阶项 o ( ∥ d k ∥ 2 ) o\left(\left\|d^k\right\|^2\right) o( dk 2),并将等式右边看成关于 d k d^k dk的函数求其稳定点(驻点),可以得到:
∇ 2 f ( x k ) d k = − ∇ f ( x k ) \nabla^2 f\left(x^k\right) d^k=-\nabla f\left(x^k\right) 2f(xk)dk=f(xk)
当Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)非奇异时,更新方向 d k = − ∇ 2 f ( x k ) − 1 ∇ f ( x k ) d^k=-\nabla^2 f\left(x^k\right)^{-1} \nabla f\left(x^k\right) dk=2f(xk)1f(xk),因此经典牛顿法的迭代格式如下:
x k + 1 = x k − ∇ 2 f ( x k ) − 1 ∇ f ( x k ) x^{k+1}=x^k-\nabla^2 f\left(x^k\right)^{-1} \nabla f\left(x^k\right) xk+1=xk2f(xk)1f(xk)
由上式可以看出,迭代步长恒为1,即不用额外考虑步长的选取,也称该方法为经典牛顿法。

在这里插入图片描述

在这里插入图片描述

收敛性证明

在这里插入图片描述

证明过程见教科书。从收敛性结论可以分析得出,经典牛顿法是收敛速度很快的算法,尤其是当目标函数为二次函数时,由于二次泰勒展开函数与原目标函数不是近似而是完全相同的二次式,Hessian矩阵退化成一个常数矩阵,只需要一步迭代就可以达到极小值点,但收敛性是有条件的:

  • 初值敏感,即初值 x 0 x^0 x0必须距离问题的解充分近,只具有局部收敛性,当初值距离问题的解较远时,经典牛顿算法多数情况下失败。因此实际应用时经常先用梯度类算法先求得较低精度的解,然后再用牛顿加速获得高精度解;

  • Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)需要为正定矩阵,非正定条件下可能迭代发散,下面会对该结论进行详细解释;更不用说Hessian矩阵奇异了。

  • 条件数 κ ≈ cond ⁡ ( ∇ 2 f ( x ) ) \kappa \approx \operatorname{cond}\left(\nabla^2 f(x)\right) κcond(2f(x))很大时,对初值的要求会更高。

为什么Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)非正定,经典牛顿迭代可能会发散?

收敛的前提是算法的搜索方向得让函数下降,搜索方向一定与负梯度方向之间的夹角为锐角,将搜索方向与当前点梯度做内积:
∇ f ( x ) T d k = − ∇ f ( x ) T ∇ 2 f ( x ) − 1 ∇ f ( x ) \nabla f(x)^T d^k=-\nabla f(x)^T \nabla^2 f(x)^{-1} \nabla f(x) f(x)Tdk=f(x)T2f(x)1f(x)
要求左边小于0,也就是要求:
∇ f ( x ) T ∇ 2 f ( x ) − 1 ∇ f ( x ) > 0 \nabla f(x)^T \nabla^2 f(x)^{-1} \nabla f(x)>0 f(x)T2f(x)1f(x)>0
这恰好是Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)正定的充要条件。因此对于经典牛顿法,如果Hessian矩阵非正定,则搜索方向可能会使函数上升。

修正阻尼牛顿法

考虑修正阻尼牛顿法的起因

综上,经典牛顿法缺陷如下:

(1)每一步迭代都需要求解一个n维线性方程组 [ ∇ 2 f ( x ) ] d = − ∇ f ( x ) \left[\nabla^2 f(\boldsymbol{x})\right] \boldsymbol{d}=-\nabla f(\boldsymbol{x}) [2f(x)]d=f(x),计算量大,Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)既不容易计算也不容易存储;

(2)Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)奇异或非正定, d k d^k dk不一定是下降方向,经典牛顿迭代可能会发散;

(3)当迭代点距离较远时,直接选取步长 a k = 1 a_k=1 ak=1会使得迭代极其不稳定,在有些情况甚至造成迭代点序列发散。

因此,从以下三点考虑修正阻尼牛顿法:

  • 构造一个严格正定(所有特征值大于0)的矩阵 M M M(修正 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)),使其尽可能接近Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk),且条件数较低;
  • 通过 M d = − ∇ f ( x ) Md=-\nabla f(\boldsymbol{x}) Md=f(x)的形式解线性方程组求出d,而不是通过求逆运算;
  • 用线搜索确定步长来增加算法稳定性(阻尼法)。

在这里插入图片描述

在这三点中,线搜索优化算法稳定性之前有讲过,这里不再赘述。此处的核心问题是如何选取修正矩阵M,下面介绍两种实用方法。

如何构造修正矩阵M

  • 当函数 f ( x ) f(x) f(x)为凸函数时

此时Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)肯定是半正定矩阵,可采用如下方法构造M:
M = ∇ 2 f ( x ) + ϵ I , ϵ = min ⁡ ( 1 , ∥ ∇ f ( x ) ∥ ∞ ) / 10 \boldsymbol{M}=\nabla^2 f(\boldsymbol{x})+\epsilon \boldsymbol{I}, \epsilon=\min \left(1,\|\nabla f(\boldsymbol{x})\|_{\infty}\right) / 10 M=2f(x)+ϵI,ϵ=min(1,∥∇f(x))/10
因为 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)半正定,即对于 ∀ x ≠ 0 \forall x \neq \bf0 x=0,有 x T ∇ 2 f ( x ) x ≥ 0 x^T \nabla^2 f\left(x\right) x \geq 0 xT2f(x)x0。对于构造的矩阵M,对于 ∀ x ≠ 0 \forall x \neq \bf0 x=0,有 x ⊤ ϵ x + x T ∇ 2 f ( x ) x > 0 x^{\top} \epsilon x+x^T \nabla^{2} f(x) x > 0 xϵx+xT2f(x)x>0恒成立,因此M为对称正定矩阵,且当梯度 ∇ f ( x ) → 0 \nabla f(\boldsymbol{x}) \to \bf0 f(x)0 ϵ → 0 \epsilon \to 0 ϵ0可保证整个算法的收敛性。对于对称正定线性方程组 M d = − ∇ f ( x ) \boldsymbol{M} \boldsymbol{d}=-\nabla f(\boldsymbol{x}) Md=f(x)而言,可采用Cholesky分解对下降方向d进行快速求解

在这里插入图片描述
  • 当函数 f ( x ) f(x) f(x)为非凸函数时

知晓 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) 2f(xk)为对称不定矩阵,则可采用Bunch-Kaufman分解与块对角线修正。
∇ 2 f ( x k ) = L B L T \nabla^2 f\left(x^k\right)=LBL^T 2f(xk)=LBLT
在这里插入图片描述


参考文献

机器人中的数值优化

最优化:建模、算法与理论/最优化计算方法

牛顿法与拟牛顿法学习笔记(一)牛顿法

【最优化】无约束优化方法-阻尼牛顿法

现代数值分析 (数值线性代数部分)

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

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

相关文章

pg 锁机制深析

spin lock 使用 cas 去获取锁,先获取 spins_per_delay 次数,如果还失败,则每次获取失败将 delay 时长延长至 1~2倍 delay 值加 0.5 us,spins_per_delay 的值在获取锁后会做更新,如果这次没有等待,则下次可…

Python可视化——matplotlib.pyplot绘图的基本参数详解

目录 1.matplotlib简介 2.图形组成元素的函数用法 2.1. figure():背景颜色 2.2 xlim()和 ylim():设置 x,y 轴的数值显示范围 2.3 xlabel()和 ylabel():设置 x,y 轴的标签文本 2.4 grid():绘制刻度线的…

NVIDIA深度学习基础-理论与实践入门课程笔记及测验参考代码

1. 使用MNIST数据集进行图像分类 1.1 MNIST数据集 在深度学习的历史当中,对 MNIST 数据集里的70000张手写体数字的图像进行0到9的正确分类是一个重大的进展。如今,这个问题被认为是微不足道的,但是使用 MNIST 进行图像分类已经成为深度学习的一个 Hello World 练习。 以下…

TDC-GP30固件升级笔记

Bootloader介绍 系统重置或系统INIT发生后,总是请求引导加载程序。但是,只有在设置了引导加载器发布代码时,才会执行引导加载器操作。 Bootloader操作包括: “Register Configuration” 寄存器配置”,将配置数据传输…

8-Arm PEG-DBCO分子量决定外观性状,用于修饰生物分子

英文名称:8-Arm PEG-DBCO 中文名称:八臂-聚乙二醇-二苯基环辛炔 分子量:1k,2k,3.4k,5k,10k,20k(可按需定制) 质量控制:95% 存储条件&#xff…

计算机毕设Python+Vue学校教务管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

计算机中丢失vcruntime140_1.dll,要怎么修复这个问题

关于计算机中丢失vcruntime140_1.dll其实是非常的常见的,当出现这种情况的时候,不需要担心,其实有好多种方法可以解决的。 解决丢失vcruntime140_1.dll的方法 第一种方法:既然计算机丢失了这个vcruntime140_1.dll文件&#xff0…

git:合并多个commit

目录1. 查看提交记录2. 合并commit3. 查看合并后的日志记录1. 查看提交记录 git log --oneline --graph2. 合并commit 这里希望合并最后3个commit(modify1,modify2,modify3) git rebase -i idid需要使用倒数第4个commit的id&am…

【docker】安装MySQL

实战:安装MySQL 思考:MySQL的数据持久化的问题 #获取镜像 docker pull mysql:5.7 #运行容器,需要做数据挂载 #安装启动MySQL,需要配置密码(docker Hub) #官方测试 docker run --name some-mysql -e MYSQL…

WebAPi实现多文件上传,并附带参数

需要实现的效果为&#xff0c;通过WebApi实现多文件上传功能&#xff0c;并且在上传时需要能附带文件说明参数&#xff0c;用于保存文件记录 –这里是需要的文件说明参数类 /// <summary>/// 前端文件上传时参数数据/// </summary>public class DistributionData{…

【Spring篇】基于xml的自动装配

&#x1f353;个人主页&#xff1a;个人主页 &#x1f352;系列专栏&#xff1a;SSM框架 自动装配&#xff1a; 根据指定的策略&#xff0c;在IOC容器中匹配某一个bean&#xff0c;自动为指定的bean中所依赖的类类型或接口类 型属性赋值 ①场景模拟 创建类UserControllerpublic…

29.图像卷积代码实现

1. 互相关运算 接下来&#xff0c;我们在corr2d函数中实现如上过程&#xff0c;该函数接受输入张量X和卷积核张量K&#xff0c;并返回输出张量Y。 import torch from torch import nn from d2l import torch as d2ldef corr2d(X,K): # X是输入&#xff0c;K是核矩阵计算二维互…

Cambridge IGCSE Chemistry 真题讲解1

考试局&#xff1a;Cambridge Assessment International Education (CAIE)考试类别&#xff1a;Cambridge International General Certificate of Secondary Education (IGCSE)考试科目&#xff1a;Chemistry考试单元&#xff1a;Paper 2 Multiple Choice (Extended)试卷代码&a…

什么是混合云、公有云、私有云?

很多用户都不清楚混合云、公有云、私有云的定义是什么&#xff0c;很多用户都不是很清楚具体的含义接下来一起跟着小编来看看吧。 一、混合云( hybrid cloud) 在混合云模式中&#xff0c;云平台由两种不同模式(私有或公有)云平台组合而成。这些平台依然是独立实体&#xff0c;但…

GIt远程仓库pull拉取代码

GIt远程仓库pull拉取代码 git教程可以参考之前的这篇文章使用git命令对gitee存放项目到仓库、切换分支以及合并分支教程 这篇文章主要说一下远程连接拉去并提交代码 如果你使用git clone <项目地址>拉取代码后更改无法提交的问题&#xff0c;可以使用以下解决方案 本地…

C++基础学习笔记(三)——核心编程PART1

参考链接&#xff1a;https://www.bilibili.com/video/BV1et411b73Z?p84&vd_sourceb4d9cee68649c8adcb1e266f7147cd5c 一、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理…

LeetCode 92 双周赛

2481. 分割圆的最少切割次数 圆内一个 有效切割 &#xff0c;符合以下二者之一&#xff1a; 该切割是两个端点在圆上的线段&#xff0c;且该线段经过圆心。该切割是一端在圆心另一端在圆上的线段。 一些有效和无效的切割如下图所示。 给你一个整数 n &#xff0c;请你返回将…

从CRUD到入职阿里,全靠猛刷P8总结的Github所有高热度面试题合集

很多工作过了 5 年之后的工程师&#xff0c;都表示写不动 CRUD 代码了&#xff0c;都会考虑转架构师&#xff0c;但是一想到面试&#xff0c;可能心里就会一紧。 一般面试大厂架构师的岗位至少需要 3 轮技术面试&#xff0c;我咨询了一下阿里的大佬&#xff0c;了解到每一轮的…

专利解析|数据中台—数据流配置弹框交互优化方法

优化用户交互 在企业信息化转型的过程中&#xff0c;数据中台提供全行业从咨询规划到技术平台落地运营的数字化方案。随着企业规模的不断扩大&#xff0c;企业信息化转型的必要性也逐步地增加&#xff0c;其功能的复杂度更是跨越式地增加。人们在处理信息、学习规程和记忆细节…

【Go】参数验证,对象数组核验-validator

文章目录背景功能介绍范围比较验证标记之间特殊符号说明字符串验证特殊字符串验证例子扩展问题我的问题验证slice举例输出说明详细举例二维slice举例&#xff1a;说明map核验举例输出说明嵌套map核验举例说明参考背景 一直做的 go 项目中想要方便简洁的对接口参数字段进行核验…