训练数据常用算法之Levenberg–Marquardt(LM)

      引入问题

       神经网络训练数据的过程就是不断调整未知参数使得代价函数达到最小值,通常选择均值平方差函数MSE,即解决一个如下问题。

  

      

       传统BP算法更新参数使用的是最快梯度下降法,即沿梯度的反方向,按一定步长大小,进行参数更新,使的评价函数达到极小值。

                                                                                     hsd = -F'(x)

       但是此种方法忽略了二阶导数项,最终阶段为线性收敛,且速度较慢,因此,更多时候是将其作为优化初始阶段所采用方法。

       相反,牛顿法使用了二阶导数,最终阶段收敛速度快,收敛性好,但不适合初始阶段。因此常将其与最快梯度下降法结合使用。牛顿法简单推导:

    值得注意的是,牛顿法计算出的hn是下降方向是有前提条件的,条件是H(即F''(x))是正定矩阵

     因此,若F''(x)正定,则h = hn 否则  h= hsd。

        LM

      但是,牛顿法需要时刻计算H矩阵,即二阶导数信息,是很麻烦的一件事情,LM算法的核心思想就是用雅可比矩阵(易计算)代替H矩阵的计算,使得优化效率有了提升。

     下面是用雅可比矩阵代替二阶导数的推导

 

      下面用雅可比矩阵来解决问题,首先推导高斯-牛顿法,LM法就是在高斯-牛顿法的基础上加入了一个变量因子。注意F是f的平方,因此我的理解是f作一阶展开就相当于F作二阶展开了。

                    

求F(x)的极小值被转化为了求L(h)极小,求解过程简化。高斯牛顿与牛顿法很像,可以对比一下:

高斯牛顿:L''(h)hgn = -L'(0),牛顿:F''(x)hn= -F'(x)。这种转化使得不用再计算F的二阶导数


     L-M算法与高斯-牛顿类似,如下式描述:

(1)当u=0时,退化为高斯牛顿算法

(2)当u很大时,hlm = -(F'(x))/u,退化为步长较小的梯度下降法

     

        因此在解决了高斯-牛顿法基础之上,LM算法的重点就是如何确定u值。引入一个评价量

        该量描述了使用L的下降量对F下降量的近似程度,如果ro较大,说明近似效果较好(可以理解为L下降量很小,接近极值点),可以继续减小u使得LM更接近高斯-牛顿;如果ro较小,说明近似效果较差,因此增大u使得LM更接近梯度法。u和ro的曲线如下图

       此外,还需要规定迭代结束条件(3者之一达到即可):

       (1)下降梯度g小于某一阈值

       (2)前后两次x的差小于某一阈值

       (3)达到最大迭代次数kmax

       最后LM算法流程如下:


参考资料(推导非常详细):Miroslav Balda 的Methods for non-linear least square problems

 http://download.csdn.net/detail/mingtian715/9708842

MATLAB代码(基于LM的优化版本):http://download.csdn.net/detail/mingtian715/9709054



  • 35
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值