• Levenberg-Marquardt优化算法以及基于LM的BP-ANN


    一.LM最优化算法   

        最优化是寻找使得目标函数有最大或最小值的的参数向量根据求导数的方法,可分为2大类。(1)若f具有解析函数形式,知道x后求导数速度快。(2)使用数值差分来求导数。根据使用模型不同,分为非约束最优化约束最优化最小二乘最优化Levenberg-Marquardt算法是最优化算法中的一种。

       Levenberg-Marquardt算法是使用最广泛的非线性最小二乘算法(用模型函数 f 对待估参数向量p在其领域内做线性近似,利用泰勒展开,忽略掉二阶以上的导数项,优化目标方程转化为线性最小二乘问题)。它是利用梯度求最大(小)值的算法,形象的说,属于“爬山”法的一种。它同时具有梯度法牛顿法的优点。当λ很小时,步长等于牛顿法步长,当λ很大时,步长约等于梯度下降法的步长。见下图:
        
        算法从山脚开始不断迭代。可以看到,它的寻优速度是比较快的,在山腰部分直接利用梯度大幅度提升(参见后文例子程序中u较小时),快到山顶时经过几次尝试(u较大时),最后达到顶峰(最大值点),算法终止。

       LM算法属于一种“信赖域法”,所谓的信赖域法,就是从初始点开始,先假设一个可以信赖的最大位移σ,然后在以当前点为中心,以σ为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。
       LM算法需要对每一个待估参数求偏导,所以,如果你的拟合函数 f 非常复杂,或者待估参数相当地多,那么可能不适合使用LM算法,而可以选择Powell算法(Powell算法不需要求导。LM收敛速度块。但是参数应该设定一个初值,其次对于多优化解的问题,也不是很适合。

       英文文档lemar介绍比较简洁,还包括伪代码,请点击下载:

       我的总结如下:

          (1)Principle: An iterative tech. to locate the minimum of a multivariate function (sum of squares of non-linear real-valued function).Assuming measure vector x’=f(p) ,target vector x (such as training target in classification problem) ,error vector e=x-x’:

    Optimization Object:arg(p) min(||x-f(p)||)

           Linear approximation: in the neighborhood of p, assuming J is Jacobian Matrix(f(p) to p) ,for a smallσ,so f(p+σ)=f(p)+σJ (Taylor Expansion) ,and

    min (||x-f(p+σ)||=min(||e-Jσ||)  =>  JTJσ=JTe  (derivation to σ)

           Introducing the damping term u and set N=( JTJ+uI)=> Nσ= JTe => σ

           For each iteration or updata of p(p:=p+σ), u is adjusted to assure a reduction in the error e(norm-2)

      

           (2)Merits & Defects:LM is a standard tech. fornon-linear least-squares problems:When u is set to a large value, p updates as steepest descent, otherwise updates as Gauss-Newton method.

             p shall be set toarelative reliable initial value (the work of RBM model).


    参考:
      1.Levenberg-Marquardt快速入门教程
  • 相关阅读:
    java实现DAG广度优先便利
    java实现图分组
    四。字符串
    二。链表
    一。数组
    TypeScript学习(六)@types包
    TypeScript学习(五)三斜线指令
    TypeScript学习(四)声明文件和declare关键字
    TypeScript学习(三)命名空间和模块
    TypeScript学习(二)函数重载
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393110.html
Copyright © 2020-2023  润新知