机器学习笔记之最优化理论与算法(十二)无约束优化问题——共轭梯度法

机器学习笔记之最优化理论与方法——共轭梯度法

  • 引言
    • 回顾:共轭方向法的重要特征
    • 线性共轭梯度法
      • 共轭方向公式的证明过程
    • 关于线搜索公式中参数的化简
      • 关于线搜索公式中步长部分的化简
      • 关于线搜索公式中共轭方向系数的化简
      • 参数化简的目的
    • 非线性共轭梯度法(FR,PRP方法)
      • 关于非线性共轭梯度法的说明

引言

上一节主要介绍了共轭方向法重要特征以及相关证明,本节将介绍共轭方向法的代表算法——共轭梯度法

回顾:共轭方向法的重要特征

关于凸二次函数 f ( x ) f(x) f(x)的优化问题: min ⁡ f ( x ) = 1 2 x T Q x + C T x \begin{aligned}\min f(x) = \frac{1}{2}x^T \mathcal Qx + \mathcal C^T x \end{aligned} minf(x)=21xTQx+CTx,给定初始点 x 0 x_0 x0以及关于正交矩阵 Q \mathcal Q Q一系列共轭方向 D = { d 0 , d 1 , ⋯   , d n − 1 } \mathcal D = \{d_0,d_1,\cdots,d_{n-1}\} D={d0,d1,,dn1},在迭代过程中的输出位置 x k ( k = 1 , 2 , ⋯   , n ) x_k(k=1,2,\cdots,n) xk(k=1,2,,n)表示如下:
x k = x k − 1 + α k − 1 ⋅ d k − 1 k = 1 , 2 , ⋯   , n x_k = x_{k-1} + \alpha_{k-1} \cdot d_{k-1} \quad k = 1,2,\cdots,n xk=xk1+αk1dk1k=1,2,,n

基于上述操作产生的数值解序列 { x k } k = 1 n \{x_k\}_{k=1}^n {xk}k=1n具有如下特征:

  • 目标函数 f ( ⋅ ) f(\cdot) f()输出位置 x k x_k xk处的梯度 ∇ f ( x k ) \nabla f(x_k) f(xk)迭代过程中使用过的共轭方向 d i ( i = 0 , 1 , ⋯   , k − 1 ) d_i(i=0,1,\cdots,k-1) di(i=0,1,,k1)均相互垂直
    [ ∇ f ( x k ) ] T d i = 0 i = 0 , 1 , ⋯   , k − 1 [\nabla f(x_k)]^T d_i = 0 \quad i=0,1,\cdots,k-1 [f(xk)]Tdi=0i=0,1,,k1
  • 如果定义集合 X k \mathcal X_k Xk k k k次迭代过程中 x k x_k xk可选择的位置空间
    X k = { x 0 + ∑ i = 0 k − 1 α i ⋅ d i ∣ α i ∈ R } \mathcal X_k = \left\{x_0 + \sum_{i=0}^{k-1} \alpha_i \cdot d_i \mid \alpha_i \in \mathbb R\right\} Xk={x0+i=0k1αidiαiR}
    那么如果 x k x_k xk是第 k k k次迭代的最优解,等价于:
    x k = arg ⁡ min ⁡ x { 1 2 x T Q x + C T x ∣ x ∈ X k } x_k = \mathop{\arg\min}\limits_{x} \left\{\frac{1}{2} x^T \mathcal Q x + \mathcal C^T x \mid x \in \mathcal X_k \right\} xk=xargmin{21xTQx+CTxxXk}
    并且当 k = n k=n k=n时,此时的位置空间 X n \mathcal X_n Xn就是由共轭方向 d 0 , d 1 , ⋯   , d n − 1 d_0,d_1,\cdots,d_{n-1} d0,d1,,dn1描述的投影空间 X n ∈ R n \mathcal X_n \in \mathbb R^n XnRn,因而目标函数 f ( x ) f(x) f(x)必然可以通过最多 n n n次迭代找到最优解。
    • 首先,投影空间与原始特征空间不同,它是将正定矩阵 Q \mathcal Q Q对角化后的特征空间效果;
    • 该特征空间是由共轭方向 d i ( i = 0 , 1 , ⋯   , n − 1 ) d_i(i=0,1,\cdots,n-1) di(i=0,1,,n1)但并不是说它们是正交基
      ∀ d i , d j ∈ D , i ≠ j ⇒ ( d i ) T Q d j = 0 \forall d_i,d_j \in \mathcal D,i \neq j \Rightarrow (d_i)^T \mathcal Q d_j = 0 di,djD,i=j(di)TQdj=0
      Q = P 2 = P T P \mathcal Q = \mathcal P^2 = \mathcal P^T \mathcal P Q=P2=PTP,其中 P \mathcal P P同样是正定矩阵。有:
      ( d i ) T Q d j = ( d i ) T P T P d j = ( P d i ) T ( P d j ) = 0 \begin{aligned} (d_i)^T \mathcal Q d_j & = (d_i)^T \mathcal P^T \mathcal P d_j \\ & = (\mathcal P d_i)^T (\mathcal P d_j) = 0 \end{aligned} (di)TQdj=(di)TPTPdj=(Pdi)T(Pdj)=0
      可以看出: P d i ( i = 0 , 1 , ⋯   , n − 1 ) \mathcal P d_i(i=0,1,\cdots,n-1) Pdi(i=0,1,,n1)才是投影空间的正交基。当然 d i d_i di也有成为正交基情况,即: Q = P 2 = P ⇒ P = I \mathcal Q = \mathcal P^2 = \mathcal P \Rightarrow \mathcal P = \mathcal I Q=P2=PP=I。其中 I \mathcal I I表示单位矩阵

