LM(列文伯格-马夸尔特)方法的个人理解,以及实现问题

前言

LM方法是适用于求解方程最小值的一种方法,在非线性优化的框架中,优化方法分为Line Search 和 Trust Region,也就是线搜索和信任域方法,它们是两种不同性质的方法。

不同之处:

LIne Search:不管当前迭代点X(k)到最优解X*之间的路径,每次迭代X(k)得到X(k+1),都是使用该点的反向梯度方向进行值得寻找,这就导致了这样一种可能得问题:‘在靠近X*的时候,X(k)反复震荡,不容易收敛。这种情况特别是会发生在固定迭代步长的时候,Eg:对于求解f(x)=x^2的最优解X*,当X(k)=0.01,而迭代步长为1的时候,这个时候下一个X(k+1)=-0.01,如此这就发生了震荡,无法收敛。这确实是特例,但是只要有这种情况存在,也就是我们能够找出一个情况算法有问题,我们就无法保证所需要优化的函数f(x)不存在这种性质。

代表:梯度下降法,牛顿法,高斯牛顿法。

Trust Region:对于当前迭代点X(k),我们会找出一个合适的迭代区域||D(X(k+1)-X(k))||<=hk,hk>0,下一个X(k+1)产生于该区域内,然后寻找这个区域的内最佳的迭代向量dX(k)。同时uk会根据每次的X(k)来计算调整,这就i是信任域的普遍思想。

代表:LM法。

LM法的个人理解

具体的实现方法我不做说明,网络上已经有很多人进行了详细的介绍。

这里转载一个我认为没有问题的他人的博客。https://www.codelast.com/%e5%8e%9f%e5%88%9blm%e7%ae%97%e6%b3%95%e7%9a%84%e5%ae%9e%e7%8e%b0/

这里需要说明的是,很多博主在描述到LM具体算法实现的伪代码描述时,大多会混淆拉格朗日乘子\lambda和信任域hk这两个参量。导致在说到具体实现的时候逻辑不清,在应该让h(k+1)=2*h(k)的时候,说成h(k+1)=h(k)/2。

下面来说明一下算法和LM思想原理之间的对应关系:

高斯牛顿法优化目标是\bigtriangleup x*=arg min \frac{1}{2}||f(x)+J(x)\bigtriangleup x||,利用求导数为0,我们得到\bigtriangleup x*=-(J(x)^{T}J(x))^{-1}J(x)f(x),但是这个要求J(x)^{T}J(x)必须是可逆矩阵,要求较为严格。

而LM算法优化目标是\bigtriangleup x*=arg min \frac{1}{2}||f(x)+J(x)\bigtriangleup x||,st.||D\Delta x||\leqslant h(k),因为约束条件的h(k)是迭代变化的,为了保证公式一致性,把约束条件改写成g(\Delta x)=\frac{||D\Delta x||}{h(k)}-1\leq 0是加了约束条件的优化目标.利用拉格朗日乘子法进行转换成无约束目标\bigtriangleup x*=arg min \frac{1}{2}||f(x)+J(x)\bigtriangleup x||+\frac{\lambda}{2 }(\frac{||D\Delta x||}{h(k)}-1),令u(k)=\frac{\lambda }{h(k)}

采用拉格朗日乘数法确实需要解出不同情况下对应的\lambda*,但是在LM法中进行了这样的操作,把\lambda看成常数,相等于把问题转化成了数学建模中的规划问题,约束条件的权重为\frac{\lambda }{\lambda +1},而高斯牛顿法优化目标为\frac{1}{\lambda +1},当\lambda =1时,两者同比重,也就是总优化目标同时考虑到了两者。这样我们就可以减少求解乘子的步骤,得到最终的迭代向量\bigtriangleup x*=-(J(x)^{T}J(x)+u(k)D^{T}D)^{-1}J(x)f(x),特别的当D为单位矩阵I时,表示信任域是一个球。

接下来讲述关键问题,也就是如何迭代u(k).

LM定义了这样一个比值参量\rho(x,\Delta x) =\frac{f(x+\Delta x)-f(x)}{J(x)\Delta x},表征了实际下降量与一阶微分量(也就是近似下降量)的比值。

在算法伪代码中有这么一个判断:

如果\rho(x(k),\Delta x)\leq 0.25,那么h(k+1)=h(k)/2,也就是减小信任域,此时在具体的算法中u(k+1)=2*u(k);

