最优化方法-牛顿法

牛顿法

泰勒级数

  • 泰勒级数展开
    $$
    \begin{aligned}

    f(x)&=\lim\limits_{n\rightarrow \infin}\sum\limits_{i=1}n\frac{1}{n!}f{(n)}(x_0)(x-x_0)^n\
    &=f(x_0)+f’(x_0)(x-x_0)+\frac{f’'(x_0)}{2!}(x-x_0)2+\cdots+\frac{1}{n!}fn(x_0)(x-x_0)^n\
    &\quad~ + O\left[(x-x_0)^n\right] /\frac{f{(n+1)(\xi)}}{(n+1)!}(x-x_0){n+1}

    \end{aligned}
    $$

  • 麦克劳林级数展开

    泰勒展开式在 0 处展开
    f ( x ) = lim ⁡ n → ∞ ∑ i = 1 n 1 n ! f ( n ) ( 0 ) x n = f ( 0 ) + f ′ ( 0 ) x + f ′ ′ ( 0 ) 2 ! x 2 + ⋯ + 1 n ! f n ( 0 ) x n + O ( x n ) / f ( n + 1 ) ( ξ ) ( n + 1 ) ! x n + 1 \begin{aligned} f(x)&=\lim\limits_{n\rightarrow \infin}\sum\limits_{i=1}^n\frac{1}{n!}f^{(n)}(0)x^n\\ &=f(0)+f'(0)x+\frac{f''(0)}{2!}x^2+\cdots+\frac{1}{n!}f^n(0)x^n\\ &\quad~ + O\left(x^n\right) /\frac{f^{(n+1)(\xi)}}{(n+1)!}x^{n+1} \end{aligned} f(x)=nlimi=1nn!1f(n)(0)xn=f(0)+f(0)x+2!f′′(0)x2++n!1fn(0)xn +O(xn)/(n+1)!f(n+1)(ξ)xn+1
    其中

    1. f ( n ) f^{(n)} f(n):表示对函数 f f f求 n 阶导数;
    2. O ( x n ) O\left(x^n\right) O(xn) :为佩亚诺余项,代表 x n x^n xn的高阶无穷小,要求 f ( x ) f(x) f(x)n 阶可导;
    3. f ( n + 1 ) ( ξ ) ( n + 1 ) ! x n + 1 \frac{f^{(n+1)(\xi)}}{(n+1)!}x^{n+1} (n+1)!f(n+1)(ξ)xn+1:为拉格朗日型余项,要求 f ( x ) f(x) f(x) n+1 阶可导。

牛顿法

原理(一维情况)

  • 假如已知函数 f ( x ) f(x) f(x), 想要求 f ( x ) = 0 f(x)=0 f(x)=0 的解 (或者叫根)。
    牛顿法(Newton's method)大致的思想是:

    1. 选一个初始位置 x 0 x_0 x0 (这个位置最好是在根的附近);
    2. 在这个位置上找一个 f ( x ) f(x) f(x) 的近似函数(通常用泰勒展开 Q Q Q );
    3. 令近似函数为 0 , 求解;
    4. 以这个解为新的位置 x 1 x_1 x1;
    5. 重复上述迭代, 到第 n n n 次迭代得到 x n x_n xn ,当 ∣ x n − x n − 1 ∣ \left|x_n-x_{n-1}\right| xnxn1 足够小, 结束。 x n x_n xn 就是 f ( x ) = 0 f(x)=0 f(x)=0 的近似解。
  • 牛顿法思想:使用 f ( x ) f(x) f(x) 的泰勒展开式(前几项)
    f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) \begin{aligned} f(x) &\approx f(x_0)+f'(x_0) \end{aligned} f(x)f(x0)+f(x0)
    不断迭代来近似寻找方程 f ( x ) = 0 f(x)=0 f(x)=0 的根。

    设第一次迭代在 x 0 x_0 x0 处,则有
    f ( x ) = 0 ⇉ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f ′ ( x 0 ) ( x 0 − x ) = f ( x 0 ) x 0 − x = f ( x 0 ) f ′ ( x 0 ) x = x 0 − f ( x 0 ) f ′ ( x 0 ) \begin{aligned} f(x)&=0\\ \rightrightarrows f(x_0)+f'(x_0)&(x-x_0)=0\\ f'(x_0)(x_0-x)&=f(x_0)\\ x_0-x&=\frac{f(x_0)}{f'(x_0)}\\ x=x_0&-\frac{f(x_0)}{f'(x_0)} \end{aligned} f(x)f(x0)+f(x0)f(x0)(x0x)x0xx=x0=0(xx0)=0=f(x0)=f(x0)f(x0)f(x0)f(x0)
    f ( x ) = 0 f(x)=0 f(x)=0 第一次迭代的近似解 x 1 x_1 x1
    x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f'(x_0)} x1=x0f(x0)f(x0)
    由此得到第 n+1 次的迭代解为
    x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)} xn+1=xnf(xn)f(xn)
    由于对 f ( x ) f(x) f(x) 的近似只是一阶展开, 因此 x 1 x_1 x1 并非 f ( x ) = 0 f(x)=0 f(x)=0 的解, 只能说 f ( x 1 ) f\left(x_1\right) f(x1) f ( x 0 ) f\left(x_0\right) f(x0) 更接近0。

  • 迭代过程图(维基百科)

    牛顿法迭代过程图

  • 牛顿法一维情况

    迭代公式

    x n + 1 = x n − f ′ ( x 0 ) f ′ ′ ( x 0 ) x_{n+1} = x_n - \frac{f'(x_0)}{f''(x_0)} xn+1=xnf′′(x0)f(x0)

    牛顿法的推导基于二阶可微函数的泰勒展开
    f ( x ) = 0 ⇉ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 = 0 两边求导 f ′ ( x 0 ) + f ′ ′ ( x 0 ) ( x − x 0 ) = 0 f ′ ′ ( x 0 ) ( x 0 − x ) = f ′ ( x 0 ) x 0 − x = f ′ ( x 0 ) f ′ ′ ( x 0 ) x = x 0 − f ′ ( x 0 ) f ′ ′ ( x 0 ) \begin{aligned} f(x)&=0\\ \rightrightarrows f(x_0)+f'(x_0)(x-x_0)&+\frac{f''(x_0)}{2!}(x-x_0)^2=0\\ \text{两边求导}\\ f'(x_0)+f''(x_0)&(x-x_0)=0\\ f''(x_0)(x_0-x)&=f'(x_0)\\ x_0-x&=\frac{f'(x_0)}{f''(x_0)}\\ x=x_0&-\frac{f'(x_0)}{f''(x_0)} \end{aligned} f(x)f(x0)+f(x0)(xx0)两边求导f(x0)+f′′(x0)f′′(x0)(x0x)x0xx=x0=0+2!f′′(x0)(xx0)2=0(xx0)=0=f(x0)=f′′(x0)f(x0)f′′(x0)f(x0)

求解最优化问题(高维情况)

  • 对于无约束最优化问题 min ⁡ x ∈ R n f ( x ) \min _{x \in \mathbf{R}^n} f(x) minxRnf(x) ,可根据极小点的必要条件 ∇ f ( x ) = 0 \nabla f(x)=0 f(x)=0 采用牛顿法求解:
    x k + 1 = x k − H k − 1 g k x_{k+1}=x_k-H_k^{-1} g_k xk+1=xkHk1gk

    其中

    1. g k = g ( x k ) = ∇ f ( x k ) g_k=g\left(x_k\right)=\nabla f\left(x_k\right) gk=g(xk)=f(xk) f ( x ) f(x) f(x) 的梯度向量在点 x k x_k xk 的值;

    2. H k = H ( x k ) H_k=H\left(x_k\right) Hk=H(xk), H ( x ) = [ ∂ 2 f ∂ x i ∂ x j ] n × n H(x)=\left[\frac{\partial^2 f}{\partial x_i \partial x_j}\right]_{n \times n} H(x)=[xixj2f]n×n f ( x ) f(x) f(x) 的海塞矩阵(二阶偏导数矩阵)。
      H ( f ) = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 ⋯ ∂ 2 f ∂ x n 2 ] H(f)=\left[\begin{array}{cccc} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{array}\right] H(f)= x122fx2x12fxnx12fx1x22fx222fxnx22fx1xn2fx2xn2fxn22f

  • 具体步骤

    输入:目标函数 f ( x ) f(x) f(x), 梯度 g ( x ) = ∇ f ( x ) g(x)=\nabla f(x) g(x)=f(x), 海塞矩阵 H ( x ) H(x) H(x), 精度要求 ϵ \epsilon ϵ
    输出: f ( x ) f(x) f(x) 的极小点 x ∗ x^* x

    1. 取初始点 x 0 x_0 x0, 置 k = 0 k=0 k=0
    2. 计算 g k g_k gk, 若 ∥ g k ∥ < ϵ \left\|g_k\right\|<\epsilon gk<ϵ, 则 x ∗ = x k x^*=x_k x=xk, 停止计算; 否则转 (3)
    3. 计算 H k H_k Hk, 令 x k + 1 = x k − H k − 1 g k x_{k+1}=x_k-H_k^{-1} g_k xk+1=xkHk1gk
    4. k = k + 1 k=k+1 k=k+1 ,转 ( 2 ) (2) (2)

    备注: 第 (3) 步中, 涉及到 H k − 1 H_k^{-1} Hk1 的计算, 实际应用中, 通常并不直接对 H k H_k Hk 进行求逆, 而是将其转化为求解线性代数方程组 H k d k = − g k H_k d_k=-g_k Hkdk=gk, 此时可根据系数矩阵 H k H_k Hk 的性态来选择合适的迭代法, 如预条件共轭梯度法(PCG)、代数多重网格法 (AMG) 等。


