最优化方法总结——梯度下降法、最速下降法、牛顿法、高斯牛顿法、LM法、拟牛顿法

article/2025/8/26 17:04:56

目录

1 最优化方法的结构

2 常用最优化方法对比分析

3 相关计算公式


1 最优化方法的结构

        最优化问题的一般形式为:

min f(x)
s.t. x\in X

其中x为决策变量,f(x)是目标函数,X为约束集或可行域。特别地,如果X=R^n,则最优化问题成为无约束最优化问题。

        最优化方法通常采用迭代法求它的最优解,其基本思想是:给定一个初始点x_0,按照某一迭代规则产品一个点列{x_n},使得当{x_n}是有穷点列时,其最后一个点是最优化模型问题的最优解。迭代规则由迭代公式决定,迭代公式的基本表示形式如下:

x_{k+1}=x_k+\alpha _kd_k

        式中,\alpha _k为步长因子,d_k为搜索方向。在最优化算法中,搜索方向d_kfx_k点处的下降方向,即:

f(x_k+\alpha _kd_k)<f(x_k)

        最优化方法的基本结构如下:

  • 给定初始点x_0
  • 确定搜索方向d_k,即按照一定规则,构造 fx_k点处的下降方向作为搜索方向;
  • 确定步长因子\alpha _k,使目标函数有某种意义的下降;
  • 令 x_{k+1}=x_k+\alpha _kd_k,若x_{k+1}满足某种终止条件,则停止迭代,得到近似最优解x_{k+1}.否则,重复以上步骤。

2 常用最优化方法对比分析

        从迭代公式可知,最优化方法求解时的关键就是构造搜索方向d_k和步长因子\alpha _k。不同的搜索方向和不同的步长因子构成了不同的方法,常见的最优化方法有梯度下降法、最速下降法、牛顿法、高斯牛顿法、LM法、拟牛顿法,对应的迭代公式总结如下表:

迭代公式
梯度下降法x^{k+1}=x^k- \alpha \triangledown f(x^k)
最速下降法x^{k+1}=x^k- \alpha_k \triangledown f(x^k)
牛顿法x^{k+1}=x^k- \alpha_kH(x^k)^{-1} \triangledown f(x^k)
高斯牛顿法x^{k+1}=x^k- \alpha_kG(x^k)^{-1} \triangledown f(x^k)
LM法x^{k+1}=x^k- \alpha_kJ(x^k)^{-1} \triangledown f(x^k)
拟牛顿法x^{k+1}=x^k- \alpha_kB(x^k)^{-1} \triangledown f(x^k)

对比分析:

梯度下降法最速下降法牛顿法高斯牛顿法LM法拟牛顿法
步长因子\alpha\alpha _k\alpha _k\alpha _k

 \alpha _k

 \alpha _k

搜索方向-\triangledown f(x^k)-\triangledown f(x^k)-H(x^k)^{-1}\triangledown f(x^k)-G(x^k)^{-1}\triangledown f(x^k)-J(x^k)^{-1}\triangledown f(x^k)-B(x^k)^{-1}\triangledown f(x^k)
参数说明

 ① 步长因子\alpha为一个固定值,工程师预先设定;② 搜索方向为梯度方向 \triangledown f(x^k)的反方向

步长因子是一个变化的常数\alpha _k,每一次迭代需要重新计算。通过一位搜索算法得到H为二阶偏导矩阵,即海塞矩阵

G矩阵用来近似替代H矩阵,G=\triangledown f\triangledown f^T

J矩阵替代G矩阵,J=G+uI,u为常数,I为单位矩阵B矩阵用来近似替代H矩阵,B矩阵的形式有多种
目的求解最优化问题的基本方法梯度下降法的一种具体的实现方式提高收敛速度减小计算量解决G矩阵不正定的问题减小计算量以及H矩阵不正定的问题

 几种算法之间的关系总结如下:

  • 最速下降法是梯度下降法的一种具体实现方式。梯度下降法的步长因子是固定值,最速下降法的步长因子 是一个变化的常数\alpha _k ,即由一位搜索得到步长因子\alpha _k,使得

