负梯度方法与Newton型方法-数值最优化方法-课程学习笔记-4

news2024/11/24 19:44:14

今天我们继续来学习数值最优化方法的第三章内容的后续知识

Newton方法

Newton方法是Newton方法的基础, 本节主要讨论的是基本Newton方法, 阻尼Newton方法以及修正Newton方法的构造和特性, 这类方法适合解决中小型最优化问题

基本Newton方法
对于 f ( x ) f(x) f(x)如果有连续的二阶偏导数, 那么 f ( x ) f(x) f(x)在当前迭代点 x k x_k xk处有泰勒展开公式如下:
f ( x k + d ) = f k + g k T d + 1 2 d T G k d + o ( ∣ ∣ d ∣ ∣ 2 ) f(x_k+d)=f_k+g_k^Td+\frac{1}{2}d^TG_kd+o(||d||^2) f(xk+d)=fk+gkTd+21dTGkd+o(∣∣d2)
所以在该迭代点合适的领域内我们用二次函数
q k ( d ) ≜ f k + g k T d + 1 2 d T G k d q_k(d)\triangleq f_k+g_k^Td+\frac{1}{2}d^TG_kd qk(d)fk+gkTd+21dTGkd
来近似 f ( x k + d ) f(x_k+d) f(xk+d)
所以对于问题 min ⁡ f ( x k + d ) \min f(x_k+d) minf(xk+d) 的求解就转化成了对问题 min ⁡ q k ( d ) \min q_k(d) minqk(d)的求解了
这里我们如果假设 G k G_k Gk正定, 则令方程组一阶导为零得: G k d = − g k G_kd=-g_k Gkd=gk
则: d = − G − 1 g k d=-G^{-1}g_k d=G1gk为该问题的唯一解, 我们把公式 G k d = − g k G_kd=-g_k Gkd=gk称作Newton方程
由这个方程得到的方向 d = − G − 1 g k d=-G^{-1}g_k d=G1gk为Newton方向
以这个方向为迭代方向的最优化方法称为Newton方法

而基本Newton方法就是取全步长为固定的 α k = 1 \alpha_k=1 αk=1的Newton方法, 所以基本Newton方法的步骤大致如下:

  1. x 0 ∈ R n , ε > 0 , k : = 0 x_0\in R^n,\varepsilon >0,k:=0 x0Rn,ε>0,k:=0
  2. 若满足终止条件, 输出结果, 停止迭代
  3. 计算 d = − G − 1 g k d=-G^{-1}g_k d=G1gk
  4. x k + 1 = x k + d k , k : = k + 1 x_{k+1}=x_k+d_k,k:=k+1 xk+1=xk+dk,k:=k+1, 转第二步

在不引起混淆的情况下, 我们把基本Newton方法简称为Newton方法
在Newton方法中只要 G k G_k Gk是正定的, Newton方向就是下降的方向, 这是因为 g k T d k = − g k T G k − 1 g k < 0 g_k^Td_k=-g_k^TG_k^{-1}g_k<0 gkTdk=gkTGk1gk<0, 这个不等式表明Newton方向和梯度方向(上升最快的方向)成钝角, 也就是和下降最快的方向成锐角, 根据全微分公式 d z = ∂ f ∂ x d x + ∂ f ∂ y d y = g k T d k < 0 dz=\frac{\partial f}{\partial x} dx+\frac{\partial f}{\partial y} dy=g_k^Td_k<0 dz=xfdx+yfdy=gkTdk<0, 可知这个方向在整个迭代中使得函数值下降

那么接下来我们给出基本Newton方法的收敛性定理

f ( x ) ∈ C 2 f(x)\in C^2 f(x)C2, f ( x ) f(x) f(x)的Hesse矩阵 G ( x ) G(x) G(x)满足: 存在 β > 0 \beta >0 β>0, 对任给的 x x x y y y, 有 ∣ ∣ G ( x ) − G ( y ) ∣ ∣ ≤ β ∣ ∣ x − y ∣ ∣ ||G(x)-G(y)||\leq \beta ||x-y|| ∣∣G(x)G(y)∣∣β∣∣xy∣∣(Lipschitz条件), 若 x 0 x_0 x0充分接近 f ( x ) f(x) f(x)的局部极小点 x ∗ x^* x, 且 G ∗ G^* G正定, 则Newton方法对所有的k有定义, 并以二阶收敛速度收敛

