机器学习笔记之最优化理论与方法——共轭梯度法
引言
上一节主要介绍了共轭方向法的重要特征以及相关证明,本节将介绍共轭方向法的代表算法——共轭梯度法。
回顾:共轭方向法的重要特征
关于凸二次函数 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,⋯,dn−1},在迭代过程中的输出位置 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=xk−1+αk−1⋅dk−1k=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,⋯,k−1)均相互垂直:
[ ∇ 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,⋯,k−1 - 如果定义集合 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=0∑k−1αi⋅di∣αi∈R}
那么如果 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+CTx∣x∈Xk}
并且当 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,⋯,dn−1描述的投影空间: X n ∈ R n \mathcal X_n \in \mathbb R^n Xn∈Rn,因而目标函数 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,⋯,n−1)但并不是说它们是
正交基:
∀ 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,dj∈D,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,⋯,n−1)才是投影空间的正交基。当然 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=P⇒P=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+αk⋅dk,并计算共轭方向 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)+βk⋅dk,βk=(dk