线性共轭梯度法

显然,上面存在被我们忽视的核心问题:如何通过一种简单方式获取一组共轭方向 ? ? ?

共轭梯度法构造共轭方向的思想在于:在迭代下降的过程中,借助当前位置 x k x_k xk梯度信息构造共轭方向。对应算法步骤表示如下:
该操作是在迭代过程的同时构造梯度方向初始化 d 0 d_0 d0,在构造新的共轭方向 d 1 d_1 d1时,需要保证其与 d 0 d_0 d0共轭;在构造 d 2 d_2 d2时,需要保证其与 d 0 , d 1 d_0,d_1 d0,d1均相互共轭,以此类推。

初始化操作

  • 给定初始点 x 0 x_0 x0,记 d 0 = − ∇ f ( x 0 ) d_0 = -\nabla f(x_0) d0=f(x0);设置阈值 ϵ > 0 \epsilon > 0 ϵ>0 k = 0 k = 0 k=0

算法过程

  • 事先判断 ∥ ∇ f ( x k ) ∥ ≤ ϵ \|\nabla f(x_k)\| \leq \epsilon ∥∇f(xk)ϵ是否成立 ? ? ?是,则算法终止
  • 计算当前迭代步骤的最优步长 α k \alpha_k αk
    求解过程详见共轭梯度法背景介绍
    α k = − [ ∇ f ( x k ) ] T d k ( d k ) T Q d k \alpha_k = - \frac{[\nabla f(x_k)]^T d_k}{(d_k)^T \mathcal Q d_k} αk=(dk)TQdk[f(xk)]Tdk
  • 计算新位置点 x k + 1 = x k + α k ⋅ d k x_{k+1} = x_k + \alpha_k \cdot d_k xk+1=xk+αkdk,并计算共轭方向 d k + 1 d_{k+1} dk+1
    d k + 1 = − ∇ f ( x k + 1 ) + β k ⋅ d k , β k = [ ∇ f ( x k + 1 ) ] T Q d k ( d k ) T Q d k d_{k+1} = -\nabla f(x_{k+1}) + \beta_k \cdot d_k,\beta_k = \frac{[\nabla f(x_{k+1})]^T \mathcal Q d_k}{(d_k)^T \mathcal Q d_k} dk+1=f(xk+1)+βkdk,βk=(dk)TQdk[f(xk+1)]TQdk
  • k = k + 1 k = k + 1 k=k+1,转步骤 1 1 1重新判断。

共轭方向公式的证明过程

