zoukankan      html  css  js  c++  java
  • 最优化算法【牛顿法、拟牛顿法、BFGS算法】

    一、牛顿法

    对于优化函数(f(x)),在(x_0)处泰勒展开,

    [f(x)=f(x_0)+f^{'}(x_0)(x-x_0)+o(Delta x) ]

    去其线性部分,忽略高阶无穷小,令(f(x) = 0)得:

    [x=x_0-frac{f(x_0)}{f^{'}(x_0)} ]

    得牛顿法迭代公式:

    [x^{k+1}=x^k-frac{f(x^k)}{f^{'}(x^k)} ]

    对于最优化问题
    令导数等于零,得最优解,所以迭代公式为

    [x^{k+1}=x^k-frac{ abla f(x^k)}{frac{partial^2f(x^k)}{partial x_ipartial x_j}} ]

    即:

    [x^{k+1}=x^k-H_k^{-1} abla f(x^k) ]

    其中(H_k)为Hesse矩阵,表示函数二阶偏导数矩阵
    上述方法每次迭代都需要求Hesse矩阵,比较复杂

    二、拟牛顿法

    解决Hesse矩阵问题
    对于优化函数的泰勒展开公式,求导数得:

    [ abla f(x)= abla f(x^k)+H_k(x-x^k) ]

    (y_k= abla f(x^{k+1})- abla f(x^k)),(delta_k=x^{k+1}-x^k),则:

    [y_k=H_kdelta_k ]

    通过上式,可以依靠之前的(f(x^k),f(x^{k-1}),x^k,x^{k-1})的数据计算Hesse矩阵,具体算法有DFP算法,BFGS算法。

    三、L-BFGS算法

    由于BFGS算法存在存储数据过多的问题,又提出了L-BFGS算法,来优化存储数据

    conclusion

    本来打算上述算法逐一实现一下,做到这里,发现上述算法是逐渐优化的关系,L-BFGS算法是最好的版本,因此可以直接网上下载L-BFGS算法,
    根据自己需要修改。

    参考
    牛顿法和拟牛顿法

    坚持
  • 相关阅读:
    luogu_1009 阶乘之和
    codevs_3117 高精度练习之乘法(my struct)
    luogu_2142 高精度减法
    luogu_1601 A+B Problem(高精)
    luogu_1007 独木桥
    luogu_1006 传纸条
    luogu_1004 方格取数
    luogu_1003 铺地毯
    luogu_1002 过河卒
    BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)
  • 原文地址:https://www.cnblogs.com/liudianfengmang/p/13412238.html
Copyright © 2011-2022 走看看