最优化方法(最速下降、牛顿法、高斯牛顿法、LM算法)

简介: 最优化方法(最速下降、牛顿法、高斯牛顿法、LM算法)

前言

最优化方法应用广泛,但在实现原理上大同小异。作者在学习高翔博士的视觉SLAM十四讲的过程中对其第六章非线性最小二乘求解所涉及到的最优化方法(最速下降、牛顿法、高斯牛顿法、LM算法)进行了简要总结如下:

最速下降法(梯度下降/一阶导数法)

作者在最速下降法解析(理解笔记)中曾经介绍过最速下降法的实现过程,并列举了一个小例子。在这里,为了文章整体的完整性,我们再重新叙述一下,大家也可以参考。

假设我们希望求解一个最小二乘问题:

                                 image.png

把上式在x处进行泰勒展开:

                      image.png

式中 J ( x )与H(x)分别为关于变量 x的雅克比矩阵(一阶导数)和海塞矩阵(二阶导数)。

在梯度下降法中,我们只考虑在 x处的一阶梯度。则上式变为:


                        image.png

认为沿着一阶梯度反方向下降最快,当然,在迭代过程中每一步走多长也是一个需要考虑的问题,我们可以设计一个定长 λ \lambda λ。当然这种方式有着明显的不合理之处,一个较大的步长会导致我们在优化过程中走出锯齿状路线,而一个较小的步长则会导致我们收敛速度过慢。这种设置为固定步长 λ 的方式为梯度下降法。很多时候认为梯度下降与最速下降是等价的,这并不十分准确,最速下降法对步长λ进行选取一个最优的 λ ∗

其把 λ代入: x ( 1 ) = x ( 0 ) − λ J ( x ) ,然后求取在 f ( x ( 1 ) )处取得最小值的 λ作为λ∗

牛顿法(二阶导数法)

这里我们保留在x处的二阶展开项:


                     image.png


首先明确一下我们的目的是找到一个最优的 Δ x ∗使得上式取得最小值:


                   image.png


将上式视为 Δ x的函数,对 Δ x进行求导,得到如下形式:


                                        J(x)+H(x)Δx

令其导数为0:

                                     J(x)+H(x)Δx=0

则取得极小值,解出增量为:

                                 image.png

还有另外一种理解方式是把牛顿法看成是对一阶导数法的求根过程,即使用牛顿法求解原函数一阶导数为零的 Δ x


牛顿法需要计算目标函数的二阶导数 H ( x ),这在遇到规模较大的问题时,会比较困难,因此我们常常避免 H ( x )矩阵的运算。

后续的高斯牛顿法和LM算法解决了这个问题。

高斯牛顿法

