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

    特点

    相较于:
    最优化算法3【拟牛顿法1】

    BFGS算法使用秩二矩阵校正hesse矩阵的近似矩阵(B),即:

    [B_{k+1}=B_k+alphamu_kmu_k^T+eta u_k u_k^T ]

    算法分析

    将函数在(x_{k+1})处二阶展开:

    [f(x)=f(x_{k+1})+g_{k+1}^T(x-x_{k+1})+frac{1}{2}(x-x_{k+1})^TG_{k+1}(x-x_{k+1}) ]

    上式求导等于0,得:

    [g_k=g_{k+1}+G_{k+1}(x-x_{k+1}) ]

    (s_k=x_{k+1}-x_k),(y_k=g_{k+1}-g_k),则:

    [G_{k+1}s_kapprox y_k ]

    近似矩阵需要满足上述条件;

    [B_{k+1}s_kapprox y_k ]

    带入上边校正公式,化简可得:

    [B_{k+1}=B_k-frac{B_ks_ks_k^TB_k}{s_k^TB_ks_k}+frac{y_ky_k^T}{y_k^Ts_k} ]

    由于Armijo准则不能完全保证求得hesse矩阵近似阵(B_{k+1}),正定,还需对校正公式进行修正

    算法

    输入:梯度计算公式(gfun),容许误差:(epsilon),初始值(x_0),初始正定矩阵(B_0),Armijo准则需要的(deltain(0,1),sigmain(0,0.5))

    (step0:求梯度g_k,if\, abs(g_k)<=epsilon,break;输出x_k)

    (step1:解方程:B_kd=-g_k,求得迭代方向d_k)

    (step2:利用Armijo准则求迭代步长alpha_k,x_{k+1}=x_k+alpha_kd_k)

    (step3:由校正公式求B_{k+1})

    (step4:令k=k+1;to\, step0)

    reflect

    和之前的拟牛顿法比较,就是将校正矩阵由秩一矩阵换为秩二矩阵;

    reference

    《最优化方法及其Matlab程序设计》

    坚持
  • 相关阅读:
    数与bit
    ARM汇编优化1
    一 *(a+1)与*(&a+1)
    二 *(a+1)多维数组
    三 二维数组取址
    四 sizeof(a)
    永恒之蓝及WannaCry分析
    github使用记录
    三种页面置换算法的C++模拟
    opencv检测图像直线
  • 原文地址:https://www.cnblogs.com/liudianfengmang/p/13539502.html
Copyright © 2011-2022 走看看