最优化学习笔记1——关于拟牛顿法推导

本文深入探讨了最优化中的拟牛顿法,介绍了从牛顿法的局限出发,如何通过BFGS和DFP校正构建搜索方向。详细阐述了BFGS和DFP更新法则的矩阵递推关系,以及它们之间的对偶性。此外,还解释了DFP校正作为优化问题的最优解性质。

从2020年3月份到现在,一年的时间里断断续续自学最优化,结合豆瓣读书、知乎等网站上的推荐,翻阅了以下书和课程:

  • Stephen Boyd和Lieven Vandenberghe的《Convex Optimization》,这本书被公认为学习凸优化的必读经典著作,其中大量的篇幅讲应用,讲理论和算法的篇幅稍少一些。在B网站上有Boyd的视频课程,油管上也有,不过只有英文字幕,如果是零基础接触,直接看Boyd的视频稍显费劲,B站上也有凌青老师以《Convex Optimization》为教材的讲解,推荐作为入门观看;
  • Jorge Nocedal和Stephen J. Wright的《Numerical Optimization》,这本书更多地介绍最优化算法,在算法层面和《Convex Optimization》正好形成互补;
  • B站上崔雪婷老师的最优化课程(貌似是因为疫情原因录制的),综合了《Convex Optimization》、《Numerical Optimization》等教材的内容,推导非常详细,推荐观看,崔老师自己也写了一本书《最优化基础理论与方法》,书很薄,适合快速入门(貌似B站上的视频已经被删掉了)。

关于最优化的书和课程非常多,其他书和课程包括但不限于:

  • Dimitri P. Bertsekas的《Nonlinear Programming》(作者比较苦口婆心,内容详尽)
  • Yurii Nesterov的《Lectures On Convex Optimization》,被誉为思路很巧妙,不过目前没有细读,所以也没有体会到
  • Aharon Ben-Taly和Arkadi Nemirovski的《Lectures On Modern Convex Optimization》,主要作为课程的配套讲义
  • B站上方述诚老师的非线性规划课(只有讲义,没有对应的教材,方述诚老师另有关于线性锥优化方面的专著)
  • David G. Luenberger和Yinyu Ye的《Linear and Nonlinear Programming》
  • Mokhtar S. Bazaraa,Hanif D. Sherali和C. M. Shetty的《Nonlinear Programming Theory and Algorithms》
  • 袁亚湘和孙文瑜的《最优化理论与方法》,毕竟是院士的著作,国产为数不多的关于最优化的好书

侧重于应用方面的有:

  • Andreas Antoniou和Wu-Sheng Lu的《Practical Optimization: Algorithms and Engineering Applications》,侧重介绍具有工程实用性的算法
  • Lorenz T. Biegler的《Nonlinear programming: Concepts, Algorithms, and Applications to Chemical Processes》,虽然书中是以化工过程的优化举例,但是也同样适用于其他动态优化(或者最优控制)问题

值得一提的是,最优化和控制学科里面的最优控制联系紧密,是最优控制中直接法的数学理论基石,除了上述Lorenz T. Biegler的著作涉及最优控制外,侧重于最优控制求解的还有:

  • John T. Betts的《Practical methods for optimal control and estimation using nonlinear programming》
  • S´ebastien Gros和Moritz Diehl的《Numerical Optimal Control》(与课程对应的讲义,科学上网可以看到视频,可惜没有配套字幕)。

个人觉得,上述这些著作全部看完不必要也不现实,应该先选择1至2本入门,然后根据自己的研究需要选读。

扯完前面的废话,谈谈拟牛顿法,主要参考《Numerical Optimization》中的内容,根据第3章的描述,拟牛顿法最开始主要用于克服牛顿法计算无约束优化问题中的搜索方向的不足(有无约束和拟牛顿的思想没有太大关系)。以线搜索为例(对于信赖域法类似),我们想要
min⁡xf(x)(1) \min_x f(x)\tag{1} xminf(x)(1)

的方式是通过下述迭代过程:
xk+1=xk+αkpk(2) x_{k+1}=x_k+\alpha _kp_k\tag{2} xk+1=xk+αkpk(2)

式中:αk\alpha _kαk为步长,pkp_kpk为搜索方向。

