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法。
具体的实现方法我不做说明,网络上已经有很多人进行了详细的介绍。
这里转载一个我认为没有问题的他人的博客。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具体算法实现的伪代码描述时,大多会混淆拉格朗日乘子和信任域hk这两个参量。导致在说到具体实现的时候逻辑不清,在应该让h(k+1)=2*h(k)的时候,说成h(k+1)=h(k)/2。
下面来说明一下算法和LM思想原理之间的对应关系:
高斯牛顿法优化目标是,利用求导数为0,我们得到,但是这个要求必须是可逆矩阵,要求较为严格。
而LM算法优化目标是,因为约束条件的h(k)是迭代变化的,为了保证公式一致性,把约束条件改写成是加了约束条件的优化目标.利用拉格朗日乘子法进行转换成无约束目标,令。
采用拉格朗日乘数法确实需要解出不同情况下对应的*,但是在LM法中进行了这样的操作,把看成常数,相等于把问题转化成了数学建模中的规划问题,约束条件的权重为,而高斯牛顿法优化目标为,当时,两者同比重,也就是总优化目标同时考虑到了两者。这样我们就可以减少求解乘子的步骤,得到最终的迭代向量,特别的当D为单位矩阵时,表示信任域是一个球。
接下来讲述关键问题,也就是如何迭代u(k).
LM定义了这样一个比值参量,表征了实际下降量与一阶微分量(也就是近似下降量)的比值。
在算法伪代码中有这么一个判断:
如果,那么h(k+1)=h(k)/2,也就是减小信任域,此时在具体的算法中u(k+1)=2*u(k);
如果,那么h(k+1)=2*h(k),也就是增大信任域,此时在具体的算法中u(k+1)=u(k)/2;
这其中的逻辑关系从LM迭代公式可以知道,因为如果实际下降比一阶近似小很多,那么表示二阶以上分量占了比较大的比重,这个时候非线性比较严重,那么就应该缩小信任域,u(k)增大,而的模长变小,也就是变化较小了。同理可说明另外的情况。
最后说明一下如果u(k)的迭代搞混了,也就是之前提到的,该增大的时候变小了,而该变小的时候增大了,这个时候会出现的问题。
最容易遇到的问题就是迭代过小,通过查看的模长||||2^(-k),就是同一个数量级,而且收敛于非最优解,过早收敛了。产生这种情况的逻辑在于:当某一次迭代过程得到,本该u(k+1)=u(k)/2,但是搞混的情况下u(k+1)=2*u(k),下次的迭代将会变得更小,因为u(k+1)=2*u(k)等价于信任域变小了。另外,这样一次比一次的迭代小了,而且还是指数变小,那么就会使得目标在非最优解上收敛。通过修改程序上的正常逻辑,我们可以验证这样的情况。
链接:https://pan.baidu.com/s/1_3AF-ZRkU9DPlcgxoMY-DA
提取码:z7y8
复制这段内容后打开百度网盘手机App,操作更方便哦