最优化方法(最速下降、牛顿法、高斯牛顿法、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算法接近为最速下降法,而 λ 的值较小时则近似于高斯牛顿法。

目录
相关文章
|
7月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
232 6
|
6月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
7月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
365 14
|
6月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
466 5
|
7月前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
221 1
|
7月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
320 1
|
6月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
306 0
|
6月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
268 0
|
6月前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法

热门文章

最新文章