最优化方法-牛顿法

news/2025/2/22 3:58:54/

牛顿法

泰勒级数

  • 泰勒级数展开
    $$
    \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.ppmy.cn/news/1574047.html

相关文章

拼多多面试题记录

0 问题汇总 以下内容为经过豆包的回答,不一定对,只为自己学习使用 1 C++11有哪些新特性? 语言易用性增强 统一的初始化语法 C++11 引入了花括号初始化器(列表初始化),可以用于各种类型的初始化,包括基本类型、数组、容器等,并且可以防止窄化转换。 自动类型推导 auto …

OmniHuman:一张图+音频生成逼真视频

人工智能咨询培训老师叶梓 转载标明出处 想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Facto…

基于SpringBoot+Vue高校就业领航管理系统

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

面试知识点2

文章目录 1. Linux 与 DockerLinux 基本指令VMware 安装 CentOSDocker 拉取镜像创建容器、部署 Spring Boot 项目 2. 关系型数据库 MySQL数据库语法多表关联查询数据库索引 3. 事务与死锁事务的隔离级别死锁的原因和避免方法 4. 排序算法与数据结构二分查找快速排序常见数据结构…

java面试场景问题

还在补充&#xff0c;这几天工作忙&#xff0c;闲了会把答案附上去&#xff0c;也欢迎各位大佬评论区讨论 1.不用分布式锁如何防重复提交 方法 1&#xff1a;基于唯一请求 ID&#xff08;幂等 Token&#xff09; 思路&#xff1a;前端生成 一个唯一的 requestId&#xff08;…

面试基础--分布式任务调度系统设计方案

分布式任务调度系统设计方案 以下是一个基于实际项目经验设计的分布式任务调度系统方案&#xff0c;结合北京互联网大厂面试要求&#xff0c;涵盖架构图、调用关系图、设计图和数据流转时序图。 1. 系统概述 分布式任务调度系统主要用于处理高并发、大规模的任务分发和执行场…

基于TCP与UDP协议的性能测试研究

在当代网络通信体系里&#xff0c;TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是传输层最为常用的两种协议。它们各自具备独特属性&#xff0c;适用于不同应用场景。本文通过对TCP和UDP协议开展性能测试&#xff0c;深入剖析其在多样…

银河麒麟系统安装mysql5.7【亲测可行】

一、安装环境 cpu&#xff1a;I5-10代&#xff1b; 主板&#xff1a;华硕&#xff1b; OS&#xff1a;银河麒麟V10&#xff08;SP1&#xff09;未激活 架构&#xff1a;Linux 5.10.0-9-generic x86_64 GNU/Linux mysql版本&#xff1a;mysql-5.7.34-linux-glibc2.12-x86_64.ta…