新共轭方向产生时,需要满足一个重要条件:与之前迭代产生的共轭方向均共轭
( d k + 1 ) T Q d i = 0 i = 0 , 1 , 2 , ⋯   , k (d_{k+1})^T \mathcal Q d_{i} = 0 \quad i=0,1,2,\cdots,k (dk+1)TQdi=0i=0,1,2,,k
首先,尝试 d k + 1 d_{k+1} dk+1表示为: x k + 1 x_{k+1} xk+1负梯度方向 − ∇ f ( x k + 1 ) - \nabla f(x_{k+1}) f(xk+1) d 0 , d 1 , ⋯   , d k d_0,d_1,\cdots,d_k d0,d1,,dk线性组合的加法形式:
其中 β 0 , ⋯   , β k \beta_0,\cdots,\beta_k β0,,βk表示对应共轭方向的系数,是一个标量;
d k + 1 = − ∇ f ( x k + 1 ) + β 0 d 0 + β 1 d 1 ⋯ + β k d k d_{k+1} = - \nabla f(x_{k+1}) + \beta_0 d_0 + \beta_1d_1 \cdots + \beta_k d_k dk+1=f(xk+1)+β0d0+β1d1+βkdk
将该式代入上面的重要条件,即:
在线性组合中,除去与 d i d_i di相同的一项外,其余项均为 0 0 0
( d k + 1 ) T Q d i = 0 ⇒ [ − ∇ f ( x k + 1 ) + β 0 d 0 + β 1 d 1 ⋯ + β k d k ] T Q d i = 0 ⇒ [ − ∇ f ( x k + 1 ) ] T Q d i + β 0 ⋅ ( d 0 ) T Q d i ⏟ = 0 + ⋯ + β i ⋅ ( d i ) T Q d i + ⋯ + β k ( d k ) T Q d i ⏟ = 0 = 0 ⇒ [ − ∇ f ( x k + 1 ) ] T Q d i + β i ⋅ ( d i ) T Q d i = 0 \begin{aligned} (d_{k+1})^T \mathcal Q d_{i} = 0 & \Rightarrow [-\nabla f(x_{k+1}) + \beta_0 d_0 + \beta_1d_1 \cdots + \beta_k d_k]^T \mathcal Q d_i = 0 \\ & \Rightarrow [- \nabla f(x_{k+1})]^T\mathcal Q d_i + \beta_0 \cdot \underbrace{(d_0)^T \mathcal Q d_i}_{=0} + \cdots + \beta_i \cdot (d_i)^T \mathcal Q d_i + \cdots + \beta_k \underbrace{(d_k)^T \mathcal Q d_i}_{=0} = 0 \\ & \Rightarrow [- \nabla f(x_{k+1})]^T\mathcal Q d_i + \beta_i \cdot (d_i)^T \mathcal Q d_i = 0 \end{aligned} (dk+1)TQdi=0[f(xk+1)+β0d0+β1d1+βkdk]TQdi=0[f(xk+1)]TQdi+β0=0 (d0)TQdi++βi(di)TQdi++βk=0 (dk)TQdi=0[f(xk+1)]TQdi+βi(di)TQdi=0
经过整理,有:
很明显:项 ( d i ) T Q d i (d_i)^T \mathcal Q d_i (di)TQdi与项 [ ∇ f ( x k + 1 ) ] T Q d i [\nabla f(x_{k+1})]^T \mathcal Q d_i [f(xk+1)]TQdi描述的都是 1 × 1 1 \times 1 1×1的矩阵,一个值,移项就好啦~
β i ⋅ ( d i ) T Q d i = ∇ f ( x k + 1 ) T Q d i ⇒ β i = [ ∇ f ( x k + 1 ) ] T Q d i ( d i ) T Q d i \beta_i \cdot (d_i)^T \mathcal Q d_i = \nabla f(x_{k+1})^T \mathcal Q d_i \Rightarrow \beta_i = \frac{[\nabla f(x_{k+1})]^T \mathcal Q d_i}{(d_i)^T \mathcal Q d_i} βi(di)TQdi=f(xk+1)TQdiβi=(di)TQdi[f(xk+1)]TQdi
此时,当 β i \beta_i βi确定后 d k + 1 d_{k+1} dk+1必然与 d i d_i di共轭。同理,可以对所有的 β i ( i = 0 , 1 , ⋯   , k ) \beta_i(i=0,1,\cdots,k) βi(i=0,1,,k)进行求解,当所有的 β \beta β值确定后,必然与 d 0 , d 1 , ⋯   , d k d_0,d_1,\cdots,d_k d0,d1,,dk均共轭。但上面的结论公式中,仅仅描述了 β k \beta_k βk参数。也就是说:在迭代公式中,仅描述了 d k + 1 d_{k+1} dk+1 d k d_k dk共轭,其余的共轭方向并没有提

