数值分析(八)
拟牛顿法
牛顿法具有不错的收敛性,但是每一次迭代需要计算此处的Hessian,这个计算代价是十分昂贵的,拟牛顿法就是用估计替代Hessian矩阵,使计算量大量减少。
DFP
假设现在已经来到了迭代点\(x_{k+1}\),这个点建立一个二次模型$$m_{k+1}(p) = f_{k+1} + \nabla f_{k+1}^T p+\frac{1}{2}p^T B_{k+1} p$$现在\(B\)是未知的,需要根据之前迭代点的信息来推断\(B\),我们让\(m_{k+1}\)与\(f\)在\(x_{k}\)和\(x_{k+1}\)的梯度匹配上,前者是自然满足的,后者满足需要$$\nabla m_{k+1}(-\alpha_k p_k) = \nabla f_{k+1} -\alpha_kB_{k+1}p_k = \nabla f_k$$即$$B_{k+1}s_k=y_k$$其中\(s_k=x_{k+1}-x_k\),\(y_k = \nabla f_{k+1}-\nabla f_k\),这个被称为割线条件。\(B_{k+1}\)存在解需要\(s_k^T y_k>0\),这个条件可以由f是严格凸函数或者线搜索过程满足Wolf condition保证。这样\(B_{k+1}\)总有一个解,实际上有无限个解,为了唯一确定\(B_{k+1}\),取诸解中在某种范数意义下与\(B_k\)最近的解,不同的范数导出了不同的拟牛顿法,我们取weighted Frobenius norm,并取权重矩阵为average Hessian。于是得到解:$$B_{k+1} = (I-\gamma_k y_k s_k^T)B_k(I-\gamma_k s_k y_k^T)+\gamma_k y_k y_k^T \quad \gamma_k = \frac{1}{y_k^T s_k}$$令\(H_k = B_K^{-1}\)得到$$H_{k+1} = H_k-\frac{H_ky_ky_kTH_k}{y_KT H_k y_k}+\frac{s_k s_kT}{y_kT s_k}$$此即DFP方法的更新公式。
BFGS
BFGS实际上和DFP是对偶的,对\(H_{k+1}\)施加DFP中\(B_{k+1}\)的条件,得到$$H_{k+1} = (I-\rho_k s_k y_k^T)H_k(I-\rho_k y_k s_k^T)+\rho_k s_k s_k^T \quad \rho_k = \frac{1}{y_k^T s_k}$$于是BFGS算法如下
BFGS是目前几乎最高效的拟牛顿法,除此之外,他还有self-correcting的性质。
SR1方法
BFGS方法中,\(B_k\)通过一次rank-2 modification得到\(B_{k+1}\)。与这不同的是symmetric-rank-1更新,它拥有如下的一般形式$$B_{k+1} = B_{k}+\delta vv^T$$其中\(\delta\)是\(1\)或\(-1\),并且\(\delta,v\)的选取使得\(B_{k+1}\)满足割线条件,经过推算,得到$$B_{k+1} = B_k + \frac{(y_k-B_k s_k)(y_k-B_k s_k)^T}{(y_k-B_k s_k)^T s_k}$$和$$H_{k+1} = H_k +\frac{(s_k-H_k y_k)(s_k-H_k y_k)^T}{(s_k-H_k y_k)^Ty_k}$$
SR1方法的一大缺点是更新项的分母可能为0,这样会导致算法崩溃,具体地,如果\((y_k-B_k s_k)^T s_k \neq 0\),那么更新公式是唯一的,如果\(y_k=B_k s_k\)那么唯一符合割线条件的是\(B_{k+1}=B_k\),如果\(y_k \neq B_s s_k,(y_k-B_k s_k)^Ts_k=0\),那么满足割线条件的公式不存在。即使SR1可能崩溃,我们仍然对其感兴趣,因为:1.通过简单的保护措施可以防止崩溃,2.SR1做出的估计常常比BFGS更好,3.在某些问题中搜索过程不要求curvature条件,这样就无法保证\(y_k^T s_k>0\),那么BFGS更新不一定有解,这时就需要SR1做出的不定型Hessian估计了。
防止崩溃的保护措施很简单,就是只在$$|s_k^T (y_k-B_ks_k)|\geq r|s_k| |y_k-B_ks_k|$$时按公式更新 \(r\in (0,1)\)应当很小,比如\(10^{-8}\),在不满足条件时,让\(B_{k+1}=B_k\)
SR1 Trust-Region