接下来我们给出证明:
首先我们提出几个概念, g ( x ) g(x) g(x)是函数的一阶导函数, 因为原函数是向量函数, 所以其导函数同样是向量函数, 而使用泰勒展开可以得到:
g ( x k + d ) = g k + G k d + O ( ∣ ∣ d ∣ ∣ 2 ) g(x_k+d)=g_k+G_kd+O(||d||^2) g(xk+d)=gk+Gkd+O(∣∣d2)
其中, d = x − x k d=x-x_k d=xxk, 设 g i ( x ) g_i(x) gi(x) g ( x ) g(x) g(x)的分量, G i j ( x ) G_{ij}(x) Gij(x) G ( x ) G(x) G(x)的元素, 我们先来使用一阶泰勒展开来推导上述展开式
首先, g i ( x ) g_i(x) gi(x)的展开式如下:
g i ( x k + d ) = g i ( x k ) + ∑ j = 1 n G i j ( x k + θ i d ) d j g_i(x_k+d)=g_i(x_k)+\sum^{n}_{j=1}G_{ij}(x_k+\theta_i d)d_j gi(xk+d)=gi(xk)+j=1nGij(xk+θid)dj
这里 θ i ∈ ( 0 , 1 ) \theta_i\in (0,1) θi(0,1), θ i d \theta_i d θid表示 x k x_k xk点向方向 d d d的一小步, 近似拟合左边函数值

经过变换得到:
g i ( x k + d ) − g i ( x k ) − ∑ j = 1 n G i j ( x k ) d j = ∑ j = 1 n [ G i j ( x k + θ i d ) − G i j ( x k ) ] d j g_i(x_k+d)-g_i(x_k)-\sum^{n}_{j=1}G_{ij}(x_k)d_j=\sum^{n}_{j=1}[G_{ij}(x_k+\theta_i d)-G_{ij}(x_k)]d_j gi(xk+d)gi(xk)j=1nGij(xk)dj=j=1n[Gij(xk+θid)Gij(xk)]dj
由定理中提到的Lipschitz条件可得:
∣ G i j ( x ) − G i j ( y ) ∣ ≤ β ∣ ∣ x − y ∣ ∣ |G_{ij}(x)-G_{ij}(y)|\leq \beta ||x-y|| Gij(x)Gij(y)β∣∣xy∣∣
且有: ∣ ∣ θ i d ∣ ∣ ≤ ∣ ∣ d ∣ ∣ , ∣ d j ∣ ≤ ∣ ∣ d ∣ ∣ ||\theta_i d||\leq||d||, |d_j|\leq||d|| ∣∣θid∣∣∣∣d∣∣,dj∣∣d∣∣
则:
∣ g i ( x k + d ) − g i ( x k ) − ∑ j = 1 n G i j ( x k ) d j ∣ ≤ β n ∣ ∣ d ∣ ∣ 2 |g_i(x_k+d)-g_i(x_k)-\sum^{n}_{j=1}G_{ij}(x_k)d_j|\leq\beta n||d||^2 gi(xk+d)gi(xk)j=1nGij(xk)djβn∣∣d2
这里我们根据大O表示法的定义:
在这里插入图片描述也就是说
∣ g i ( x k + d ) − g i ( x k ) − ∑ j = 1 n G i j ( x k ) d j ∣ = O ( ∣ ∣ d ∣ ∣ 2 ) |g_i(x_k+d)-g_i(x_k)-\sum^{n}_{j=1}G_{ij}(x_k)d_j|=O(||d||^2) gi(xk+d)gi(xk)j=1nGij(xk)dj=O(∣∣d2)
则可得:
g i ( x k + d ) = g i ( x k ) + ∑ j = 1 n G i j ( x k ) d j + O ( ∣ ∣ d ∣ ∣ 2 ) g_i(x_k+d)=g_i(x_k)+\sum^{n}_{j=1}G_{ij}(x_k)d_j+O(||d||^2) gi(xk+d)=gi(xk)+j=1nGij(xk)dj+O(∣∣d2)
即公式 g ( x k + d ) = g k + G k d + O ( ∣ ∣ d ∣ ∣ 2 ) g(x_k+d)=g_k+G_kd+O(||d||^2) g(xk+d)=gk+Gkd+O(∣∣d2)成立

若取 d = − h k = x ∗ − x k d=-h_k=x^*-x_k d=hk=xxk, 且由一阶必要条件, 则由上式可得: g ∗ = g k − G k h k + O ( ∣ ∣ h k ∣ ∣ 2 ) = 0 g^*=g_k-G_kh_k+O(||h_k||^2)=0 g=gkGkhk+O(∣∣hk2)=0