观察除了 d k d_k dk之外的其他项。当 j = 0 , 1 , ⋯   , k − 1 j=0,1,\cdots,k-1 j=0,1,,k1时,观察 β j \beta_j βj分子部分:
[ ∇ f ( x k + 1 ) ] T Q d j [\nabla f(x_{k+1})]^T \mathcal Q d_j [f(xk+1)]TQdj
关于共轭方向 d j d_j dj,通过线搜索公式可以将其表示为如下形式:
x j + 1 = x j + α j ⋅ d j ⇒ d j = x j + 1 − x j α j x_{j+1} = x_j + \alpha_j \cdot d_j \Rightarrow d_j = \frac{x_{j+1} - x_j}{\alpha_j} xj+1=xj+αjdjdj=αjxj+1xj
两边同时左乘正定矩阵 Q \mathcal Q Q,有:
在小括号内两项同时加上系数项 C \mathcal C C,符号不发生变化。很明显, Q x j + 1 + C \mathcal Q x_{j+1} + \mathcal C Qxj+1+C就是 ∇ f ( x j + 1 ) , ∇ f ( x j ) \nabla f(x_{j+1}),\nabla f(x_j) f(xj+1),f(xj)同理。
Q d j = 1 α j ( Q x j + 1 − Q x j ) = 1 α j [ ( Q x j + 1 + C ) − ( Q x j + C ) ] = 1 α j [ ∇ f ( x j + 1 ) − ∇ f ( x j ) ] \begin{aligned} \mathcal Q d_j & = \frac{1}{\alpha_j}(\mathcal Q x_{j+1} - \mathcal Q x_j) \\ & = \frac{1}{\alpha_j} \left[(\mathcal Q x_{j+1} + \mathcal C) - (\mathcal Q x_j + \mathcal C) \right] \\ & = \frac{1}{\alpha_j} [\nabla f(x_{j+1}) - \nabla f(x_j)] \end{aligned} Qdj=αj1(Qxj+1Qxj)=αj1[(Qxj+1+C)(Qxj+C)]=αj1[f(xj+1)f(xj)]
Q d j \mathcal Q d_j Qdj的展开结果代入上式,有:
[ ∇ f ( x k + 1 ) ] T Q d j = 1 α j ⋅ [ ∇ f ( x k + 1 ) ] T [ ∇ f ( x j + 1 ) − ∇ f ( x j ) ] = 1 α j ⋅ { [ ∇ f ( x k + 1 ) ] T ∇ f ( x j + 1 ) − [ ∇ f ( x k + 1 ) ] T ∇ f ( x j ) } \begin{aligned} [\nabla f(x_{k+1})]^T \mathcal Q d_j & = \frac{1}{\alpha_j} \cdot [\nabla f(x_{k+1})]^T [\nabla f(x_{j+1}) - \nabla f(x_j)] \\ & = \frac{1}{\alpha_j} \cdot \left\{[\nabla f(x_{k+1})]^T \nabla f(x_{j+1}) - [\nabla f(x_{k+1})]^T\nabla f(x_j)\right\} \end{aligned} [f(xk+1)]TQdj=αj1[f(xk+1)]T[f(xj+1)f(xj)]=αj1{[f(xk+1)]Tf(xj+1)[f(xk+1)]Tf(xj)}
观察大括号内第一项 [ ∇ f ( x k + 1 ) ] T ∇ f ( x j + 1 ) [\nabla f(x_{k+1})]^T \nabla f(x_{j+1}) [f(xk+1)]Tf(xj+1),将 ∇ f ( x j + 1 ) \nabla f(x_{j+1}) f(xj+1)使用共轭方向进行表示
d j + 1 = − ∇ f ( x j + 1 ) + β 0 d 0 + β 1 d 1 + ⋯ β j d j ⇓ ∇ f ( x j + 1 ) = − d j + 1 + β 0 d 0 + β 1 d 1 + ⋯ + β j d j d_{j+1} = -\nabla f(x_{j+1}) + \beta_0 d_0 + \beta_1 d_1 + \cdots \beta_j d_j \\ \Downarrow \\ \nabla f(x_{j+1}) = -d_{j+1} + \beta_0 d_0 + \beta_1 d_1 + \cdots + \beta_j d_j dj+1=f(xj+1)+β0d0+β1d1+βjdjf(xj+1)=dj+1+β0d0+β1d1++βjdj
将其代入,有:
根据共轭方向法的第一条重要特征,所有项全部是 0 0 0
[ ∇ f ( x k + 1 ) ] T ∇ f ( x j + 1 ) = − [ ∇ f ( x k + 1 ) ] T d j + 1 ⏟ = 0 + β 0 ⋅ [ ∇ f ( x k + 1 ) ] T d 0 ⏟ = 0 + ⋯ + β j ⋅ [ ∇ f ( x k + 1 ) ] T d j ⏟ = 0 = 0 \begin{aligned} [\nabla f(x_{k+1})]^T \nabla f(x_{j+1}) & = - \underbrace{[\nabla f(x_{k+1})]^Td_{j+1}}_{=0} + \beta_0 \cdot\underbrace{[\nabla f(x_{k+1})]^T d_0}_{=0} + \cdots + \beta_j \cdot \underbrace{[\nabla f(x_{k+1})]^T d_j}_{=0} \\ & = 0 \end{aligned} [f(xk+1)]Tf(xj+1)==0 [f(xk+1)]Tdj+1+β0=0 [f(xk+1)]Td0++βj=0 [f(xk+1)]Tdj=0
同理,大括号内第二项 [ ∇ f ( x k + 1 ) ] T ∇ f ( x j ) = 0 [\nabla f(x_{k+1})]^T\nabla f(x_j) = 0 [f(xk+1)]Tf(xj)=0。最终可得: j = 0 , 1 , ⋯   , k − 1 j=0,1,\cdots,k-1 j=0,1,,k1时,对应的分子 β j = 0 \beta_j = 0 βj=0,最终整理,有:
d k + 1 = − ∇ f ( x k + 1 ) + β k ⋅ d k , β k = [ ∇ f ( x k + 1 ) ] T Q d k ( d k ) T Q d k d_{k+1} = -\nabla f(x_{k+1}) + \beta_k \cdot d_k,\beta_k = \frac{[\nabla f(x_{k+1})]^T \mathcal Q d_k}{(d_k)^T \mathcal Q d_k} dk+1=f(xk+1)+βkdk,βk=(dk)TQdk[f(xk+1)]TQdk