这里不考虑步长αk\alpha _kαk的选取,下面主要考虑搜索方向pkp_kpk的选取。首先看牛顿法,需要求f(x)f(x)f(x)对应的Hessian矩阵∇2f\nabla ^2f2f,给出的搜索方向为
pk=−∇2fk−1∇fk(3) p_k=-\nabla ^2f_{k}^{-1}\nabla f_k\tag{3} pk=2fk1fk(3)

式中:∇2fk−1\nabla ^2f_{k}^{-1}2fk1∇2fk\nabla ^2f_k2fk的逆矩阵,考虑到∇2fk−1\nabla ^2f_{k}^{-1}2fk1并不容易计算,拟牛顿法提出用下式代替牛顿法的搜索方向:
pk=−Bk−1∇fk(4) p_k=-B_{k}^{-1}\nabla f_k\tag{4} pk=Bk1fk(4)

式中:BkB_kBk一般选为对称正定矩阵,若能够直接获得BkB_kBk的计算方式,那么就免去了求Hessian矩阵的繁琐工作。那么如何得到BkB_kBk呢?

1. 拟牛顿法中的割线方程推导

考虑到牛顿法其实可以从对目标函数的二阶近似获得,即考虑在当前解xkx_kxk附近对目标函数的二阶近似:
mk(p)=fk+∇fkTp+12pT∇2fkp(5) m_k(p)=f_k+\nabla f_{k}^{\mathrm{T}}p+\frac{1}{2}p^{\mathrm{T}}\nabla ^2f_kp\tag{5} mk(p)=fk+fkTp+21pT2fkp(5)
式中:p=x−xkp=x-x_kp=xxk。选择ppp使得式(5)中的目标函数取极值,就得到了牛顿法的公式,那么一个自然的想法是,式(4)可看作是使得下述目标函数取极值:
mk(p)=fk+∇fkTp+12pTBkp(6) m_k(p)=f_k+\nabla f_{k}^{\mathrm{T}}p+\frac{1}{2}p^{\mathrm{T}}B_kp\tag{6} mk(p)=fk+fkTp+21pTBkp(6)

即用对称正定矩阵BkB_kBk代替Hessian矩阵∇2fk\nabla ^2f_k2fk。由于直接获得BkB_kBk的表达式不太容易,转而考虑迭代计算BkB_kBk,即需要推导Bk+1B_{k+1}Bk+1BkB_kBk的关系,根据式(6),到了xk+1x_{k+1}xk+1附近时,有
mk+1(p)=fk+1+∇fk+1Tp+12pTBk+1p(7) m_{k+1}(p)=f_{k+1}+\nabla f_{k+1}^{\mathrm{T}}p+\frac{1}{2}p^{\mathrm{T}}B_{k+1}p\tag{7} mk+1(p)=fk+1+fk+1Tp+21pTBk+1p(7)

式中:p=x−xk+1p=x-x_{k+1}p=xxk+1。根据式(7),若p=0p=0p=0,即停留在xk+1x_{k+1}xk+1时,有∇mk+1(0)=∇fk+1\nabla m_{k+1}(0)=\nabla f_{k+1}mk+1(0)=fk+1,于是想到后退到xkx_kxk(对应p=−αkpkp=-\alpha _kp_kp=αkpk)时,mk+1m_{k+1}mk+1的梯度应与∇fk\nabla f_kfk相等(即mk+1m_{k+1}mk+1应能保证从xkx_kxkxk+1x_{k+1}xk+1的过程中对∇f\nabla ff足够近似),从而有
∇mk+1(−αkpk)=∇fk+1−αkBk+1pk=∇fk(8) \nabla m_{k+1}(-\alpha _kp_k)=\nabla f_{k+1}-\alpha _kB_{k+1}p_k=\nabla f_k\tag{8} mk+1(αkpk)=fk+1αkBk+1pk=fk(8)
也即
Bk+1αkpk=∇fk+1−∇fk(9) B_{k+1}\alpha _kp_k=\nabla f_{k+1}-\nabla f_k\tag{9} Bk+1αkpk=fk+1fk(9)