高斯牛顿法是对函数 f ( x )进行一阶展开(注意不是 f ( x ) 2,展开形式如下:

                                     f(x+Δx)f(x)+J(x)Δx

这里的J(x)也是雅克比矩阵,与前述不同的是这里是 f ( x )对变量 x的导数。

由此,当前我们的目标变成了:寻找一个增量Δ x ,使得image.png

                       image.png

展开上式:

                            image.png

上式关于Δ x 求导,并令其为0:

                         image.png

即:

                         image.png

上式是一个线性方程组,被称为增量方程,也可以称为高斯牛顿方程或者正规方程。把左边的系数即为H,右侧记为g,则上式转换为:

                                       image.png

这里的H即为牛顿法里海塞矩阵的近似,省略了计算二阶导数的过程。

上述过程中我们使用了image.png 的逆,但是image.png 是半正定的,不能保证其为非奇异性。

Levenberg-Marquadt(LM算法)

LM算法是一种信赖域方法,我们使用一个参数 ρ来根据我们的近似模型跟实际函数之间的差异来确定这个范围,如果 ρ的值较小,则差异较小,让范围继续扩大,而如果ρ的值很大,则差异较大,则缩小范围:                                        

                          image.png


上式中分子是实际函数下降的值,分母是近似值。若ρ的值接近1则认为近似是好的。如果ρ太小,则认为近似比较差,则需要缩小近似范围。反之,如果ρ比较大,则认为实际下降的比预计的大,我们可以扩大近似范围。

上图中公式(6.24)是一个带有不等式约束的优化问题。使用一个Lagrange乘子把其转换为一个无约束优化问题。

                  image.png

使用类似于高斯牛顿法中的过程,对上式进行求导,然后使其导数为0,得到的增量方程为:

                                              image.png

与高斯牛顿法相比,我们可以发现多出来一项image.png,简化记 D-I为:

                                        image.png

可以由上式观察到,当参数 λ的值比较大时,则LM算法接近为最速下降法,而 λ 的值较小时则近似于高斯牛顿法。

目录
相关文章
|
1天前
|
缓存 算法 安全
Java中的数据结构与算法优化策略
Java中的数据结构与算法优化策略
|
1天前
|
缓存 算法 Java
如何优化Java中的递归算法?
如何优化Java中的递归算法?
|
2天前
|
存储 算法 搜索推荐
Java数据结构与算法优化
Java数据结构与算法优化
|
3天前
|
算法
基于PSO粒子群优化的PID控制器参数整定算法matlab仿真
该文探讨了使用PSO(粒子群优化)算法优化PID控制器参数的方法。通过PSO迭代,不断调整PID控制器的Kp、Ki、Kd增益,以减小控制误差。文中提供了MATLAB2022a版本的核心代码,展示了参数优化过程及结果。系统仿真图像显示了参数随迭代优化的变化。PID控制器结合PSO算法能有效提升控制性能,适用于复杂系统的参数整定,未来研究可关注算法效率提升和应对不确定性。
|
3天前
|
算法
m基于GA遗传优化的高斯白噪声信道SNR估计算法matlab仿真
**MATLAB2022a模拟展示了遗传算法在AWGN信道中估计SNR的效能。该算法利用生物进化原理全局寻优,解决通信系统中复杂环境下的SNR估计问题。核心代码执行多代选择、重组和突变操作,逐步优化SNR估计。结果以图形形式对比了真实SNR与估计值,并显示了均方根误差(RMSE),体现了算法的准确性。**
10 0
|
4天前
|
机器学习/深度学习 算法
机器学习中的超参数优化涉及手动尝试、网格搜索、随机搜索、贝叶斯优化、梯度优化、进化算法等策略
【6月更文挑战第28天】**机器学习中的超参数优化涉及手动尝试、网格搜索、随机搜索、贝叶斯优化、梯度优化、进化算法等策略。工具如scikit-optimize、Optuna助力优化,迁移学习和元学习提供起点,集成方法则通过多模型融合提升性能。资源与时间考虑至关重要,交叉验证和提前停止能有效防止过拟合。**
11 0
|
5天前
|
机器学习/深度学习 存储 算法
基于SFLA算法的神经网络优化matlab仿真
**摘要:** 使用MATLAB2022a,基于SFLA算法优化神经网络,降低训练误差。程序创建12个神经元的前馈网络,训练后计算性能。SFLA算法寻找最优权重和偏置,更新网络并展示训练与测试集的预测效果,以及误差对比。SFLA融合蛙跳与遗传算法,通过迭代和局部全局搜索改善网络性能。通过调整算法参数和与其他优化算法结合,可进一步提升模型预测精度。
|
5天前
|
算法 vr&ar
技术好文共享:遗传算法解决函数优化
技术好文共享:遗传算法解决函数优化
|
5天前
|
机器学习/深度学习 算法 大数据
操作系统调度算法的演变与优化
在计算机科学领域中,操作系统的调度算法是核心的研究课题之一。本文深入探讨了操作系统调度算法的发展历程、当前挑战以及未来趋势。通过引用最新的科研数据和实验证据,本文旨在揭示调度算法如何适应现代计算需求的变化。我们将从理论到实践,详细分析不同调度算法的性能表现,并讨论如何利用这些算法来提升系统的整体效率和响应速度。
6 0
|
5天前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
22 1