最优化算法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程序设计》