定义sk=xk+1−xk=αkpks_k=x_{k+1}-x_k=\alpha _kp_ksk=xk+1xk=αkpk, yk=∇fk+1−∇fky_k=\nabla f_{k+1}-\nabla f_kyk=fk+1fk,则式(9)可写为
Bk+1sk=yk(10) B_{k+1}s_k=y_k\tag{10} Bk+1sk=yk(10)

式(10)又称为割线方程(secant equation)。令Hk=Bk−1H_k=B_{k}^{-1}Hk=Bk1,则有互补形式的割线方程:
Hk+1yk=sk(11) H_{k+1}y_k=s_k\tag{11} Hk+1yk=sk(11)

另一方面,式(8)也可这么理解(参考《最优化理论与方法》),即直接考虑以xxx为自变量(而不是引入额外的变量ppp):
f(x)≈f(xk+1)+∇fk+1(x−xk+1)+12(x−xk+1)TBk+1(x−xk+1)(12) f(x)\approx f(x_{k+1})+\nabla f_{k+1}(x-x_{k+1})+\frac{1}{2}(x-x_{k+1})^{\mathrm{T}}B_{k+1}(x-x_{k+1})\tag{12} f(x)f(xk+1)+fk+1(xxk+1)+21(xxk+1)TBk+1(xxk+1)(12)

对上式两边求导,有
∇f(x)≈∇fk+1+Bk+1(x−xk+1)(13) \nabla f(x)\approx \nabla f_{k+1}+B_{k+1}(x-x_{k+1})\tag{13} f(x)fk+1+Bk+1(xxk+1)(13)

上式中令x=xkx=x_kx=xk即可得到式(8)。

2.拟牛顿法中的矩阵递推

拟牛顿法中的矩阵递推关系具有比较强的构造痕迹,典型的方法包括秩一和秩二校正。在介绍具体内容之前,首先引入矩阵求逆的Sherman–Morrison公式:对于非奇异方阵AAA,设Aˉ=A+abT\bar{A}=A+ab^{\mathrm{T}}Aˉ=A+abT,其中a,b∈Rna,b\in \mathbb{R} ^na,bRn,若Aˉ\bar{A}Aˉ非奇异,则有
Aˉ−1=A−1−A−1abTA−11+bTA−1a(14) \bar{A}^{-1}=A^{-1}-\frac{A^{-1}ab^{\mathrm{T}}A^{-1}}{1+b^{\mathrm{T}}A^{-1}a}\tag{14} Aˉ1=A11+bTA1aA1abTA1(14)

2.1 秩一校正

为了保证对称性,首先考虑构造如下关系(秩一校正):
Bk+1=Bk+σvvT(15)B_{k+1}=B_k+\sigma vv^{\mathrm{T}}\tag{15}Bk+1=Bk+σvvT(15)

式中:σ\sigmaσ取值为111或者−1-11,且选择σ\sigmaσvvv使得Bk+1B_{k+1}Bk+1满足割线方程(10),于是有
yk=Bksk+[σvTsk]v⇒[σvTsk]v=yk−Bksk(16)y_k=B_ks_k+\left[ \sigma v^{\mathrm{T}}s_k \right] v\Rightarrow \left[ \sigma v^{\mathrm{T}}s_k \right] v=y_k-B_ks_k\tag{16}yk=Bksk+[σvTsk]v[σvTsk]v=ykBksk(16)

由于σvTsk\sigma v^{\mathrm{T}}s_kσvTsk为标量,因此vvv必定为yk−Bksky_k-B_ks_kykBksk的倍数,即存在标量δ\deltaδ使得v=δ(yk−Bksk)v=\delta\left( y_k-B_ks_k \right)v=δ(ykBksk),则有
yk−Bksk=σδ2[skT(yk−Bksk)](yk−Bksk)(17)y_k-B_ks_k=\sigma \delta ^2\left[ s_{k}^{\mathrm{T}}\left( y_k-B_ks_k \right) \right] \left( y_k-B_ks_k \right)\tag{17}ykBksk=σδ2[skT(ykBksk)](ykBksk)(17)

为确保上式成立,可选取
σ=sign[skT(yk−Bksk)],δ=±∣skT(yk−Bksk)∣−12(18)\sigma =\mathrm{sign}\left[ s_{k}^{\mathrm{T}}\left( y_k-B_ks_k \right) \right] , \delta =\pm \left| s_{k}^{\mathrm{T}}\left( y_k-B_ks_k \right) \right|^{-\frac{1}{2}}\tag{18}σ=sign[skT(ykBksk)],δ=±skT(ykBksk)21(18)