小结

  • 当目标函数是二次函数时, 海塞矩阵退化成一个常数矩阵, 从任一初始点出发, 牛顿法可一步到达, 因此它是一种具有二次收玫性的算法。对于非二次函数, 若函数的二次性态较强, 或迭代点已进入极小点的邻域, 则其收敛速度也是很快的, 这是牛顿法的主要优点。

    牛顿法的迭代公式中由于没有步长因子, 是定步长迭代, 对于非二次型目标函数, 有时会使函数值上升, 即出现 f ( x k + 1 ) > f ( x k ) f\left(x_{k+1}\right)>f\left(x_k\right) f(xk+1)>f(xk) 的情况, 更甚者, 可能出现迭代点列 { x k } \left\{x_k\right\} {xk} 发散而导致计算失败的情况。为解决这个问题, 出现了“阻尼牛顿法”, 增加一个步长因子 λ k \lambda_k λk, 将算法流程 (3) 中的计算公式修改为:
    x k + 1 = x k − λ k H k − 1 g k x_{k+1}=x_k-\lambda_k H_k^{-1} g_k xk+1=xkλkHk1gk

    牛顿法的另一个弊病在于, 每一次迭代都要计算 H − 1 H^{-1} H1, 这一步计算比较复杂, 拟牛顿法将解决这个问题。


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

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