关于线搜索公式中参数的化简

关于线搜索公式中步长部分的化简

关于精确搜索条件下步长 α k = − [ ∇ f ( x k ) ] T d k ( d k ) T Q d k \begin{aligned}\alpha_k = -\frac{[\nabla f(x_k)]^T d_k}{(d_k)^T \mathcal Q d_k}\end{aligned} αk=(dk)TQdk[f(xk)]Tdk,可以将其化简为如下形式
目的是为了将线搜索过程中变量 α k , d k \alpha_k,d_k αk,dk的表达式与目标函数梯度信息建立起直观联系。
α k = [ ∇ f ( x k ) ] T ∇ f ( x k ) ( d k ) T Q d k \alpha_k = \frac{[\nabla f(x_k)]^T \nabla f(x_k)}{(d_k)^T \mathcal Q d_k} αk=(dk)TQdk[f(xk)]Tf(xk)

化简描述:观察 α k \alpha_k αk分子部分的描述: [ ∇ f ( x k ) ] T d k [\nabla f(x_k)]^T d_k [f(xk)]Tdk,由于共轭方向 d k d_k dk表示为:
d k = − ∇ f ( x k ) + β k − 1 ⋅ d k − 1 d_k = - \nabla f(x_{k}) + \beta_{k-1} \cdot d_{k-1} dk=f(xk)+βk1dk1
对分子进行整理
依然使用第一条重要特征 [ ∇ f ( x k ) ] T d k − 1 = 0 [\nabla f(x_k)]^Td_{k-1} = 0 [f(xk)]Tdk1=0
[ ∇ f ( x k ) ] T d k = [ ∇ f ( x k ) ] T [ − ∇ f ( x k ) + β k − 1 ⋅ d k − 1 ] = − [ ∇ f ( x k ) ] T ∇ f ( x k ) + β k − 1 ⋅ [ ∇ f ( x k ) ] T d k − 1 ⏟ 0 = − [ ∇ f ( x k ) ] T ∇ f ( x k ) \begin{aligned} [\nabla f(x_k)]^T d_k & = [\nabla f(x_k)]^T [-\nabla f(x_k) + \beta_{k-1} \cdot d_{k-1}] \\ & = -[\nabla f(x_k)]^T \nabla f(x_k) + \beta_{k-1}\cdot \underbrace{[\nabla f(x_k)]^Td_{k-1}}_{0} \\ & = -[\nabla f(x_k)]^T \nabla f(x_k) \end{aligned} [f(xk)]Tdk=[f(xk)]T[f(xk)+βk1dk1]=[f(xk)]Tf(xk)+βk10 [f(xk)]Tdk1=[f(xk)]Tf(xk)
最终对分子部分进行替换即可。

