Numerical Optimization Ch7. Large-Scale Unconstrained Optimization

第七章: 大规模无约束优化


许多现实的问题都需要对 成千上万个变量进行优化. 此时优化算法的 存储和计算量就成了主要的问题. 至今已有许多适用于大规模场景下的无约束优化算法, 其中有一些是第 章中方法的直接推广, 而有一些则是基于这些方法的改动. 第 章中的非线性共轭梯度法可以直接应用于大规模场景, 这是由于其在存储和计算上的双重俱佳表现.
第三、四章的算法 往往需要分解Hessian矩阵. 在大规模场景下, 这些分解可用 稀疏消元技术达成. 若这样的稀疏分解方法的计算量和存储量在允许的范围内, 且若能够解析地构造Hessian矩阵, 此时 牛顿法将成为解决问题的 不二之选.
然而一般说来, 分解Hessian矩阵并不可取. 在第1节中, 我们讨论 线搜索和信赖域框架下的非精确牛顿法. 我们指出, 最终得到的算法具有 喜人的全局收敛性, 基于某些参数的选取 甚至是超线性收敛的. 这些算法即使在真实的Hessian不定时仍然能求得高效的搜索方向, 且不涉及Hessian的解析计算与存储.
第2节主要处理 拟牛顿法在大规模场景下的推广. 事实上, 当真实的Hessian足够稀疏时, 拟牛顿法产生的Hessian近似仍然可能是稠密的, 从而不适用于大规模场景. 我们将介绍拟牛顿法的 有限内存变体, 其只需少量的向量计算与存储. 它们都十分 强健、经济且易于实施, 但它们的 收敛速度并不快. 我们还将在第3节简要介绍另一种方法, 它对于拟牛顿近似 B k B_k Bk的定义能够保持稀疏性.
第4节主要讨论大型问题中目标函数的常见结构性质—— 部分可分性. 对此可采取高效的牛顿和拟牛顿法, 从而 快速收敛且过程强健. 不过有时目标函数的详细信息并不容易获取, 从而无法直接应用.

1. 非精确牛顿法

回忆原始的牛顿步是通过求解系数矩阵为 n × n n\times n n×n对称矩阵的线性系统 ∇ 2 f k p k N = − ∇ f k \nabla^2f_kp_k^N=-\nabla f_k 2fkpkN=fk得到的. 本节我们介绍如何经济地近似求解 p k N p_k^N pkN, 且近似的方向会是好的搜索方向. 这些方法主要基于共轭梯度法或Lanczos方法求解牛顿方程, 其中会对Hessian中负曲率的出现进行修正. 以下将对线搜索和信赖域两种框架分别讨论. 这一类方法我们统称为非精确牛顿法.
注意使用迭代法求解牛顿方程时, 我们

  • 无需考虑分解Hessian的花销以及此过程中产生的填充 (fill-in)
  • 能保证在非精确求解下仍不损失快速收敛的性质
  • 计算过程不会涉及Hessian, 从而无需显式地计算或储存Hessian.

我们首先考察非精确步的计算将如何决定非精确牛顿法的局部收敛性质. 然后再基于共轭梯度法 (可能带有预处理) 考虑线搜索和信赖域的框架. 最后讨论使用Lanczos方法求解牛顿方程.

1.1 非精确牛顿法的局部收敛性

大多数迭代求解牛顿方程的算法, 其收敛均基于残差 r k = ∇ 2 f k p k + ∇ f k , r_k=\nabla^2f_kp_k+\nabla f_k, rk=2fkpk+fk,其中 p k p_k pk就是非精确牛顿步. 通常若 ∥ r k ∥ ≤ η k ∥ ∇ f k ∥ , \Vert r_k\Vert\le\eta_k\Vert\nabla f_k\Vert, rkηkfk,我们就终止正在进行的迭代. 其中序列 { η k : 0 &lt; η k &lt; 1 } \{\eta_k:0&lt;\eta_k&lt;1\} {ηk:0<ηk<1}称为强迫序列(forcing sequence). 下面我们讨论基于以上判定方式的非精确牛顿法, 其收敛速度受强迫序列怎样的影响. 以下的两个定理不仅适用于牛顿—共轭梯度法(Newton-CG), 同样也适用于所有基于以上判别方式的非精确牛顿法.

