最优化算法3.2【拟牛顿法-BFGS算法】

特点

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

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

\[B_{k+1}=B_k+\alpha\mu_k\mu_k^T+\beta\nu_k\nu_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_k\approx y_k \]

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

\[B_{k+1}s_k\approx 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准则需要的\(\delta\in(0,1),\sigma\in(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程序设计》

posted @ 2020-08-21 10:03  ldfm  阅读(1051)  评论(0编辑  收藏  举报