关于线搜索公式中共轭方向系数的化简

精确搜索条件下关于共轭方向系数 β k = ∇ f ( x k + 1 ) Q d k ( d k ) T Q d k \begin{aligned}\beta_k = \frac{\nabla f(x_{k+1}) \mathcal Q d_k}{(d_k)^T \mathcal Q d_k}\end{aligned} βk=(dk)TQdkf(xk+1)Qdk,可以将其化简为如下形式
β k = [ ∇ f ( x k + 1 ) ] T ∇ f ( x k + 1 ) [ ∇ f ( x k ) ] T ∇ f ( x k ) \beta_k = \frac{[\nabla f(x_{k+1})]^T\nabla f(x_{k+1})}{[\nabla f(x_k)]^T \nabla f(x_k)} βk=[f(xk)]Tf(xk)[f(xk+1)]Tf(xk+1)

化简描述:观察分子 [ ∇ f ( x k + 1 ) ] T Q d k [\nabla f(x_{k+1})]^T\mathcal Q d_k [f(xk+1)]TQdk,使用 Q d k = 1 α k [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] \begin{aligned}\mathcal Qd_k = \frac{1}{\alpha_k}[\nabla f(x_{k+1}) - \nabla f(x_k)]\end{aligned} Qdk=αk1[f(xk+1)f(xk)]进行替换,对于 β k \beta_k βk有如下表达:
β k = 1 α k ⋅ [ ∇ f ( x k + 1 ) ] T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] ( d k ) T Q d k = [ ∇ f ( x k + 1 ) ] T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] α k ⋅ ( d k ) T Q d k \begin{aligned} \beta_k & = \frac{1}{\alpha_k} \cdot \frac{[\nabla f(x_{k+1})]^T[\nabla f(x_{k+1}) - \nabla f(x_k)]}{(d_k)^T \mathcal Q d_k} \\ & = \frac{[\nabla f(x_{k+1})]^T[\nabla f(x_{k+1}) - \nabla f(x_k)]}{\alpha_k \cdot (d_k)^T \mathcal Q d_k} \end{aligned} βk=αk1(dk)TQdk[f(xk+1)]T[f(xk+1)f(xk)]=αk(dk)TQdk[f(xk+1)]T[f(xk+1)f(xk)]
根据化简后 α k \alpha_k αk,有:
[ ∇ f ( x k ) ] T ∇ f ( x k ) = α k ⋅ ( d k ) T Q d k [\nabla f(x_k)]^T \nabla f(x_k) = \alpha_k \cdot (d_k)^T \mathcal Q d_k [f(xk)]Tf(xk)=αk(dk)TQdk
替换 β k \beta_k βk分母,有:
并将 [ ∇ f ( x k + 1 ) ] T ∇ f ( x k ) = 0 [\nabla f(x_{k+1})]^T \nabla f(x_k) = 0 [f(xk+1)]Tf(xk)=0带入
β k = [ ∇ f ( x k + 1 ) ] T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] [ ∇ f ( x k ) ] T ∇ f ( x k ) = [ ∇ f ( x k + 1 ) ] T ∇ f ( x k + 1 ) [ ∇ f ( x k ) ] T ∇ f ( x k ) \begin{aligned} \beta_k & = \frac{[\nabla f(x_{k+1})]^T[\nabla f(x_{k+1}) - \nabla f(x_k)]}{[\nabla f(x_k)]^T \nabla f(x_k)} \\ \quad \\ & = \frac{[\nabla f(x_{k+1})]^T\nabla f(x_{k+1})}{[\nabla f(x_k)]^T \nabla f(x_k)} \end{aligned} βk=[f(xk)]Tf(xk)[f(xk+1)]T[f(xk+1)f(xk)]=[f(xk)]Tf(xk)[f(xk+1)]Tf(xk+1)

参数化简的目的

