牛顿法 (Newton Method)
牛顿法的基本思想是在极小点附近通过对目标函数 f ( x ) f(x) f(x)做二阶Taylor展开,进而找到 f ( x ) f(x) f(x)的极小点的估计值[1]。一维情况下,也即令函 φ ( x ) \varphi(x) φ(x)为
φ ( x ) = f ( x k ) + f ′ ( x k ) ( x − x k ) + 1 2 f ′ ′ ( x k ) ( x − x k ) 2 \varphi(x) = f(x_k)+f^{'}(x_k)(x-x_k)+\frac{1}{2}f^{''}(x_k)(x-x_k)^2 φ(x)=f(xk)+f′(xk)(x−xk)+21f′′(xk)(x−xk)2
则其导数 φ ′ ( x ) \varphi^{'}(x) φ′(x)满足
φ ′ ( x ) = f ′ ( x k ) + f ′ ′ ( x k ) ( x − x k ) = 0 \varphi^{'}(x) =f^{'}(x_k)+f^{''}(x_k)(x-x_k)=0 φ′(x)=f′(xk)+f′′(xk)(x−xk)=0
因此
x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) x_{k+1}=x_k-\frac{f^{'}(x_k)}{f^{''}(x_k)} xk+1=xk−f′′(xk)f′(xk) (1)
将 x k + 1 x_{k+1} xk+1作为 f ( x ) f(x) f(x)极小点的一个进一步的估计值。重复上述过程,可以产生一系列的极小点估值集合 { x k } \{x_k\} {xk}。一定条件下,这个极小点序列 { x k } \{x_k\} {xk}收敛于 f ( x ) f(x) f(x)的极值点。
将上述讨论扩展到 N N N维空间,类似的,对于 N N N维函数 f ( x ) f(\mathbf{x}) f(x)有
f ( x ) ≈ φ ( x ) = f ( x k ) + ∇ f ( x k ) ( x − x k ) + 1 2 ( x − x k ) T ∇ 2 f ( x − x k ) f(\mathbf{x})\approx \varphi(\mathbf{x})=f(\mathbf{x}_k)+\nabla f(\mathbf{x}_k)(\mathbf{x}-\mathbf{x}_k)+\frac{1}{2}(\mathbf{x}-\mathbf{x}_k)^{\rm T}\nabla^2 f(\mathbf{x}-\mathbf{x}_k) f(x)≈φ(x)=f(xk)+∇f(xk)(x−xk)+21(x−xk)T∇2f(x−xk)
其中 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x)和 ∇ 2 f ( x ) \nabla^2f(\mathbf{x}) ∇2f(x)分别是目标函数的的一阶和二阶导数,表现为 N N N维向量和 N N N × \times × N N N矩阵,而后者又称为目标函数 f ( x ) f(\mathbf{x}) f(x)在 x k \mathbf{x}_k xk处的Hesse矩阵。 设 ∇ 2 f ( x ) \nabla^2f(\mathbf{x}) ∇2f(x)可逆,则可得与方程(1)类似的迭代公式:
x k + 1 = x k − [ ∇ 2 f ( x k ] − 1 ∇ f ( x k ) \mathbf{x}_{k+1}=\mathbf{x}_k-[\nabla^2f(\mathbf{x}_k]^{-1}\nabla f(\mathbf{x}_k) xk+1=xk−[∇2f(xk]−1∇f(xk) (2)
这就是原始牛顿法的迭代公式。
原始牛顿法虽然具有二次终止性(即用于二次凸函数时,经有限次迭代必达极小点),但是要求初始点需要尽量靠近极小点,否则有可能不收敛。因此人们又提出了阻尼牛顿法[1]。这种方法在算法形式上等同于所有流行的优化方法,即确定搜索方向,再沿此方向进行一维搜索,找出该方向上的极小点,然后在该点处重新确定搜索方向,重复上述过程,直至函数梯度小于预设判据 ϵ \epsilon ϵ。具体步骤列为算法1。
(1) 给定初始点 x 0 \mathbf{x}_0 x0,设定收敛判据 ϵ \epsilon ϵ, k = 0 k=0 k=0.
(2) 计算 ∇ f ( x k ) \nabla f(\mathbf{x}_k) ∇f(xk)和 ∇ 2 f ( x k ) \nabla^2f(\textbf{x}_k) ∇2f(xk).
(3) 若 ∣ ∣ ∇ f ( x k ) ∣ ∣ < ϵ ||\nabla f(\mathbf{x}_k)|| < \epsilon ∣∣∇f(xk)∣∣<ϵ,则停止迭代,否则确定搜索方向 d k = − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) \mathbf{d}_k=-[\nabla^2f(\mathbf{x}_k)]^{-1} \nabla f(\mathbf{x}_k) dk=−[∇2f(xk)]−1∇f(xk).
(4) 从 x k \mathbf{x}_k xk出发,沿 d k \mathbf{d}_k dk做一维搜索,
min λ f ( x k + λ d k ) = f ( x k + λ k d k ) \underset{\lambda}{\min}f(\mathbf{x}_k+\lambda\mathbf{d}_k)=f(\mathbf{x}_k+\lambda_k\mathbf{d}_k) λminf(xk+λdk)=f(xk+λkdk)
令 x k + 1 = x k + λ k d k \mathbf{x}_{k+1}=\mathbf{x}_k+\lambda_k\mathbf{d}_k xk+1=xk+λkdk.
(5) 设 k = k + 1 k=k+1 k=k+1,转步骤(2).
在一定程度上,阻尼牛顿法具有更强的稳定性
如同上一节指出,牛顿法虽然收敛速度快,但是计算过程中需要计算目标函数的二阶偏导数,难度较大。更为复杂的是目标函数的Hesse矩阵无法保持正定,从而令牛顿法失效。为了解决这两个问题,人们提出了拟牛顿法。这个方法的基本思想是不用二阶偏导数而构造出可以近似Hesse矩阵的逆的正定对称阵, 从而在"拟牛顿"的条件下优化目标函数。构造方法的不同决定了不同的拟牛顿法。
首先分析如何构造矩阵可以近似Hesse矩阵的逆:
设第k次迭代之后得到点 x k + 1 \mathbf{x}_{k+1} xk+1,将目标函数 f ( x ) f(\mathbf{x}) f(x)在 x k + 1 \mathbf{x}_{k+1} xk+1处展成Taylor级数,取二阶近似,得到
f ( x ) ≈ f ( x k + 1 ) + ∇ f ( x k + 1 ) ( x − x k + 1 ) + 1 2 ( x − x k + 1 ) T ∇ 2 f ( x k + 1 ) ( x − x k + 1 ) f(\mathbf{x})\approx f(\mathbf{x}_{k+1})+\nabla f(\mathbf{x}_{k+1})(\mathbf{x}-\mathbf{x}_{k+1})+\frac{1}{2}(\mathbf{x}-\mathbf{x}_{k+1})^{\rm T}\nabla^2f(\mathbf{x}_{k+1})(\mathbf{x}-\mathbf{x}_{k+1}) f(x)≈f(xk+1)+∇f(xk+1)(x−xk+1)+21(x−xk+1)T∇2f(xk+1)(x−xk+1)
因此
∇ f ( x ) ≈ ∇ f ( x k + 1 ) + ∇ 2 f ( x k + 1 ) ( x − x k + 1 ) \nabla f(\mathbf{x}) \approx \nabla f(\mathbf{x}_{k+1})+\nabla^2f(\mathbf{x}_{k+1})(\mathbf{x}-\mathbf{x}_{k+1}) ∇f(x)≈∇f(xk+1)+∇2f(xk+1)(x−xk+1)
令 x = x k \mathbf{x}=\mathbf{x}_k x=xk,则
∇ f ( x k + 1 ) − ∇ f ( x k ) ≈ ∇ 2 f ( x k + 1 ) ( x k − x k + 1 ) \nabla f(\mathbf{x}_{k+1})-\nabla f(\mathbf{x}_k) \approx\nabla^2f(\mathbf{x}_{k+1})(\mathbf{x}_k-\mathbf{x}_{k+1}) ∇f(xk+1)−∇f(xk)≈∇2f(xk+1)(xk−xk+1) (3)
记
s k = x k + 1 − x k , y k = ∇ f ( x k + 1 ) − ∇ f ( x k ) \mathbf{s}_k=\mathbf{x}_{k+1}-\mathbf{x}_k,\quad \mathbf{y}_k=\nabla f(\mathbf{x}_{k+1})-\nabla f(\mathbf{x}_k) sk=xk+1−xk,yk=∇f(xk+1)−∇f(xk)
同时设Hesse矩阵 ∇ 2 f ( x k + 1 ) \nabla^2f(\mathbf{x}_{k+1}) ∇2f(xk+1)可逆,则方程(3)可以表示为
s k ≈ [ ∇ 2 f ( x k + 1 ) ] − 1 y k \mathbf{s}_k \approx [\nabla^2f(\mathbf{x}_{k+1})]^{-1}\mathbf{y}_k sk≈[∇2f(xk+1)]−1yk (4)
因此,只需计算目标函数的一阶导数,就可以依据方程(4)估计该处的Hesse矩阵的逆。也即,为了用不包含二阶导数的矩阵 H k + 1 \mathbf{H}_{k+1} Hk+1近似牛顿法中的Hesse矩阵 ∇ 2 f ( x k + 1 ) \nabla^2f(\mathbf{x}_{k+1}) ∇2f(xk+1)的逆矩 阵, H k + 1 \mathbf{H}_{k+1} Hk+1必须满足
s k ≈ H k + 1 y k \mathbf{s}_k \approx \mathbf{H}_{k+1}\mathbf{y}_k sk≈Hk+1yk (5)
方程(5)也称为拟牛顿条件。不加证明的,下面给出两个最常用的 H k + 1 \mathbf{H}_{k+1} Hk+1构造公式
BFGS公式有时也称为DFP公式的对偶公式。这是因为其推导过程与方程(6)完全一样,只需要用矩阵 B k + 1 \mathbf{B}_{k+1} Bk+1取代 H k + 1 − 1 \mathbf{H}_{k+1}^{-1} Hk+1−1,同时将 s k \mathbf{s}_k sk和 y k \mathbf{y}_k yk互换,最后可以得到
H k + 1 = H k + [ 1 + y k T H k y k s k T y k ] ⋅ s k s k T s k T y k − s k y k T H k s k T y k \mathbf{H}_{k+1}=\mathbf{H}_k+[1+\frac{\mathbf{y}_k^{\rm T}\mathbf{H}_k\mathbf{y}_k}{\mathbf{s}_k^{\rm T}\mathbf{y}_k}]\cdot\frac{\mathbf{s}_k\mathbf{s}_k^{\rm T}}{\mathbf{s}_k^{\rm T}\mathbf{y}_k}-\frac{\mathbf{s}_k\mathbf{y}_k^{\rm T}\mathbf{H}_k}{\mathbf{s}_k^{\rm T}\mathbf{y}_k} Hk+1=Hk+[1+skTykykTHkyk]⋅skTykskskT−skTykskykTHk (7)
这个公式要优于DFP公式,因此目前得到了最为广泛的应用。
利用方程(6)或(7)的拟牛顿法计算步骤列为算法2。
(1) 给定初始点 x 0 \mathbf{x}_0 x0,设定收敛判据 ϵ \epsilon ϵ, k = 0 k=0 k=0.
(2) 设 H 0 = I \mathbf{H}_0 = \mathbf{I} H0=I,计算出目标函数 f ( x ) f(\mathbf{x}) f(x)在 x k \mathbf{x}_k xk处的梯度 g k = ∇ f ( x k ) g_k = \nabla f(\mathbf{x}_k) gk=∇f(xk).
(3) 确定搜索方向 d k \mathbf{d}_k dk:
d k = H k g k \quad \mathbf{d}_k = \mathbf{H}_k\mathbf{g}_k dk=Hkgk.
(4) 从 x k \mathbf{x}_k xk出发,沿 d k \mathbf{d}_k dk做一维搜索,满足
f ( x k + λ k d k ) = min λ ≥ 0 f ( x k + λ d k ) f(\mathbf{x}_k+\lambda_k\mathbf{d}_k) = \underset{\lambda\geq 0}{\min}f(\mathbf{x}_k+\lambda\mathbf{d}_k) f(xk+λkdk)=λ≥0minf(xk+λdk)
令 x k + 1 = x k + λ k d k \mathbf{x}_{k+1}=\mathbf{x}_k+\lambda_k\mathbf{d}_k xk+1=xk+λkdk.
(5) 若 ∣ ∣ f ( x k + 1 ) ∣ ∣ ≤ ϵ ||f(\mathbf{x}_{k+1})|| \leq \epsilon ∣∣f(xk+1)∣∣≤ϵ,则停止迭代,得到最优解 x = x k + 1 \mathbf{x}=\mathbf{x}_{k+1} x=xk+1,否则进行步骤(6).
(6) 若 k = N − 1 k=N-1 k=N−1,则令 x 0 = x k + 1 \mathbf{x}_0 = \mathbf{x}_{k+1} x0=xk+1,回到步骤(2),否则进行步骤(7).
(7) 令 g k + 1 = f ′ ( x k + 1 ) \mathbf{g}_{k+1}=f^{'}(\mathbf{x}_{k+1}) gk+1=f′(xk+1), s k = x k + 1 − x k \mathbf{s}_k= \mathbf{x}_{k+1}-\mathbf{x}_k sk=xk+1−xk, y k = g k + 1 − g k \mathbf{y}_k=\mathbf{g}_{k+1}- \mathbf{g}_k yk=gk+1−gk,利用方程(6)或(7)计算 H k + 1 \mathbf{H}_{k+1} Hk+1,设 k = k + 1 k = k+1 k=k+1,回到步骤(3)。
对于二次凸函数,BFGS算法具有良好的全局收敛性。但是对于二次非凸函数,也即目标函数Hesse矩阵非正定的情况,无法保证按照BFGS算法构造的拟牛顿方向必为下降方向。为了推广BFGS公式的应用范围,很多工作提出了对BFGS公式稍作修改或变形的办法。下面举两个例子。
Li-Fukushima方法[3]
Li和Fukushima提出新的构造矩阵 H k \mathbf{H}_k Hk的方法:
H k + 1 − 1 = H k − 1 − H k − 1 s k s k T H k − 1 s k T H k − 1 s k + y k ∗ y k ∗ T y k ∗ T s k \mathbf{H}^{-1}_{k+1}=\mathbf{H}^{-1}_k-\frac{\mathbf{H}^{-1}_k\mathbf{s}_k\mathbf{s}^{\rm T}_k\mathbf{H}^{-1}_k}{\mathbf{s}^{\rm T}_k\mathbf{H}^{-1}_k\mathbf{s}_k}+\frac{\mathbf{y}^{\ast}_k\mathbf{y}^{\ast\rm T}_k}{\mathbf{y}^{\ast\rm T}_k\mathbf{s}_k} Hk+1−1=Hk−1−skTHk−1skHk−1skskTHk−1+yk∗Tskyk∗yk∗T
H k + 1 = ( I − ρ k ∗ s k y k ∗ T ) H k ( I − ρ k ∗ y k ∗ T s k T ) + ρ k ∗ s k s k T \mathbf{H}_{k+1}=(\mathbf{I}-\rho^{\ast}_k\mathbf{s}_k\mathbf{y}^{\ast\rm T}_k)\mathbf{H}_k(\mathbf{I}-\rho^{\ast}_k\mathbf{y}^{\ast\rm T}_k\mathbf{s}^{\rm T}_k)+\rho^{\ast}_k\mathbf{s}_k\mathbf{s}^{\rm T}_k Hk+1=(I−ρk∗skyk∗T)Hk(I−ρk∗yk∗TskT)+ρk∗skskT (11)
其中
y k ∗ = g k + 1 − g k + t k ∣ ∣ g k ∣ ∣ s k \mathbf{y}^{\ast}_k=\mathbf{g}_{k+1}-\mathbf{g}_k+t_k||\mathbf{g}_k||\mathbf{s}_k yk∗=gk+1−gk+tk∣∣gk∣∣sk
t k = 1 + max { 0 , − y k T s k ∣ ∣ s k ∣ ∣ 2 } t_k=1+\max\{0, \frac{-\mathbf{y}^{\rm T}_k\mathbf{s}_k}{||\mathbf{s}_k||^2}\} tk=1+max{0,∣∣sk∣∣2−ykTsk}
y k \mathbf{y}_k yk的定义见算法2中步骤(7),而
ρ k ∗ = 1 y k ∗ T s k \rho^{\ast}_k=\frac{1}{\mathbf{y}^{\ast\rm T}_k\mathbf{s}_k} ρk∗=yk∗Tsk1
除此之外,算法2中步骤(3)的一维搜索采用如下方式:
给定两个参数 σ ∈ ( 0 , 1 ) \sigma \in (0,1) σ∈(0,1)和 ϵ ∈ ( 0 , 1 ) \epsilon \in (0,1) ϵ∈(0,1),找出最小的非负整数j,满足
f ( x k + ϵ j d k ) ≤ f ( x k ) + σ ϵ j g k T d k f(\mathbf{x}_k+\epsilon_j\mathbf{d}_k)\leq f(\mathbf{x}_k)+\sigma\epsilon_j\mathbf{g}^{\rm T}_k\mathbf{d}_k f(xk+ϵjdk)≤f(xk)+σϵjgkTdk
取 j k = j j_k=j jk=j,步长 λ k = ϵ j k \lambda_k=\epsilon_{j_k} λk=ϵjk。
Xiao、Wei和Wang提出了计入目标函数值 f ( x ) f(\mathbf{x}) f(x)的另一种 H k \mathbf{H}_k Hk的构造方法:
设 y k † = y k + α k s k \mathbf{y}^{\dagger}_k = \mathbf{y}_k+\alpha_k\mathbf{s}_k yk†=yk+αksk,其中
α k = 1 ∣ ∣ s k ∣ ∣ 2 [ 2 ( f ( x k ) − f ( x k + 1 ) + ( g k + 1 + g k ) T s k ] \alpha_k = \frac{1}{||\mathbf{s}_k||^2}[2(f(\mathbf{x}_k)-f(\mathbf{x}_{k+1})+(\mathbf{g}_{k+1}+\mathbf{g}_k)^{\rm T}\mathbf{s}_k] αk=∣∣sk∣∣21[2(f(xk)−f(xk+1)+(gk+1+gk)Tsk]
H k \mathbf{H}_k Hk的构造方法与方程(7)和(11)形式相同:
H k + 1 = ( I − ρ k † s k y k † T ) H k ( I − ρ k † y k † ) s k T + ρ k † s k s k T \mathbf{H}_{k+1}=(\mathbf{I}-\rho^{\dagger}_k\mathbf{s}_k\mathbf{y}^{\dagger\rm T}_k)\mathbf{H}_k(\mathbf{I}-\rho^{\dagger}_k\mathbf{y}^{\dagger}_k)\mathbf{s}^{\rm T}_k+\rho^{\dagger}_k\mathbf{s}_k\mathbf{s}^{\rm T}_k Hk+1=(I−ρk†skyk†T)Hk(I−ρk†yk†)skT+ρk†skskT (12)
相应的 ρ k † = 1 y k † T s k \rho^{\dagger}_k=\frac{1}{\mathbf{y}^{\dagger\rm T}_k\mathbf{s}_k} ρk†=yk†Tsk1
而一维搜索则采用弱Wolfe-Powell准则:
给定两个参数 δ ∈ ( 0 , 1 / 2 ) \delta\in (0,1/2) δ∈(0,1/2)和 σ ∈ ( δ , 1 ) \sigma\in (\delta,1) σ∈(δ,1),找出步长 λ k \lambda_k λk,满足
f ( x k + λ k d k ) ≤ f ( x k ) + δ λ k g k T d k f(\mathbf{x}_k+\lambda_k\mathbf{d}_k) \leq f(\mathbf{x}_k)+\delta\lambda_k\mathbf{g}^{\rm T}_k\mathbf{d}_k f(xk+λkdk)≤f(xk)+δλkgkTdk (13)
g k + 1 T d k ≥ σ g k T d k \mathbf{g}^{\rm T}_{k+1}\mathbf{d}_k \geq \sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k gk+1Tdk≥σgkTdk (14)
如果 λ k \lambda_k λk = 1 1 1满足方程(13)、(14),则取 λ k \lambda_k λk = 1 1 1。
可以看出,这两种方法只是改变了 y k \mathbf{y}_k yk的定义方式,其他则与标准的BFGS方法完全一样。因此将二者推广到限域形式是非常直接的,这里不再给出算法。对于二次非凸函数的拟牛顿方法还在进一步发展当中,上述的两个例子并不一定是最佳算法。