f(x_k+\alpha _kd_k)=minf(x_k+\alpha d_k),\alpha >0

  • 牛顿法可以看成相对于梯度下降法的改进,提高了收敛速度。梯度下降法/最速下降法在确定搜索方向的时候,只用到了一阶导数,因此它的收敛速度是一阶收敛,收敛速度较慢。而牛顿法用到了二阶偏导,它的收敛速度是二阶收敛,收敛速度比梯度下降法快。
  • 高斯牛顿法是相对于牛顿法改进,简化了计算。牛顿法中的H矩阵需要计算目标函数的二阶偏导,计算量巨大,高斯牛顿法采用G矩阵替代H矩阵,大大减小了计算量。
  • LM法是相对于高斯牛顿法的改进,解决G矩阵正定问题。高斯-牛顿法的逼近步长由矩阵G的逆矩阵决定,如果矩阵G非正定,那么其逆矩阵不一定存在,即使存在逆矩阵,也会导致逼近方向出现偏差,严重影响优化方向。LM法正是为了解决矩阵G的正定问题而提出的,其将矩阵G加上单位矩阵I的倍数来解决正定问题。
  • LM法相当于最速下降法和高斯牛顿法的结合体。当u很小时,矩阵J接近矩阵G,其相当于高斯-牛顿法,此时迭代收敛速度快,当u很大时,其相当于梯度下降法,此时迭代收敛速度慢。因此LM算法即具有高斯-牛顿法收敛速度快、不容易陷入局部极值的优点,也具有梯度下降法稳定逼近最优解的特点。
  • 拟牛顿法是相对于牛顿法的改进。牛顿法虽然收敛速度快,但是需要计算海塞矩阵的逆矩阵 H^{-1} ,而且有时目标函数的海塞矩阵无法保持正定,从而使得牛顿法失效。为了克服这两个问题,人们提出了拟牛顿法。这个方法的基本思想是:不用二阶偏导数而构造出可以近似海塞矩阵(或海塞矩阵的逆)的正定对称阵。不同的构造方法就产生了不同的拟牛顿法,常用的拟牛顿算法有:DFP算法、BFGS算法、L-BFGS算法。严格意义上讲高斯牛顿法和LM法都属于拟牛顿法。

3 相关计算公式

参考链接:

最优化算法之牛顿法、高斯-牛顿法、LM算法_萌萌哒程序猴的博客-CSDN博客

梯度下降法和最速下降法的细微差别_TimingSpace的博客-CSDN博客_最速下降法


http://chatgpt.dhexx.cn/article/ObKWFlWf.shtml

相关文章

牛顿法与拟牛顿法学习笔记(二)拟牛顿条件

机器学习算法中经常碰到非线性优化问题&#xff0c;如 Sparse Filtering 算法&#xff0c;其主要工作在于求解一个非线性极小化问题。在具体实现中&#xff0c;大多调用的是成熟的软件包做支撑&#xff0c;其中最常用的一个算法是 L-BFGS。为了解这个算法的数学机理&#xff0c…

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

机器学习算法中经常碰到非线性优化问题&#xff0c;如 Sparse Filtering 算法&#xff0c;其主要工作在于求解一个非线性极小化问题。在具体实现中&#xff0c;大多调用的是成熟的软件包做支撑&#xff0c;其中最常用的一个算法是 L-BFGS。为了解这个算法的数学机理&#xff0c…

最优化学习 拟牛顿法(Quasi-Newton Method)

拟牛顿法&#xff08;Quasi-Newton Method&#xff09; 拟牛顿法&#xff08;Quasi-Newton Method&#xff09;得到矩阵 B k 1 B_{k1} Bk1​获取 B k 1 B_{k1} Bk1​和 H k 1 H_{k1} Hk1​DFP方法(Davidon-Fletche Powell)BFGS方法(Broyden-Fletcher-Goldfarb-Shannon)Broyd…

牛顿法与拟牛顿法(含代码实现)

1. 牛顿法 牛顿法&#xff08;英语&#xff1a;Newton’s method&#xff09;又称为牛顿-拉弗森方法&#xff08;英语&#xff1a;Newton-Raphson method&#xff09;&#xff0c;它是一种在实数域和复数域上近似求解方程的方法。 牛顿法的基本思想是使用函数 f ( x ) {\dis…

拟牛顿法(DFP、BFGS、L-BFGS)

拟牛顿法 一、牛顿法 1.1 基本介绍 牛顿法属于利用一阶和二阶导数的无约束目标最优化方法。基本思想是&#xff0c;在每一次迭代中&#xff0c;以牛顿方向为搜索方向进行更新。牛顿法对目标的可导性更严格&#xff0c;要求二阶可导&#xff0c;有Hesse矩阵求逆的计算复杂的缺…

Quasi-Newton拟牛顿法(共轭方向法)

Quasi-Newton拟牛顿法(共轭方向法) 1. Introduction2. 牛顿法2.1 不能保证收敛2.2 Hessian计算复杂3. 共轭方向法3.1 共轭方向3.2 共轭方向上可以收敛到极小3.3 共轭梯度法得到的是Q上的共轭方向3.4 算法效果4. 拟牛顿法4.1 拟牛顿法构造的是Q的共轭方向4.2 确定Hk - 秩1修正…

BFGS算法

今天&#xff0c;我来讲一种在机器学习中常用到的优化算法&#xff0c;叫做BFGS算法。BFGS算法被认为是数值效果最好的拟牛顿 法&#xff0c;并且具有全局收敛性和超线性收敛速度。那么接下来将会详细讲解。 Contents 1. 什么是拟牛顿法 2. 拟牛顿法原理 3. DFP算法原理 4. BF…

拟牛顿法及其matlab实现