观察参数: β k = [ ∇ f ( x k + 1 ) ] T ∇ f ( x k + 1 ) [ ∇ f ( x k ) ] T ∇ f ( x k ) \begin{aligned}\beta_k=\frac{[\nabla f(x_{k+1})]^T\nabla f(x_{k+1})}{[\nabla f(x_k)]^T \nabla f(x_k)}\end{aligned} βk=[f(xk)]Tf(xk)[f(xk+1)]Tf(xk+1)化简结果,可以发现:共轭方向 d k d_k dk的迭代结果只与上一迭代步骤的共轭方向 d k d_k dk x k , x k + 1 x_k,x_{k+1} xk,xk+1位置的梯度相关
d k + 1 = − ∇ f ( x k + 1 ) + [ ∇ f ( x k + 1 ) ] T ∇ f ( x k + 1 ) [ ∇ f ( x k ) ] T ∇ f ( x k ) ⋅ d k d_{k+1} = -\nabla f(x_{k+1}) + \frac{[\nabla f(x_{k+1})]^T\nabla f(x_{k+1})}{[\nabla f(x_k)]^T \nabla f(x_k)} \cdot d_k dk+1=f(xk+1)+[f(xk)]Tf(xk)[f(xk+1)]Tf(xk+1)dk
这意味着:关于共轭方向的迭代过程与正定矩阵 Q \mathcal Q Q,描述一次项系数矩阵 C \mathcal C C没有关联关系。从而可以将凸二次函数 f ( x ) f(x) f(x)优化问题映射到其他复杂目标函数的优化问题中。

虽然上述的化简过程全部是取等操作,但这些取等操作是依赖于 f ( x ) = 1 2 x T Q x + C T x \begin{aligned}f(x) = \frac{1}{2}x^T \mathcal Q x + \mathcal C^Tx\end{aligned} f(x)=21xTQx+CTx条件的基础上。如果是一般性复杂目标函数:得到的化简结果 β k \beta_k βk可能只是是一个近似解。因为上述化简过程中可能存在:
当然,不仅仅是下面描述的迭代步骤中存在不相等的情况,在替换 [ ∇ f ( x k ) ] T ∇ f ( x k ) = α k ⋅ ( d k ) T Q d k [\nabla f(x_k)]^T \nabla f(x_k) = \alpha_k \cdot (d_k)^T \mathcal Q d_k [f(xk)]Tf(xk)=αk(dk)TQdk时,无论是 FR \text{FR} FR方法还是 PRP \text{PRP} PRP方法,其得到的 β k \beta_k βk都不是精确解。因为 Q \mathcal Q Q凸二次函数的特有信息,而一般性目标函数可能不存在该信息,或者说 Q \mathcal Q Q存在,但不作主导作用。
[ ∇ f ( x k + 1 ) ] T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] [ ∇ f ( x k ) ] T ∇ f ( x k ) ≠ [ ∇ f ( x k + 1 ) ] T ∇ f ( x k + 1 ) [ ∇ f ( x k ) ] T ∇ f ( x k ) \frac{[\nabla f(x_{k+1})]^T[\nabla f(x_{k+1}) - \nabla f(x_k)]}{[\nabla f(x_k)]^T \nabla f(x_k)} \neq \frac{[\nabla f(x_{k+1})]^T\nabla f(x_{k+1})}{[\nabla f(x_k)]^T \nabla f(x_k)} [f(xk)]Tf(xk)[f(xk+1)]T[f(xk+1)f(xk)]=[f(xk)]Tf(xk)[f(xk+1)]Tf(xk+1)

非线性共轭梯度法(FR,PRP方法)

关于 FR,PRP \text{FR,PRP} FR,PRP方法的区别在于 β k \beta_k βk迭代方式。关于非线性共轭梯度法的迭代过程表示如下:

初始化操作

  • 给定初始点 x 0 x_0 x0,记 d 0 = − ∇ f ( x 0 ) d_0 = -\nabla f(x_0) d0=f(x0);设置阈值 ϵ > 0 \epsilon > 0 ϵ>0 k = 0 k = 0 k=0