相关文章

【系统架构】分布式事务模型详解

1. 分布式基础理论 1.1 CAP理论 CAP 理论可以表述为&#xff0c;一个分布式系统最多只能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;这三项中的两项。 一致性是…

「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件

PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件&#xff0c;以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性&#xff0c;如颜色、字体大小、样式和粗细。…

使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF

代码写了两个小时&#xff0c;速度太慢&#xff08;包括学习文档的时间&#xff09; #include <stdio.h> #include <Windows.h> #include <gdiplus.h> #include <string.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") …

设计模式教程:责任链模式(Chain of Responsibility Pattern)

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种常用的设计模式&#xff0c;它属于行为型模式&#xff0c;主要解决的是多个对象处理一个请求时&#xff0c;如何解耦请求的发送者和接收者&#xff0c;以及如何将请求的处理职责分配给不同的对象。 1…

鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )

前言&#xff1a; 这个模块可以截取组件的图片&#xff0c;无论组件是否已加载。截图只能拍到组件本身的大小区域。 如果组件或其子组件画得超出了自己的区域&#xff0c;超出的部分不会出现在截图中。截图不会拍到与当前组件平级的&#xff08;兄弟&#xff09;组件。 模块简…

解决 LeetCode 串联所有单词的子串问题

问题描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 &q…

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应&#xff08;标签&#xff09;、样本权重…