第一个定理仅需 η k \eta_k ηk与1保持一定的距离.
定理1 ∇ 2 f ( x ) \nabla^2f(x) 2f(x)在极小点 x ∗ x^* x的一个邻域内存在且连续, ∇ 2 f ( x ∗ ) \nabla^2f(x^*) 2f(x)正定. 考虑迭代 x k + 1 = x k + p k x_{k+1}=x_k+p_k xk+1=xk+pk, 其中 p k p_k pk满足上面的收敛判定, 且假设 η k ≤ η ∈ [ 0 , 1 ) \eta_k\le\eta\in[0,1) ηkη[0,1). 则若初始点 x 0 x_0 x0距离 x ∗ x^* x充分近, 就有序列 { x k } \{x_k\} {xk}收敛到 x ∗ x^* x且满足 ∥ ∇ 2 f ( x ∗ ) ( x k + 1 − x ∗ ) ∥ ≤ η ^ ∥ ∇ 2 f ( x ∗ ) ( x k − x ∗ ) ∥ , \Vert\nabla^2f(x^*)(x_{k+1}-x^*)\Vert\le\hat{\eta}\Vert\nabla^2f(x^*)(x_k-x^*)\Vert, 2f(x)(xk+1x)η^2f(x)(xkx),其中 η &lt; η ^ &lt; 1 \eta&lt;\hat{\eta}&lt;1 η<η^<1.
证明: 由于 ∇ 2 f \nabla^2f 2f x ∗ x^* x处正定且在其附近连续, 从而存在正常数 L L L对于任意充分接近 x ∗ x^* x x k x_k xk均有 ∥ ( ∇ 2 f ( x k ) − 1 ∥ ≤ L \Vert(\nabla^2f(x_k)^{-1}\Vert\le L (2f(xk)1L. 从而由 p k p_k pk满足 ∥ p k ∥ ≤ L ( ∥ ∇ f k ∥ + ∥ r k ∥ ) ≤ 2 L ∥ ∇ f k ∥ . \Vert p_k\Vert\le L(\Vert\nabla f_k\Vert+\Vert r_k\Vert)\le 2L\Vert\nabla f_k\Vert. pkL(fk+rk)2Lfk.利用Taylor定理以及 ∇ 2 f ( x ) \nabla^2f(x) 2f(x)的连续性, 我们有 ∇ f k + 1 = ∇ f k + ∇ 2 f k p k + ∫ 0 1 [ ∇ 2 f ( x k + t p k ) − ∇ 2 f ( x k ) ] p k &ThinSpace; d t = ∇ f k + ∇ 2 f k p k + o ( ∥ p k ∥ ) = ∇ f k + ( r k − ∇ f k ) + o ( ∥ ∇ f k ∥ ) = r k + o ( ∥ ∇ f k ∥ ) . \begin{aligned}\nabla f_{k+1}&amp;=\nabla f_k+\nabla^2f_kp_k+\int_0^1[\nabla^2 f(x_k+tp_k)-\nabla^2 f(x_k)]p_k\,\mathrm{d}t\\&amp;=\nabla f_k+\nabla^2f_kp_k+o(\Vert p_k\Vert)\\&amp;=\nabla f_k+(r_k-\nabla f_k)+o(\Vert\nabla f_k\Vert)\\&amp;=r_k+o(\Vert\nabla f_k\Vert).\end{aligned} fk+1=fk+2fkpk+01[2f(xk+tpk)2f(xk)]pkdt=fk+2fkpk+o(pk)=fk+(rkfk)+o(fk)=rk+o(fk).在两边取范数可得, ∥ ∇ f k + 1 ∥ ≤ η k ∥ ∇ f k ∥ + o ( ∥ ∇ f k ∥ ) ≤ ( η k + o ( 1 ) ) ∥ ∇ f k ∥ . \Vert\nabla f_{k+1}\Vert\le\eta_k\Vert\nabla f_k\Vert+o(\Vert\nabla f_k\Vert)\le(\eta_k+o(1))\Vert\nabla f_k\Vert. fk+1ηkfk+o(fk)(ηk+o(1))fk. x k x_k xk距离 x ∗ x^* x充分近时, o ( 1 ) o(1) o(1)可以用 ( 1 − η ) / 2 (1-\eta)/2 (1η)/2控制, 从而 ∥ ∇ f k + 1 ∥ ≤ ( η k + ( 1 − η ) / 2 ) ∥ ∇ f k ∥ ≤ 1 + η 2 ∥ ∇ f k ∥ . \Vert\nabla f_{k+1}\Vert\le(\eta_k+(1-\eta)/2)\Vert\nabla f_k\Vert\le\frac{1+\eta}{2}\Vert\nabla f_k\Vert. fk+1(ηk+(1η)/2)fk21+ηfk.这说明梯度范数序列至少以 ( 1 + η ) / 2 (1+\eta)/2 (1+η)/2的速度下降. 由光滑性的假设, ∇ f k = ∇ 2 f ( x ∗ ) ( x k − x ∗ ) + o ( ∥ x k − x ∗ ∥ ) . \nabla f_k=\nabla^2f(x^*)(x_k-x^*)+o(\Vert x_k-x^*\Vert). fk=2f(x)(xkx)+o(xkx).因此, 当 x k x_k xk x ∗ x^* x很近时, 梯度与"缩放过"的误差 ∇ 2 f ( x ∗ ) ( x k − x ∗ ) \nabla^2f(x^*)(x_k-x^*) 2f(x)(xkx)相差是很小的. 因此类似的估计对 { ∥ x k ∥ } \{\Vert x_k\Vert\} {xk}也成立. 证毕.

由于 ∥ ∇ f k + 1 ∥ ∥ ∇ f k ∥ ≤ η k + o ( 1 ) , \frac{\Vert\nabla f_{k+1}\Vert}{\Vert\nabla f_k\Vert}\le\eta_k+o(1), fkfk+1ηk+o(1),因此若 η k → 0 ( k → ∞ ) \eta_k\to0(k\to\infty) ηk0(k), 则 ∥ ∇ f k + 1 ∥ ∥ ∇ f k ∥ → 0 ( k → ∞ ) . \frac{\Vert\nabla f_{k+1}\Vert}{\Vert\nabla f_k\Vert}\to0(k\to\infty). fkfk+10(k).这说明梯度范数序列具有Q-超线性收敛性. 对于 { ∥ x k ∥ } \{\Vert x_k\Vert\} {xk}也有类似结论:由于 ∇ f k + 1 − ∇ f ∗ = ∇ 2 f ( γ k + 1 ) ( x k + 1 − x ∗ ) , ∃ γ k + 1 , \nabla f_{k+1}-\nabla f^*=\nabla^2f(\gamma_{k+1})(x^{k+1}-x^*),\exists\gamma_{k+1}, fk+1f=2f(γk+1)(xk+1x),γk+1,所以 ∥ x k + 1 − x ∗ ∥ = ∥ ∇ 2 f ( γ k + 1 ) − 1 ∇ f k + 1 ∥ ≤ ∥ ∇ f k + 1 ∥ = o ( ∥ ∇ f k ∥ ) = o ( ∥ ∇ 2 f ( γ k ) ( x k − x ∗ ) ∥ ) ≤ L ~ o ( ∥ x k − x ∗ ∥ ) , ∃ L ~ . \begin{aligned}\Vert x^{k+1}-x^*\Vert&amp;=\Vert \nabla^2f(\gamma_{k+1})^{-1}\nabla f_{k+1}\Vert\\&amp;\le\Vert\nabla f_{k+1}\Vert=o(\Vert\nabla f_k\Vert)\\&amp;=o(\Vert\nabla^2f(\gamma_k)(x^k-x^*)\Vert)\\&amp;\le\tilde{L}o(\Vert x^k-x^*\Vert),\quad\exists\tilde{L}.\end{aligned} xk+1x=2f(γk+1)1fk+1fk+1=o(fk)=o(2f(γk)(xkx))L~o(xkx),L~.若对 ∇ 2 f ( x ) \nabla^2f(x) 2f(x)附加上在 x ∗ x^* x附近Lipschitz连续的条件, 我们就能得到二次收敛性. 此时 ∇ f k + 1 = r k + O ( ∥ ∇ f k ∥ 2 ) . \nabla f_{k+1}=r_k+O(\Vert\nabla f_k\Vert^2). fk+1=rk+O(fk2).选取强迫序列 η k = O ( ∥ ∇ f k ∥ ) \eta_k=O(\Vert\nabla f_k\Vert) ηk=O(fk), 我们就有 ∥ ∇ f k + 1 ∥ = O ( ∥ ∇ f k ∥ 2 ) . \Vert\nabla f_{k+1}\Vert=O(\Vert\nabla f_k\Vert^2). fk+1=O(fk2).从而有梯度范数序列的二次收敛性 ( { ∥ x k ∥ } \{\Vert x_k\Vert\} {xk}的二次收敛性也类似). 以下第二个定理就总结了这些讨论.
定理2 设定理1的条件成立, 且设由非精确牛顿法产生的序列 { x k } \{x_k\} {xk}收敛到 x ∗ x^* x. 则当 η k → 0 \eta_k\to0 ηk0, 就有超线性收敛; 若 ∇ 2 f ( x ) \nabla^2f(x) 2f(x) x ∗ x^* x附近Lipschitz连续, η k = O ( ∥ ∇ f k ∥ ) \eta_k=O(\Vert\nabla f_k\Vert) ηk=O(fk), 则就有二次收敛.

对于超线性收敛, 我们可设置 η k = min ⁡ ( 0.5 , ∥ ∇ f k ∥ ) \eta_k=\min(0.5,\sqrt{\Vert\nabla f_k\Vert}) ηk=min(0.5,fk ); 对于二次收敛, 我们可设置 η k = min ⁡ ( 0.5 , ∥ ∇ f k ∥ ) \eta_k=\min(0.5,\Vert\nabla f_k\Vert) ηk=min(0.5,fk).

上面的结论均是局部意义上的. 它们假设序列 { x k } \{x_k\} {xk}会最终进入 x ∗ x^* x的一个邻域内, 并假定单位步长 α k = 1 \alpha_k=1 αk=1, 使得全局的策略不会影响收敛速度. 下面我们说明, 非精确牛顿法可被包含在实用线搜索和信赖域的框架内, 从而有良好的局部和全局收敛性质. 我们先从线搜索算法开始.

1.2 线搜索Newton-CG算法

线搜索Newton-CG算法也被称为截断牛顿法(truncated Newton method), 其中我们使用共轭梯度法求解牛顿方程, 并以前述的非精确的牛顿法的收敛条件作为算法终止的判据. 然而共轭梯度法仅适用于正定系统, 但当 x k x_k xk接近 x ∗ x^* x ∇ 2 f k \nabla^2f_k 2fk很可能拥有负特征值. 因此这样一来, 当算法产生负曲率的方向时, 我们就应当立即终止CG迭代. 这一改动使得CG能总是产生下降方向. 进一步地, 这也能将原始牛顿法的快速收敛性质嫁接到此处, 当然这需要步长选取满足一定的条件 (例如 α k = 1 \alpha_k=1 αk=1总是头一个被检测).
下面我们给出将修正共轭梯度迭代作为内迭代的线搜索算法. 为记号方便统一, 我们将牛顿方程写成 B k p = − ∇ f k , B_kp=-\nabla f_k, Bkp=fk,其中 B k B_k Bk在这里就是 ∇ 2 f k \nabla^2f_k 2fk. 而对于CG内迭代, 则以 d j d_j dj表示搜索方向, 以 z j z_j zj表示产生的迭代项. 当 B k B_k Bk正定, 内迭代将收敛到牛顿步 p k N p_k^N pkN, 从而求解了牛顿方程. 在每一步迭代中, 我们都定义容忍限 ϵ k \epsilon_k ϵk以保证计算出来的解的精确程度. 同时选取强迫序列为 η k = min ⁡ ( 0.5 , ∥ ∇ f k ∥ ) \eta_k=\min(0.5,\sqrt{\Vert\nabla f_k\Vert}) ηk=min(0.5,fk )以得到超线性收敛. 当然这里强迫序列的选取不唯一.

算法1 (Line Search Newton-CG)
Given initial point x 0 x_0 x0;
for k = 0 , 1 , 2 , . . . k=0,1,2,... k=0,1,2,...
\quad\quad Define tolerance ϵ k = min ⁡ ( 0.5 , ∥ ∇ f k ∥ ) ∥ ∇ f k ∥ \epsilon_k=\min(0.5,\sqrt{\Vert\nabla f_k\Vert})\Vert\nabla f_k\Vert ϵk=min(0.5,fk )fk;
\quad\quad Set z 0 = 0 , r 0 = ∇ f k , d 0 = − r 0 = − ∇ f k z_0=0,r_0=\nabla f_k,d_0=-r_0=-\nabla f_k z0=0,r0=fk,d0=r0=fk;
\quad\quad for j = 0 , 1 , 2 , . . . j=0,1,2,... j=0,1,2,...
\quad\quad\quad\quad if d j T B k d j ≤ 0 d_j^TB_kd_j\le0 djTBkdj0
\quad\quad\quad\quad\quad\quad if j = 0 j=0 j=0
\quad\quad\quad\quad\quad\quad\quad\quad return p k = − ∇ f k p_k=-\nabla f_k pk=fk;
\quad\quad\quad\quad\quad\quad else
\quad\quad\quad\quad\quad\quad\quad\quad return p k = z j p_k=z_j pk=zj;
\quad\quad\quad\quad Set α j = r j T r j / d j T B k d j \alpha_j=r_j^Tr_j/d_j^TB_kd_j αj=rjTrj/djTBkdj;
\quad\quad\quad\quad Set z j + 1 = z j + α j d j z_{j+1}=z_j+\alpha_jd_j zj+1=zj+αjdj;
\quad\quad\quad\quad Set r j + 1 = r j + α j B k d j r_{j+1}=r_j+\alpha_jB_kd_j rj+1=rj+αjBkdj;
\quad\quad\quad\quad if ∥ r j + 1 ∥ &lt; ϵ k \Vert r_{j+1}\Vert&lt;\epsilon_k rj+1<ϵk
\quad\quad\quad\quad\quad\quad return p k = z j + 1 p_k=z_{j+1} pk=zj+1;
\quad\quad\quad\quad Set β j + 1 = r j + 1 T r j + 1 / r j T r j \beta_{j+1}=r_{j+1}^Tr_{j+1}/r_j^Tr_j βj+1=rj+1Trj+1/rjTrj;
\quad\quad\quad\quad Set d j + 1 = − r j + 1 + β j + 1 d j d_{j+1}=-r_{j+1}+\beta_{j+1}d_j dj+1=rj+1+βj+1dj;
\quad\quad end (for)
\quad\quad Set x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_kp_k xk+1=xk+αkpk, where α k \alpha_k αk satisfies the Wolfe, Goldstein, or Armijo backtracking conditions (using α k = 1 \alpha_k=1 αk=1 if possible)
end (for)

算法1的内循环与第五章的实用CG算法相比有以下几点不同:

  1. 算法1中指定了初始点为 z 0 = 0 z_0=0 z0=0;
  2. 容忍限 ϵ k \epsilon_k ϵk的使用使得CG可在非精确解上终止;
  3. 负曲率检测 d j T B k d j ≤ 0 d_j^TB_kd_j\le0 djTBkdj0保证了 p k p_k pk一定是 f f f x k x_k xk的下降方向. 事实上, 若此前均有 d j T B k d j &gt; 0 d_j^TB_kd_j&gt;0 djTBkdj>0, 则 p k T ∇ f k = ∑ i = 0 j − 1 ∥ r i ∥ 2 d i T B k d i d i T ∇ f k . p_k^T\nabla f_k=\sum_{i=0}^{j-1}\frac{\Vert r_i\Vert^2}{d_i^TB_kd_i}d_i^T\nabla f_k. pkTfk=i=0j1diTBkdiri2diTfk. r i = B k z i + ∇ f k = B k ∑ m = 0 i − 1 α m d m + ∇ f k , r_i=B_kz_i+\nabla f_k=B_k\sum_{m=0}^{i-1}\alpha_md_m+\nabla f_k, ri=Bkzi+fk=Bkm=0i1αmdm+fk,因此 d i T ∇ f k = d i T r i − ∑ m = 0 i − 1 α m d i T B k d m = d i T r i ( ∵ c o n j u g a c y ) . d_i^T\nabla f_k=d_i^Tr_i-\sum_{m=0}^{i-1}\alpha_md_i^TB_kd_m=d_i^Tr_i(\because conjugacy). diTfk=diTrim=0i1αmdiTBkdm=diTri(conjugacy).可以验证 d i T r i d_i^Tr_i diTri均负. 从而 p k p_k pk是个下降方向(Con’t d). 若在 j = 0 j=0 j=0就检测到了负曲率方向, 则 p k = − ∇ f k p_k=-\nabla f_k pk=fk也显然是一个下降方向(尽管曲率非正).

当然, 我们也可以用类似于第五章中的方法对算法1中的CG迭代预处理.
算法1相当适用于处理大规模问题, 但它有一个缺陷: 当Hessian矩阵 ∇ 2 f k \nabla^2f_k 2fk接近奇异时, 线搜索Newton-CG方向可能会很长且质量相当不好, 从而之后尽管在线搜索中计算了很多次函数值也仅带来很小的下降. 为缓解这一问题, 我们可以标准化牛顿步, 但这样一来何谓"好的"标准化又成了问题. 我们需要考虑这样做的风险: 可能会使算法丧失原有的收敛速度.
另一个细节是, 在负曲率检测中我们希望使用的是阈值而不是单纯地判定符号, 否则无法保证舍入误差带来的后果. 同样地, 这样一来阈值的选取也成了问题. 之后将介绍的信赖域框架下的Newton-CG迭代则会更有效地处理这一问题. 从这个角度说, 我们更倾向于使用信赖域Newton-CG.
需要指明的是, 线搜索Newton-CG算法并不需要显式的Hessian矩阵, 而仅需要我们提供矩阵-向量的乘积 ∇ 2 f k d \nabla^2f_kd 2fkd. 这向来可以看做CG的优点. 特别是, 当我们无法计算二阶导数或者Hessian需要巨大的存储量时, 这一特点显得尤为实用. 我们可以用第八章中的自动微分和有限差分技巧计算矩阵-向量乘积. 这样的方法被称作无Hessian牛顿法.

1.3 信赖域Newton-CG算法

第四章中, 我们讨论了两种改进Cauchy点、近似求解信赖域子问题的方法. 这里我们定义一种修正的CG算法用于求解子问题, 可见下面的算法2. 优化 f f f的完整算法则是将第四章中的信赖域框架和算法2结合起来得到, 其中每步迭代 ϵ k \epsilon_k ϵk需要适当选取.
我们使用与之前类似的记号定义信赖域子问题: min ⁡ p ∈ R n m k ( p ) = d e f f k + ( ∇ f k ) T p + 1 2 p T B k p s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; ∥ p ∥ ≤ Δ k , \min_{p\in\mathbb{R}^n}m_k(p)\xlongequal{def}f_k+(\nabla f_k)^Tp+\frac{1}{2}p^TB_kp\quad \mathrm{subject\,\,to\,}\Vert p\Vert\le\Delta_k, pRnminmk(p)def fk+(fk)Tp+21pTBkpsubjecttopΔk,其中 B k = ∇ 2 f k B_k=\nabla^2f_k Bk=2fk. 同算法1, 我们使用 d j d_j dj表示每步CG的搜索方向, z j z_j zj表示其产生的迭代项.

算法2 (CG-Steihaug)
Given tolerance ϵ k &gt; 0 \epsilon_k&gt;0 ϵk>0;
Set z 0 = 0 , r 0 = ∇ f k , d 0 = − r 0 = − ∇ f k z_0=0,r_0=\nabla f_k,d_0=-r_0=-\nabla f_k z0=0,r0=fk,d0=r0=fk;
if ∥ r 0 ∥ &lt; ϵ k \Vert r_0\Vert&lt;\epsilon_k r0<ϵk
\quad\quad return p k = z 0 = 0 p_k=z_0=0 pk=z0=0;
for j = 0 , 1 , 2 , . . . j=0,1,2,... j=0,1,2,...
\quad\quad if d j T B k d j ≤ 0 d_j^TB_kd_j\le0 djTBkdj0
\quad\quad\quad\quad Find τ \tau τ such that p k = z j + τ d j p_k=z_j+\tau d_j pk=zj+τdj minimizes m k ( p k ) m_k(p_k) mk(pk) and satisfies ∥ p k ∥ = Δ k \Vert p_k\Vert=\Delta_k pk=Δk;
\quad\quad\quad\quad return p k p_k pk;
\quad\quad Set α j = r j T r j / d j T B k d j \alpha_j=r_j^Tr_j/d_j^TB_kd_j αj=rjTrj/djTBkdj;
\quad\quad Set z j + 1 = z j + α j d j z_{j+1}=z_j+\alpha_jd_j zj+1=zj+αjdj;
\quad\quad if ∥ z j + 1 ∥ ≥ Δ k \Vert z_{j+1}\Vert\ge\Delta_k zj+1Δk
\quad\quad\quad\quad Find τ ≥ 0 \tau\ge0 τ0 such that p k = z j + τ d j p_k=z_j+\tau d_j pk=zj+τdj satisfies ∥ p k ∥ = Δ k \Vert p_k\Vert=\Delta_k pk=Δk;
\quad\quad\quad\quad return p k p_k pk;
\quad\quad Set r j + 1 = r j + α j B k d j r_{j+1}=r_j+\alpha_jB_kd_j rj+1=rj+αjBkdj;
\quad\quad if ∥ r j + 1 ∥ &lt; ϵ k \Vert r_{j+1}\Vert&lt;\epsilon_k rj+1<ϵk
\quad\quad\quad\quad return p k = z j + 1 p_k=z_{j+1} pk=zj+1;
\quad\quad Set β j + 1 = r j + 1 T r j + 1 / r j T r j \beta_{j+1}=r_{j+1}^Tr_{j+1}/r_j^Tr_j βj+1=rj+1Trj+1/rjTrj;
\quad\quad Set d j + 1 = − r j + 1 + β j + 1 d j d_{j+1}=-r_{j+1}+\beta_{j+1}d_j dj+1=rj+1+βj+1dj;
end (for)

算法中, 循环里第一个if将在算法遇到负曲率方向时终止算法, 而第二个if将在 z j + 1 z_{j+1} zj+1越过信赖域边界时终止算法. 两种情况下, 算法都将返回当前方向与信赖域边界相交得到的 p k p_k pk.
算法2中容忍限 ϵ k \epsilon_k ϵk的选取在控制整个算法的花销上至关重要. 在接近 x ∗ x^* x时, 信赖域边界约束将不再积极, 从而约减为前述的非精确牛顿法. 此时我们可以用算法1中类似的方式选取 ϵ k \epsilon_k ϵk.
算法2内循环与第五章实用CG迭代的本质不同在于: 算法2终止于

  1. 信赖域边界被穿越时;
  2. 算法遇到负曲率方向时;
  3. 满足收敛条件时.

从这个角度看, 算法2与算法1二者的内循环是很相像的.

需要说明, 算法2中指定 z 0 = 0 z_0=0 z0=0至关重要, 它的效果有二:

  1. ∥ ∇ f k ∥ ≥ ϵ k \Vert\nabla f_k\Vert\ge\epsilon_k fkϵk, 则算法2将得到 p k p_k pk满足 m k ( p k ) ≤ m k ( p k C ) m_k(p_k)\le m_k(p_k^C) mk(pk)mk(pkC). 我们分几种情形来证明这一论述.

    • d 0 T B k d 0 = ( ∇ f k ) T B k ∇ f k ≤ 0 d_0^TB_kd_0=(\nabla f_k)^TB_k\nabla f_k\le0 d0TBkd0=(fk)TBkfk0. 则算法将返回Cauchy点.
    • 否则, 算法将定义 z 1 = α 0 d 0 = r 0 T r 0 d 0 T B k d 0 d 0 = − ( ∇ f k ) T ∇ f k ( ∇ f k ) T B k ∇ f k ∇ f k . z_1=\alpha_0d_0=\frac{r_0^Tr_0}{d_0^TB_kd_0}d_0=-\frac{(\nabla f_k)^T\nabla f_k}{(\nabla f_k)^TB_k\nabla f_k}\nabla f_k. z1=α0d0=d0TBkd0r0Tr0d0=(fk)TBkfk(fk)Tfkfk. ∥ z 1 ∥ &lt; Δ k \Vert z_1\Vert&lt;\Delta_k z1<Δk, 则 z 1 z_1 z1就是Cauchy点. 后续产生的迭代步必定满足 m k ( p k ) ≤ m k ( z 1 ) m_k(p_k)\le m_k(z_1) mk(pk)mk(z1). 若 ∥ z 1 ∥ ≥ Δ k \Vert z_1\Vert\ge\Delta_k z1Δk, 则算法也在Cauchy点终止.
      以上, 我们就能说算法2是全局收敛的.
  2. 迭代项 z j z_j zj的范数是严格递增的. 这就暗示: 只要一越过信赖域边界, 算法就可以终止, 毕竟在信赖域内再没有迭代项会给出更小的模型函数值 m k m_k mk. 我们利用共轭梯度法的扩张子空间性质证明这一论断.

定理3 算法2产生的序列 { z j } \{z_j\} {zj}满足 0 = ∥ z 0 ∥ &lt; ⋯ &lt; ∥ z j ∥ &lt; ∥ z j + 1 ∥ &lt; ⋯ &lt; ∥ p k ∥ ≤ Δ k . 0=\Vert z_0\Vert&lt;\cdots&lt;\Vert z_j\Vert&lt;\Vert z_{j+1}\Vert&lt;\cdots&lt;\Vert p_k\Vert\le\Delta_k. 0=z0<<zj<zj+1<<pkΔk.
证明: 我们首先证明算法2产生的序列满足 z j T r j = 0 , j ≥ 0 ; z j T d j &gt; 0 , j ≥ 1 z_j^Tr_j=0,j\ge0; z_j^Td_j&gt;0, j\ge1 zjTrj=0,j0;zjTdj>0,j1. 我们将计算 z j z_j zj的算式显式地写出来, z j = z 0 + ∑ i = 0 j − 1 α i d i = ∑ i = 0 j − 1 α i d i . z_j=z_0+\sum_{i=0}^{j-1}\alpha_id_i=\sum_{i=0}^{j-1}\alpha_id_i. zj=z0+i=0j1αidi=i=0j1αidi.两端内积 r j r_j rj并利用共轭梯度法的扩张子空间性质, 我们有 z j T r j = ∑ i = 0 j − 1 α i d i T r j = 0. z_j^Tr_j=\sum_{i=0}^{j-1}\alpha_id_i^Tr_j=0. zjTrj=i=0j1αidiTrj=0.我们使用数学归纳法证明第二条. 由扩张子空间性质, 有 z 1 T d 1 = ( α 0 d 0 ) T ( − r 1 + β 1 d 0 ) = α 0 β 1 d 0 T d 0 &gt; 0. z_1^Td_1=(\alpha_0d_0)^T(-r_1+\beta_1d_0)=\alpha_0\beta_1d_0^Td_0&gt;0. z1Td1=(α0d0)T(r1+β1d0)=α0β1d0Td0>0.假设 z j T d j &gt; 0 z_j^Td_j&gt;0 zjTdj>0, 下证 z j + 1 T d j + 1 &gt; 0 z_{j+1}^Td_{j+1}&gt;0 zj+1Tdj+1>0. 由前面证明, z j + 1 T r j + 1 = 0 z_{j+1}^Tr_{j+1}=0 zj+1Trj+1=0, 从而 z j + 1 T d j + 1 = z j + 1 T ( − r j + 1 + β j + 1 d j ) = β j + 1 z j + 1 T d j = β j + 1 ( z j + α j d j ) T d j = β j + 1 z j T d j + α j β j + 1 d j T d j . \begin{aligned}z_{j+1}^Td_{j+1}&amp;=z_{j+1}^T(-r_{j+1}+\beta_{j+1}d_j)\\&amp;=\beta_{j+1}z_{j+1}^Td_j\\&amp;=\beta_{j+1}(z_j+\alpha_jd_j)^Td_j\\&amp;=\beta_{j+1}z_j^Td_j+\alpha_j\beta_{j+1}d_j^Td_j.\end{aligned} zj+1Tdj+1=zj+1T(rj+1+βj+1dj)=βj+1zj+1Tdj=βj+1(zj+αjdj)Tdj=βj+1zjTdj+αjβj+1djTdj.由归纳假设以及 β j + 1 , α j \beta_{j+1},\alpha_j βj+1,αj为正, 得最后一个表达式为正.
下面证明定理. 若算法因 d j T B k d j ≤ 0 d_j^TB_kd_j\le0 djTBkdj0 ∥ z j + 1 ∥ ≥ Δ k \Vert z_{j+1}\Vert\ge\Delta_k zj+1Δk终止, 则最后的 p k p_k pk必定满足 ∥ p k ∥ = Δ k \Vert p_k\Vert=\Delta_k pk=Δk. 为涵盖所有的可能性, 我们需证明 ∥ z j ∥ &lt; ∥ z j + 1 ∥ \Vert z_j\Vert&lt;\Vert z_{j+1}\Vert zj<zj+1, 其中 z j + 1 = z j + α j d j , j ≥ 1 z_{j+1}=z_j+\alpha_jd_j,j\ge1 zj+1=zj+αjdj,j1. 注意到 ∥ z j + 1 ∥ 2 = ( z j + α j d j ) T ( z j + α j d j ) = ∥ z j ∥ 2 + 2 α j z j T d j + α j 2 ∥ d j ∥ 2 &gt; ∥ z j ∥ 2 . \Vert z_{j+1}\Vert^2=(z_j+\alpha_jd_j)^T(z_j+\alpha_jd_j)=\Vert z_j\Vert^2+2\alpha_jz_j^Td_j+\alpha_j^2\Vert d_j\Vert^2&gt;\Vert z_j\Vert^2. zj+12=(zj+αjdj)T(zj+αjdj)=zj2+2αjzjTdj+αj2dj2>zj2.证毕.

从这一定理我们发现, 算法2实际上就是在沿着从 z 1 z_1 z1到最终 p k p_k pk的一条插值路径移动, 且每一步都会增加其余初始点的距离. 当 B k = ∇ 2 f k B_k=\nabla^2f_k Bk=2fk正定时, 我们可以拿这条路径与折线算法中的路径作比较: 二者均以 − ∇ f k -\nabla f_k fk为初始方向, 均最终指向 p k N p_k^N pkN直到打破信赖域边界约束.

1.4 预处理信赖域Newton-CG算法

如同第五章讨论的那般, 预处理可用于加速CG迭代. 主要就是要找到一个非奇异的矩阵 D D D使得 D − T ∇ 2 f k D − 1 D^{-T}\nabla^2f_kD^{-1} DT2fkD1的特征值具有更好的分布. 类似地推广定理3, 我们就可证明迭代项 z j z_j zj的加权范数 ∥ D ⋅ ∥ \Vert D\cdot\Vert D是单调递增的. 为保持一致性, 我们需要在原来的范数(即2-范数)下重新叙述信赖域子问题 (注意信赖域的边界约束改变了): min ⁡ p ∈ R n m k ( p ) = d e f f k + ∇ f k T p + 1 2 p T B k p , s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; ∥ D p ∥ ≤ Δ k . \min_{p\in\mathbb{R}^n}m_k(p)\xlongequal{def}f_k+\nabla f_k^Tp+\frac{1}{2}p^TB_kp,\quad\mathrm{subject\,\,to\,}\Vert Dp\Vert\le\Delta_k. pRnminmk(p)def fk+fkTp+21pTBkp,subjecttoDpΔk.作变量替换 p ^ = D p \hat{p}=Dp p^=Dp, 并定义 g ^ k = D − T ∇ f k , B ^ k = D − T ( ∇ 2 f k ) D − 1 , \hat{g}_k=D^{-T}\nabla f_k,\quad\hat{B}_k=D^{-T}(\nabla^2f_k)D^{-1}, g^k=DTfk,B^k=DT(2fk)D1,我们可把问题重写为 min ⁡ p ^ ∈ R n f k + g ^ k T p ^ + 1 2 p ^ T B ^ k p ^ , s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; ∥ p ^ ∥ ≤ Δ . \min_{\hat{p}\in\mathbb{R}^n}f_k+\hat{g}_k^T\hat{p}+\frac{1}{2}\hat{p}^T\hat{B}_k\hat{p},\quad\mathrm{subject\,\,to\,}\Vert\hat{p}\Vert\le\Delta. p^Rnminfk+g^kTp^+21p^TB^kp^,subjecttop^Δ.这就与原来的问题形式相同. 我们可将算法2原样照搬用于上述子问题, 这等价于用带预处理的算法2求解改变边界约束的信赖域子问题.
在第五章中我们说到没有普适的预处理子, 但仍然有一些选项可供选择, 起哄较为有效的一种, 是不完全Cholesky分解. 正定矩阵 B B B的不完全Cholesky分解是指寻找下三角矩阵 L L L使得 B = L L T − R , B=LL^T-R, B=LLTR,其中我们需要限制 L L L中元素的填充 (例如我们要求 L L L具有与 B B B下三角部分同样的稀疏性, 或者要求与 B B B具有相似的非零元个数). 而 R R R则反映了近似分解的非精确程度. 当 ∇ 2 f k \nabla^2f_k 2fk不定时, 可能会使情形复杂化; 次卧我们必须同时处理不定性与稀疏性. 下面的算法结合了不完全Cholesky分解以及一种修正的Cholesky分解, 定义了一种对于信赖域Newton-CG算法的预处理子.

算法3 (Inexact Modified Cholesky)
Compute T = d i a g ( ∥ B e 1 ∥ , ∥ B e 2 ∥ , … , ∥ B e n ∥ ) T=\mathrm{diag}(\Vert Be_1\Vert,\Vert Be_2\Vert,\ldots,\Vert Be_n\Vert) T=diag(Be1,Be2,,Ben), where e i e_i ei is the i i ith coordinate vector;
Set B ˉ ← T − 1 / 2 B T − 1 / 2 \bar{B}\leftarrow T^{-1/2}BT^{-1/2} BˉT1/2BT1/2; Set β ← ∥ B ˉ ∥ \beta\leftarrow\Vert\bar{B}\Vert βBˉ;
(compute a shift to ensure positive definiteness)
if min ⁡ i b i i &gt; 0 \min_ib_{ii}&gt;0 minibii>0
\quad\quad α 0 ← 0 \alpha_0\leftarrow0 α00;
else
\quad\quad α 0 ← β / 2 \alpha_0\leftarrow\beta/2 α0β/2;
for k = 0 , 1 , 2 , . . . k=0,1,2,... k=0,1,2,...
\quad\quad Attempt to apply incomplete Cholesky algorithm to obtain L L T = B ˉ + α k I ; LL^T=\bar{B}+\alpha_kI; LLT=Bˉ+αkI; \quad\quad if the factorization is completed successfully
\quad\quad\quad\quad stop and return L L L
\quad\quad else
\quad\quad\quad\quad α k + 1 ← max ⁡ ( 2 α k , β / 2 ) \alpha_{k+1}\leftarrow\max(2\alpha_k,\beta/2) αk+1max(2αk,β/2);
end (for)

之后我们就可设 D = L T D=L^T D=LT.

1.5信赖域Newton-Lanczos算法(Cont’d)

算法2的一个缺陷在于, 它对负曲率方向不具有选择性, 即它会接受任何负曲率的方向, 即使这个方向能给出的函数值下降并不显著. 例如, 考虑下面的子问题 min ⁡ p m ( p ) = 1 0 − 3 p 1 − 1 0 − 4 p 1 2 − p 2 2 , s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; ∥ p ∥ ≤ 1. \min_pm(p)=10^{-3}p_1-10^{-4}p_1^2-p_2^2,\quad\mathrm{subject\,\,to\,}\Vert p\Vert\le1. pminm(p)=103p1104p12p22,subjecttop1. p = 0 p=0 p=0处的最速下降方向是 ( − 1 0 − 3 , 0 ) T (-10^{-3},0)^T (103,0)T, 这是一个负曲率方向. 算法2便会沿着这一方向直至信赖域的边界, 给出函数值大约 1 0 − 3 10^{-3} 103的下降. 然而沿着另一负曲率方向 e 2 e_2 e2搜索便会得到大小约为1的下降.
对于这一现象至今已提出了许多方案. 在第四章我们了解到, 当Hessian矩阵 ∇ 2 f k \nabla^2f_k 2fk具有负特征值, 对应的搜索方向就会在 ∇ 2 f k \nabla^2f_k 2fk的最小特征值对应的特征向量上具有相当大的分量, 这是因为 ( ∇ 2 f k + λ I ) = − ∇ f k . (\nabla^2f_k+\lambda I)=-\nabla f_k. (2fk+λI)=fk.详细可见第四章定理1. 这一特征可使得算法迅速远离不是极小点的稳定点. 一种实现的方式, 是使用第四章第三节中的迭代方法近似精确地计算信赖域子问题. 这一实现方式需要每次求搜索方向时, 求解几个具有形如 B k + λ I B_k+\lambda I Bk+λI的系数矩阵的线性系统. 尽管这样在大规模情境下需要相当的计算量, 但它的确总是能产生良好的搜索方向.
另一种较为实用的方式是使用Lanczos算法而不是CG求解线性系统 B k p = − ∇ f k B_kp=-\nabla f_k Bkp=fk. Lanczos算法可以看做是CG在不定系统下的推广, 有了它我们可以在收集负曲率信息时继续CG过程.
j j j步后, Lanczos算法产生了一个 n × j n\times j n×j矩阵 Q j Q_j Qj, 其列向量相互正交且张成由此算法产生的Krylov子空间. 这一矩阵满足 Q j T B Q j = T j Q_j^TBQ_j=T_j QjTBQj=Tj, 其中 T j T_j Tj是三对角矩阵. 我们可以利用三对角的结构, 在 Q j Q_j Qj的值域中找信赖域子问题的一个近似解. 为此, 我们需求解 min ⁡ w ∈ R j f k + e 1 T Q j ( ∇ f k ) e 1 T w + 1 2 w T T j w , s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; ∥ w ∥ ≤ Δ k , \min_{w\in\mathbb{R}^j}f_k+e_1^TQ_j(\nabla f_k)e_1^Tw+\frac{1}{2}w^TT_jw,\quad\mathrm{subject\,\,to\,}\Vert w\Vert\le\Delta_k, wRjminfk+e1TQj(fk)e1Tw+21wTTjw,subjecttowΔk,再定义子问题的近似解为 p k = Q j w p_k=Q_jw pk=Qjw. 由于 T j T_j Tj三对角, 因此上述问题可以通过分解 T j + λ I T_j+\lambda I Tj+λI并利用第四章第三节中的迭代方法求解.
如同Newton-CG中一样, Lanczos迭代也可能会由类似于 ∥ r k ∥ ≤ η k ∥ ∇ f k ∥ \Vert r_k\Vert\le\eta_k\Vert\nabla f_k\Vert rkηkfk的判据所终止. 我们也可以在Lanczos迭代中加入预处理以加速收敛. 要注意: 与Newton-CG算法相比, 这一求解信赖域的算法的强健性是以高昂地求解子问题为代价的. 至今为止, 我们依然不能说明Newton-Lanczos方法显著优于Steihaug算法.

2. 有限内存的拟牛顿法

我们曾经在第六章提到拟牛顿法在大规模情景下实施可能存在的问题. 有限内存的拟牛顿法对于求解Hessian难以获得或者不稀疏的大型问题相当有效. 这些算法并不储存完整的 n × n n\times n n×n近似矩阵, 而是仅仅储存能够隐式地代表近似矩阵的几个长度为 n n n的向量. 尽管储存上需求小, 但它们往往能带来良好(尽管是线性)的收敛性. 至今已有许多有限内存的算法, 我们仅讨论称为L-BFGS的算法. 它也正如它的名字一样, 与BFGS公式紧密相关. 这一算法的主要想法是, 只使用最近几次迭代的曲率信息(如向量 s k , y k s_k,y_k sk,yk)"组建"Hessian的近似. 而更早的曲率信息则被认为对当前Hessian的近似没有什么显著的贡献, 从而被弃之不顾以节省内存.
这一节我们将首先介绍L-BFGS算法及其收敛性质, 之后说明它与非线性共轭梯度法的关联. 接着我们将介绍利用近似Hessian信息的所谓"紧表示(compact representation)"实施有限内存算法. 这一技巧不仅适用于L-BFGS而且也适用于其他的拟牛顿法的有限内存版本, 例如SR1. 最后我们讨论能够带来稀疏近似的拟牛顿更新方法.

2.1 有限内存BFGS

我们先回忆一下BFGS. BFGS算法的每一步迭代皆形如 x k + 1 = x k − α k H k ∇ f k , x_{k+1}=x_k-\alpha_kH_k\nabla f_k, xk+1=xkαkHkfk,其中 α k \alpha_k αk为步长, H k H_k Hk在每步迭代中以公式 H k + 1 = V k T H k V k + ρ k s k s k T H_{k+1}=V_k^TH_kV_k+\rho_ks_ks_k^T Hk+1=VkTHkVk+ρkskskT更新, 其中 ρ k = 1 y k T s k , V k = I − ρ k y k s k T , \rho_k=\frac{1}{y_k^Ts_k},\quad V_k=I-\rho_ky_ks_k^T, ρk=ykTsk1,Vk=IρkykskT, s k = x k + 1 − x k , y k = ∇ f k + 1 − ∇ f k . s_k=x_{k+1}-x_k,\quad y_k=\nabla f_{k+1}-\nabla f_k. sk=xk+1xk,yk=fk+1fk.由于Hessian近似的逆 H k H_k Hk中的元素分布可能会逐渐稠密, 当变量数很大时显式地对其储存和运算都是不允许的. 为规避这一问题, 我们隐式地储存 H k H_k Hk的一种修正形式, 即储存一定数目(如 m m m)的校正对 { s i , y i } \{s_i,y_i\} {si,yi}. 此时乘积 H k ∇ f k H_k\nabla f_k Hkfk就可通过一系列的内积和求和得到. 在新的迭代项产生后, 校正对集中最"老"的的一对 { s i , y i } \{s_i,y_i\} {si,yi}就被新的校正对 { s k , y k } \{s_k,y_k\} {sk,yk}所替代. 这样, 校正对集中永远只存储最近 m m m步迭代的曲率信息. 实际操作中不太大的 m m m(如3~20)就可以带来较好的效果. 这就是有限内存的BFGS算法.
下面对算法进行详述. 在第 k k k步迭代, 当前迭代点为 x k x_k xk, 校正对集中有校正对 { s i , y i } , i = k − m , … , k − 1 \{s_i,y_i\},i=k-m,\ldots,k-1 {si,yi},i=km,,k1. 我们首先选取某个初始Hessian的近似 H k 0 H_k^0 Hk0(这与标准的BFGS迭代不同, L-BFGS的初始近似是允许随着迭代而改变的) . 反复使用更新公式, 我们发现L-BFGS中的近似 H k H_k Hk满足以下关系式: H k = ( V k − 1 T ⋯ V k − m T ) H k 0 ( V k − m ⋯ V k − 1 ) + ρ k − m ( V k − 1 T ⋯ V k − m + 1 T ) s k − m s k − m T ( V k − m + 1 ⋯ V k − 1 ) + ρ k − m + 1 ( V k − 1 T ⋯ V k − m + 2 T ) s k − m + 1 s k − m + 1 T ( V k − m + 2 ⋯ V k − 1 ) + ⋯ + ρ k − 1 s k − 1 s k − 1 T . \begin{aligned}H_k=&amp;(V_{k-1}^T\cdots V_{k-m}^T)H_k^0(V_{k-m}\cdots V_{k-1})\\&amp;+\rho_{k-m}(V_{k-1}^T\cdots V_{k-m+1}^T)s_{k-m}s_{k-m}^T(V_{k-m+1}\cdots V_{k-1})\\&amp;+\rho_{k-m+1}(V_{k-1}^T\cdots V_{k-m+2}^T)s_{k-m+1}s_{k-m+1}^T(V_{k-m+2}\cdots V_{k-1})\\&amp;+\cdots\\&amp;+\rho_{k-1}s_{k-1}s_{k-1}^T.\end{aligned} Hk=(Vk1TVkmT)Hk0(VkmVk1)+ρkm(Vk1TVkm+1T)skmskmT(Vkm+1Vk1)+ρkm+1(Vk1TVkm+2T)skm+1skm+1T(Vkm+2Vk1)++ρk1sk1sk1T.由这一表示, 我们可以得到一种高效计算乘积 H k ∇ f k H_k\nabla f_k Hkfk的递归程序:

算法4 (L-BFGS two-loop recursion)
q ← ∇ f k q\leftarrow \nabla f_k qfk;
for i = k − 1 , k − 2 , … , k − m i=k-1,k-2,\ldots,k-m i=k1,k2,,km
\quad\quad α i ← ρ i s i T q \alpha_i\leftarrow\rho_is_i^Tq αiρisiTq;
\quad\quad q ← q − α i y i q\leftarrow q-\alpha_iy_i qqαiyi;
end (for)
r ← H k 0 q r\leftarrow H_k^0q rHk0q;
for i = k − m , k − m + 1 , … , k − 1 i=k-m,k-m+1,\ldots,k-1 i=km,km+1,,k1
\quad\quad β ← ρ i y i T r \beta\leftarrow\rho_iy_i^Tr βρiyiTr;
\quad\quad r ← r + s i ( α i − β ) r\leftarrow r+s_i(\alpha_i-\beta) rr+si(αiβ);
end (for)
stop with result H k ∇ f k = r H_k\nabla f_k=r Hkfk=r.

说明:

  1. 第一个循环计算完成后, q = ( V k − m ⋯ V k − 1 ) ∇ f k , r = H k 0 q = H k 0 ( V k − m ⋯ V k − 1 ) ∇ f k . q=(V_{k-m}\cdots V_{k-1})\nabla f_k,\quad r=H_k^0q=H_k^0(V_{k-m}\cdots V_{k-1})\nabla f_k. q=(VkmVk1)fk,r=Hk0q=Hk0(VkmVk1)fk.此时 r r r就是 H k H_k Hk表达式的第一行的右半部分与 ∇ f k \nabla f_k fk乘积的结果. 计算过程中的 α i \alpha_i αi则可以显式的写为 α i = ρ i s i ( V i + 1 ⋯ V k − 1 ) ∇ f k . \alpha_i=\rho_is_i(V_{i+1}\cdots V_{k-1})\nabla f_k. αi=ρisi(Vi+1Vk1)fk.
  2. 第二个循环乍一看有些晦涩, 我们从第一步开始解读. 当 i = k − m i=k-m i=km时, 此时 r = H k 0 ( V k − m ⋯ V k − 1 ) ∇ f k r=H_k^0(V_{k-m}\cdots V_{k-1})\nabla f_k r=Hk0(VkmVk1)fk, 第一步循环后 β = ρ k − m y k − m T H k 0 ( V k − m ⋯ V k − 1 ) ∇ f k , \beta=\rho_{k-m}y_{k-m}^TH_k^0(V_{k-m}\cdots V_{k-1})\nabla f_k, β=ρkmykmTHk0(VkmVk1)fk, r = H k 0 ( V k − m ⋯ V k − 1 ) ∇ f k + ρ k − m s k − m s k − m T ( V k − m + 1 ⋯ V k − 1 ) ∇ f k − ρ k − m s k − m y k − m T H k 0 ( V k − m ⋯ V k − 1 ) ∇ f k \begin{aligned}r=&amp;H_k^0(V_{k-m}\cdots V_{k-1})\nabla f_k\\&amp;+\rho_{k-m}s_{k-m}s_{k-m}^T(V_{k-m+1}\cdots V_{k-1})\nabla f_k\\&amp;-\rho_{k-m}s_{k-m}y_{k-m}^TH_k^0(V_{k-m}\cdots V_{k-1})\nabla f_k\end{aligned} r=Hk0(VkmVk1)fk+ρkmskmskmT(Vkm+1Vk1)fkρkmskmykmTHk0(VkmVk1)fk = V k − m T H k 0 ( V k − m ⋯ V k − 1 ) ∇ f k + ρ k − m s k − m s k − m T ( V k − m + 1 ⋯ V k − 1 ) ∇ f k . \begin{aligned}&amp;=V_{k-m}^TH_k^0(V_{k-m}\cdots V_{k-1})\nabla f_k\\&amp;+\rho_{k-m}s_{k-m}s_{k-m}^T(V_{k-m+1}\cdots V_{k-1})\nabla f_k\end{aligned}. =VkmTHk0(VkmVk1)fk+ρkmskmskmT(Vkm+1Vk1)fk.于是我们可以看出, 第二个循环所做的, 就是计算 H k 0 H_k^0 Hk0表达式中其他部分与 q q q的乘积. 其中 α i \alpha_i αi为与第一个循环共有的部分. 如果将第二个循环中的 r ← r + s i ( α i − β ) r\leftarrow r+s_i(\alpha_i-\beta) rr+si(αiβ)写作 r ← ( r − s i β ) + s i α i r\leftarrow (r-s_i\beta)+s_i\alpha_i r(rsiβ)+siαi可能会更佳易于理解.
  3. 这样的表达式还能保证 s k T y k &gt; 0 s_k^Ty_k&gt;0 skTyk>0、满足割线方程吗? 答案是肯定的. 事实上由于 V k − 1 y k − 1 = ( I − ρ k − 1 y k − 1 s k − 1 T ) y k − 1 = 0 , V_{k-1}y_{k-1}=(I-\rho_{k-1}y_{k-1}s_{k-1}^T)y_{k-1}=0, Vk1yk1=(Iρk1yk1sk1T)yk1=0,因此 H k y k − 1 = ρ k − 1 s k − 1 s k − 1 T y k − 1 = s k − 1 , H_ky_{k-1}=\rho_{k-1}s_{k-1}s_{k-1}^Ty_{k-1}=s_{k-1}, Hkyk1=ρk1sk1sk1Tyk1=sk1,即满足割线方程. 若 H k 0 H_k^0 Hk0是正定的, 我们可以类似得到 H k H_k Hk是正定的, 从而必定有 s k T y k &gt; 0 s_k^Ty_k&gt;0 skTyk>0.
  4. 考虑计算量. 在不考虑乘积 H k 0 q H_k^0q Hk0q时, 二重循环递归需要 4 m n 4mn 4mn次乘积; 若 H k 0 H_k^0 Hk0是对角阵, 则再需要额外的 n n n次乘积. 除了计算量友好以外, 这一递归格式还有另一个优势: 初始矩阵 H k 0 H_k^0 Hk0与剩下的计算无关, 因此可以相对自由地选择且每步迭代可以不相同. 我们甚至可以隐式地选取 H k 0 H_k^0 Hk0: 定义对于Hessian的某个初始近似矩阵 B k 0 B_k^0 Bk0, 之后求解线性系统 B k 0 r = q B_k^0r=q Bk0r=q.
  5. 这种递归形式在Broyden族的其他成员身上还未得到发展, 如SR1, DFP.

下面讨论算法细节. 首先是对 H k 0 H_k^0 Hk0的选取. 一种较为高效的设定方案是令 H k 0 = γ k I H_k^0=\gamma_kI Hk0=γkI, 其中 γ k = s k − 1 T y k − 1 y k − 1 T y k − 1 . \gamma_k=\frac{s_{k-1}^Ty_{k-1}}{y_{k-1}^Ty_{k-1}}. γk=yk1Tyk1sk1Tyk1.正如第六章所说明的, γ k \gamma_k γk是利用最近的搜索方向对真实Hessian特征值的一种估计. 这一选取方式使得算出的搜索方向 p k p_k pk是尺度良好的, 从而在大多数迭代中步长 α k = 1 \alpha_k=1 αk=1都将被采用, 实现较快的收敛速度. 同时, 满足Wolfe条件或强Wolfe条件的线搜索使得BFGS更新更加稳定.

有限内存的BFGS算法叙述如下.
算法5 (L-BFGS)
Choose starting point x 0 x_0 x0, interger m &gt; 0 m&gt;0 m>0;
k ← 0 k\leftarrow 0 k0;
repeat
\quad\quad Choose H k 0 H_k^0 Hk0;
\quad\quad Compute p k ← − H k ∇ f k p_k\leftarrow -H_k\nabla f_k pkHkfk from Algorithm 4;
\quad\quad Compute x k + 1 ← x k + α k p k x_{k+1}\leftarrow x_k+\alpha_kp_k xk+1xk+αkpk, where α k \alpha_k αk is chosen to satisfy the Wolfe conditions;
\quad\quad if k &gt; m k&gt;m k>m
\quad\quad\quad\quad Discard the vector pair { s k − m , y k − m } \{s_{k-m},y_{k-m}\} {skm,ykm} from storage;
\quad\quad Compute and save s k ← x k + 1 − x k , y k = ∇ f k + 1 − ∇ f k s_k\leftarrow x_{k+1}-x_k,y_k=\nabla f_{k+1}-\nabla f_k skxk+1xk,yk=fk+1fk;
\quad\quad k ← k + 1 k\leftarrow k+1 kk+1;
until convergence.

可以发现, 在L-BFGS的头 m − 1 m-1 m1步迭代中, 如果 H 0 = H k 0 H_0=H_k^0 H0=Hk0, 算法5是等价于标准的BFGS算法的.
下表展现了算法5在不同 m m m下的实验结果, 其中给出了函数值和梯度的计算次数(nfg)以及总的CPU时间. 测试问题均来自CUTE问题集, 变量数用 n n n表示, 算法终止标准为 ∥ ∇ f k ∥ ≤ 1 0 − 5 \Vert\nabla f_k\Vert\le10^{-5} fk105.

ProblemL-BFGS m = 3 m=3 m=3L-BFGS m = 5 m=5 m=5L-BFGS m = 17 m=17 m=17L-BFGS m = 29 m=29 m=29
n n nnfg timenfg timenfg timenfg time
DIXMAANL 1500146 16.5134 17.4120 28.2125 44.4
EIGENALS 110821 21.5569 15.7363 16.2168 12.5
FREUROTH 1000>999 —>999 —69 8.138 6.3
TRIDIA 1000876 46.6611 41.4531 84.6462 127.1

上表说明, 储存的信息越多, 所需要的函数值就越少; 但与此同时储存的耗费也在增加, 且最佳的CPU时间均在较小的 m m m上获得. 显然, 最优的 m m m是依赖于问题本身的.
由于其他竞争的算法并不高效, 算法5往往是处理大规模问题(且真实Hessian并不稀疏)的不二之选. 特别地, 在这样的情况下计算精确的Hessian并使用牛顿法求解非常不现实. L-BFGS算法可能要比无Hessian的牛顿法(如Newton-CG)更好, 后者的Hessian-向量乘积利用有限差分或自动微分计算.
L-BFGS的主要缺点在于, 它在病态问题上的收敛相当慢, 也就是说它的表现依赖于问题的条件数. 从这个角度说, 非线性共轭梯度法要比有限内存的拟牛顿法更好.

2.2 与共轭梯度法的关系

有限内存的算法的提出是希望能够改进非线性共轭梯度法, 早期的工作中共轭梯度法比拟牛顿法更加常用. 二者的关联成为了无记忆BFGS(memoryless BFGS)迭代的基础.
我们首先考虑HS形式的非线性共轭梯度法, 其中 s k = α k p k , y k = ∇ f k + 1 − ∇ f k , β k + 1 = ∇ f k + 1 T y k y k T p k s_k=\alpha_kp_k,y_k=\nabla f_{k+1}-\nabla f_k,\beta_{k+1}=\frac{\nabla f_{k+1}^Ty_k}{y_k^Tp_k} sk=αkpk,yk=fk+1fk,βk+1=ykTpkfk+1Tyk. 所以有 p k + 1 = − ∇ f k + 1 + ∇ f k + 1 T y k y k T p k p k = − ( I − s k y k T y k T s k ) ∇ f k + 1 ≡ − H ^ k + 1 ∇ f k + 1 . p_{k+1}=-\nabla f_{k+1}+\frac{\nabla f_{k+1}^Ty_k}{y_k^Tp_k}p_k=-\left(I-\frac{s_ky_k^T}{y_k^Ts_k}\right)\nabla f_{k+1}\equiv-\hat{H}_{k+1}\nabla f_{k+1}. pk+1=fk+1+ykTpkfk+1Tykpk=(IykTskskykT)fk+1H^k+1fk+1.上述式子仿照了拟牛顿迭代的写法, 但这里的 H ^ k + 1 \hat{H}_{k+1} H^k+1既不是对称矩阵也不是正定矩阵. 我们自然可以将其对称化为 H ^ k + 1 T H ^ k + 1 \hat{H}_{k+1}^T\hat{H}_{k+1} H^k+1TH^k+1, 但这样一来又不再满足割线方程 H ^ k + 1 y k = s k \hat{H}_{k+1}y_k=s_k H^k+1yk=sk. 一种对称、正定且满足割线方程的迭代矩阵是 H k + 1 = ( I − s k y k T y k T s k ) ( I − y k s k T y k T s k ) + s k s k T y k T s k . H_{k+1}=\left(I-\frac{s_ky_k^T}{y_k^Ts_k}\right)\left(I-\frac{y_ks_k^T}{y_k^Ts_k}\right)+\frac{s_ks_k^T}{y_k^Ts_k}. Hk+1=(IykTskskykT)(IykTskykskT)+ykTskskskT.这一矩阵恰巧就是对单位阵做一次BFGS更新所得到的矩阵. 因此, 产生搜索方向为 p k + 1 = − H k + 1 ∇ f k + 1 p_{k+1}=-H_{k+1}\nabla f_{k+1} pk+1=Hk+1fk+1的算法可以看做是一种"无记忆"的BFGS算法, 即前一次的Hessian近似总是设置成单位阵, 且仅用最近的一次曲率信息 ( s k , y k ) (s_k,y_k) (sk,yk)更新它. 换句话说, 这就是算法5中 m = 1 , H k 0 = I m=1,H_k^0=I m=1,Hk0=I的特例.
如果我们考虑带精确线搜索的无记忆BFGS算法, 则这种联系将变得更加直接. 这是因为对 ∀ k \forall k k, 我们有 ∇ f k + 1 T p k = 0 \nabla f_{k+1}^Tp_k=0 fk+1Tpk=0. 从而 p k + 1 = − H k + 1 ∇ f k + 1 = − ∇ f k + 1 + ∇ f k + 1 T y k y k T p k p k , p_{k+1}=-H_{k+1}\nabla f_{k+1}=-\nabla f_{k+1}+\frac{\nabla f_{k+1}^Ty_k}{y_k^Tp_k}p_k, pk+1=Hk+1fk+1=fk+1+ykTpkfk+1Tykpk,这不就是HS共轭梯度法吗? 进一步地, 当 ∇ f k + 1 T p k = 0 \nabla f_{k+1}^Tp_k=0 fk+1Tpk=0时, HS公式就变成了PR公式. 即使精确线搜索的假设不切实际, 但BFGS公式以这种方式和共轭梯度法联系在一起还是非常有趣的一件事.

2.3 一般的有限内存更新

有限内存的拟牛顿近似在许多优化问题中都很有用处. 算法5即L-BFGS算法是一种求解无约束优化问题的线搜索算法, 其每步迭代将更新Hessian矩阵的逆 H k H_k Hk; 而信赖域方法则需要对于Hessian本身的近似 B k B_k Bk. 我们也希望能够对于SR1公式建立起有限内存的版本, 这将成为BFGS的一种有效的替代.
本节中我们考虑一般情形下的有限内存更新. 我们将拟牛顿矩阵以紧(或外积)的形式表示, 从而可以将有限内存的方法方便地推广到所有(广泛使用的)拟牛顿更新公式及它们的逆形式. 紧表示在设计有约束优化的有限内存方法时同样有用, 当然这就涉及到对于Lagrange函数的Hessian或者既约Hessian的近似. 我们将在较后的内容中介绍.
以下我们仅考虑会连续更新校正对 ( s k , y k ) (s_k,y_k) (sk,yk)的有限内存方法. 与之相比有, 我们也可以一直储存校正对直到内存炸裂, 之后再释放所有的内存(或者保留一个校正对), 重新开始迭代. 实际的数值实验告诉我们, 这样的方式效率并不高.
本节中我们以 B k B_k Bk表示对于Hessian的近似, 以 H k H_k Hk表示对于Hessian的逆的近似. 我们总有 B k − 1 = H k B_k^{-1}=H_k Bk1=Hk.

2.3.1 BFGS更新的紧表示

下面我们介绍一种基于拟牛顿紧表示的有限内存更新. 我们以BFGS的 B k B_k Bk形式为例.

定理4 B 0 B_0 B0对称正定, 并假设校正对 { s i , y i } i = 0 k − 1 \{s_i,y_i\}_{i=0}^{k-1} {si,yi}i=0k1满足 s i T y i &gt; 0 s_i^Ty_i&gt;0 siTyi>0. 设 B k B_k Bk为对 B 0 B_0 B0 k k k次BFGS更新得到的矩阵. 于是我们有 B k = B 0 − [ B 0 S k Y k ] [ S k T B 0 S k L k L k T − D k ] − 1 [ S k T B 0 Y k T ] , B_k=B_0-\begin{bmatrix}B_0S_k &amp; Y_k\end{bmatrix}\begin{bmatrix}S_k^TB_0S_k &amp; L_k\\L_k^T &amp; -D_k\end{bmatrix}^{-1}\begin{bmatrix}S_k^TB_0\\Y_k^T\end{bmatrix}, Bk=B0[B0SkYk][SkTB0SkLkTLkDk]1[SkTB0YkT],其中 S k , Y k S_k,Y_k Sk,Yk n × k n\times k n×k矩阵, 定义为 S k = [ s 0 , … , s k − 1 ] , Y k = [ y 0 , … , y k − 1 ] , S_k=[s_0,\ldots,s_{k-1}],\quad Y_k=[y_0,\ldots,y_{k-1}], Sk=[s0,,sk1],Yk=[y0,,yk1], L k , D k L_k,D_k Lk,Dk k × k k\times k k×k矩阵 ( L k ) i , j = { s i − 1 T y j − 1 i &gt; j , 0 o t h e r w i s e , (L_k)_{i,j}=\left\{\begin{array}{ll}s_{i-1}^Ty_{j-1} &amp; i&gt;j,\\0 &amp; otherwise,\end{array}\right. (Lk)i,j={si1Tyj10i>j,otherwise, D k = d i a g [ s 0 T y 0 , … , s k − 1 T y k − 1 ] . D_k=\mathrm{diag}[s_0^Ty_0,\ldots,s_{k-1}^Ty_{k-1}]. Dk=diag[s0Ty0,,sk1Tyk1].

与之平行的有如下对 H k H_k Hk的定理.

定理4’ H 0 H_0 H0对称正定, 并假设校正对 { s i , y i } i = 0 k − 1 \{s_i,y_i\}_{i=0}^{k-1} {si,yi}i=0k1满足 s i T y i &gt; 0 s_i^Ty_i&gt;0 siTyi>0. 设 H k H_k Hk为对 H 0 H_0 H0 k k k次BFGS更新得到的矩阵. 于是我们有 H k = H 0 + [ S k H 0 Y k ] [ R k − T ( D k + Y k T H 0 Y k ) R k − 1 − R k − T − R k − 1 O ] [ S k T Y k T H 0 ] , H_k=H_0+\begin{bmatrix}S_k &amp; H_0Y_k\end{bmatrix}\begin{bmatrix}R_k^{-T}(D_k+Y_k^TH_0Y_k)R_k^{-1} &amp; -R_k^{-T}\\-R_k^{-1} &amp; O\end{bmatrix}\begin{bmatrix}S_k^T\\Y_k^TH_0\end{bmatrix}, Hk=H0+[SkH0Yk][RkT(Dk+YkTH0Yk)Rk1Rk1RkTO][SkTYkTH0],其中 S k , Y k , D k S_k,Y_k,D_k Sk,Yk,Dk如之前定理4中定义, R k R_k Rk k × k k\times k k×k矩阵 ( R k ) i , j = { s i − 1 T y j − 1 i ≤ j , 0 o t h e r w i s e . (R_k)_{i,j}=\left\{\begin{array}{ll}s_{i-1}^Ty_{j-1} &amp; i\le j,\\0 &amp; otherwise.\end{array}\right. (Rk)i,j={si1Tyj10ij,otherwise.
我们从证明定理4’出发, 最后用Sherman-Morrison-Woodbury公式即可得到定理4. 为证明定理4’, 我们先介绍一个刻画多个投影矩阵乘积的引理.

引理 V 0 ⋯ V k − 1 = I − Y k R k − 1 S k T , k ≥ 1 V_0\cdots V_{k-1}=I-Y_kR_k^{-1}S_k^T,k\ge1 V0Vk1=IYkRk1SkT,k1.
证明: 使用数学归纳法证明.
i. 当 k = 1 k=1 k=1时, 显然公式成立;
ii. 假设对于 k k k, 上述公式成立, 即有 V 0 ⋯ V k − 1 = I − Y k R k − 1 S k T V_0\cdots V_{k-1}=I-Y_kR_k^{-1}S_k^T V0Vk1=IYkRk1SkT, 下面证明 k + 1 k+1 k+1的情形. 从右端开始, 首先考察 R k + 1 R_{k+1} Rk+1. 从 R k R_{k} Rk的定义可得 R k + 1 = [ R k S k T y k ρ k − 1 ] ⇒ R k + 1 − 1 = [ R k − 1 − ρ k R k − 1 S k T y k ρ k ] . R_{k+1}=\begin{bmatrix}R_k &amp; S_k^Ty_k\\ &amp; \rho_k^{-1}\end{bmatrix}\Rightarrow R_{k+1}^{-1}=\begin{bmatrix}R_k^{-1} &amp; -\rho_kR_k^{-1}S_k^Ty_k\\ &amp; \rho_k\end{bmatrix}. Rk+1=[RkSkTykρk1]Rk+11=[Rk1ρkRk1SkTykρk].因此 I − Y k + 1 R k + 1 − 1 S k + 1 T = I − [ Y k y k ] [ R k − 1 − ρ k R k − 1 S k T y k ρ k ] [ S k T s k T ] = I − ( Y k R k − 1 S k T − ρ k Y k R k − 1 S k T y k s k T + ρ k y k s k T ) = ( I − Y k R k − 1 S k T ) ( I − ρ k y k s k T ) = V 0 ⋯ V k − 1 V k . \begin{aligned}I-Y_{k+1}R_{k+1}^{-1}S_{k+1}^T&amp;=I-\begin{bmatrix}Y_k &amp; y_k\end{bmatrix}\begin{bmatrix}R_k^{-1} &amp; -\rho_kR_k^{-1}S_k^Ty_k\\ &amp; \rho_k\end{bmatrix}\begin{bmatrix}S_k^T \\ s_k^T\end{bmatrix}\\&amp;=I-(Y_kR_k^{-1}S_k^T-\rho_kY_kR_k^{-1}S_k^Ty_ks_k^T+\rho_ky_ks_k^T)\\&amp;=(I-Y_kR_k^{-1}S_k^T)(I-\rho_ky_ks_k^T)\\&amp;=V_0\cdots V_{k-1}V_k.\end{aligned} IYk+1Rk+11Sk+1T=I[Ykyk][Rk1ρkRk1SkTykρk][SkTskT]=I(YkRk1SkTρkYkRk1SkTykskT+ρkykskT)=(IYkRk1SkT)(IρkykskT)=V0Vk1Vk.最后一步使用归纳假设. 证毕.

定理4’的证明: 我们将 H k H_k Hk的更新公式简记为 H k = M k + N k , H_k=M_k+N_k, Hk=Mk+Nk,其中 M 0 = H 0 , M k + 1 = V k T M k V k , M_0=H_0,\quad M_{k+1}=V_k^TM_kV_k, M0=H0,Mk+1=VkTMkVk, N 1 = ρ 0 s 0 s 0 T , N k + 1 = V k T N k V k + ρ k s k s k T . N_1=\rho_0s_0s_0^T,\quad N_{k+1}=V_k^TN_kV_k+\rho_ks_ks_k^T. N1=ρ0s0s0T,Nk+1=VkTNkVk+ρkskskT.由引理, M k = V k − 1 T M k − 1 V k − 1 = ⋯ = V k − 1 T V k − 2 T ⋯ V 0 T H 0 V 0 ⋯ V k − 2 V k − 1 = ( V 0 ⋯ V k − 1 ) T H 0 ( V 0 ⋯ V k − 1 ) = ( I − S k R k − T Y k T ) H 0 ( I − Y k R k − 1 S k T ) = H 0 − S k R k − T Y k T H 0 − H 0 Y k R k − 1 S k T + S k R k − T Y k T H 0 Y k R k − 1 S k T . \begin{aligned}M_k&amp;=V_{k-1}^TM_{k-1}V_{k-1}\\&amp;=\cdots\\&amp;=V_{k-1}^TV_{k-2}^T\cdots V_0^TH_0V_0\cdots V_{k-2}V_{k-1}\\&amp;=(V_0\cdots V_{k-1})^TH_0(V_0\cdots V_{k-1})\\&amp;=(I-S_kR_k^{-T}Y_k^T)H_0(I-Y_kR_k^{-1}S_k^T)\\&amp;=H_0-S_kR_k^{-T}Y_k^TH_0-H_0Y_kR_k^{-1}S_k^T+S_kR_k^{-T}Y_k^TH_0Y_kR_k^{-1}S_k^T.\end{aligned} Mk=Vk1TMk1Vk1==Vk1TVk2TV0TH0V0Vk2Vk1=(V0Vk1)TH0(V0Vk1)=(ISkRkTYkT)H0(IYkRk1SkT)=H0SkRkTYkTH0H0YkRk1SkT+SkRkTYkTH0YkRk1SkT.对比结果, 我们只需要证明 N k = S k R k − T D k R k − 1 S k T . N_k=S_kR_k^{-T}D_kR_k^{-1}S_k^T. Nk=SkRkTDkRk1SkT.同样用数学归纳法证明.
i. 当 k = 1 k=1 k=1, 显然有 N 1 = S 1 R 1 − T D 1 R 1 − 1 S 1 T = ρ 0 s 0 s 0 T N_1=S_1R_1^{-T}D_1R_1^{-1}S_1^T=\rho_0s_0s_0^T N1=S1R1TD1R11S1T=ρ0s0s0T.
ii. 假设结论对于 k k k成立. 下面对 k + 1 k+1 k+1证明. 由 N k N_k Nk的定义, N k + 1 = V k T N k V k + ρ k s k s k T = V k T S k R k − T D k R k − 1 S k T V k + ρ k s k s k T . \begin{aligned}N_{k+1}&amp;=V_k^TN_kV_k+\rho_ks_ks_k^T\\&amp;=V_k^TS_kR_k^{-T}D_kR_k^{-1}S_k^TV_k+\rho_ks_ks_k^T.\end{aligned} Nk+1=VkTNkVk+ρkskskT=VkTSkRkTDkRk1SkTVk+ρkskskT.其中 R k − 1 S k T V k = R k − 1 S k T ( I − ρ k y k s k T ) = R k − 1 S k T − ρ k R k − 1 S k T y k s k T = [ I 0 ] R k + 1 − 1 [ S k T s k T ] = [ I 0 ] R k + 1 − 1 S k + 1 T . \begin{aligned}R_k^{-1}S_k^TV_k&amp;=R_k^{-1}S_k^T(I-\rho_ky_ks_k^T)\\&amp;=R_k^{-1}S_k^T-\rho_kR_k^{-1}S_k^Ty_ks_k^T\\&amp;=\begin{bmatrix}I &amp; 0\end{bmatrix}R_{k+1}^{-1}\begin{bmatrix}S_k^T\\s_k^T\end{bmatrix}\\&amp;=\begin{bmatrix}I &amp; 0\end{bmatrix}R_{k+1}^{-1}S_{k+1}^T.\end{aligned} Rk1SkTVk=Rk1SkT(IρkykskT)=Rk1SkTρkRk1SkTykskT=[I0]Rk+11[SkTskT]=[I0]Rk+11Sk+1T.而利用 R k + 1 R_{k+1} Rk+1的表达式, 我们又可以将 s k s_k sk写成 s k = S k + 1 R k + 1 − T e k + 1 / ρ k . s_k=S_{k+1}R_{k+1}^{-T}e_{k+1}/\rho_k. sk=Sk+1Rk+1Tek+1/ρk.因此 N k + 1 = S k + 1 R k + 1 T [ I 0 ] D k [ I 0 ] R k + 1 − 1 S k + 1 T + S k + 1 R k + 1 − T [ 0 ⋱ 0 ρ k − 1 ] R k + 1 − 1 S k + 1 T \begin{aligned}N_{k+1}=&amp;S_{k+1}R_{k+1}^T\begin{bmatrix}I\\ 0\end{bmatrix}D_k\begin{bmatrix}I &amp; 0\end{bmatrix}R_{k+1}^{-1}S_{k+1}^T\\&amp;+S_{k+1}R_{k+1}^{-T}\begin{bmatrix}0 &amp; &amp; &amp; \\ &amp; \ddots &amp; &amp; \\ &amp; &amp; 0 &amp; \\ &amp; &amp; &amp; \rho_k^{-1}\end{bmatrix}R_{k+1}^{-1}S_{k+1}^T\end{aligned} Nk+1=Sk+1Rk+1T[I0]Dk[I0]Rk+11Sk+1T+Sk+1Rk+1T00ρk1Rk+11Sk+1T = S k + 1 R k + 1 − T D k + 1 R k + 1 − 1 S k + 1 T . =S_{k+1}R_{k+1}^{-T}D_{k+1}R_{k+1}^{-1}S_{k+1}^T. =Sk+1Rk+1TDk+1Rk+11Sk+1T.证毕.

定理4的证明: 将定理4’中 H k H_k Hk的表达式记作 H k = H 0 + U k C k U k T , H_k=H_0+U_kC_kU_k^T, Hk=H0+UkCkUkT,其中 U k = [ S k H 0 Y k ] , U_k=\begin{bmatrix}S_k &amp; H_0Y_k\end{bmatrix}, Uk=[SkH0Yk], C k = [ R k − T ( D k + Y k T H 0 Y k ) R k − 1 − R k − T − R k − 1 O ] . C_k=\begin{bmatrix}R_k^{-T}(D_k+Y_k^TH_0Y_k)R_k^{-1} &amp; -R_k^{-T}\\-R_k^{-1} &amp; O\end{bmatrix}. Ck=[RkT(Dk+YkTH0Yk)Rk1Rk1RkTO].从而易得 C k − 1 = [ O − R k − R k T − ( D k + Y k T H 0 Y k ) ] . C_k^{-1}=\begin{bmatrix}O &amp; -R_k\\-R_k^T &amp; -(D_k+Y_k^TH_0Y_k)\end{bmatrix}. Ck1=[ORkTRk(Dk+YkTH0Yk)].由Sheman-Morrison-Woodbury公式可得 B k = B 0 − B 0 U k ( I + C k U k T B 0 U k ) − 1 C k U k T B 0 = B 0 − B 0 U k ( C k − 1 + U k T B 0 U k ) − 1 U k T B 0 , \begin{aligned}B_k&amp;=B_0-B_0U_k(I+C_kU_k^TB_0U_k)^{-1}C_kU_k^TB_0\\&amp;=B_0-B_0U_k(C_k^{-1}+U_k^TB_0U_k)^{-1}U_k^TB_0,\end{aligned} Bk=B0B0Uk(I+CkUkTB0Uk)1CkUkTB0=B0B0Uk(Ck1+UkTB0Uk)1UkTB0,其中 U k T B 0 U k = [ S k T Y k T H 0 ] B 0 [ S k H 0 Y k ] = [ S k T B 0 S k S k T Y k Y k T S k Y k T H 0 Y k ] ( ∵ B 0 H 0 = I ) . \begin{aligned}U_k^TB_0U_k&amp;=\begin{bmatrix}S_k^T\\Y_k^TH_0\end{bmatrix}B_0\begin{bmatrix}S_k &amp; H_0Y_k\end{bmatrix}\\&amp;=\begin{bmatrix}S_k^TB_0S_k &amp; S_k^TY_k\\Y_k^TS_k &amp; Y_k^TH_0Y_k\end{bmatrix}(\because B_0H_0=I).\end{aligned} UkTB0Uk=[SkTYkTH0]B0[SkH0Yk]=[SkTB0SkYkTSkSkTYkYkTH0Yk](B0H0=I).所以 C k − 1 + U k T B 0 U k = [ S k T B 0 S k S k T Y k − R k Y k T S k − R k T − D k ] . C_k^{-1}+U_k^TB_0U_k=\begin{bmatrix} S_k^TB_0S_k &amp; S_k^TY_k-R_k\\Y_k^TS_k-R_k^T &amp; -D_k\end{bmatrix}. Ck1+UkTB0Uk=[SkTB0SkYkTSkRkTSkTYkRkDk]. L k , R k L_k,R_k Lk,Rk的定义可得 R k + L k = S k T Y k R_k+L_k=S_k^TY_k Rk+Lk=SkTYk, 代入即可得证.

注意 s i T y i &gt; 0 , i = 0 , 1 , … , k − 1 s_i^Ty_i&gt;0,i=0,1,\ldots,k-1 siTyi>0,i=0,1,,k1可以保证 B k B_k Bk表达式中中间矩阵的可逆性, 从而这一表达式是良定的. 事实上 [ S k T B 0 S k L k L k T − D k ] ∼ [ S k T B 0 S k + L k D k − 1 L k T O L k T − D k ] , \begin{bmatrix}S_k^TB_0S_k &amp; L_k\\L_k^T &amp; -D_k\end{bmatrix}\sim\begin{bmatrix}S_k^TB_0S_k+L_kD_k^{-1}L_k^T &amp; O\\L_k^T &amp; -D_k\end{bmatrix}, [SkTB0SkLkTLkDk][SkTB0Sk+LkDk1LkTLkTODk],因此我们仅需关注 S k T B 0 S k + L k D k − 1 L k T S_k^TB_0S_k+L_kD_k^{-1}L_k^T SkTB0Sk+LkDk1LkT的可逆性. 显然这一矩阵是半正定的( D k D_k Dk的对角元均正). 对 ∀ u \forall u u, 若 u T ( S k T B 0 S k + L k D k − 1 L k T ) u = 0 , u^T(S_k^TB_0S_k+L_kD_k^{-1}L_k^T)u=0, uT(SkTB0Sk+LkDk1LkT)u=0,则必定有 L k T u = 0 , S k u = 0. L_k^Tu=0,\quad S_ku=0. LkTu=0,Sku=0.因为 L k T = Y k T S k − R k T L_k^T=Y_k^TS_k-R_k^T LkT=YkTSkRkT, 所以这又得到 R k T u = 0. R_k^Tu=0. RkTu=0. R k R_k Rk是可逆阵, 从而 u = 0 u=0 u=0. 因此 S k T B 0 S k + L k D k − 1 L k T S_k^TB_0S_k+L_kD_k^{-1}L_k^T SkTB0Sk+LkDk1LkT正定从而可逆.
这一表示表面上仅仅简洁而毫无实质益处, 实际上在考察有限内存更新时它将起重要的作用. 下面对这一点进行说明.
L-BFGS算法中, 我们存储最近 m m m个校正对 { s i , y i } \{s_i,y_i\} {si,yi}并在每步迭代结束后剔除最老的和增加最新的校正对.
在头 m m m步迭代中, 定理4的更新策略可以不加改动地应用于上, 除了通常我们选取初始矩阵为 B k 0 = δ k I B_k^0=\delta_kI Bk0=δkI, 其中 δ k = 1 / γ k \delta_k=1/\gamma_k δk=1/γk.
在之后的第 k &gt; m k&gt;m k>m步迭代中, 定理4的更新策略就需要有所改进以反映校正对中的变化. 定义 n × m n\times m n×m矩阵 S k , Y k S_k,Y_k Sk,Yk S k = [ s k − m , … , s k − 1 ] , Y k = [ y k − m , … , y k − 1 ] , S_k=[s_{k-m},\ldots,s_{k-1}],\quad Y_k=[y_{k-m},\ldots,y_{k-1}], Sk=[skm,,sk1],Yk=[ykm,,yk1],从而根据定理4, 对 B 0 ( k ) = δ k I B_0^{(k)}=\delta_kI B0(k)=δkI m m m次更新后得到的 B k B_k Bk B k = δ k I − [ δ k S k Y k ] [ δ k S k T S k L k L k T − D k ] − 1 [ δ k S k T Y k T ] , B_k=\delta_kI-\begin{bmatrix}\delta_kS_k &amp; Y_k\end{bmatrix}\begin{bmatrix}\delta_kS_k^TS_k &amp; L_k\\L_k^T &amp; -D_k\end{bmatrix}^{-1}\begin{bmatrix}\delta_kS_k^T\\Y_k^T\end{bmatrix}, Bk=δkI[δkSkYk][δkSkTSkLkTLkDk]1[δkSkTYkT],其中 L k , D k L_k,D_k Lk,Dk m × m m\times m m×m矩阵, 定义为 ( L k ) i , j = { ( s k − m − 1 + i ) T ( y k − m − 1 + j ) i &gt; j , 0 o t h e r w i s e , (L_k)_{i,j}=\left\{\begin{array}{ll}(s_{k-m-1+i})^T(y_{k-m-1+j}) &amp; i&gt;j,\\0 &amp; otherwise,\end{array}\right. (Lk)i,j={(skm1+i)T(ykm1+j)0i>j,otherwise, D k = d i a g [ s k − m T y k − m , … , s k − 1 T y k − 1 ] . D_k=\mathrm{diag}[s_{k-m}^Ty_{k-m},\ldots,s_{k-1}^Ty_{k-1}]. Dk=diag[skmTykm,,sk1Tyk1].在产生新的迭代点 x k + 1 x_{k+1} xk+1后, 将从 S k S_k Sk中删除 s k − m s_{k-m} skm加入 s k s_k sk得到 S k + 1 S_{k+1} Sk+1, 类似得到 Y k + 1 Y_{k+1} Yk+1. L k , D k L_k,D_k Lk,Dk也做相应变动成为 L k + 1 , D k + 1 L_{k+1},D_{k+1} Lk+1,Dk+1.
由于中间矩阵的维数 2 m 2m 2m很小, 因此其分解需要的计算量基本可以忽略不计. 紧表示的思想在于, 对于初始矩阵的校正可表示为两个长条形矩阵—— [ δ k S k &ThinSpace;&ThinSpace; Y k ] [\delta_kS_k\,\, Y_k] [δkSkYk]及其转置——的外积, 其中中间以一个 2 m × 2 m 2m\times 2m 2m×2m的小矩阵"加权". 可见下图.

Compact Representation

B k B_k Bk有限内存的更新策略大概需要 2 m n + O ( m 3 ) 2mn+O(m^3) 2mn+O(m3)的计算量(其中 O ( m 3 ) O(m^3) O(m3)表示分解的计算量, 2 m n 2mn 2mn则表示两长条形矩阵乘积的计算量, 不包括加法). 矩阵-向量乘积 B k v B_kv Bkv则需要 ( 4 m + 1 ) n + O ( m 2 ) (4m+1)n+O(m^2) (4m+1)n+O(m2)次乘法. 这些都表明有限内存更新和计算乘积都是十分经济的.
这一近似 B k B_k Bk可用于无约束优化中的信赖域框架中, 或者更甚, 用于带边界约束的优化和一般约束优化的问题中. 前者, 需要重复计算 B k B_k Bk向约束梯度张成子空间的投影. 后者, 可能需使用紧表示来近似Lagrange函数的Hessian矩阵.
我们也可以类似地将上述想法用于 H k H_k Hk的有限内存更新和乘积计算中. 计算量是类似的. 不过在BFGS的场景下, B k B_k Bk的使用将多一层线性系统的求解, 而 H k H_k Hk只需要矩阵-向量乘积.
SR1公式也有相应的紧表示. 对初始对称矩阵 B 0 B_0 B0使用校正对 { s i , y i } i = 0 k − 1 \{s_i,y_i\}_{i=0}^{k-1} {si,yi}i=0k1 k k k次SR1更新, 得到的矩阵 B k B_k Bk可以表示成 B k = B 0 + ( Y k − B 0 S k ) ( D k + L k + L k T − S k T B 0 S k ) − 1 ( Y k − B 0 S k ) T . B_k=B_0+(Y_k-B_0S_k)(D_k+L_k+L_k^T-S_k^TB_0S_k)^{-1}(Y_k-B_0S_k)^T. Bk=B0+(YkB0Sk)(Dk+Lk+LkTSkTB0Sk)1(YkB0Sk)T.由Sherman-Morrison-Woodbury公式可得到对应的 H k H_k Hk形式(当然也可以直接利用SR1的自对偶性, 将上式中的 B , s , y B,s,y B,s,y分别换成 H , y , s H,y,s H,y,s即可).

2.3.2 展开更新

我们可能会怀疑有限内存更新能否以更简单的方式实施. 事实上, 我们下面将说明, 有限内存BFGS更新的最显然直接的实施策略要比基于紧表示的策略要昂贵得多.
BFGS公式可以写作 B k + 1 = B k − a k a k T + b k b k T , B_{k+1}=B_k-a_ka_k^T+b_kb_k^T, Bk+1=BkakakT+bkbkT,其中 a k = B k s k ( s k T B k s k ) 1 2 , b k = y k ( y k T s k ) 1 2 . a_k=\frac{B_ks_k}{(s_k^TB_ks_k)^{\frac{1}{2}}},\quad b_k=\frac{y_k}{(y_k^Ts_k)^{\frac{1}{2}}}. ak=(skTBksk)21Bksk,bk=(ykTsk)21yk.我们可以继续储存校正对 { s i , y i } \{s_i,y_i\} {si,yi}但用上面的公式计算矩阵-向量乘积. 有限内存的BFGS算法则对应 B k = B k 0 + ∑ i = k − m k − 1 [ b i b i T − a i a i T ] . B_k=B_k^0+\sum_{i=k-m}^{k-1}[b_ib_i^T-a_ia_i^T]. Bk=Bk0+i=kmk1[bibiTaiaiT].而向量对 { a i , b i } i = k − m k − 1 \{a_i,b_i\}_{i=k-m}^{k-1} {ai,bi}i=kmk1将以如下方式从储存的 { s i , y i } i = k − m k − 1 \{s_i,y_i\}_{i=k-m}^{k-1} {si,yi}i=kmk1中得到:

算法6 (Unrolling the BFGS formula)
for i = k − m , k − m + 1 , … , k − 1 i=k-m,k-m+1,\ldots,k-1 i=km,km+1,,k1
\quad\quad b i ← y i / ( y i T s i ) 1 / 2 b_i\leftarrow y_i/(y_i^Ts_i)^{1/2} biyi/(yiTsi)1/2;
\quad\quad a i ← B k 0 s i + ∑ j = k − m i − 1 [ ( b j T s i ) b j − ( a j T s i ) a j ] a_i\leftarrow B_k^0s_i+\sum_{j=k-m}^{i-1}\left[(b_j^Ts_i)b_j-(a_j^Ts_i)a_j\right] aiBk0si+j=kmi1[(bjTsi)bj(ajTsi)aj];
\quad\quad a i ← a i / ( s i T a i ) 1 / 2 a_i\leftarrow a_i/(s_i^Ta_i)^{1/2} aiai/(siTai)1/2;
end (for)

注意向量 a i a_i ai在每步迭代中都得重新计算. 而相比之下, b i b_i bi b j T s i b_j^Ts_i bjTsi可以储存以备后用, 每步迭代只需要计算最新的 b k − 1 , b j T s k − 1 b_{k-1},b_j^Ts_{k-1} bk1,bjTsk1.
下面来考虑计算量. 假设 B k 0 = I B_k^0=I Bk0=I, 则为了更新有限内存, 大约需要 3 2 m 2 n \frac{3}{2}m^2n 23m2n次运算. 而实际的 B m v B_mv Bmv则需要 4 m n 4mn 4mn次运算. 总的来说, 这样的方式要比紧表示低效.

3. 稀疏拟牛顿更新

下面我们介绍一种大规模情境下较为吸引人的拟牛顿法: 我们要求拟牛顿近似矩阵 B k B_k Bk拥有与真实Hessian矩阵相同(或差不多)的稀疏模式. 这一方法可以减少算法所需的存储量并可能给出对于Hessian更加精确的近似.
假设我们已经知道在定义域的某点处Hessian有哪些元素不为零, 即我们已知 Ω = d e f { ( i , j ) ∣ [ ∇ 2 f ( x ) ] i j ≠ 0 &ThinSpace;&ThinSpace; f o r &ThinSpace;&ThinSpace; s o m e &ThinSpace;&ThinSpace; x &ThinSpace;&ThinSpace; i n &ThinSpace;&ThinSpace; t h e &ThinSpace;&ThinSpace; d o m a i n &ThinSpace;&ThinSpace; o f &ThinSpace;&ThinSpace; f } . \Omega\xlongequal{def}\{(i,j)|[\nabla^2f(x)]_{ij}\ne0 \mathrm{\,\,for\,\,some\,\, }x\mathrm{\,\, in\,\, the\,\, domain\,\, of\,\, }f\}. Ωdef {(i,j)[2f(x)]ij̸=0forsomexinthedomainoff}.再假定当前的Hessian近似 B k B_k Bk反映了真实Hessian的非零结构, 即 ( B k ) i j = 0 , ∀ ( i , j ) ∈ Ω (B_k)_{ij}=0,\forall (i,j)\in\Omega (Bk)ij=0,(i,j)Ω. 在更新 B k B_k Bk B k + 1 B_{k+1} Bk+1时, 我们应当要求 B k + 1 B_{k+1} Bk+1

  • 满足割线方程;
  • 具有相同的稀疏模式;
  • B k B_k Bk尽量相近.

确切地说, 我们定义 B k + 1 B_{k+1} Bk+1为以下二次规划的解: min ⁡ B ∥ B − B k ∥ F 2 = ∑ ( i , j ) ∈ Ω [ B i j − ( B k ) i j ] 2 , s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; B s k = y k , B = B T , B i j = 0 , ∀ ( i , j ) ̸ ∈ Ω . \min_B\Vert B-B_k\Vert_F^2=\sum_{(i,j)\in\Omega}[B_{ij}-(B_k)_{ij}]^2,\\\mathrm{subject\,\,to\,}Bs_k=y_k,\quad B=B^T,\quad B_{ij}=0,\forall (i,j)\not\in\Omega. BminBBkF2=(i,j)Ω[Bij(Bk)ij]2,subjecttoBsk=yk,B=BT,Bij=0,(i,j)̸Ω.我们可以证明解 B k + 1 B_{k+1} Bk+1可以通过求解一个 n × n n\times n n×n的稀疏模式为 Ω \Omega Ω的线性系统得到. 求得 B k + 1 B_{k+1} Bk+1后, 我们可将其套进信赖域的框架, 得到下一迭代点 x k + 1 x_{k+1} xk+1. 注意这里用信赖域不用线搜索的原因是, 这里 B k + 1 B_{k+1} Bk+1不保证正定.
由于这一方法有诸多弊端, 我们不详细讨论它的细节了. 其一, 它不具有尺度不变性; 其二, 也是最重要的一点, 它的实际表现往往比较糟糕. 主要原因在于, 目标函数可能本身就是个不恰当的模型, 从而会产生较差的Hessian近似.
一种代替方案的想法是, 放松对于割线方程的要求, 仅需它在最近几步上均"近似"满足而不是在最近的一步上严格满足, 即 B k + 1 B_{k+1} Bk+1为如下问题的解: min ⁡ B ∥ B S k − Y k ∥ F 2 s u b j e c t &ThinSpace;&ThinSpace; t o &ThinSpace; B = B T , B i j = 0 , ∀ ( i , j ) ̸ ∈ Ω . \min_B\Vert BS_k-Y_k\Vert_F^2\\\mathrm{subject\,\,to\,}B=B^T,\quad B_{ij}=0,\forall(i,j)\not\in\Omega. BminBSkYkF2subjecttoB=BT,Bij=0,(i,j)̸Ω.注意算得的 B k + 1 B_{k+1} Bk+1仍不保证正定, 从而信赖域的框架是必须的. 这一凸优化问题有解, 不过较难计算. 而且这一方法可能会产生奇异的或者是病态的(即条件数较大)Hessian近似. 即使它要比前一种方法要好, 但其在大型问题上的表现仍然不尽人意.

4. 部分可分函数及其相应算法

4.1 可分与部分可分

可分的无约束优化问题中, 目标函数可以分解成一些更简单的、可独立优化的函数之和. 例如对于 f ( x ) = f 1 ( x 1 , x 3 ) + f 2 ( x 2 , x 4 , x 6 ) + f 3 ( x 5 ) , f(x)=f_1(x_1,x_3)+f_2(x_2,x_4,x_6)+f_3(x_5), f(x)=f1(x1,x3)+f2(x2,x4,x6)+f3(x5),我们可以通过独立地极小化 f i , i = 1 , 2 , 3 f_i,i=1,2,3 fi,i=1,2,3求出最终的最优点 x x x和最优值. 求解 m m m个低维的优化问题要比求解一个 n n n维的优化问题要经济得多.
不过在许多大型问题中, 目标函数 f : R n → R f:\mathbb{R}^n\to\mathbb{R} f:RnR是不可分的, 但它仍然可以写成一些更简单的函数之和, 这些函数被称为基本函数. 每一基本函数都具有如下性质: 当我们沿着许多线性无关的方向移动时, 函数值不变. 如果这一性质成立, 我们就称 f f f部分可分的. 所有Hessian稀疏的函数均是部分可分的, 但实际上不稀疏的也不少. 部分可分性使我们能够更加经济地表示问题、进行高效地自动微分以及高效的拟牛顿更新.
部分可分性最简单的一种形式体现在目标函数可以写作 f ( x ) = ∑ i = 1 n e f i ( x ) f(x)=\sum_{i=1}^{ne}f_i(x) f(x)=i=1nefi(x)时, 其中每一个基本函数 f i f_i fi仅依赖于 x x x的少许分量. 从而梯度 ∇ f i \nabla f_i fi和Hessian ∇ 2 f i \nabla^2f_i 2fi也仅有少量的非零元素. 我们有 ∇ f ( x ) = ∑ i = 1 n e ∇ f i ( x ) , ∇ 2 f ( x ) = ∑ i = 1 n e ∇ 2 f i ( x ) . \nabla f(x)=\sum_{i=1}^{ne}\nabla f_i(x),\quad\nabla^2f(x)=\sum_{i=1}^{ne}\nabla^2f_i(x). f(x)=i=1nefi(x),2f(x)=i=1ne2fi(x).

4.2 算法讨论

一个自然的问题是: 分别对每个基本函数的Hessian ∇ 2 f i ( x ) \nabla^2f_i(x) 2fi(x)做拟牛顿近似是否比直接对整个 ∇ 2 f ( x ) \nabla^2f(x) 2f(x)近似更加高效呢? 我们将说明这个答案是肯定的, 当然前提是拟牛顿近似能够完全挖掘每个基本函数Hessian的结构.
我们从一个简单的例子出发. 考虑目标函数 f ( x ) = ( x 1 − x 3 2 ) 2 + ( x 2 − x 4 2 ) 2 + ( x 3 − x 2 2 ) 2 + ( x 4 − x 1 2 ) 2 ≜ f 1 ( x ) + f 2 ( x ) + f 3 ( x ) + f 4 ( x ) . \begin{aligned}f(x)&amp;=(x_1-x_3^2)^2+(x_2-x_4^2)^2+(x_3-x_2^2)^2+(x_4-x_1^2)^2\\&amp;\triangleq f_1(x)+f_2(x)+f_3(x)+f_4(x).\end{aligned} f(x)=(x1x32)2+(x2x42)2+(x3x22)2+(x4x12)2f1(x)+f2(x)+f3(x)+f4(x).这里每个基本函数 f i f_i fi的Hessian均是 4 × 4 4\times 4 4×4的稀疏奇异矩阵, 且仅有4个非零元素.
下以 f 1 f_1 f1为例, 其他基本函数则是类似的. 尽管 f 1 f_1 f1看上去依赖于 x x x的所有分量, 但实际上它仅依赖于 x 1 , x 3 x_1,x_3 x1,x3, 此时称这两个为 f 1 f_1 f1的基本变量. 我们将基本变量集成到一个向量 x [ 1 ] x_{[1]} x[1]中, 即 x [ 1 ] = [ x 1 x 3 ] , x_{[1]}=\begin{bmatrix}x_1\\x_3\end{bmatrix}, x[1]=[x1x3],且它与 x x x的关系是 x [ 1 ] = U 1 x , U 1 = [ 1 0 0 0 0 0 1 0 ] . x_{[1]}=U_1x,\quad U_1=\begin{bmatrix}1 &amp; 0 &amp; 0 &amp; 0\\0 &amp; 0 &amp;1 &amp; 0\end{bmatrix}. x[1]=U1x,U1=[10000100].若定义函数 ϕ 1 \phi_1 ϕ1 ϕ 1 ( z 1 , z 2 ) = ( z 1 − z 2 2 ) 2 , \phi_1(z_1,z_2)=(z_1-z_2^2)^2, ϕ1(z1,z2)=(z1z22)2,则我们有 f 1 ( x ) = ϕ 1 ( U 1 x ) f_1(x)=\phi_1(U_1x) f1(x)=ϕ1(U1x). 应用链式法则, 有 ∇ f 1 ( x ) = U 1 T ∇ ϕ 1 ( U 1 x ) , ∇ 2 f 1 ( x ) = U 1 T ∇ 2 ϕ 1 ( U 1 x ) U 1 . \nabla f_1(x)=U_1^T\nabla \phi_1(U_1x),\quad\nabla^2f_1(x)=U_1^T\nabla^2\phi_1(U_1x)U_1. f1(x)=U1Tϕ1(U1x),2f1(x)=U1T2ϕ1(U1x)U1.具体写出来就是 ∇ 2 ϕ 1 ( U 1 x ) = [ 2 − 4 x 3 − 4 x 3 12 x 3 2 − 4 x 1 ] , ∇ 2 f 1 ( x ) = [ 2 0 − 4 x 3 0 0 0 0 0 − 4 x 3 0 12 x 3 2 − 4 x 1 0 0 0 0 0 ] . \nabla^2\phi_1(U_1x)=\begin{bmatrix}2 &amp; -4x_3\\-4x_3 &amp; 12x_3^2-4x_1\end{bmatrix},\quad\nabla^2f_1(x)=\begin{bmatrix}2 &amp; 0 &amp; -4x_3 &amp; 0\\0 &amp; 0 &amp;0 &amp; 0\\-4x_3 &amp; 0 &amp; 12x_3^2-4x_1 &amp; 0\\0 &amp; 0 &amp; 0 &amp; 0\end{bmatrix}. 2ϕ1(U1x)=[24x34x312x324x1],2f1(x)=204x3000004x3012x324x100000.矩阵 U 1 U_1 U1称为紧致矩阵, 它将低维函数 ϕ 1 \phi_1 ϕ1的导数信息映射到基本函数的导数信息.
下面就是关键的想法: 与其对 ∇ 2 f 1 \nabla^2f_1 2f1做拟牛顿近似, 我们转而近似 ∇ 2 ϕ 1 \nabla^2\phi_1 2ϕ1得到 2 × 2 2\times 2 2×2 B [ 1 ] B_{[1]} B[1]并使用 ∇ 2 f 1 ( x ) = U 1 T ∇ 2 ϕ 1 ( U 1 x ) U 1 \nabla^2f_1(x)=U_1^T\nabla^2\phi_1(U_1x)U_1 2f1(x)=U1T2ϕ1(U1x)U1将它转换到对于 ∇ 2 f 1 \nabla^2f_1 2f1的近似. 假设现在从 x x x迭代至 x + x^+ x+, 我们有 s [ 1 ] = x [ 1 ] + − x [ 1 ] , y [ 1 ] = ∇ ϕ 1 ( x [ 1 ] + ) − ∇ ϕ 1 ( x [ 1 ] ) . s_{[1]}=x_{[1]}^+-x_{[1]},\quad y_{[1]}=\nabla\phi_1(x_{[1]}^+)-\nabla\phi_1(x_{[1]}). s[1]=x[1]+x[1],y[1]=ϕ1(x[1]+)ϕ1(x[1]).接着使用BFGS或SR1公式得到新的近似 B [ 1 ] + B_{[1]}^+ B[1]+. 接着转换 ∇ 2 f 1 ( x + ) ≈ U 1 T B [ 1 ] + U 1 . \nabla^2f_1(x^+)\approx U_1^TB_{[1]}^+U_1. 2f1(x+)U1TB[1]+U1.依此对其他基本函数进行操作, 我们有 f ( x ) = ∑ i = 1 n e ϕ i ( U i x ) , B = ∑ i = 1 n e U 1 T B [ i ] U i . f(x)=\sum_{i=1}^{ne}\phi_i(U_ix),\quad B=\sum_{i=1}^{ne}U_1^TB_{[i]}U_i. f(x)=i=1neϕi(Uix),B=i=1neU1TB[i]Ui.我们可以将这一近似Hessian用于信赖域的框架中, 进而得到线性系统 B k p k = − ∇ f k B_kp_k=-\nabla f_k Bkpk=fk的近似解.
注意我们不需要显式地得到 B k B_k Bk, 我们可以使用从而梯度法求解, 其中只需要矩阵-向量乘积, 这可以用 U i U_i Ui B [ i ] B_{[i]} B[i]分步操作.
为阐释这一从基本函数角度出发的更新技术的优势所在, 我们现在考虑具有同样形式的问题, 但此时牵涉1000个变量. 函数 ϕ i \phi_i ϕi依然只依赖于2个变量, 从而每个Hessian近似 B [ i ] B_{[i]} B[i] 2 × 2 2\times 2 2×2矩阵. 经过几步迭代后, 我们已经有了充足的信息 s [ i ] s_{[i]} s[i]使得 B [ i ] B_{[i]} B[i]能够成为 ∇ 2 ϕ i \nabla^2\phi_i 2ϕi的良好近似, 从而类比地可以由 ∇ 2 f ( x ) \nabla^2f(x) 2f(x)的优良近似. 相反, 若对整个Hessian近似而不考虑部分可分性, 我们将需要近似一个 1000 × 1000 1000\times 1000 1000×1000的矩阵. 当变量数 n n n很大时, 在拟牛顿近似良好之前将需要很多次迭代. 这与基于部分可分性设计的算法就要逊色得多.
当然实际中并不总允许我们使用BFGS公式更新 B [ i ] B_{[i]} B[i], 这是因为我们不能保证隐含条件 s [ i ] T y [ i ] &gt; 0 s_{[i]}^Ty_{[i]}&gt;0 s[i]Ty[i]>0. 这就是说, 即使 ∇ 2 f ( x ) \nabla^2f(x) 2f(x)在解 x ∗ x^* x处至少是半正定的, 依然可能有一些 ∇ 2 ϕ i ( ⋅ ) \nabla^2\phi_i(\cdot) 2ϕi()是不定的. 一种解决方法是使用SR1公式更新.
以上基于部分可分性的拟牛顿方法的主要缺陷在于:

  • 我们需要求解 B k p k = − ∇ f k B_kp_k=-\nabla f_k Bkpk=fk获取步长, 而这一步的计算量相当于计算牛顿步. 这一线性系统的求解是必须的, 因为我们没能得到对于 H k H_k Hk的部分可分更新方式.
  • 其次, 识别函数结构中的部分可分性也是一个难点. 当我们识别出了问题的最佳部分分解时, 拟牛顿法的效果将会很好.
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值