一、参考
《数值最优化算法与理论》
二、线性搜索与信赖域算法区别
数值最优化—无约束问题最速下降法和Newton法 和 数值最优化—无约束问题共轭梯度法 中介绍的求解无约束问题的几类算法的共同点是基于方向和步长确定一个下降方向d ( k ) d^{(k)}d(k),然后从x ( k ) x^{(k)}x(k)出发,沿方向d ( k ) d^{(k)}d(k)进行线性搜索确定步长α k \alpha _kαk,得到下一个迭代点x ( k + 1 ) = x ( k ) + α k d ( k ) x^{(k+1)} = x^{(k)} + \alpha _kd^{(k)}x(k+1)=x(k)+αkd(k)。称这类算法为线性搜索算法。
下面介绍求解无约束问题:
m i n f ( x ) , ( x ∈ R n ) min \ f(x), \quad (x \in R^n)min f(x),(x∈Rn)
的另一类算法—信赖域算法。信赖域算法的基本思想是:在当前迭代点x ( k ) x^{(k)}x(k)的附近用一个简单函数近似目标函数f ff。用该近似函数在x ( k ) x^{(k)}x(k)的某个邻域内的极小值点作为下一个迭代点。与线性搜索型算法比较,信赖域算法在每次迭代同时确定搜索方向和步长。
三、信赖域算法
由于信赖域方法用f ff的某个近似函数在x ( k ) x^{(k)}x(k)邻域的极小值点作为下一个迭代点,因此,设计信赖域算法需要考虑如下相关问题:
- 目标函数f ff的(简单)近似形式。
- 点x ( k ) x^{(k)}x(k)的邻域(称为信赖域)大小的确定。
- 函数值序列的下降性检测。
- 近似问题(称为信赖域子问题)的求解。
考虑到一般非线性函数在任何点的邻域内都可以用二次函数近似,而且二次函数的极小值问题相对容易求解。因此,在信赖域算法中,通常我们采用二次函数作为目标函数f ff的近似,用该二次函数在x ( k ) x^{(k)}x(k)某邻域内的极小值点作为下一个迭代点,即x ( k + 1 ) x^{(k+1)}x(k+1)为下面问题的解:
m i n f ( x ( k ) ) + ∇ f ( x ( k ) ) T ( x − x ( k ) ) + 1 2 ( x − x ( k ) ) T B k ( x − x ( k ) ) min \ f(x^{(k)}) + \nabla f(x^{(k)})^T (x - x^{(k)}) + \frac 1 2 (x - x^{(k)})^T B_k(x - x^{(k)})min f(x(k))+∇f(x(k))T(x−x(k))+21(x−x(k))TBk(x−x(k))s . t . ∣ ∣ x − x ( k ) ∣ ∣ ≤ Δ k s.t. \ ||x-x^{(k)}|| \le \Delta _ks.t. ∣∣x−x(k)∣∣≤Δk
其中,B k ∈ R n × n B_k \in R^{n \times n}Bk∈Rn×n是f ff在x xx处的Hessian矩阵或其近似,参数Δ k > 0 \Delta _k > 0Δk>0控制x ( k ) x^{(k)}x(k)的邻域大小。若令d = x − x ( k ) d = x - x^{(k)}d=x−x(k),则上面的问题可改写为如下等价的二次函数极小值问题:
m i n f ( x ( k ) ) + ∇ f ( x ( k ) ) T d + 1 2 d T B k d = △ q k ( d ) min \ f(x^{(k)}) + \nabla f(x^{(k)})^T d + \frac 1 2 d^T B_kd \overset {\bigtriangleup } {=} q_k (d)min f(x(k))+∇f(x(k))Td+21dTBkd=△qk(d)s . t . ∣ ∣ d ∣ ∣ ≤ Δ k s.t. \ ||d|| \le \Delta _ks.t. ∣∣d∣∣≤Δk
设d ( k ) d^{(k)}d(k)是问题的解。则下一个迭代点为x ( k + 1 ) = x ( k ) + d ( k ) x^{(k+1)} = x^{(k)} + d^{(k)}x(k+1)=x(k)+d(k)。问题中的可行域:
D = { d ∈ R n ∣ ∣ ∣ d ∣ ∣ ≤ Δ k } D = \{d \in R^n \ | \ ||d|| \le \Delta _k \}D={d∈Rn ∣ ∣∣d∣∣≤Δk}
称为信赖域,参数Δ > 0 \Delta >0Δ>0称为信赖域半径,等价的二次函数极小值问题称为信赖域子问题,其中范数可任意选取。本章采用Euclid范数。
信赖域子问题是仅有一个不等式约束的二次函数极小值问题。
由函数的二阶Taylor展开可知,当Δ k \Delta _kΔk充分小时,二次函数q qq在信赖域D DD中是f ff的一个很好的近似。另一方面,当f ff本身是一个二次函数或近似与二次函数时,q qq可能在某一个较大范围内也是f ff的一个很好的近似。如何确定信赖域半径是信赖域算法的一个重要环节。一方面,我们希望在D DD中q qq与f ff的近似程度好,另一方面希望信赖域半径尽可能大。为了合理确定信赖域半径,我们定义Δ F k \Delta F_kΔFk为f ff在第k kk步的实际下降量。即:
Δ f k = f ( x ( k ) ) − f ( x ( k ) + d ( k ) ) \Delta f_k = f(x^{(k)}) - f(x^{(k)} + d^{(k)})Δfk=f(x(k))−f(x(k)+d(k))
其中,d ( k ) d^{(k)}d(k)是信赖域子问题的解。令Δ q k \Delta _{q_k}Δqk为对应的预测下降量,即:
Δ q k = f ( x ( k ) ) − q k ( d ( k ) ) \Delta _{q_k} = f(x^{(k)}) - q_k(d^{(k)})Δqk=f(x(k))−qk(d(k))
注意到r k r_krk从某种程度反映了二次函数q k ( d ( k ) ) q_k(d^{(k)})qk(d(k))与目标函数f ( x ( k ) + d ( k ) ) f(x^{(k)} + d^{(k)})f(x(k)+d(k))的近似程度。若r k r_krk接近于1,则可认为二次函数q k ( d ( k ) ) q_k(d^{(k)})qk(d(k))在信赖域D DD上与目标函数f ( x ( k ) + d ( k ) ) f(x^{(k)} + d^{(k)})f(x(k)+d(k))的近似程度很好。反之,若r k r_krk离1较远,我们认为q k ( d ( k ) ) q_k(d^{(k)})qk(d(k))在信赖域D DD上与目标函数f ( x ( k ) + d ( k ) ) f(x^{(k)} + d^{(k)})f(x(k)+d(k))的近似程度不好。基于上述观察,我们可以用r k r_krk与1的近似程度作为对信赖域半径是否合适的准则。即,可通过如下方式调整信赖域半径。
给定常数η , η 1 , η 2 ∈ ( 0 , 1 ) \eta , \eta _1, \eta _2 \in (0,1)η,η1,η2∈(0,1)满足η < η 1 < η 2 \eta < \eta _1< \eta _2η<η1<η2(一般地,η \etaη接近于或等于0,η 2 \eta _2η2接近于1,如η 2 = 3 4 \eta _2=\frac 3 4η2=43)。
① 若r k ≥ η 2 r_k \ge \eta _2rk≥η2,我们可认为q qq在D DD中是f ff的一个很好的近似,或者说得到一个成功的迭代点x ( k + 1 ) = x ( k ) + d ( k ) x^{(k+1)} = x^{(k)} + d^{(k)}x(k+1)=x(k)+d(k)。此时,q qq有可能在一个更大一点的区域也是f ff的一个很好的近似。因此,我们可将信赖域半径扩大,即令Δ k + 1 > Δ k \Delta _{k+1} > \Delta _kΔk+1>Δk。
② 若η 1 < r k < η 2 \eta _1 < r_k <\eta _2η1<rk<η2,即q qq在D DD中是f ff的一个好的近似,或者说得到一个好的迭代点x ( k + 1 ) = x ( k ) + d ( k ) x^{(k+1)} = x^{(k)} + d^{(k)}x(k+1)=x(k)+d(k)。此时可以保持信赖域半径不变,即令Δ k + 1 = Δ k \Delta _{k+1} = \Delta _kΔk+1=Δk(为了下一次得到一个更成功的点,也可减少信赖域半径,即令Δ k + 1 < Δ k \Delta _{k+1} < \Delta _kΔk+1<Δk)。
③ 若r k ≤ η r_k \le \etark≤η,即q qq在D DD中是f ff的一个不好的近似,或者说得到一个不成功的迭代点x ( k + 1 ) = x ( k ) + d ( k ) x^{(k+1)} = x^{(k)} + d^{(k)}x(k+1)=x(k)+d(k)。说明信赖域半径过大,此时需要减少信赖域半径,即令Δ k + 1 < Δ k \Delta _{k+1} < \Delta _kΔk+1<Δk。
在上面的基础上,给出求解无约束问题的信赖域算法如下:
- (初始化)取初始点x ( 0 ) ∈ R n , Δ ˉ > 0 , Δ 0 ∈ ( 0 , Δ ˉ ) , η ∈ [ 0 , 1 4 ) x^{(0)} \in R^n,\bar \Delta >0, \Delta _0 \in (0,\bar \Delta),\eta \in [0, \frac 1 4)x(0)∈Rn,Δˉ>0,Δ0∈(0,Δˉ),η∈[0,41),精度ϵ > 0 \epsilon >0ϵ>0。令k = 0 k=0k=0。
- (收敛性检测)若∣ ∣ ∇ f ( x ( k ) ) ∣ ∣ ≤ ϵ ||\nabla f(x^{(k)})|| \le \epsilon∣∣∇f(x(k))∣∣≤ϵ,则算法终止。得问题的解x ( k ) x^{(k)}x(k)。否则,转2。
- (子问题求解)解信赖域子问题得解d ( k ) d^{(k)}d(k)。
- (信赖域修正)计算r k r_krk。
若r k > 3 4 r_k>\frac 3 4rk>43,则令Δ k + 1 = m i n { 2 Δ k , Δ ˉ } \Delta _{k+1} = min\{2\Delta _k,\bar \Delta \}Δk+1=min{2Δk,Δˉ}。
若1 4 < r k < 3 4 \frac 1 4 < r_k<\frac 3 441<rk<43,则令Δ k + 1 = Δ k \Delta _{k+1} = \Delta _kΔk+1=Δk。
若η < r k < 1 4 \eta < r_k < \frac 1 4η<rk<41,则令Δ k + 1 = 1 2 Δ k \Delta _{k+1} = \frac 1 2 \Delta _kΔk+1=21Δk。 - (可接受检测)若r k ≤ η r_k \le \etark≤η,令x ( k + 1 ) = x ( k ) , k = k + 1 x^{(k+1)} = x^{(k)},k=k+1x(k+1)=x(k),k=k+1,转2;否则令x ( k + 1 ) = x ( k ) + d ( k ) , k = k + 1 x^{(k+1)} = x^{(k)} + d^{(k)},k=k+1x(k+1)=x(k)+d(k),k=k+1。转1。
注:算法中的常数1/4,3/4,1/2是根据经验选取的。实际计算时,可根据问题对它们进行调整。
四、信赖域子问题的求解
信赖域算法中子问题的求解是算法实现的关键。子问题是一个目标为二次函数的约束优化问题。下面介绍采用Euclid范数时,精确求解与非精确求解子问题的特殊算法。为了方便起见,省略迭代指标,用x ∈ R n x \in R^nx∈Rn表示当前迭代点,此时信赖域子问题为:
{ m i n f ( x ) + ∇ f ( x ) T d + 1 2 d T B d = △ q k ( d ) s . t . ∣ ∣ d ∣ ∣ ≤ Δ \begin{cases} min \ f(x) +\nabla f(x)^T d + \frac 1 2 d^TBd \overset {\bigtriangleup } {=} q_k (d) \\\\ s.t. \ ||d|| \le \Delta \end{cases}⎩⎪⎨⎪⎧min f(x)+∇f(x)Td+21dTBd=△qk(d)s.t. ∣∣d∣∣≤Δ
1. 精确求解方法
不难发现,若B BB正定且d ˉ = △ − B − 1 ∇ f ( x ) \bar d \overset {\bigtriangleup } {=} -B^{-1} \nabla f(x)dˉ=△−B−1∇f(x)满足∣ ∣ d ∣ ∣ ≤ Δ ||d|| \le \Delta∣∣d∣∣≤Δ,即无约束问题:
m i n f ( x ) + ∇ f ( x ) T d + 1 2 d T B d min \ f(x) +\nabla f(x)^T d + \frac 1 2 d^TBdmin f(x)+∇f(x)Td+21dTBd
的解是信赖域子问题的可行点,则d ˉ \bar ddˉ是信赖域子问题的解。
定理:d ∗ d^*d∗是信赖域子问题的全局最优解当且仅当d ∗ d^*d∗可行,存在常数λ ∗ ≥ 0 \lambda ^* \ge 0λ∗≥0满足B + λ ∗ I B+\lambda ^*IB+λ∗I半正定,且有:
{ ( B + λ ∗ I ) d ∗ = − ∇ f ( x ) λ ∗ ( Δ − ∣ ∣ d ∗ ∣ ∣ ) = 0 \begin{cases} (B+\lambda ^* I) d^* = - \nabla f(x) \\\\ \lambda ^*(\Delta - ||d^*||) = 0 \end{cases}⎩⎪⎨⎪⎧(B+λ∗I)d∗=−∇f(x)λ∗(Δ−∣∣d∗∣∣)=0
利用此定理构造求解子问题的算法。设矩阵B + λ ∗ I B+\lambda ^*IB+λ∗I正定。若线性方程组:
B d + ∇ f ( x ) = 0 Bd+\nabla f(x) = 0Bd+∇f(x)=0
的解d ˉ \bar ddˉ满足∣ ∣ d ˉ ∣ ∣ ≤ Δ ||\bar d|| \le \Delta∣∣dˉ∣∣≤Δ,则d ∗ = d ˉ d^*=\bar dd∗=dˉ。此情形对应于λ ∗ = 0 \lambda ^* = 0λ∗=0且B BB正定。否则,必有λ ∗ > 0 \lambda ^* > 0λ∗>0。此时求解信赖域子问题等价于解如下方程组:
{ ( B + λ I ) d = − ∇ f ( x ) ∣ ∣ d ∣ ∣ = Δ \begin{cases} (B+\lambda I) d = - \nabla f(x) \\\\ ||d|| = \Delta \end{cases}⎩⎪⎨⎪⎧(B+λI)d=−∇f(x)∣∣d∣∣=Δ
取λ > 0 \lambda >0λ>0充分大使得B + λ I B+\lambda IB+λI正定,可通过解如下关于λ \lambdaλ的一元非线性方程:
ϕ 1 ( λ ) = ∣ ∣ ( B + λ I ) − 1 ∇ f ( x ) ∣ ∣ − Δ = 0 \phi _1(\lambda) = ||(B+\lambda I)^{-1} \nabla f(x)|| - \Delta = 0ϕ1(λ)=∣∣(B+λI)−1∇f(x)∣∣−Δ=0
得到解λ ∗ \lambda ^*λ∗。然后得子问题的解d ∗ = d ( λ ∗ ) = − ( B + λ I ) − 1 ∇ f ( x ) d^* = d(\lambda ^*) = -(B+\lambda I)^{-1} \nabla f(x)d∗=d(λ∗)=−(B+λI)−1∇f(x)。
基于此求信赖域子问题的方法称为子问题的精确解法。利用矩阵的对角化分解可知,ϕ 1 ( λ ) \phi _1(\lambda)ϕ1(λ)是非线性程度高的系统。为了简化方程的计算,定义:
ϕ 2 ( λ ) = 1 Δ − 1 ∣ ∣ d ( λ ) ∣ ∣ \phi_2(\lambda) = \frac {1} {\Delta} - \frac 1 {||d(\lambda)||}ϕ2(λ)=Δ1−∣∣d(λ)∣∣1
ϕ 2 ( λ ) \phi_2(\lambda)ϕ2(λ)近似为线性方程系统。该方程可应用牛顿迭代法建立其迭代计算式为:
λ l + 1 = λ l − ϕ 2 ( λ l ) ϕ 2 ′ ( λ l ) = λ l + ( ∣ ∣ d l ∣ ∣ ∣ ∣ q l ∣ ∣ ) 2 ( ∣ ∣ d l ∣ ∣ − Δ Δ ) \lambda _{l+1} = \lambda _l - \frac {\phi _2 (\lambda _l)} {\phi _2 ' (\lambda _l)} = \lambda _l + (\frac {||d_l||} {||q_l||})^2 (\frac {||d_l|| - \Delta} {\Delta})λl+1=λl−ϕ2′(λl)ϕ2(λl)=λl+(∣∣ql∣∣∣∣dl∣∣)2(Δ∣∣dl∣∣−Δ)
根据如上分析可建立信赖域子问题精确求解的计算步骤如下:
- 给定λ 0 > 0 , Δ > 0 \lambda _0 >0, \Delta > 0λ0>0,Δ>0。令l = 0 l=0l=0。
- 若λ l \lambda _lλl是问题的解,则解线性问题得解d ( l ) d^{(l)}d(l)。否则,转2。
- 作Cholesky(乔列斯基)分解B + λ ( l ) I = R T R B+\lambda ^{(l)}I = R^TRB+λ(l)I=RTR。解方程组:
R T R d l = − ∇ f ( x ) , R T q l = d l R^TRd_l = -\nabla f(x),\ R^Tq_l = d_lRTRdl=−∇f(x), RTql=dl
得解d l , q l d_l,q_ldl,ql。 - λ l + 1 = λ l + ( ∣ ∣ d l ∣ ∣ ∣ ∣ q l ∣ ∣ ) 2 ( ∣ ∣ d l ∣ ∣ − Δ Δ ) \lambda _{l+1} = \lambda _l + (\frac {||d_l||} {||q_l||})^2 (\frac {||d_l|| - \Delta} {\Delta})λl+1=λl+(∣∣ql∣∣∣∣dl∣∣)2(Δ∣∣dl∣∣−Δ)
- 令l = l + 1 l=l+1l=l+1。转1。
2. 折线方法(Dogleg Method 狗腿法)
上面介绍的信赖域子问题精确求解计算量较大。而且当B + λ ∗ I B+\lambda ^* IB+λ∗I非正定时,子问题的求解较为复杂。
我们考虑非精确求解子问题,下面我们介绍非精确求解信赖域子问题的折线方法。有信赖域子问题知其解d ∗ d^*d∗是信赖域半径Δ \DeltaΔ的函数,记为d ∗ ( Δ ) d^*(\Delta)d∗(Δ)。几何上为一条曲线,称其为最优解曲线。如下图:
折线法的思想是用一条折线代替精确解曲线d ∗ ( Δ ) d^*(\Delta)d∗(Δ)。为了构造合适的折线,首先分析子问题解的特性。若B BB正定且∣ ∣ − B − 1 ∇ f ( x ) ∣ ∣ ≤ Δ ||-B^{-1} \nabla f(x)|| \le \Delta∣∣−B−1∇f(x)∣∣≤Δ,则精确解为:
d ∗ ( Δ ) = − b − 1 ∇ f ( x ) = △ d B d^*(\Delta) = -b^{-1} \nabla f(x) \overset {\bigtriangleup } {=} d^Bd∗(Δ)=−b−1∇f(x)=△dB
否则,我们可作如下分析。当Δ \DeltaΔ很小时,信赖域子问题中目标函数的二次项的作用不大。因此,可用函数f ( x ) f(x)f(x)的一次(线性)近似,此时约束在∣ ∣ d ∣ ∣ ≤ Δ ||d|| \le \Delta∣∣d∣∣≤Δ下,子问题的近似解为d ∗ ( Δ ) ≈ − Δ ∇ f ( x ) ∣ ∣ ∇ f ( x ) ∣ ∣ d^*(\Delta) \approx - \Delta \frac {\nabla f(x)} {||\nabla f(x)||}d∗(Δ)≈−Δ∣∣∇f(x)∣∣∇f(x)。这显示可采用最速下降方向作为解曲线的近似。基于最速下降的考虑和省略信赖域约束,我们取子问题解的形式为d = − τ ∇ f ( x ) d = -\tau \nabla f(x)d=−τ∇f(x)。通过目标函数极小化可确定子问题沿最速下降方向的解为:
d U = − ∇ f ( x ) T f ( x ) ∇ f ( x ) T B ∇ f ( x ) ∇ f ( x ) d^U = - \frac {\nabla f(x)^Tf(x)} {\nabla f(x)^TB\nabla f(x)} \nabla f(x)dU=−∇f(x)TB∇f(x)∇f(x)Tf(x)∇f(x)
另一方面,为了得到收敛性能更好的搜索方向,我们可以选择牛顿方向d B d^BdB。由两方向d U d^UdU和d B d^BdB可分段构造折线搜索方向(如上图)。记由上图方式构造出的折线为d ~ ( τ ) \tilde d(\tau)d~(τ),数学上的定义为:
d ~ ( τ ) = { τ d U , 0 ≤ τ ≤ 1 d U + ( τ − 1 ) ( d B − d U ) , 1 ≤ τ ≤ 2 \tilde d(\tau) = \left\{ \begin{aligned} & \tau d^U ,& 0 \le \tau \le 1\\\\ & d^U + (\tau -1)(d^B - d^U), &1 \le \tau \le 2 \end{aligned} \right.d~(τ)=⎩⎪⎨⎪⎧τdU,dU+(τ−1)(dB−dU),0≤τ≤11≤τ≤2
上式说明当τ \tauτ较小时方向选用最速下降方向d U d^UdU,否则取d U d^UdU和d B d^BdB的组合方向。