机器学习基础 5:无约束最优化方法——线搜索

泰勒级数

在开始介绍优化方法之前,我们先介绍一些基础知识
f ( x ) = f ( a ) 0 ! + f ′ ( a ) 1 ! ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + . . . + f n ( a ) n ! ( x − a ) n + R n ( x ) f(x)=\frac{f(\mathbf{a})}{0!}+\frac{f'(\mathbf{a})}{1!}(x-\mathbf{a})+\frac{f''(\mathbf{a})}{2!}(x-\mathbf{a})^2+...+\frac{f^{n}(\mathbf{a})}{n!}(x-\mathbf{a})^n+R_n(x) f(x)=0!f(a)+1!f(a)(xa)+2!f(a)(xa)2+...+n!fn(a)(xa)n+Rn(x)

  泰勒公式是一个用函数在某点的信息描述其附近取值的公式。上面这个公式,描述了函数 f ( x ) f(x) f(x) a \mathbf{a} a 点附近的取值情况。如果函数足够光滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。
  泰勒公式就是把一个函数展开成具有任意多项幂级数方便计算任意函数的值(这使得计算机能得出自己想要的精度的值)且可以人为控制误差范围。
  泰勒公式还给出了这个多项式和实际的函数值之间的偏差。

一维搜索 / 线搜索 (linear search)

  线搜索是最优化(Optimization)算法中的一个基础步骤/算法。它可以分为精确的一维搜索以及不精确的一维搜索两大类。

原理

  线搜索是一种迭代的求得某个函数的最值的方法。 对于每次迭代, 线搜索会计算得到搜索的方向 p k p_k pk以及沿这个方向移动的步长 a k a_k ak

搜索方向

  大多数的线搜索方法都会要求 p k p_k pk 是下降方向(descent direction), 亦即需要满足以下条件: p k T ∇ f k < 0 p_k^T \nabla f_k < 0 pkTfk<0,这样就能够保证函数 f ( x ) f(x) f(x) 沿着这个方向是下降的。 一般来说, 搜索方向是:

p k = − B k − 1 ∇ f k p_k=−B_k^{-1}\nabla f_k pk=Bk1fk

  其中 B k B_k Bk是一个对称非奇异矩阵:

  • 在最深下降(steepest descent)方法中, B k B_k Bk是单位矩阵 I I I
  • 在牛顿方法(Newton)中, B k B_k Bk则是海森(Hessian)矩阵 ∇ 2 f ( x k ) \nabla^2 f(x_k) 2f(xk)
  • 在Quasi-Newton方法中,则是一个通过迭代求得的Hessian矩阵的近似矩阵

  当 p k p_k pk由上式定义, 且 B k B_k Bk是正定矩阵时:
p k T ∇ f k = − ∇ f k T B k − 1 ∇ f k < 0 p_k^T\nabla f_k = -\nabla f_k^T B_k^{-1}\nabla f_k <0 pkTfk=fkTBk1fk<0

搜索步长

  步长 α \alpha α 应该最小化下面的函数:
ϕ ( α ) = f ( x k + α p k ) \phi (\alpha)=f(x_k+\alpha p_k) ϕ(α)=f(xk+αpk)
  但是求得使上式最小的 α \alpha α 比较困难, 且计算量比较大, 实际常用的方法是在可接受的计算量的情况下尽可能的求得较大的步长, 以使得 ϕ ( α ) \phi (\alpha) ϕ(α) 尽可能的降低。
  经典的线搜索方法通过迭代来求得 α \alpha α, 直至达到某个停止条件。一般的线搜索方法都包含以下两个步骤:

  • bracketing:求得一个包含理想的步长的区间
  • 二分法或者插值法: 在这个区间内使用二分法或者插值法来求得步长

分类

  使用导数的优化算法都涉及到沿优化方向 d k \mathbf{d}_k dk的一维搜索。事实上一维搜索算法本身就一个非常重要的课题,分为精确一维搜索以及非精确一维搜索。标准的拟牛顿法或L-BFGS均采用精确一维搜索。与前者相比,非精确一维搜索虽然牺牲了部分精度,但是效率更高,调用函数的次数更少。因此 Li-Fukushima方法和Xiao-Wei-Wang方法中均采用了这类算法。不加证明的,
  本节分别给出两类范畴中各自的一个应用最为广泛的例子, 分别是二点三次插值方法和Wolfe-Powell准则。

   精确线搜索:二点三次插值

  在精确一维搜索各种算法中,这种方法得到的评价最高。其基本思想是:

  选取两个初始点 x 1 x_1 x1 x 2 x_2 x2,为了保证了在区间 ( x 1 , x 2 ) (x_1, x_2) (x1,x2)中存在极小点,需要满足以下条件:

  • x 1 x_1 x1 < x 2 x_2 x2
  • f ′ ( x 1 ) f^{'}(x_1) f(x1) < 0 0 0
  • f ′ ( x 2 ) f^{'}(x_2) f(x2) > 0 0 0

  利用这两点处的函数值 f ( x 1 ) f(x_1) f(x1) f ( x 2 ) f(x_2) f(x2)和导数值 f ′ ( x 1 ) f^{'} (x_1) f(x1) f ′ ( x 2 ) f^{'}(x_2) f(x2)构造一个三次多项式 φ ( x ) \varphi(x) φ(x),使得 φ ( x ) \varphi(x) φ(x) x 1 x_1 x1 x 2 x_2 x2处与目标函数$ f(x) $有相同的函数值和导数值:
φ ( x ) = a ( x − x 1 ) 3 + b ( x − x 1 ) 2 + c ( x − x 1 ) + d \varphi(x)=a(x- x_1)^3+b(x-x_1)^2+c(x-x_1)+d φ(x)=a(xx1)3+b(xx1)2+c(xx1)+d
  通过4个边界条件可以完全确定4个参数 a a a b b b c c c d d d。之后找出 φ ′ ( x ) \varphi^{'}(x) φ(x)的零点 x ′ x^{'} x,作为极小点的一个进一步的估计。可以证明,由 x 1 x_1 x1出发,最佳估计值的计算公式为:
x ′ = x 1 + − c b + b 2 − 3 a c x^{'}=x_1+\frac{-c}{b+\sqrt{b^2-3ac}} x=x1+b+b23ac c
f 1 = f ( x 1 ) f_1=f(x_1) f1=f(x1) f 2 = f ( x 2 ) f_2=f(x_2) f2=f(x2) f 1 ′ = f ′ ( x 1 ) f^{'}_1=f^{'}(x_1) f1=f(x1) f 2 ′ = f ′ ( x 2 ) f^{'}_2 =f^{'}(x_2) f2=f(x2),则具体算法步骤如下:

  1. 给定初始点 x 1 、 x 2 x_1、x_2 x1x2,满足 f 1 ′ > 0 、 f 2 ′ > 0 f^{'}_1>0、f^{'}_2>0 f1>0f2>0;给定允许误差 δ \delta δ
  1. 计算如下方程,得到最佳估计值 x ′ x' x
    s = 3 ( f 2 − f 1 ) x 2 − x 1 z = s − f 1 ′ − f 2 ′ w 2 = z 2 − f 1 ′ f 2 ′ x ′ = x 1 + ( x 2 − x 1 ) 1 − f 2 ′ + w + z f 2 ′ − f 1 ′ + 2 w s=\frac{3(f_2-f_1)}{x_2-x_1}\\ z = s-f^{'}_1-f^{'}_2\\ w^2 = z^2-f^{'}_1f^{'}_2 \\x^{'} = x_1+(x_2-x_1)\frac{1-f^{'}_2+w+z}{f^{'}_2-f^{'}_1+2w} s=x2x13(f2f1)z=sf1f2w2=z2f1f2x=x1+(x2x1)f2f1+2w1f2+w+z
  2. ∣ x 2 − x 1 ∣ < δ |x_2-x_1| < \delta x2x1<δ,停止迭代;否则,计算 f ( x ′ ) 、 f ′ ( x ′ ) f(x')、f'(x') f(x)f(x)
  • f ′ ( x ′ ) = 0 f'(x')=0 f(x)=0,则得到点 x ′ x' x,停止计算
  • f ′ ( x ′ ) < 0 f'(x')<0 f(x)<0,则令 x 1 = x ′ 、 f 1 = f ( x 1 ) 、 f 1 ′ = f ′ ( x 1 ) x_1=x'、f_1=f(x_1)、f^{'}_1=f^{'}(x_1) x1=xf1=f(x1)f1=f(x1),转步骤 2
  • f ′ ( x ′ ) > 0 f'(x')>0 f(x)>0,则令 x 2 = x ′ 、 f 2 = f ( x 2 ) 、 f 2 ′ = f ′ ( x 2 ) x_2=x'、f_2=f(x_2)、f^{'}_2=f^{'}(x_2) x2=xf2=f(x2)f2=f(x2),转步骤 2

转步骤 2 的算法可以替换为:

a = f 1 ′ + f 2 ′ ( x 2 − x 1 ) 2 − 2 ( f 2 − f 1 ) ( x 2 − x 1 ) 3 b = 2 f 1 ′ − f 2 ′ x 2 − x 1 + 3 2 f 2 − f 1 ( x 2 − x 1 ) 2 c = f 1 ′ x ′ = x 1 + − c b + b 2 − 3 a c a = \frac{f^{'}_1+f^{'}_2}{(x_2-x_1)^2}-\frac{2(f_2-f_1)}{(x_2-x_1)^3}\\ b = \frac{2f^{'}_1-f^{'}_2}{x_2-x_1}+\frac{3}{2}\frac{f_2-f_1}{(x_2-x_1)^2}\\ c = f^{'}_1\\ x^{'}=x_1+\frac{-c}{b+\sqrt{b^2-3ac}} a=(x2x1)2f1+f2(x2x1)32(f2f1)b=x2x12f1f2+23(x2x1)2f2f1c=f1x=x1+b+b23ac c
此外,即使 f ′ ( x 2 ) f^{'}(x_2) f(x2) < 0 0 0,一般而言也可以用上式外推寻找 x ′ x^{'} x

   不精确线搜索

  由于采用了不精确的一维搜索,所以,为了能让算法收敛(即:求得极小值),人们逐渐发现、证明了一些规律,当你遵循这些规律的时候,算法就很有可能收敛。因此,为了达到让算法收敛的目的,我们就要遵循这些准则。

Armijo-Goldstein

Armijo-Goldstein准则的核心思想有两个:

  • 目标函数值应该有足够的下降
  • 一维搜索的步长 α \alpha α不应该太小

由于最优化问题的目的就是寻找极小值,前者保证了目标函数的函数值“下降”,从而确保我们能够找到极小值;后者保证算法不会原地打转,从而确保算法的效率。

了这两个指导思想,我们来看看Armijo-Goldstein准则的数学表达式:

  1. f ( x k + α k d k ) ≤ f ( x k ) + ρ α k g k T d k f(x_k+\alpha_kd_k) \leq f(x_k)+\rho\alpha_k g_k^Td_k f(xk+αkdk)f(xk)+ραkgkTdk
  2. f ( x k + α k d k ) ≥ f ( x k ) + ( 1 − ρ ) α k g k T d k f(x_k+\alpha_kd_k) \geq f(x_k)+(1-\rho)\alpha_kg_k^Td_k f(xk+αkdk)f(xk)+(1ρ)αkgkTdk

      其中, 0 < ρ < 1 2 0 < \rho < \frac{1}{2} 0<ρ<21

ρ ∈ ( 0 , 1 2 ) \rho\in(0,\frac{1}{2}) ρ(0,21)这个条件影响算法的超线性收敛性。

公式解释如下:
首先对 f ( x k + α k d k ) f(x_k+\alpha_kd_k) f(xk+αkdk)展开二阶泰勒级数:

f ( x k + α k d k ) = f ( x k ) + α k g k T d k + o ( α k ) f(x_k+\alpha_kd_k) = f(x_k)+\alpha_k g_k^Td_k + o(\alpha_k) f(xk+αkdk)=f(xk)+αkgkTdk+o(αk)

去掉高阶无穷小,剩下的部分为 f ( x k + α k d k ) f(x_k+\alpha_kd_k) f(xk+αkdk), 而第1个不等式右边与之只差一个系数 ρ \rho ρ

我们已知了 g k T d k < 0 g_k^Td_k<0 gkTdk<0(这是 d k d_k dk为下降方向的充要条件),并且 ρ ∈ ( 0 , 1 2 ) \rho\in(0,\frac{1}{2}) ρ(0,21),因此:

  1. 1个不等式右边仍然是一个比 f ( x k ) f(x_k) f(xk) 小的数,即:
    f ( x k ) + α k g k T d k < f ( x k ) f(x_k)+\alpha_k g_k^Td_k <f(x_k) f(xk)+αkgkTdk<f(xk)
    也就是说函数值是下降的(下降是最优化的目标)。
  2. 2个不等式右边是一个比第1个不等式右边小的数,即:
    ( 1 − ρ ) α k g k T d k < ρ α k g k T d k < 0 (1-\rho)\alpha_kg_k^Td_k < \rho\alpha_k g_k^Td_k < 0 (1ρ)αkgkTdk<ραkgkTdk<0
    如果 α \alpha α太小,会导致这个不等式接近于不成立的边缘,从而保证了下降的效率。

Wolfe-Powell

Wolfe-Powell准则也有两个数学表达式:

  1. f ( x k + α k d k ) ≤ f ( x k ) + ρ α k g k T d k f(x_k+\alpha_kd_k) \leq f(x_k)+\rho\alpha_k g_k^Td_k f(xk+αkdk)f(xk)+ραkgkTdk
  2. ∇ f ( x k + α k d k ) d k ≥ σ α k g k T d k \nabla f(x_k+\alpha_kd_k)d_k \geq \sigma\alpha_kg_k^Td_k f(xk+αkdk)dkσαkgkTdk

      其中, ρ ∈ ( 0 , 1 2 ) , σ ∈ ( ρ , 1 ) \rho\in(0,\frac{1}{2}),\sigma\in(\rho,1) ρ(0,21)σ(ρ,1)

2个式子已经不是关于函数值的了,而是关于梯度的。
该式的几何解释为:可接受点处的切线斜率 ≥ \geq 初始斜率的 α \alpha α 倍。

下面给出具体的算法步骤:

给定两个参数 δ ∈ ( 0 , 1 / 2 ) \delta\in (0,1/2) δ(0,1/2) σ ∈ ( δ , 1 ) \sigma\in (\delta,1) σ(δ,1),找出步长 λ k \lambda_k λk,满足:

  • (1) 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
  • (2) ∣ g k + 1 T d k ∣   ≤   − σ g k T d k O R σ g k T d k ≤ g k + 1 T d k ≤ − σ g k T d k |\mathbf{g}^{\rm T}_{k+1}\mathbf{d}_k| \ \leq \ -\sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k \quad OR \quad \sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k \leq \mathbf{g}^{\rm T}_{k+1}\mathbf{d}_k \leq -\sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k gk+1Tdk  σgkTdkORσgkTdkgk+1TdkσgkTdk

如果 λ k \lambda_k λk = 1 1 1满足上面两个方程,则取 λ k \lambda_k λk = 1 1 1
σ → 0 \sigma\rightarrow 0 σ0时,该方法过渡为精确一维搜索算法,具体算法步骤如下:

  1. 给定两个参数 δ ∈ ( 0 , 1 / 2 ) \delta\in (0,1/2) δ(0,1/2) σ ∈ ( δ , 1 ) \sigma\in (\delta,1) σ(δ,1);给定初始点 x 1 x_1 x1(相应于 λ k = 0 \lambda_k = 0 λk=0)与猜想点 x 2 x_2 x2(可设为1);给定最大循环次 数 N m a x N_{\rm max} Nmax,设 k = 0 ; i = 0 k = 0; i = 0 k=0;i=0; 计算两点处的函数值 f 1 f_1 f1 f 2 f_2 f2 和导数值 f 1 ′ f^{'}_1 f1 f 2 ′ f^{'}_2 f2
  2. f 2 f_2 f2 f 2 ′ f^{'}_2 f2违反不等式**(1)或者不等式(2)的右半段,则缩小搜索范围的上限 x u p p e r = x 2 x_{\rm upper} = x_2 xupper=x2,否则转步骤5**
  3. f 2 ≤ f 1 f_2\leq f_1 f2f1,转步骤**4;否则,利用二次插值方法寻找最佳点 x m i n = x 1 − 1 2 f 1 ′ ( x 2 − x 1 ) 2 f 2 − f 1 − f 1 ′ ( x 2 − x 1 ) x_{\rm min} = x_1-\frac{1}{2}\frac{f^{'}_1(x_2-x_1)^2}{f_2-f_1-f^{'}_1(x_2-x_1)} xmin=x121f2f1f1(x2x1)f1(x2x1)2
    x 2 = x m i n x_2 = x_{\rm min} x2=xmin,计算 f 2 f_2 f2 f 2 ′ f^{'}_2 f2;设 k = k + 1 k = k+1 k=k+1,若 k ≤ N m a x k \leq N_{\rm max} kNmax转步骤
    2,否则转步骤5**
  4. 利用 二点三次插值 算法的步骤**2** 寻找最佳点 x m i n x_{\rm min} xmin。令 x 2 = x m i n x_2 = x_{\rm min} x2=xmin,计算 f 2 f_2 f2 f 2 ′ f^{'}_2 f2;设 k k k = k + 1 k+1 k+1,若 k ≤ N m a x k\leq N_{\rm max} kNmax转步骤**2,否则转步骤5**
  5. f 2 ′ f^{'}_2 f2满足不等式**(2)**的左半段,则停止计算,得到最佳点 x 2 x_2 x2
  6. 利用式二点三次插值 算法的步骤**2** 寻找最佳点 x m i n x_{\rm min} xmin,并计算 f 2 f_2 f2以及 f 2 ′ f^{'}_2 f2;设 i = i + 1 i = i+1 i=i+1,若 i ≤ N m a x i \leq N_{\rm max} iNmax转步骤**2**,否则,停止计算得到目前最佳估计值 x 2 x_2 x2

转步骤 3 的估计算法可以替换为:

x m i n = x 2 − f 2 ′ ( x 2 − x 1 ) f 2 ′ − f 1 ′ x_{\rm min} = x_2-\frac{f^{'}_2(x_2-x_1)}{f^{'}_2-f^{'}_1} xmin=x2f2f1f2(x2x1)

此外,点 x x x处的导数值 f ′ ( x ) = g T d f^{'}(x) = \mathbf{g}^{\rm T}\mathbf{d} f(x)=gTd,因为在一维搜索中, x x x相当于待求步长 λ \lambda λ。在大多数情况下, σ \sigma σ = 0.4 0.4 0.4以及 ρ \rho ρ = 0.1 0.1 0.1可以取得很好的效果

信赖域

   基本原理

  与线搜索方法一样,信赖域方法也是优化算法中的一种保证全局收敛的重要方法。其作用都是在优化算法中求出每次迭代的位移,从而确定新的迭代点。不同之处在于:

  • 线搜索的方法是先产生位移方向 d d d (搜索方向),然后确定位移的步长 α \alpha α (搜索步长),然后得到下一个迭代点 x k + 1 = x k + α d x_{k+1} = x_k + \alpha d xk+1=xk+αd
  • 而信赖域方法则是直接确定位移 s s s ,产生新的迭代点 x k + 1 = x k + s x_{k+1} = x_k + s xk+1=xk+s

  其基本思想是:

  给定一个位移长度上界,作为信赖域半径。以当前迭代为中心,以给定的上界为半径,确定一个被称为信赖域的闭球区域。然后通过求解这个区域内的信赖域子问题(目标函数的二次近似模型)的最优点来确定候选位移
  若候选位能够使得目标函数值有充分的下降量,则接受该候选位移作为新位移,并保持或扩大信赖域半径,继续新的迭代;否则,说明二次模型与目标函数的近似度不够理想,需要缩小信赖域半径,求解新信赖域内的子问题得到新的候选位移。

   数学模型

  信赖域法的优化目标函数一般取如下形式的二次模型:

q k ( s ) = f k + g k T s + 1 2 s T G k s s . t ∥ s ∥ ≤ Δ k   q k ( 0 ) = f k q_k(s) = f_k + g_k^Ts + \frac{1}{2}s^TG_ks \qquad s.t \qquad \|s\| \leq \Delta_k \\ \ \\ q_k(0) = f_k qk(s)=fk+gkTs+21sTGkss.tsΔk qk(0)=fk

公式符号 解释
s s s 当前迭代点 x k x_k xk 与下个迭代点 x k + 1 x_{k+1} xk+1 距离
f k f_k fk 第 k 次迭代时的函数值 f ( x k ) f(x_k) f(xk)
g k g_k gk 第 k 次迭代时的梯度值 g ( x k ) g(x_k) g(xk)
G k G_k Gk 第 k 次迭代时的 Hesse 矩阵
Δ k \Delta_k Δk 信赖域半径

  值得注意的是,模型中有个 k 下标,这意味着这个二次模型会在迭代过程中产生变化。

  由于我们使用了一个二次模型来近似目标函数,两者之间必然会有一些误差,下面给出衡量两者之间误差的方法。假设在第 k 次迭代中得到了一个二次模型的最优解 s k s_k sk,此时有:

目标函数 f f f 在第 k 步中的实际下降量 Δ f k \Delta f_k Δfk
Δ f k = f k − f ( x k + s k ) \Delta f_k = f_k - f(x_k + s_k) Δfk=fkf(xk+sk)
二次模型 q q q 在第 k 步中的预测下降量 Δ q k \Delta q_k Δqk
Δ q k = q k ( 0 ) − q k ( s k ) \Delta q_k = q_k(0) - q_k(s_k) Δqk=qk(0)qk(sk)
定义它们之间的比值为: r k = Δ f k Δ q k r_k = \frac{\Delta f_k}{\Delta q_k} rk=ΔqkΔfk

  这个比值可以用来衡量二次模型与目标函数之间的近似程度。当 r k r_k rk 值越十分接近 1 时,说明两者在信赖域内有着良好的近似, s k s_k sk 是一个合理的位移,并且可以在下次迭代增大信赖域半径进行搜索。
  此外,由于 Δ q k > 0 \Delta q_k > 0 Δqk>0 通常情况下都成立,因此若 r k < 0 r_k < 0 rk<0,则说明 Δ f k < 0 \Delta f_k < 0 Δfk<0,则 s k s_k sk 不是一个合理的位移,需要缩小信赖域半径,重新求解子问题。

   算法步骤

  信赖域法的一般框架如下:

  1. 选取初始参数 0 ≤ η 1 < η 2 < 1 0 \leq \eta_1 \lt \eta_2 \lt 1 0η1<η2<1,$0 < \tau_1 < 1 < \tau_2 $, 0 ≤ ε ≪ 1 0 \leq \varepsilon \ll 1 0ε1;选取 Δ ~ \small{\widetilde{\Delta}} Δ 作为信赖域半径上限, Δ 0 \Delta_0 Δ0 作为初始信赖域半径
  1. 计算 g k g_k gk,若 ∥ g k ∥ ≤ ε \|g_k\| \leq \varepsilon gkε,停止计算并输出极小点
  2. 计算 s k s_k sk,求解子问题的解
  3. 按照定义计算 r k r_k rk 的值,分情况处理:
  • r k ≤ η 1 r_k \leq \eta_1 rkη1:      Δ k + 1 = τ 1 Δ k \Delta_{k+1}=\tau_1 \Delta_k Δk+1=τ1Δk
  • η 1 < r k < η 2 \eta_1 \lt r_k \lt \eta_2 η1<rk<η2:   Δ k + 1 = Δ k \Delta_{k+1}=\Delta_k Δk+1=Δk
  • η 2 < r k \eta_2 \lt r_k η2<rk:      Δ k + 1 = min ⁡ ( τ 2 Δ k , Δ ~ ) \Delta_{k+1}=\min(\tau_2 \Delta_k, \small{\widetilde{\Delta}}) Δk+1=min(τ2Δk,Δ )
  1. k = k + 1 k=k+1 k=k+1,若 r k ≤ η 1 r_k \leq \eta_1 rkη1,则令 x k + 1 = x k + s k x_{k+1}=x_k+s_k xk+1=xk+sk,更新 G k + 1 = G k G_{k+1}=G_k Gk+1=Gk,跳转到2;否则令 x k + 1 = x k x_{k+1}=x_k xk+1=xk,跳转到3

   求解子问题

  由于求解子问题中需要用到 Hess 矩阵,为了减少运算量,会考虑使用拟牛顿法,通过迭代的方式获得近似矩阵。这种解法也被称为置信域拟牛顿法。与普通的拟牛顿法的区别在于:通过优化置信域子问题而非线搜索进行迭代更新。
  因此置信域牛顿法的主要问题在于如何求解子问题,下面介绍一下求解子问题的算法。

   Dogleg 法

  Dogleg 算法(折线法)是一个高效简洁的算法,不过对近似矩阵的正定性有要求,因此适用于 BFGS 算法,但是不适用于 SR1 算法。
  如果把子问题求解看作是一个以步长为自变量的函数 x ( Δ ) x(\Delta) x(Δ),当取得最佳步长时, x ( Δ ) x(\Delta) x(Δ)取得最小值。 令 Δ \Delta Δ 为当前更新步长,最优步长为 x ( Δ ) x(\Delta) x(Δ),则 Δ → x ( Δ ) \Delta \to x(\Delta) Δx(Δ) 描述了一条从子问题初始点 x k = x ( 0 ) x_k=x(0) xk=x(0) 到最优点 —— 牛顿点的路径:

y k = x k − G k − 1 g k y_k = x_k -G_k^{-1}g_k yk=xkGk1gk
令 $ B_k $ 为近似矩阵
y k = x k − B k − 1 g k y_k = x_k -B_k^{-1}g_k yk=xkBk1gk
使用一个多项式路径 τ → y ( τ ) \tau \to y(\tau) τy(τ) 代替原路径,将 问题转换为:从这条路径中选取一个最优的 y ( τ ) y(\tau) y(τ)

   这个多项式只包含两个线段,看起来像弯曲的狗腿,这就是算法名称的由来。狗腿的膝盖处(两条线段的弯折处)恰好处于下降方向最陡峭的位置。

  令 p k = − B k − 1 g k p_k = -B_k^{-1}g_k pk=Bk1gk,算法框架如下:

有以下公式 p B = − B − 1 g p U = − g T g g T B g g p^B = -B^{-1}g \\ p^U = - \frac{g^Tg}{g^TBg}g pB=B1gpU=gTBggTgg
p k p_k pk 的求法可表示为
p k = { τ p U ( 0 ≤ τ ≤ 1 ) p U + ( τ − 1 ) ( P B − p U ) ( 1 ≤ τ ≤ 2 ) p_k = \begin{cases} \tau p^U \qquad \qquad \qquad \qquad \qquad (0\leq\tau\leq1)\\ p^U + (\tau-1)(P^B-p^U) \qquad (1\leq\tau\leq2) \end{cases} pk={τpU(0τ1)pU+(τ1)(PBpU)(1τ2)
τ \tau τ 的求法可表示为
{ τ = Δ k ∥ p U ∥ ( 0 ≤ τ ≤ 1 ) ∥ p U + ( τ − 1 ) ( P B − p U ) ∥ = Δ k ( 1 ≤ τ ≤ 2 ) \begin{cases} \tau = \frac{\Delta_k}{\|p^U\|} \quad \qquad \qquad \qquad \qquad \qquad (0\leq\tau\leq1)\\ \| p^U + (\tau-1)(P^B-p^U)\| = \Delta_k \qquad (1\leq\tau\leq2) \end{cases} {τ=pUΔk(0τ1)pU+(τ1)(PBpU)=Δk(1τ2)

你可能感兴趣的:(机器学习基础 5:无约束最优化方法——线搜索)