目录 一.前言 二.拟牛顿法的基本思想 三.秩1矫正Hk公式 四.算法步骤 五.代码实现 1.秩1矫正算法 2.目标函数 3.目标函数梯度 4.主函数 六.仿真结果与分析 一.前言 上上上篇文章介绍了牛顿法和修正牛顿法。想看的话可以往后翻。牛顿法有二阶的收敛速度&#xff0c;但He…

InnoDB数据库死锁

目录 场景描述问题分析解决方法延伸&#xff1a;数据库死锁数据库死锁例子 正文 回到顶部 场景描述 在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try restarting transaction...)。 回到顶部 问题分析 这个异常并不会…

mysql数据库死锁原因分析

一、死锁模拟复现 1、当前自己电脑的mysql版本8.0.22 2、数据库的隔离级别--可重复读&#xff08;默认隔离级别&#xff09; 3、自动提交关闭 4、表结构&#xff0c;age为非唯一索引&#xff0c;对下面整个案例非常重要 5、 1、事务A执行更新操作&#xff0c;更新成功 2、事务…

处理数据库死锁问题

在实际的项目环境中碰到了如下的问题 Microsoft.Data.SqlClient.SqlException (0x80131904): 事务(进程 ID 98)与另一个进程被死锁在 锁 资源上&#xff0c;并且已被选作死锁牺牲品。请重新运行该事务。 怀疑是因为数据库查询和修改中产生的死锁问题&#xff0c;造成的上述原因…

数据库死锁:原因和解决办法

理解数据库中的死锁 在数据库的上下文中&#xff0c;死锁是指两个或多个事务无法进行的情况&#xff0c;因为每个事务都在等待另一个事务释放资源。这可以类比为事务的循环链&#xff0c;每个事务都在等待链中的下一个事务释放资源。以下是一个死锁场景的视觉表示&#xff1a;…

Java面试必问:死锁(多线程死锁+数据库死锁)

死锁 接下来从几个方面介绍&#xff1a; 多线程死锁多线程死锁解决办法数据库死锁数据库死锁解决办法 多线程死锁是怎么造成的&#xff1f; 多线程锁定同一资源会造成死锁线程池中的任务使用当前线程池也可能出现死锁 参考连接&#xff1a; https://blog.csdn.net/qq_3506…

MySQL数据库死锁了,该怎么办?一文全解最新教程

文章目录 正文死锁的发生为什么会产生死锁&#xff1f;Insert 语句是怎么加行级锁的&#xff1f;1、记录之间加有间隙锁2、遇到唯一键冲突 如何避免死锁&#xff1f; 之前分享过 MySQL 死锁的文章&#xff0c;然后很多读者对「插入意向锁」认识很迷糊。 大家误以为「插入意向锁…

5 分钟理解数据库死锁

图片来源&#xff1a;网络 文章目录 死锁是如何产生的&#xff1f;如何解决并避免死锁总结 &#x1f37a;知人者智&#xff0c;自知者明。胜人者有力&#xff0c;胜己者强。知足者富&#xff0c;强行者有志。不失其所者久&#xff0c;死而不亡者寿。——老子 大家好&#xff01…

数据库死锁场景

场景一&#xff1a; 单一线程多次进入子事务发生死锁 问题&#xff1a; 线上问题发生了死锁&#xff0c;但通过死锁日志发现一直在等待查询结果。我们使用的数据库是PGsql&#xff0c;默认的隔离级别是“读已提交”&#xff0c;按理来说查询不会加锁&#xff0c;导致一度被带偏…

数据库常见死锁原因及处理

目录 前言什么是死锁死锁产生的四个必要条件 1. 表锁死锁死锁场景解决方案建议 2. 行锁死锁2.1 两个事务分别想拿到对方持有的锁&#xff0c;互相等待&#xff0c;于是产生死锁死锁场景解决方案 2.2 共享锁转换为排他锁死锁场景解决方案 3. INSERT ... ON DUPLICATE KEY UPDATE…

数据库死锁分析与解决

一、死锁的表现 1、错误信息是:事务(进程 ID)与另一个进程被死锁在 锁 资源上&#xff0c;并且已被选作死锁牺牲品。请重新运行该事务。 2、错误信息是:事务(进程 ID )与另一个进程被死锁在 锁 | 通信缓冲区 资源上&#xff0c;并且已被选作死锁牺牲品。请重新运行该事务。 二、…

数字 IC 技能拓展(1)Xilinx_Vivado_SDK_2019.1 安装详细教程

引言 工欲善其事必先利其器&#xff0c;而君之“器”尚无&#xff0c;就更别谈“事”了。赶紧&#xff01;我们需要下载并安装一个 Xilinx Vivado 软件&#xff01;&#xff01;接下来就飞速地开始我们的 Xilinx_Vivado_SDK_2019.1 详细安装教程&#xff01;&#xff01;&#…

win10安装vivado + vitis 2019.2 教程

win10安装vivado vitis 2019.2 教程 安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1fPlNDzpC0EPXMhOloDyzfA 提取码&#xff1a;1234 网上其他博主的安装教程&#xff0c;比如&#xff1a;vivado2019.2的安装&#xff0c;最后是没有安装上vitis PS端开发软件…