Dogleg法(狗腿法)的推导与步骤

     看SLAM视觉十四讲的时候了解到了信赖域法(Trust Region)的其中一种叫Dogleg,然而上网找了一圈,发现并没有较为详细的推导,自己整理了一下网上的资源,然后详细的推了一下:

     首先L-M法是G-N法与最速下降法的混合形式,通过调整阻尼因子\mu来在这两种方法之间切换,而狗腿法类似,只不过它是通过改变信赖域来实现的。这里可以分为两个问题:

  1. 如何判断是使用G-N法还是最速下降法的增量?
  2. 如果确定了是使用哪个方法,那么它对应的增量\Delta x_{k}是多少?
  3. 狗腿法的增量为多少?

首先关于第二个问题,如果学过最速下降法和G-N法,那么可以知道,他们对应的增量分别为:

       G-N法为:x{_{k+1}}-x{_{k}}=-H^{^{-1}}g=h_{gn}             最速下降法为:x{_{k+1}}-x{_{k}}=-\alpha J^{T}(x)f(x)=\alpha h_{sd}

     这里需要注意的是 :最速下降法的增量的方向,也就是h_{sd}的值,并不是雅克比矩阵的转置J^{T}(x),这里我绕了很久,发现,十四讲的书上的雅克比矩阵其实是F(x)=\frac{1}{2}\left \| f(x) \right \|^{2}的雅克比矩阵,并不是f(x)的雅克比矩阵,如果我们将f(x)的雅克比矩阵计算出来为J(x),那么F(x)的雅克比矩阵实际上是J^{T}(x)f(x),推导如下:

      

     回到上面两个增量,这里的\alpha为多少呢?推导如下:

   然后我们将\alpha- J^{T}(x)f(x)相乘,发现最速下降法的增量x{_{k+1}}-x{_{k}}=-\frac{g^{T}g}{g^{T}J^{T}(x)J(x)g}g=\alpha h_{sd},在网上很多地方都会将它命名为P{^{u}}

   另外G-N法的增量x{_{k+1}}-x{_{k}}=-H^{^{-1}}g=h_{gn},网上很多地方将它命名为P^{B}

 以上,我们解决了之前提出的第二个问题,也就是这两个方法的增量为多少:

最速下降法:-\frac{g^{T}g}{g^{T}J^{T}(x)J(x)g}g(也可以叫做P{^{u}}或者\alpha h_{sd}

G-N法:-H^{^{-1}}g(也可以叫做P^{B}或者h_{gn}

然后来解决剩下两个问题,这两个问题其实可以合起来,也就是问:狗腿法的增量和G-N法、最速下降法的增量有什么关系?

        狗腿法“人为地”定义了利用信赖域来选择狗腿法的增量为多少(或者说狗腿法每一步的迭代步长),我在网上看到了两种方法,本质都是一样的,但是实施起来稍微有点不同:

方法一:

                                                            

       这里的三种情况可以对应如下的三个图(上面的\Delta表示信赖域半径):

                                                      

利用上面的判断标准来得出狗腿法对应的迭代步长h_{dl}

  方法二:

                                       

这里tau的选取方式如下:

                       
需要注意的是第三个情况,这种情况h_{dl}的值为delta,我们可以将等式两边同时求2范数的平方,并且将tau-1看做\beta,于是可以写成:   delta^{2}=(p^{U}+\beta (p^{B}-p^{U}))^{T}(p^{U}+\beta (p^{B}-p^{U}))

            =(p{^{U}})^{T}p^{U}+\beta ^{2}(p^{B}-p^{U})^{T}(p^{B}-p^{U})+2(p^{U})^{T}\beta (p^{B}-p^{U})

解这个2元1次方程就可以得出\beta =tau-1,再求tau。

至此,通过以上方法可以求出狗腿法对应的步长h{_{dl}}(或叫p_{k})。

然后计算增益比\rho,增益比的计算我见过分母上使用一阶近似,或者二阶近似,至于怎么选取我并不是很懂。但是我看网上别人的大都采用二阶近似。当使用h{_{dl}}计算出\rho之后,我们根据如下的判断标准来调整信赖域的半径:

                               

这里x_{NEW}=x_{k}+h_{dl}。然后不断地循环迭代。

以上的内容是参考别人的博客加上自己的理解和整理,参考地址如下:

狗腿法+算法描述

狗腿法

狗腿法+信赖域

f(x)和F(x)的梯度和雅克比矩阵

 

 

腿法Dogleg method)是一种非线性优化算法,用于求解无约束优化问题。在Matlab中,可以使用以下步骤来实现腿法: 1. 定义目标函数:首先,需要定义一个目标函数,即待优化的函数。假设目标函数为f(x),其中x为一个向量。 2. 定义梯度函数:腿法需要用到目标函数的梯度信息。因此,需要定义一个梯度函数,即计算目标函数梯度的函数。假设该函数为grad_f(x),返回一个与x维度相同的向量。 3. 定义海森矩阵函数:腿法还需要用到目标函数的海森矩阵(Hessian matrix)信息。因此,需要定义一个海森矩阵函数,即计算目标函数海森矩阵的函数。假设该函数为hessian_f(x),返回一个与x维度相同的矩阵。 4. 编写腿法的主要代码:在主代码中,可以使用以下步骤来实现腿法: a. 初始化参数:设置初始点x0和初始步长delta。选择两个参数:最大迭代次数max_iter和停止准则tol。 b. 迭代更新:在每一次迭代中,根据当前位置x,计算目标函数的梯度grad和海森矩阵hessian。 c. 计算搜索方向:根据梯度和海森矩阵,计算搜索方向p。常见的方有牛顿方、共轭梯度等。 d. 计算步长:根据搜索方向和目标函数,计算腿法的步长。可以通过线性插值或二次插值等方来选择步长。 e. 更新位置:根据步长和搜索方向,更新当前位置x。 f. 判断停止准则:根据设定的停止准则判断是否终止迭代。 5. 调用腿法函数:在主代码中,可以调用上述实现的腿法函数,传入目标函数、梯度函数、海森矩阵函数以及其他参数,进行优化。 请注意,以上是一种基本的实现方式,具体的实现细节可能会因问题的复杂性而有所变化。在实际使用中,可能还需要考虑一些优化技巧,例如设置合适的初始步长、选择适当的迭代停止准则等。 希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值