v=±∣skT(yk−Bksk)∣−12(yk−Bksk)v=\pm \left| s_{k}^{\mathrm{T}}\left( y_k-B_ks_k \right) \right|^{-\frac{1}{2}}\left( y_k-B_ks_k \right)v=±skT(ykBksk)21(ykBksk),结合式(15)和(18)可得
Bk+1=Bk+σvvT=Bk+sign[skT(yk−Bksk)]×∣skT(yk−Bksk)∣−1(yk−Bksk)(yk−Bksk)T=Bk+(yk−Bksk)(yk−Bksk)T(yk−Bksk)Tsk(19) \begin{aligned} B_{k+1}&=B_k+\sigma vv^{\mathrm{T}}\\ &=B_k+\mathrm{sign}\left[ s_{k}^{\mathrm{T}}\left( y_k-B_ks_k \right) \right] \times \left| s_{k}^{\mathrm{T}}\left( y_k-B_ks_k \right) \right|^{-1}\left( y_k-B_ks_k \right) \left( y_k-B_ks_k \right) ^{\mathrm{T}}\\ &=B_k+\frac{\left( y_k-B_ks_k \right) \left( y_k-B_ks_k \right) ^{\mathrm{T}}}{\left( y_k-B_ks_k \right) ^{\mathrm{T}}s_k} \end{aligned}\tag{19}Bk+1=Bk+σvvT=Bk+sign[skT(ykBksk)]×skT(ykBksk)1(ykBksk)(ykBksk)T=Bk+(ykBksk)Tsk(ykBksk)(ykBksk)T(19)

根据式(19),取a=yk−Bksk(yk−Bksk)Tska=\frac{y_k-B_ks_k}{\left( y_k-B_ks_k \right) ^{\mathrm{T}}s_k}a=(ykBksk)TskykBksk  b=yk−Bksk\,\,b=y_k-B_ks_kb=ykBksk,且考虑到HkH_kHkBkB_kBk为互逆关系,且均为对称矩阵,则由Sherman–Morrison公式(14)有
Hk+1=Hk−Hkyk−Bksk(yk−Bksk)Tsk(yk−Bksk)THk1+(yk−Bksk)THkyk−Bksk(yk−Bksk)Tsk=Hk−(Hkyk−sk)(Hkyk−sk)T(yk−Bksk)Tsk+(yk−Bksk)T(Hkyk−sk)=Hk+(sk−Hkyk)(sk−Hkyk)T−(yk−Bksk)Tsk+(sk−Hkyk)T(yk−Bksk)(20) \begin{aligned} H_{k+1}&=H_k-\frac{H_k\frac{y_k-B_ks_k}{\left( y_k-B_ks_k \right) ^{\mathrm{T}}s_k}\left( y_k-B_ks_k \right) ^{\mathrm{T}}H_k}{1+\left( y_k-B_ks_k \right) ^{\mathrm{T}}H_k\frac{y_k-B_ks_k}{\left( y_k-B_ks_k \right) ^{\mathrm{T}}s_k}}\\ &=H_k-\frac{\left( H_ky_k-s_k \right) \left( H_ky_k-s_k \right) ^{\mathrm{T}}}{\left( y_k-B_ks_k \right) ^{\mathrm{T}}s_k+\left( y_k-B_ks_k \right) ^{\mathrm{T}}\left( H_ky_k-s_k \right)}\\ &=H_k+\frac{\left( s_k-H_ky_k \right) \left( s_k-H_ky_k \right) ^{\mathrm{T}}}{-\left( y_k-B_ks_k \right) ^{\mathrm{T}}s_k+\left( s_k-H_ky_k \right) ^{\mathrm{T}}\left( y_k-B_ks_k \right)} \end{aligned}\tag{20}Hk+1=Hk1+(ykBksk)THk(ykBksk)TskykBkskHk(ykBksk)TskykBksk(ykBksk)THk=Hk(ykBksk)Tsk+(ykBksk)T(Hkyksk)(Hkyksk)(H

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值