特點
相較於:
最優化算法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程序設計》
