zoukankan      html  css  js  c++  java
  • 数值分析(八)

    拟牛顿法

    牛顿法具有不错的收敛性,但是每一次迭代需要计算此处的Hessian,这个计算代价是十分昂贵的,拟牛顿法就是用估计替代Hessian矩阵,使计算量大量减少。

    DFP

    假设现在已经来到了迭代点(x_{k+1}),这个点建立一个二次模型$$m_{k+1}(p) = f_{k+1} + abla 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})的梯度匹配上,前者是自然满足的,后者满足需要$$ abla m_{k+1}(-alpha_k p_k) = abla f_{k+1} -alpha_kB_{k+1}p_k = abla f_k$$即$$B_{k+1}s_k=y_k$$其中(s_k=x_{k+1}-x_k),(y_k = abla f_{k+1}- abla 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- ho_k s_k y_k^T)H_k(I- ho_k y_k s_k^T)+ ho_k s_k s_k^T quad ho_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 eq 0),那么更新公式是唯一的,如果(y_k=B_k s_k)那么唯一符合割线条件的是(B_{k+1}=B_k),如果(y_k eq 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|$$时按公式更新 (rin (0,1))应当很小,比如(10^{-8}),在不满足条件时,让(B_{k+1}=B_k)

    SR1 Trust-Region


  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/mathematic-offering/p/9388053.html
Copyright © 2011-2022 走看看