在 Mac ARM 架构 (Apple Silicon,例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL

在 Mac ARM 架构 (Apple Silicon&#xff0c;例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL&#xff0c;步骤与在 Intel Mac 上类似&#xff0c;但需要确保下载的是 ARM 架构兼容的版本。以下是详细的安装步骤&#xff1a; 步骤 1: 下载 MySQL Community Server DMG 安装…

以ChatGPT为例解析大模型背后的技术

目录 1、大模型分类 2、为什么自然语言处理可计算&#xff1f; 2.1、One-hot分类编码&#xff08;传统词表示方法&#xff09; 2.2、词向量 3、Transformer架构 3.1、何为注意力机制&#xff1f; 3.2、注意力机制在 Transformer 模型中有何意义&#xff1f; 3.3、位置编…

AI训练中的常用指令

以下是一些常用于深度学习训练的 Linux 指令&#xff0c;可以帮助你高效管理和执行训练任务&#xff1a; 文件管理 查看当前目录内容&#xff1a;ls进入目录&#xff1a;cd 路径/到/目录创建新目录&#xff1a;mkdir 新目录名称删除文件或目录&#xff1a; 删除文件&#xff…

【ARM入门指南】一文搞懂什么是ARM

在单片机与嵌入式系统的浩瀚宇宙中&#xff0c;ARM架构犹如一颗耀眼的星辰&#xff0c;持续引领着技术创新的潮流。对于刚刚踏入这一领域的初学者而言&#xff0c;深入了解ARM是迈入嵌入式开发大门的关键一步。ARM&#xff0c;这个名字背后&#xff0c;不仅代表着一家在半导体设…

接口测试-API测试中常用的协议(下)

一、RPC RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用协议&#xff0c;它允许程序调用位于其他计算机上的程序中的过程或函数&#xff0c;就像调用本地程序中的过程一样。下面从其概念、工作原理、特点、应用场景等方面详细介绍&#xff1a; 概念起源与核…

Go Web 项目实战:构建 RESTful API、命令行工具及应用部署

Go Web 项目实战&#xff1a;构建 RESTful API、命令行工具及应用部署 Go 语言因其简洁高效、并发支持强大等特点&#xff0c;已经成为了后端开发的热门选择之一。本篇文章将通过实战案例带领你学习如何使用 Go 构建一个简单的 RESTful API&#xff0c;开发命令行工具&#xf…

Http升级为Https - 开发/测试服环境

1.应用场景 主要用于开发/测试服环境将http升级为https, 防止前端web(浏览器)出现Mixed Content报错; 2.学习/操作 1.文档阅读 deepseek 问答; 2.整理输出 报错信息: Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequ…

使用 AIStor 和 OpenSearch 增强搜索功能

在这篇文章中&#xff0c;我们将探讨搜索&#xff0c;特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如&#xff0c;如果您正在查看运营数据&#xff0c;如果您的服务似乎是随机的&#xff0c;那么您需要尽可能回溯以识别模式并找出原因。这不仅适用…

Python——生成AIGC图像

文章目录 一、背景介绍 二、效果图展示 三、完整代码 四、分步解释 五、实用建议 1&#xff09;提示词技巧 2&#xff09;性能优化 3&#xff09;常见问题处理 4&#xff09;扩展功能建议 六、注意事项 1. 硬件要求 2. 法律合规 3. 模型安全 一、背景介绍 AIGC&a…

多任务(20250210)

1. 进程的概念 (1) 程序:是一段存放在外存中代码的集合(静态的) (2) 进程:是一个程序动态执行的过程,包括创建、调度、消亡(动态的) 2. 如何实现多任务 Linux中&#xff0c;通过进程、线性实现多任务 3. 进程 正在执行的程序&#xff08;动态&#xff09;&#xff0c;需…

【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本

背景 今天程序突然出了bug&#xff0c;无法自动测试了&#xff0c;显示Chrome版本不匹配&#xff0c;一看&#xff0c;Chrome居然在我已经关闭升级的情况下&#xff0c;又给我升级了&#xff0c;然后就悲剧了&#xff0c;我的代码不能用了。 于是&#xff0c;做了以下几步&…

解决OpenEuler系统修改句柄无效的问题

本文测试基于OpenEuler的操作系统&#xff0c;比如BC-Linux。 想要使修改文件句柄&#xff08;即最大打开文件数&#xff09;永久生效&#xff0c;通常需要编辑 /etc/security/limits.conf 文件。但可能出现修改了文件之后&#xff0c;并未生效的情况&#xff0c;下面就介绍下可…

自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone

苹果的AirTag很贵&#xff0c;虽然某强北有平价代替品&#xff0c;但是仍需要苹果设备才能绑定&#xff0c;才能查看位置。不支持安卓/鸿蒙/PC&#xff0c;也不支持集成到Home Assistant中。 AirTag 的原理 每个AirTag都会发送一个蓝牙信号&#xff0c;其可以被临近的苹果设备…