特点
相较于:
最优化算法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程序设计》