G ( x ) G(x) G(x)的连续性可知, 存在 x ∗ x^* x的一个邻域, 当 x k x_k xk在此邻域中, 也就是说 ∣ ∣ x k − x ∗ ∣ ∣ < δ ||x_k-x^*||<\delta ∣∣xkx∣∣<δ时, 有 G k G_k Gk正定, G k − 1 G_k^{-1} Gk1有上界, 那么就说明第 k k k次迭代存在, 对 g ∗ = g k − G k h k + O ( ∣ ∣ h k ∣ ∣ 2 ) = 0 g^*=g_k-G_kh_k+O(||h_k||^2)=0 g=gkGkhk+O(∣∣hk2)=0公式左右同时乘以 G k − 1 G_k^{-1} Gk1得:
G k − 1 − h k + O ( ∣ ∣ h k ∣ ∣ 2 ) = − d k − h k + O ( ∣ ∣ h k ∣ ∣ 2 ) = − h k + 1 + O ( ∣ ∣ h k ∣ ∣ 2 ) = 0 G_k^{-1}-h_k+O(||h_k||^2)=-d_k-h_k+O(||h_k||^2)=-h_{k+1}+O(||h_k||^2)=0 Gk1hk+O(∣∣hk2)=dkhk+O(∣∣hk2)=hk+1+O(∣∣hk2)=0
也就是说:
h k + 1 = O ( ∣ ∣ h k ∣ ∣ 2 ) h_{k+1}=O(||h_k||^2) hk+1=O(∣∣hk2)
有: h k + 1 ≤ γ ∣ ∣ h k ∣ ∣ 2 h_{k+1}\leq \gamma||h_k||^2 hk+1γ∣∣hk2
又因为: ∣ ∣ x k − x ∗ ∣ ∣ < δ ||x_k-x^*||<\delta ∣∣xkx∣∣<δ, 则:
h k + 1 ≤ γ ∣ ∣ h k ∣ ∣ 2 ≤ γ δ ∣ ∣ h k ∣ ∣ h_{k+1}\leq \gamma||h_k||^2\leq\gamma\delta ||h_k|| hk+1γ∣∣hk2γδ∣∣hk∣∣
x k x_k xk充分接近 x ∗ x^* x可以保证 γ δ < 1 \gamma\delta<1 γδ<1, 所以:
∣ ∣ x k + 1 − x ∗ ∣ ∣ = ∣ ∣ h k + 1 ∣ ∣ < ∣ ∣ h k ∣ ∣ ≤ δ ||x_{k+1}-x^*||=||h_{k+1}||<||h_k||\leq\delta ∣∣xk+1x∣∣=∣∣hk+1∣∣<∣∣hk∣∣δ
也就是说 x k + 1 x_{k+1} xk+1也在 x ∗ x^* x的这一邻域内, 也就是说第 k + 1 k+1 k+1次迭代有意义, 根据数学归纳法, 我们可以知道方法对所有 k k k次的迭代都有意义, 且 h k + 1 ≤ ( γ δ ) k + 1 ∣ ∣ h k ∣ ∣ , ∣ ∣ h k ∣ ∣ → 0 h_{k+1}\leq (\gamma\delta)^{k+1} ||h_k||,||h_k||\rightarrow 0 hk+1(γδ)k+1∣∣hk∣∣,∣∣hk∣∣0, 基本Newton方法收敛, 且由 h k + 1 ≤ γ ∣ ∣ h k ∣ ∣ 2 h_{k+1}\leq \gamma||h_k||^2 hk+1γ∣∣hk2可知是二阶收敛

但是这个定理只能表明基本Newton方法的局部收敛性, 也就是说需要迭代点足够靠近局部极小点, 对于这个方法, 其二阶收敛性保证其在合适的初始点上会很快得收敛到极小点, 但是当初始点没有充分接近极小点的时候, 二阶导矩阵 G k G_k Gk可能会出现不正定或者是奇异的情况, 使得无法进行迭代, 即使正定, 也不能保证函数单调下降, 而每一步迭代都需要计算二阶导Hesse矩阵, 都需要解一个线性方程组, 计算量为 O ( n 3 ) O(n^3) O(n3), 这算是比较大的开销了

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

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

相关文章

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

Visual Studio Code从安装到正常使用

Visual Studio Code的汉化 下载的Visual Studio Code的话可以去应用商店也可以去官网下载。 Visual Studio Code只是一个编译器&#xff0c;不具备编译器功能。因此需要下载一个编译器MinGW MinGW的安装 官网链接MinGW官网链接 一步到位的链接 添加环境变量 进入cmd界面…

