迭代求解最优化问题——Levenberg-Marquardt算法

高斯牛顿法使用的条件

上一篇中提到了线性最小二乘问题 minx||Axb|| 的的标准方程为 ATAxATb=0 。其中x为n维向量,b为m维向量,A为 m×n 的矩阵。

从标准方程我们可以求出x的解析解,然而这其实隐含了一个条件,就是rank(A)=n。当A秩亏的时候, rank(ATA)rank(A)<n ATA 不可逆。

事实上,这种情况下x的解有无穷多个,此时问题是欠约束的。

我们使用高斯牛顿法的时候,也有同样的限制,当 rank(J)<n 时,理论上 JTJ 没有逆。但是由于浮点数误差等原因,我们有可能得到一个 JTJ 的逆,显然此时 det(JTJ) 非常接近于零,由于 ||Δ||=||(JTJ)1JTb||=||JTb||||det(JTJ)|| ,我们会得到一个非常大的 Δ 。这显然会导致求解失败。

正则化

为保证每次的迭代步长不过大,我们可以在优化的损失函数里面加入一个阻尼项,于是优化问题变成了 minx||Axb||2+λ||x||2

它的标准方程变成了 (ATA+λI)x=ATb ,因为 ATA ,当 λ>0 时, ATA+λI 一定可逆。

λ 的选取需要特别注意, λ 过小时起不到阻尼的作用, λ 过大时会使得最终求解的问题偏离原问题。

Levenberg算法

将上述策略应用到高斯牛顿法中,我们就得到了Levenberg算法。对标准方程 (JTJ+λI)Δ=JTb 。当 λ 接近于零时,方程退化成高斯牛顿法,当 λ 很大时, Δ=1λJTb ,接近于梯度下降法。

实际进行迭代时,我们可以动态的调整 λ 的大小,当损失函数下降较快时减少 λ ,当损失函数下降较慢时增加 λ ,从而使得迭代同时具备高斯牛顿法(收敛快但不一定能找到最值点)和梯度下降法(稳定但是速度慢)的优点。

Levenberg-Marquardt算法

上述策略中,当 λ 很大时 (JTJ+λI) 的求解对于最终迭代步长并没有什么贡献。Marquardt在此基础上提出我们可以通过Jacobian矩阵来缩放梯度的不同维度,从而在梯度较小的方向也能走得更远,由此将阻尼项改写为 λdiag(JTJ) 。这就是Levenberg-Marquardt算法。

Marquardt也提出了 λ 的选择策略。他提出在算法开始时假设两个参数 λ0 和ν >1。分别使用 λ=λ0 λ=λ/ν 迭代两次并计算损失函数。如果两次结果都比初始点差,则不断增加阻尼系数,用ν去乘 λ ,直到损失函数下降为止。

迭代时如果阻尼系数λ/ν使得损失函数下降更快,则用它来代替之前的λ,并使用当前点代替之前的点,再次执行该过程。否则不改变 λ ,并使用当前点代替之前的点。

事实上,如果对数值优化有一定了解的话,我们可以发现LM算法是一种信赖域算法。它使用二次模型来近似真实模型。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Levenberg-Marquardt算法是一种非线性最小二乘算法,用于最小化非线性函数与观测数据之间的差异。该算法用于曲线拟合、参数估计和优化等问题。 该算法通过迭代的方式不断调整参数的值,使得非线性函数与观测数据之间的方差最小化。其基本思想是结合了高斯-牛顿法和梯度下降法的优点,在每一步迭代中通过计算特定的正则化矩阵来调整参数的值。 具体而言,Levenberg-Marquardt算法在每一步迭代中计算出一个更新的参数值,通过将目标函数的Hessian矩阵与一个正则化矩阵进行求和,然后求解一个线性方程组来获得新的参数值。正则化矩阵的大小是一个可调整的参数,用于控制算法在高斯-牛顿法和梯度下降法之间的平衡。 Levenberg-Marquardt算法具有较快的收敛速度和良好的参数估计性能,可以应对多种不同的非线性函数和观测数据。此外,该算法对于初始参数值的选择也比较鲁棒,不容易陷入局部最优。 总结来说,Levenberg-Marquardt算法是一种高效的非线性最小二乘算法,可以用于解决曲线拟合和参数估计等问题。它通过结合高斯-牛顿法和梯度下降法的优点,在每一步迭代中利用正则化矩阵调整参数值,以最小化非线性函数与观测数据之间的差异。 ### 回答2: Levenberg-Marquardt算法是一种用于求解非线性最小二乘问题的优化算法。它结合了高斯-牛顿法和梯度下降法的优点,能够更加稳定和快速地找到最优解。 该算法的基本思想是通过迭代调整模型参数来逐步逼近最小二乘问题的最优解。在每一步迭代中,算法通过计算目标函数的一阶导数(梯度)和二阶导数(雅可比矩阵的转置乘以雅可比矩阵)来确定参数的更新方向。根据参数更新的幅度和目标函数的变化情况,算法会自动调整步长,以保证迭代过程的稳定性和收敛性。 Levenberg-Marquardt算法与高斯-牛顿法的区别在于,它引入了一个调整因子,即Levenberg-Marquardt因子,用于平衡梯度下降和高斯-牛顿的比例。如果梯度下降方向过大,可能会导致迭代过程发散,而如果高斯-牛顿方向过大,可能会导致更新步长过大。通过调整因子的大小,Levenberg-Marquardt算法可以在梯度下降和高斯-牛顿之间取得平衡,从而更好地控制迭代过程。 在实际应用中,Levenberg-Marquardt算法被广泛应用于数据拟合、曲线拟合、参数估计等问题。由于其收敛速度较快且稳定性较好,被认为是求解非线性最小二乘问题的一种有效方法。 ### 回答3: Levenberg-Marquardt算法是一种用于求解非线性最小二乘问题的优化算法。它是将高斯-牛顿法和最速下降法结合起来的一种方法。 在非线性最小二乘问题中,我们要求解一个形式为F(x) = 0的方程组,其中F(x)是一个向量函数,x是待求解的参数向量。Levenberg-Marquardt算法的目标是找到使得F(x)最小的x。该算法通过反复迭代来逐步逼近最优解。 Levenberg-Marquardt算法的关键思想是结合了高斯-牛顿法和最速下降法的优点。在每一次迭代中,算法会首先计算Jacobian矩阵J,然后通过将J的转置矩阵与J相乘得到Hessian矩阵H。接下来,算法会计算一个补充项 λI,其中λ是一个正数,I是单位矩阵。然后,算法就以高斯-牛顿法的方式求解线性方程组(H + λI)∆x = -JF(x),其中∆x是参数的增量。 如果λ较小,算法的性能更接近高斯-牛顿法;如果λ较大,算法的性能更接近最速下降法。因此,λ的取值将直接影响算法的收敛速度。 Levenberg-Marquardt算法具有较快的收敛速度和良好的稳定性。然而,由于需要在每次迭代中计算Jacobian矩阵和Hessian矩阵,算法在处理大规模问题时可能会面临计算和存储的挑战。此外,算法的初值对于最终结果也具有较大的影响。 总之,Levenberg-Marquardt算法是一种有效的非线性最小二乘优化算法,可以用于求解具有一定复杂度的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值