∇ f ( x ( k ) ) . // 为书写方便,此后的梯度我们也用此变量表示现在我们先考虑二次凸函数 问题:
min f ( x ) = d e f 1 2 x ⊤ A x + b ⊤ x + c \min\;f(\boldsymbol x)\xlongequal{\rm def}\frac12\boldsymbol x^\top A\boldsymbol x+\boldsymbol b^\top\boldsymbol x+c min f ( x ) def 2 1 x ⊤ A x + b ⊤ x + c
其中A A A 为对称正定矩阵。
第一部分 和最速下降法一样,我们先确定步长因子。令φ ′ ( λ ) = 0 \varphi'(\lambda)=0 φ ′ ( λ ) = 0 ,即
φ ′ ( λ ) = ∇ f ( x ( k ) + λ d ( k ) ) ⊤ ⋅ d ( k ) = [ A ( x ( k ) + λ d ( k ) ) + b ] ⊤ ⋅ d ( k ) / / ∵ ∇ f = A x + b = [ g k + λ A d ( k ) ] ⊤ ⋅ d ( k ) = 0 \begin{aligned} \varphi'(\lambda)&=\nabla f(\boldsymbol x^{(k)}+\lambda\boldsymbol d^{(k)})^\top\cdot\boldsymbol d^{(k)}\\ &=[A(\boldsymbol x^{(k)}+\lambda\boldsymbol d^{(k)})+\boldsymbol b]^\top\cdot\boldsymbol d^{(k)}\quad \color{teal}//\because \nabla f=A\boldsymbol x+\boldsymbol b\\ &=[\boldsymbol g_k+\lambda A\boldsymbol d^{(k)}]^\top\cdot\boldsymbol d^{(k)}\\&=0 \end{aligned} φ ′ ( λ ) = ∇ f ( x ( k ) + λ d ( k ) ) ⊤ ⋅ d ( k ) = [ A ( x ( k ) + λ d ( k ) ) + b ] ⊤ ⋅ d ( k ) // ∵ ∇ f = A x + b = [ g k + λ A d ( k ) ] ⊤ ⋅ d ( k ) = 0
可以解得
λ k = − g k ⊤ d ( k ) d ( k ) ⊤ A d ( k ) \begin{aligned} \lambda_k=-\frac{\boldsymbol g_k^\top\boldsymbol d^{(k)}}{\boldsymbol d^{(k)\top} A\boldsymbol d^{(k)}} \end{aligned} λ k = − d ( k ) ⊤ A d ( k ) g k ⊤ d ( k )
这个λ k \lambda_k λ k 就是当前的最优步长因子。
第二部分 将方向更新公式d ( k + 1 ) = − g k + 1 + β k d ( k ) \boldsymbol d^{(k+1)}=-\boldsymbol g_{k+1}+\beta_k\boldsymbol d^{(k)} d ( k + 1 ) = − g k + 1 + β k d ( k ) 两边同时左乘d ( k ) ⊤ A {\boldsymbol d^{(k)}}^\top A d ( k ) ⊤ A 得:
d ( k ) ⊤ A d ( k + 1 ) = − d ( k ) ⊤ A g k + 1 + β k d ( k ) ⊤ A d ( k ) {\boldsymbol d^{(k)}}^\top A\boldsymbol d^{(k+1)}=-{\boldsymbol d^{(k)}}^\top A\boldsymbol g_{k+1}+\beta_k{\boldsymbol d^{(k)}}^\top A\boldsymbol d^{(k)} d ( k ) ⊤ A d ( k + 1 ) = − d ( k ) ⊤ A g k + 1 + β k d ( k ) ⊤ A d ( k )
为了让d ( k + 1 ) \boldsymbol d^{(k+1)} d ( k + 1 ) 和d ( k ) \boldsymbol d^{(k)} d ( k ) 共轭,我们令上式为零,从而解得:
β k = − d ( k ) ⊤ A g k + 1 d ( k ) ⊤ A d ( k ) \beta_k=-\frac{\boldsymbol d^{(k)\top} A\boldsymbol g_{k+1}}{\boldsymbol d^{(k)\top} A\boldsymbol d^{(k)}} β k = − d ( k ) ⊤ A d ( k ) d ( k ) ⊤ A g k + 1
前提条件 可以证明,当初始 搜索方向d ( 1 ) \boldsymbol d^{(1)} d ( 1 ) 取− g 1 -\boldsymbol g_1 − g 1 时(符合最速下降法),利用 FR法 构造的一系列方向关于A A A 共轭,并且经过有限步迭代必达极小点。 但是,如果初始方向不遵循最速下降法的选取方式,FR法得到的后继方向就未必共轭!!
对一般函数 推广到任意函数f ( x ) f(\boldsymbol x) f ( x ) 的极小化问题时,λ k \lambda_k λ k 不再能显式地求解出来,应与最速下降法类似采用其他一维搜索策略,而使用到的正定矩阵A A A 则不是固定不变,每一步都使用当前函数的 Hesse 矩阵∇ 2 f ( x ( k ) ) \nabla^2f(\boldsymbol x^{(k)}) ∇ 2 f ( x ( k ) ) 代替。这是将函数的二阶 Taylor 展开式近似 为一个二次凸函数推导得来的。
此外,对应一般函数往往共轭梯度法不能直接在有限步求得极小点,所以算法中往往会添加一个重置判断 ,达到重置条件时重新用当前最速下降方向作为迭代方向,而不再是用共轭梯度法的更新公式。
最后我们得到下列所示的计算步骤(来自:Open Problems in Nonlinear Conjugate Gradient Algorithms for Unconstrained Optimization | Semantic Scholar ):
图中的α k \alpha_k α k 即是本文中所说的步长λ k \lambda_k λ k ,所使用的一维搜索方法为 Wolfe line search;而关于β \beta β 的选取,不同作者给出了不同的表达式:
对于二次凸函数作为目标函数的情况时,以上表达式均是等价 的!但在应对一般函数时,性能有所差别。
牛顿法 牛顿法(Newton’s method )最初由英国科学家艾萨克·牛顿(Isaac Newton)在17世纪提出,首次发表于 1685 年 John Wallis 的《历史与实用代数论》(A Treatise of Algebra both Historical and Practical)中,用于求解多项式方程的根 。
1690 年,约瑟夫·拉夫逊(Joseph Raphson)在《普遍等式分析》(Analysis aequationum universalis)一书中给出了更加简化的描述 。虽然他也只将该方法应用于多项式,但他从原始多项式中提取了每个连续修正,从而避免了牛顿原始方法繁琐的重写过程,从而为每个问题推导出一个可重复使用的迭代表达式。因此牛顿法有时也被称为牛顿-拉夫逊方法(Newton-Raphson method )。
最后,1740 年,托马斯·辛普森(Thomas Simpson)将牛顿法描述为一种使用微积分求解一般非线性方程的迭代方法,辛普森还将牛顿法推广到了二元方程组,并指出牛顿法可以通过将梯度设为零来解决优化问题 。
牛顿法求根 在数值分析 中,牛顿法可以用于求出一元可微函数的零点(方程的根)的数值解。
首先,选取一个接近函数f ( x ) f(x) f ( x ) 零点的初值x 0 x_0 x 0 ,计算对应的函数值f ( x 0 ) f(x_0) f ( x 0 ) 和其切线斜率f ′ ( x 0 ) f'(x_0) f ′ ( x 0 ) 。然后我们给出一条直线,其斜率为f ′ ( x 0 ) f'(x_0) f ′ ( x 0 ) 并且过点( x 0 , f ′ ( 0 ) ) (x_0,f'(0)) ( x 0 , f ′ ( 0 )) 。记该直线与x x x 轴的交点坐标为( x 1 , 0 ) (x_1,0) ( x 1 , 0 ) ,那么其横坐标的值x 1 x_1 x 1 通常就比x 0 x_0 x 0 更接近函数的零点x ∗ ( f ( x ∗ ) = 0 ) x^*\quad(f(x^*)=0) x ∗ ( f ( x ∗ ) = 0 ) 。
上述过程实际上就等价于求解下列方程:
0 = ( x − x 0 ) ⋅ f ′ ( x 0 ) + f ( x 0 ) 0=(x-x_0)·f'(x_0)+f(x_0) 0 = ( x − x 0 ) ⋅ f ′ ( x 0 ) + f ( x 0 )
解得
x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\frac{f(x_0)}{f'(x_0)} x 1 = x 0 − f ′ ( x 0 ) f ( x 0 )
接下来,为了找到零点更精确的值,我们再用同样的方法从x 1 x_1 x 1 出发寻找x 2 , x 3 , . . . x_2,x_3,... x 2 , x 3 , ... 直到满足一定的精度要求。整个过程如下图所示:
事实上,这个方法等价于在x 0 x_0 x 0 处将原函数近似 看作一次函数。这个近似由Taylor展开式 忽略高阶项得出:
f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = d e f φ ( x ) f(x)\approx f(x_0)+f'(x_0)(x-x_0)\xlongequal{\rm def}\varphi(x) f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) def φ ( x )
此时令φ ( x ) = 0 \varphi(x)=0 φ ( x ) = 0 即可解得x 1 x_1 x 1 。第k k k 次迭代的更新公式就可以给出:
x k = x k − 1 − f ( x k − 1 ) f ′ ( x k − 1 ) x_k=x_{k-1}-\frac{f(x_{k-1})}{f'(x_{k-1})} x k = x k − 1 − f ′ ( x k − 1 ) f ( x k − 1 )
优化中的牛顿法 在最优化领域,我们往往需要通过令可微函数的导数为零求其极值点。事实上求“导函数为零的点”就等价于求解“导函数的零点/方程的根”。
所以对于二阶可导的一元函数,我们可以利用牛顿法 得到极值点的更新公式。
推广之,对于多元二次可微实函数 f ( x ) f(\boldsymbol x) f ( x ) ,通过其二阶 Taylor 展开式进行近似:
f ( x ) ≈ ϕ ( x ) = f ( x ( k ) ) + ∇ f ( x ( k ) ) ⊤ ( x − x ( k ) ) + 1 2 ( x − x ( k ) ) ⊤ ∇ 2 f ( x ( k ) ) ( x − x ( k ) ) f(\boldsymbol x)\approx\phi(\boldsymbol x)=f(\boldsymbol x^{(k)})+\nabla f(\boldsymbol x^{(k)})^\top(\boldsymbol x-\boldsymbol x^{(k)})+\frac12(\boldsymbol x-\boldsymbol x^{(k)})^\top\nabla^2 f(\boldsymbol x^{(k)})(\boldsymbol x-\boldsymbol x^{(k)}) f ( x ) ≈ ϕ ( x ) = f ( x ( k ) ) + ∇ f ( x ( k ) ) ⊤ ( x − x ( k ) ) + 2 1 ( x − x ( k ) ) ⊤ ∇ 2 f ( x ( k ) ) ( x − x ( k ) )
其中,∇ 2 f ( x ( k ) ) \nabla^2 f(\boldsymbol x^{(k)}) ∇ 2 f ( x ( k ) ) 为 Hesse 矩阵。
令∇ ϕ ( x ) = 0 \nabla\phi(\boldsymbol x)=\bf0 ∇ ϕ ( x ) = 0 即可求得平稳点的近似解。可得迭代公式:
x ( k + 1 ) = x ( k ) − ∇ 2 f ( x ( k ) ) − 1 ∇ f ( x ( k ) ) \boldsymbol x^{(k+1)}=\boldsymbol x^{(k)}-\nabla^2 f(\boldsymbol x^{(k)})^{-1}\nabla f(\boldsymbol x^{(k)}) x ( k + 1 ) = x ( k ) − ∇ 2 f ( x ( k ) ) − 1 ∇ f ( x ( k ) )
整个算法流程如下图所示:
二次终止性 对于n n n 元正定二次凸函数f ( x ) = 1 2 x ⊤ A x + b ⊤ x + c f(\boldsymbol x)=\frac12\boldsymbol x^\top A\boldsymbol x+\boldsymbol b^\top\boldsymbol x+c f ( x ) = 2 1 x ⊤ A x + b ⊤ x + c ,我们可以利用∇ f ( x ) = 0 \nabla f(\boldsymbol x)=\bf0 ∇ f ( x ) = 0 求出其极小点的解析解x ∗ = − A − 1 b \boldsymbol x^*=-A^{-1}\boldsymbol b x ∗ = − A − 1 b 。
而当我们利用牛顿法来求解该问题时,任取一个初点x ( 1 ) \boldsymbol x^{(1)} x ( 1 ) ,计算其后继点:
x ( 2 ) = x ( 1 ) − ∇ 2 f ( x ( 1 ) ) − 1 ∇ f ( x ( 1 ) ) = x ( 1 ) − A − 1 ( A x ( 1 ) + b ) = − A − 1 b \begin{aligned} \boldsymbol x^{(2)}&=\boldsymbol x^{(1)}-\nabla^2 f(\boldsymbol x^{(1)})^{-1}\nabla f(\boldsymbol x^{(1)})\\ &=\boldsymbol x^{(1)}-A^{-1}(A\boldsymbol x^{(1)}+\boldsymbol b)\\ &=-A^{-1}\boldsymbol b \end{aligned} x ( 2 ) = x ( 1 ) − ∇ 2 f ( x ( 1 ) ) − 1 ∇ f ( x ( 1 ) ) = x ( 1 ) − A − 1 ( A x ( 1 ) + b ) = − A − 1 b
可以发现,正好就是最优解。这说明牛顿迭代法具有二次终止性 (也称二次收敛性)。
D e f i n e : \bf Define: Define : 对于n n n 元正定二次凸函数f ( x ) = 1 2 x ⊤ A x + b ⊤ x + c f(\boldsymbol x)=\frac12\boldsymbol x^\top A\boldsymbol x+\boldsymbol b^\top\boldsymbol x+c f ( x ) = 2 1 x ⊤ A x + b ⊤ x + c 求极小点的问题,若某个迭代 算法能从任意点出发,经过有限步迭代达到最优解,则称该算法具有二次终止性 。
我们可以下结论:最速下降法不具备二次终止性,而共轭梯度法具有二次终止性 。
此外,牛顿法在极小点附近具有很快的收敛速度,避免了最速下降法的锯齿现象。上述三种算法的收敛可视化如下图所示:
阻尼牛顿法 在使用牛顿迭代法求解最优化问题时,有一点值得注意:当初始点远离极小点时,牛顿法可能不收敛。
记牛顿方向d = − ∇ 2 f ( x ( k ) ) − 1 ∇ f ( x ( k ) ) \boldsymbol d=-\nabla^2 f(\boldsymbol x^{(k)})^{-1}\nabla f(\boldsymbol x^{(k)}) d = − ∇ 2 f ( x ( k ) ) − 1 ∇ f ( x ( k ) ) ,此方向并不一定是下降方向。也就是说利用牛顿法迭代,函数值甚至还有上升的可能。另外,即是它当前是下降方向,直接使用x ( k + 1 ) = x ( k ) + d ( k ) \boldsymbol x^{(k+1)}=\boldsymbol x^{(k)}+\boldsymbol d^{(k)} x ( k + 1 ) = x ( k ) + d ( k ) 来更新,得到的新点也未必是这个方向下最佳的选择。
因此,阻尼牛顿法 (Damped Newton’s Method)提了出来,和最速下降法和共轭梯度法一样引入了可一维搜索的步长因子λ k \lambda_k λ k 来对牛顿方向进行限制:即使牛顿方向使函数值上升,优化过程中也会因为一维搜索这一步迫使λ k → 0 \lambda_k\to0 λ k → 0 来消减影响。
修正牛顿法 虽然阻尼牛顿法解决了原始牛顿法的一些问题,但是它们仍然拥有共同的缺点:
可能出现 Hesse 矩阵 是奇异 的情况,因其不可逆使更新公式失效; Hesse 矩阵未必正定,此时牛顿方向未必下降,阻尼牛顿算法也会失效(λ = 0 \lambda=0 λ = 0 时x \boldsymbol x x 得不到更新)。 为解决上述问题,修正牛顿法 (Modified Newton’s Method)提出构造 一个对称正定矩阵 B k B_k B k 来取代 Hesse 矩阵∇ 2 f ( x ( k ) ) \nabla^2 f(\boldsymbol x^{(k)}) ∇ 2 f ( x ( k ) ) .
构造B k B_k B k 的其中一种方法是令
B k = ∇ 2 f ( x ( k ) ) + ϵ k I B_k=\nabla^2 f(\boldsymbol x^{(k)})+\epsilon_k\boldsymbol I B k = ∇ 2 f ( x ( k ) ) + ϵ k I
I \boldsymbol I I 为n n n 阶单位阵,ϵ k \epsilon_k ϵ k 为一个适当的正数。 假设 Hesee 矩阵的特征值为α k \alpha_k α k ,那么合适的ϵ k \epsilon_k ϵ k 可以保证B k B_k B k 的特征值α k + ϵ k \alpha_k+\epsilon_k α k + ϵ k 均大于零,从而保证其正定性。
最后我们给出修正牛顿法的算法描述:
拟牛顿法 牛顿法最突出的特点就是收敛速度很快,但是它需要计算二阶偏导数,并且 Hesse 矩阵可能非正定。修正牛顿法虽然解决了 Hesse 矩阵的非正定问题,但是对目标函数的二阶可微性、计算二阶偏导数的计算代价 仍然有要求。为此,一类提出直接使用与二阶导数无关 的矩阵来近似 牛顿法中的∇ 2 f ( x ( k ) ) − 1 \nabla^2 f(\boldsymbol x^{(k)})^{-1} ∇ 2 f ( x ( k ) ) − 1 的算法诞生了,这类算法我们就称为拟牛顿法 。
拟牛顿条件 为构造∇ 2 f ( x ( k ) ) − 1 \nabla^2 f(\boldsymbol x^{(k)})^{-1} ∇ 2 f ( x ( k ) ) − 1 的近似矩阵G k G_k G k ,为了不使用到二阶导,我们需要考察∇ 2 f ( x ( k ) ) − 1 \nabla^2 f(\boldsymbol x^{(k)})^{-1} ∇ 2 f ( x ( k ) ) − 1 与一阶导数的关系。
设在第k k k 次迭代后得到了点x ( k + 1 ) \boldsymbol x^{(k+1)} x ( k + 1 ) ,此时目标函数在此处的二阶 Taylor 近似如下:
f ( x ) ≈ f ( x ( k + 1 ) ) + ∇ f ( x ( k + 1 ) ) ⊤ ( x − x ( k + 1 ) ) + 1 2 ( x − x ( k + 1 ) ) ⊤ ∇ 2 f ( x ( k + 1 ) ) ( x − x ( k + 1 ) ) f(\boldsymbol x)\approx f(\boldsymbol x^{(k+1)})+\nabla f(\boldsymbol x^{(k+1)})^\top(\boldsymbol x-\boldsymbol x^{(k+1)})+\frac12(\boldsymbol x-\boldsymbol x^{(k+1)})^\top\nabla^2 f(\boldsymbol x^{(k+1)})(\boldsymbol x-\boldsymbol x^{(k+1)}) f ( x ) ≈ f ( x ( k + 1 ) ) + ∇ f ( x ( k + 1 ) ) ⊤ ( x − x ( k + 1 ) ) + 2 1 ( x − x ( k + 1 ) ) ⊤ ∇ 2 f ( x ( k + 1 ) ) ( x − x ( k + 1 ) )
进而梯度∇ f ( x ) ≈ ∇ f ( x ( k + 1 ) ) + ∇ 2 f ( x ( k + 1 ) ) ( x − x ( k + 1 ) ) \nabla f(\boldsymbol x)\approx \nabla f(\boldsymbol x^{(k+1)})+\nabla ^2f(\boldsymbol x^{(k+1)})(\boldsymbol x-\boldsymbol x^{(k+1)}) ∇ f ( x ) ≈ ∇ f ( x ( k + 1 ) ) + ∇ 2 f ( x ( k + 1 ) ) ( x − x ( k + 1 ) ) 。
接下来取x = x ( k ) \boldsymbol x=\boldsymbol x^{(k)} x = x ( k ) 带入上式,令s ( k ) = x ( k + 1 ) − x ( k ) , y ( k ) = ∇ f ( x ( k + 1 ) ) − ∇ f ( x ( k ) ) \boldsymbol s^{(k)}=\boldsymbol x^{(k+1)}-\boldsymbol x^{(k)}, \boldsymbol y^{(k)}=\nabla f(\boldsymbol x^{(k+1)})-\nabla f(\boldsymbol x^{(k)}) s ( k ) = x ( k + 1 ) − x ( k ) , y ( k ) = ∇ f ( x ( k + 1 ) ) − ∇ f ( x ( k ) ) ,得到
y ( k ) ≈ ∇ 2 f ( x ( k + 1 ) ) s ( k ) \boldsymbol y^{(k)}\approx\nabla^2 f(\boldsymbol x^{(k+1)})\boldsymbol s^{(k)} y ( k ) ≈ ∇ 2 f ( x ( k + 1 ) ) s ( k )
当 Hesse 可逆时,s ( k ) ≈ ∇ 2 f ( x ( k + 1 ) ) − 1 y ( k ) \boldsymbol s^{(k)}\approx\nabla^2 f(\boldsymbol x^{(k+1)})^{-1}\boldsymbol y^{(k)} s ( k ) ≈ ∇ 2 f ( x ( k + 1 ) ) − 1 y ( k ) .
于是,如果我们需要找到一个矩阵G k + 1 G_{k+1} G k + 1 来近似 Hesse 矩阵的逆 ,相当于它需要满足下列等式:
s ( k ) = G k + 1 y ( k ) \boldsymbol s^{(k)}=G_{k+1}\boldsymbol y^{(k)} s ( k ) = G k + 1 y ( k )
这个公式也被叫做拟牛顿条件 (Secant equation).
构造近似矩阵 满足拟牛顿条件的 矩阵G k G_{k} G k 应当是正定的以保证拟牛顿方向是下降方向。那么构造的一般策略是取G 1 G_1 G 1 为任意n n n 阶对称正定矩阵(通常取单位阵I I I ),然后通过矫正矩阵 Δ G k \Delta G_k Δ G k 来修正G k G_k G k 得到G k + 1 G_{k+1} G k + 1 :
G k + 1 = G k + Δ G k G_{k+1}=G_k+\Delta G_k G k + 1 = G k + Δ G k
接下来就是如何设计矫正矩阵了。不同的算法有着不同的设计方式。
秩一矫正 我们知道一个n n n 阶方阵可以由一个n n n 维列向量经过乘积得到,比如设:
Δ G k = α k z ( k ) z ( k ) ⊤ \Delta G_k=\alpha_k\boldsymbol z^{(k)}{\boldsymbol z^{(k)}}^\top Δ G k = α k z ( k ) z ( k ) ⊤
其中,α k \alpha_k α k 为一个常数,z ( k ) \boldsymbol z^{(k)} z ( k ) 为n n n 维向量。这样的矩阵正好是秩一矩阵。
将这样的矫正矩阵带入拟牛顿条件,可以得到
Δ G k = ( s ( k ) − G k y ( k ) ) ( s ( k ) − G k y ( k ) ) ⊤ y ( k ) ⊤ ( s ( k ) − G k y ( k ) ) \Delta G_k=\frac{(\boldsymbol s^{(k)}-G_k\boldsymbol y^{(k)})(\boldsymbol s^{(k)}-G_k\boldsymbol y^{(k)})^\top}{\boldsymbol y^{(k)\top}(\boldsymbol s^{(k)}-G_k\boldsymbol y^{(k)})} Δ G k = y ( k ) ⊤ ( s ( k ) − G k y ( k ) ) ( s ( k ) − G k y ( k ) ) ( s ( k ) − G k y ( k ) ) ⊤
DFP算法 DFP算法是拟牛顿法中一种著名的算法,由 Davidon 首先提出,后经 Fletcher 和 Powell 改进,DFP的命名取自他们三人的名字 Davidon-Fletcher-Powell 。 该算法也被称为 变尺度法 。
DFP 设计矫正矩阵如下:
Δ G k = α k u ( k ) u ( k ) ⊤ + β k v ( k ) v ( k ) ⊤ \Delta G_k=\alpha_k\boldsymbol u^{(k)}{\boldsymbol u^{(k)}}^\top+\beta_k\boldsymbol v^{(k)}{\boldsymbol v^{(k)}}^\top Δ G k = α k u ( k ) u ( k ) ⊤ + β k v ( k ) v ( k ) ⊤
并且,取u ( k ) = s ( k ) , v ( k ) = G k y ( k ) \boldsymbol u^{(k)}=\boldsymbol s^{(k)},\;\boldsymbol v^{(k)}=G_k\boldsymbol y^{(k)} u ( k ) = s ( k ) , v ( k ) = G k y ( k ) 以及限制α k = 1 / s ( k ) ⊤ y ( k ) \alpha_k=1/{\boldsymbol s^{(k)}}^\top\boldsymbol y^{(k)} α k = 1/ s ( k ) ⊤ y ( k ) 和β k = 1 / y ( k ) ⊤ G k y ( k ) \beta_k=1/{\boldsymbol y^{(k)}}^\top G_k\boldsymbol y^{(k)} β k = 1/ y ( k ) ⊤ G k y ( k ) .
最后得到
Δ G k = s ( k ) s ( k ) ⊤ s ( k ) ⊤ y ( k ) − G k s ( k ) ( G k s ( k ) ) ⊤ y ( k ) ⊤ G k y ( k ) \Delta G_k=\frac{\boldsymbol s^{(k)}\boldsymbol s^{(k)\top}}{\boldsymbol s^{(k)\top}\boldsymbol y^{(k)}}-\frac{G_k\boldsymbol s^{(k)}(G_k\boldsymbol s^{(k)})^\top}{\boldsymbol y^{(k)\top} G_k\boldsymbol y^{(k)}} Δ G k = s ( k ) ⊤ y ( k ) s ( k ) s ( k ) ⊤ − y ( k ) ⊤ G k y ( k ) G k s ( k ) ( G k s ( k ) ) ⊤
Broyden族 前面我们提到的G k G_k G k 都是用来近似∇ 2 f ( x ( k ) ) − 1 \nabla^2 f(\boldsymbol x^{(k)})^{-1} ∇ 2 f ( x ( k ) ) − 1 (有逆) 的。事实上我们还可以用矩阵B k B_k B k 来近似∇ 2 f ( x ( k ) ) \nabla^2 f(\boldsymbol x^{(k)}) ∇ 2 f ( x ( k ) ) (无逆)。
类似的方法我们有B k + 1 = B k + Δ B k B_{k+1}=B_k+\Delta B_k B k + 1 = B k + Δ B k ,并且y ( k ) = B k + 1 s ( k ) \boldsymbol y^{(k)}=B_{k+1}\boldsymbol s^{(k)} y ( k ) = B k + 1 s ( k ) 。
显然,要找到一个Δ B k \Delta B_k Δ B k 的设计方法使上式成立,我们可以化用 DFP 的设计方法,只是将变量稍作修改而已。也确实存在这样的算法:Broyden–Fletcher–Goldfarb–Shanno (BFGS ) algorithm 。
有研究表明,BFGS 和 DFP 的加权线性组合仍然满足拟牛顿公式,权重选取不同得到的修正公式就不同,全体的修正公式被称为Broyden族 。
此外还有其他的设计方法:
信赖域方法 待更
附赠:一维搜索 待更