netty之关闭连接源码分析

写在前面 本文看下netty关闭channel相关源码。 1&#xff1a;前置准备 为了测试&#xff0c;我们需要使用netty源码中examples模块的echoserver和echoclient&#xff0c;但是echoclient因为会不断的发送消息&#xff0c;并不会断开连接&#xff0c;所以&#xff0c;我们需要…

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

Ubuntu 的 ROS 操作系统安装与测试

引言 机器人操作系统&#xff08;ROS, Robot Operating System&#xff09;是一个用于开发机器人应用的开源框架&#xff0c;它提供了一系列功能丰富的库和工具&#xff0c;能够帮助开发者构建和控制机器人。 当前&#xff0c;ROS1的最新版本为Noetic Ninjemys&#xff0c;专为…

学习threejs,将多个网格合并成一个网格

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Geometry 几何体1.2 …

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…

7个常用的JavaScript数组操作进阶用法

文章目录 1、查找数组中的最大值方法一&#xff1a;使用 Math.max 和展开运算符方法二:使用 for 循环逐一比较 2、查找数组中的第二大值方法一&#xff1a;排序后取第二大值方法二&#xff1a;遍历找到第二大值 3、去除数组中的重复项4、合并两个有序数组并保持有序5、旋转数组…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

FPGA学习笔记#6 Vitis HLS For循环的优化(2)

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

MTK6833/MT6833(天玑700)安卓核心板_联发科5G智能通讯模块安卓主板定制

天玑700定位主流级&#xff0c;让5G技术惠及所有人。 MT6833采用7nm制程工艺&#xff0c;旨在为大众市场带来先进的5G功能和体验&#xff0c;依托5G双载波聚合技术&#xff08;2CC&#xff09;及双5G SIM卡功能&#xff0c;实现优异的功耗表现及实时连网功能。 CPU部分由2个2…

Spring Boot框架的知识分类技术解析

2 开发技术 2.1 VUE框架 Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况&#xff08;拓展&#xff09;1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…

关于我、重生到500年前凭借C语言改变世界科技vlog.17——字符函数字符串函数

文章目录 1.字符函数1.1 字符分类函数1.1.1 islower 1.2 字符转换函数1.2.1 tolower 2.字符串函数2.1 strlen2.2 strcpy和strncpy2.3 strcat和strncat2.4 strcmp和strncmp2.5 strstr2.6 strtok2.7 strerror 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&am…

可视化建模与UML《类图实验报告》

史铁生&#xff1a; 余华和莫言扛着我上火车&#xff0c; 推着走打雪仗&#xff0c; 还带我偷西瓜&#xff0c; 被人发现后他们拔腿就跑&#xff0c; 却忘了我还在西瓜地里。 一、实验目的&#xff1a; 1、熟悉类图的构件事物。 2、熟悉类之间的泛化、依赖、聚合和组合关系…

基于梧桐数据库的实时数据分析解决方案

一、背景 在当今信息时代&#xff0c;数据的价值不言而喻。然而&#xff0c;处理海量数据并将其转化为有意义的洞察力是一项艰巨的任务。传统的数据处理方法已经无法满足我们日益增长的需求。为了满足这一挑战&#xff0c;实时数据处理系统应运而生。 ​ 实时数据处理系统是一…

javascript实现国密sm4算法(支持微信小程序)

概述&#xff1a; 本人前端需要实现sm4计算的功能&#xff0c;最好是能做到分多次计算。 本文所写的代码在现有sm4的C代码&#xff0c;反复测试对比计算过程参数&#xff0c;成功改造成sm4的javascript代码&#xff0c;并成功验证好分多次计算sm4数据 测试平台&#xff1a; …

jmeter常用配置元件介绍总结之jsr223执行python脚本

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之jsr223执行python脚本 1.安装jsr223执行python插件2.基础语法介绍2.1.log2.2.parameters向脚本传参与接参2.3.vars2.4.props2.5.prev 3.常用脚本3.1.MD5加密单个参数&#xff1a;3.2.MD5加密多个参数&#xff1a;3.3.URLe…

【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)

文章目录 MongoDB的聚合操作&#xff08;Aggregate&#xff09;MongoDB的管道&#xff08;Pipline操作&#xff09;MongoDB的聚合&#xff08;Map Reduce&#xff09;MongoDB的索引 更多相关内容可查看 MongoDB的聚合操作&#xff08;Aggregate&#xff09; 简单理解&#xff…