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


    引言

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

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

    关于凸二次函数 f ( x ) f(x) f(x)的优化问题: min ⁡ f ( x ) = 1 2 x T Q x + C T x minf(x)=12xTQx+CTx 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 (di)TQdj=(di)TPTPdj=(Pdi)T(Pdj)=0 (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 (dk+1)TQdi=0[f(xk+1)+β0d0+β1d1+βkdk]TQdi=0[f(xk+1)]TQdi+β0(d0)TQdi=0++βi(di)TQdi++βk(dk)TQdi=0=0[f(xk+1)]TQdi+βi(di)TQdi=0 (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 ) ] Qdj=1αj(Qxj+1Qxj)=1αj[(Qxj+1+C)(Qxj+C)]=1αj[f(xj+1)f(xj)] 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 ) } TQdj=1αj[f(xk+1)]T[f(xj+1)f(xj)]=1αj{[f(xk+1)]Tf(xj+1)[f(xk+1)]Tf(xj)} [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 Tf(xj+1)=[f(xk+1)]Tdj+1=0+β0[f(xk+1)]Td0=0++βj[f(xk+1)]Tdj=0=0 [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 αk=[f(xk)]Tdk(dk)TQdk α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 ) Tdk=[f(xk)]T[f(xk)+βk1dk1]=[f(xk)]Tf(xk)+βk1[f(xk)]Tdk10=[f(xk)]Tf(xk) [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 βk=f(xk+1)Qdk(dk)TQdk β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 ) ] Qdk=1αk[f(xk+1)f(xk)] 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 βk=1αk[f(xk+1)]T[f(xk+1)f(xk)](dk)TQdk=[f(xk+1)]T[f(xk+1)f(xk)]αk(dk)TQdk β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 ) βk=[f(xk+1)]T[f(xk+1)f(xk)][f(xk)]Tf(xk)=[f(xk+1)]Tf(xk+1)[f(xk)]Tf(xk) β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 ) βk=[f(xk+1)]Tf(xk+1)[f(xk)]Tf(xk) β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 f(x)=12xTQx+CTx 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 f(x)=12xTQx+CTx 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
    最优化理论与方法-第七讲-无约束优化问题(三)

  • 相关阅读:
    FPGA UDP RGMII 千兆以太网(2)IDDR
    docker push image harbor http 镜像
    Spring的依赖注入
    Java开发者的Python快速进修指南:掌握T检验
    【数据结构-oj】顺序表和链表的 oj 题(入门)
    初级前端面试题之VUE基础
    尤雨溪:Vue 3 将成为新的默认版本
    人工智能 知识图谱
    一个完整的初学者指南Django-part2
    AndroidStudio 运行报错:Invalid keystore format
  • 原文地址:https://blog.csdn.net/qq_34758157/article/details/132836543