算法过程

  • 事先判断 ∥ ∇ f ( x k ) ∥ ≤ ϵ \|\nabla f(x_k)\| \leq \epsilon ∥∇f(xk)ϵ是否成立 ? ? ?是,则算法终止
  • 利用线性搜索方式计算步长 α k \alpha_k αk
    • 此时的目标函数可能已经不是形如 f ( x ) = 1 2 x T Q x + C T x \begin{aligned}f(x) = \frac{1}{2} x^T\mathcal Q x + \mathcal C^T x\end{aligned} f(x)=21xTQx+CTx的格式,因而不能使用公式进行求解;甚至此时的目标函数不一定是凸函数,从而求解的最优解可能仅是局部最优解,而不是全局最优解
    • 在迭代过程中并不一定需要求解精确解,我们的目的是让目标函数收敛至最小值详见线搜索方法——步长角度(精确搜索),因此完全可以使用非精确搜索如 Armijo,Wolfe \text{Armijo,Wolfe} Armijo,Wolfe准则等获取优质步长。
  • 计算新位置点 x k + 1 = x k + α k ⋅ d k x_{k+1} = x_k + \alpha_k \cdot d_k xk+1=xk+αkdk,并计算共轭方向 d k + 1 d_{k+1} dk+1
    d k + 1 = − ∇ f ( x k + 1 ) + β k d k d_{k+1} = - \nabla f(x_{k+1}) + \beta_k d_k dk+1=f(xk+1)+βkdk
    其中 FR \text{FR} FR方法使用的 β k \beta_k βk计算方式为:
    β k = [ ∇ f ( x k + 1 ) ] T ∇ f ( x k + 1 ) [ ∇ f ( x k ) ] T ∇ f ( x k ) ; ( FR ) \beta_k = \frac{[\nabla f(x_{k+1})]^T\nabla f(x_{k+1})}{[\nabla f(x_k)]^T \nabla f(x_k)}; \quad (\text{FR}) βk=[f(xk)]Tf(xk)[f(xk+1)]Tf(xk+1);(FR)
    PRP \text{PRP} PRP方法使用 β k \beta_k βk计算方式为:
    β k = [ ∇ f ( x k + 1 ) ] T [ ∇ f ( x k + 1 ) − ∇ f ( x k ) ] [ ∇ f ( x k ) ] T ∇ f ( x k ) ; ( PRP ) \beta_k = \frac{[\nabla f(x_{k+1})]^T[\nabla f(x_{k+1}) - \nabla f(x_k)]}{[\nabla f(x_k)]^T \nabla f(x_k)}; \quad (\text{PRP}) βk=[f(xk)]Tf(xk)[f(xk+1)]T[f(xk+1)f(xk)];(PRP)
  • k = k + 1 k = k+1 k=k+1并转步骤 1 1 1重新判断。

关于非线性共轭梯度法的说明

  • 根据线搜索公式的描述,在迭代过程中关于共轭方向 d k d_k dk的计算需要满足一个大前提 d k d_k dk是下降方向。相反,如果不是下降方向,需要对参数 β k \beta_k βk进行调整
    但这种调整同样存在风险: d k d_k dk与其他方向不是共轭关系

  • 根据线性共轭梯度法的描述,其必然会在最多 n n n次迭代内找到凸二次函数的全局最优解。这意味着:该算法具有二次终止性

  • 算法实现过程中通常采用 n n n步重启策略,从而该算法的收敛速度可达到 n n n步二阶收敛
    关于 n n n步重启策略的描述:在执行 n n n次迭代后,此时当前位置点的所有分量均被更新一次。如果在 x n x_n xn位置处开始重新计算梯度: d n = − ∇ f ( x n ) d_{n} = - \nabla f(x_n) dn=f(xn)此时和初始化点 x 0 x_0 x0的计算方式是相同的。后续迭代与前面的迭代方式均相同。例如:
    d n + 1 = − ∇ f ( x n + 1 ) + β n ⋅ d n d_{n+1} = - \nabla f(x_{n+1}) + \beta_{n} \cdot d_{n} dn+1=f(xn+1)+βndn
    线性共轭梯度法的区别在于:此时由于复杂的目标函数,该算法无法实现 n n n步迭代/ 1 1 1次线搜索过程完成收敛。也就是说: n n n次迭代后,迭代结果会在投影空间中描述一个全新的位置。这里的全新是指所有维度均被更新一次的结果。从而可能需要若干个 n n n次迭代才能达到最优解。

    为什么要使用 n n n步重启策略:在迭代足够多次数的情况下,初始的一些共轭方向已经不会对当前迭代结果产生太大作用。但如果使用正常的迭代方式。初始共轭方向依然会以线性组合的形式留在当前迭代结果中,从而影响当前迭代的方向。例如关于 d n + 1 d_{n+1} dn+1的正常迭代:
    d n + 1 = − ∇ f ( x 0 ) + ∑ i = 0 n β i ⋅ d i d_{n+1} = - \nabla f(x_0) + \sum_{i=0}^{n} \beta_i \cdot d_i dn+1=f(x0)+i=0nβidi

Reference \text{Reference} Reference
最优化理论与方法-第七讲-无约束优化问题(三)

你可能感兴趣的:(最优化理论与方法,机器学习,深度学习,共轭梯度法,非线性共轭梯度法,FR方法,PRP方法,n步重启策略)