如果\rho(x(k),\Delta x)\geq 0.75,那么h(k+1)=2*h(k),也就是增大信任域,此时在具体的算法中u(k+1)=u(k)/2;

这其中的逻辑关系从LM迭代公式\bigtriangleup x*=-(J(x)^{T}J(x)+u(k)D^{T}D)^{-1}J(x)f(x)可以知道,因为如果实际下降比一阶近似小很多,那么表示二阶以上分量占了比较大的比重,这个时候非线性比较严重,那么就应该缩小信任域,u(k)增大,而\bigtriangleup x*的模长变小,也就是变化较小了。同理可说明另外的情况。

最后说明一下如果u(k)的迭代搞混了,也就是之前提到的,该增大的时候变小了,而该变小的时候增大了,这个时候会出现的问题。

最容易遇到的问题就是\Delta x迭代过小,通过查看\Delta x的模长||\Delta x||\approx2^(-k),就是同一个数量级,而且收敛于非最优解,过早收敛了。产生这种情况的逻辑在于:当某一次迭代过程得到\rho(x(k),\Delta x)\geq 0.75,本该u(k+1)=u(k)/2,但是搞混的情况下u(k+1)=2*u(k),下次的\Delta x迭代将会变得更小,因为u(k+1)=2*u(k)等价于信任域变小了。另外\lim_{||\Delta x||}\rho(x,\Delta x) =\frac{f(x+\Delta x)-f(x)}{J(x)\Delta x}=1,这样一次比一次的迭代小了,而且还是指数变小,那么就会使得目标在非最优解上收敛。通过修改程序上的正常逻辑,我们可以验证这样的情况。

最后附上LM算法的matlab程序

链接:https://pan.baidu.com/s/1_3AF-ZRkU9DPlcgxoMY-DA 
提取码:z7y8 
复制这段内容后打开百度网盘手机App,操作更方便哦

 

  • 19
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
列文伯格-马夸尔特算法(Levenberg-Marquardt algorithm)是一种非线性最小二乘优化算法,用于解决非线性最小二乘问题。下面是列文伯格-马夸尔特算法的推导过程: 1. 非线性最小二乘问题的一般形式为: $$ \min_{x} \frac{1}{2} \sum_{i=1}^{m} r_{i}^{2}(x) $$ 其中,$x$ 是一个 $n$ 维向量,$r_{i}(x)$ 是一个关于 $x$ 的非线性函数,$m$ 是数据点的数量。 2. 首先,我们将 $r_{i}(x)$ 在 $x_{k}$ 处进行泰勒展开,得到: $$ r_{i}(x) \approx r_{i}(x_{k}) + J_{i}(x_{k}) (x - x_{k}) $$ 其中,$J_{i}(x_{k})$ 是 $r_{i}(x)$ 在 $x_{k}$ 处的雅可比矩阵。 3. 将上式代入非线性最小二乘问题中,得到: $$ \min_{x} \frac{1}{2} \sum_{i=1}^{m} [r_{i}(x_{k}) + J_{i}(x_{k}) (x - x_{k})]^{2} $$ 4. 对上式进行求导,得到: $$ J(x_{k})^{T} J(x_{k}) \Delta x = -J(x_{k})^{T} r(x_{k}) $$ 其中,$J(x_{k})$ 是 $r(x)$ 在 $x_{k}$ 处的雅可比矩阵,$\Delta x = x - x_{k}$。 5. 如果 $J(x_{k})^{T} J(x_{k})$ 是非奇异矩阵,则可以直接求解 $\Delta x$: $$ \Delta x = -(J(x_{k})^{T} J(x_{k}))^{-1} J(x_{k})^{T} r(x_{k}) $$ 6. 如果 $J(x_{k})^{T} J(x_{k})$ 是奇异矩阵,则可以使用列文伯格-马夸尔特算法。具体来说,我们可以将上式改写为: $$ (J(x_{k})^{T} J(x_{k}) + \lambda I) \Delta x = -J(x_{k})^{T} r(x_{k}) $$ 其中,$\lambda$ 是一个正的常数,$I$ 是单位矩阵。 7. 如果 $\lambda$ 很小,则上式退化为高斯牛顿法;如果 $\lambda$ 很大,则上式退化为梯度下降法。因此,我们可以通过不断调整 $\lambda$ 的值,来实现在高斯牛顿法和梯度下降法之间的平衡。 8. 最终,我们可以通过以下方式更新 $x$: $$ x_{k+1} = x_{k} + \Delta x $$

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值