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,操作更方便哦

 

你可能感兴趣的:(优化算法,机器学习,算法)