franciscochonge 发表于 2022-2-21 16:55

Notes: Nonlinear Programming

1 优化漫谈

优化问题是现实问题的数学抽象。通常情况下,我们有很多想做的事情,比如发很多论文,挣很多钱。清晰一点说,我们是想要去完成一些目标。我们与这个世界进行交互,不断采取行动,尽可能接近目标。但是我们能够采取的行动是受限的,例如一天没有25小时,一秒钟不能打一万字。将采取的行动抽象为决策变量,将行动所受到的限制抽象为约束条件 https://www.zhihu.com/equation?tex=x%5Cin+X ,将想要完成的目标抽象为目标函数,便得到了优化问题:

https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D+%5Cmin%26~~~f%28x%29%5C%5C+%5Ctext%7Bs.t.%7D+%26~~~x%5Cin+X+%5Cend%7Balign%7D
我们该怎么得到更好的,甚至最好的呢?这要取决于目标函数的性质,可行集的形状。如果性质比较糟糕,我们在选择时只能用到本身,此时的优化方法称为零阶优化方法。零阶优化使用非常广泛,网格搜索、模拟退火算法、遗传算法、粒子群算法等均属此类,暂且按下不表。如果我们能很方便地求解出的梯度,我们就能沿着负梯度方向不断前进,从而不断求得更好的,这称为一阶优化方法,当今大火的神经网络在训练时往往采用这种方法。当然,如果我们能求得的更多信息,比如的Hessian矩阵(由二阶偏导数构成的矩阵),便有可能更快地到达最优解。值得一提的是,如果我们已知二阶可微,即使我们无法求得,依然有可能通过一阶信息估计二阶信息,进而更快地求解。总之,的性质越好,我们能够得到的信息越多,我们便能更好的求解。当然,可行集作用不容忽视。如果被限定为离散值(如整数、0-1变量),此时的问题称为组合优化问题。著名的组合优化问题比如旅行商问题、背包问题、Hamiltonian路径问题,这些问题被证明是NP完全问题,相当难求解。组合优化也是非常广阔的一片大陆,暂且按下不表。
在这篇笔记中,主要以“具有一些性质”的,和“形状比较好”的为研究对象, 以著名学者Bertisekas著《Nonlinear Programming》为参考,记录一些优化方法及其性质。
2 无约束优化

2.1 最优解存在性的充分条件

我们先考虑没有约束条件的情况,即 https://www.zhihu.com/equation?tex=%5Cmin~f%28x%29 。但在此之前,有个很关键的问题,那就是什么时候我们能求得 https://www.zhihu.com/equation?tex=f%28x%29 的最小值?Weierstrass定理给出了最优解存在性的一个充分条件。
Weierstrass 定理:令为的非空子集,令 https://www.zhihu.com/equation?tex=f%3AX%5Cmapsto+%5Cmathbb%7BR%7D 在所有点上下半连续(函数值不大于函数极限)。若是紧集,或是闭集且是强制的,则在上的最小值集是非空且紧的。
注意该定理并不需要假设函数连续,只需要下半连续。这是因为下半连续已经能够保证我们能在任何一个可能的极限点取得最小值,而不会出现邻域函数值在趋于极限点时趋于最小值,而极限点对应函数值反而更大的情况。而关于的要求保证了极限点一定能取到,不会出现在集合边界或者趋于无穷的情况。
2.2 最优性条件

当我们明确解的存在性之后,能够判断一个解是否是最优解,是求解优化问题的前提。如果可微,局部最优性的一阶必要条件为,如果二阶可微,局部最优性的二阶必要条件为 https://www.zhihu.com/equation?tex=%5Cnabla%5E2f%28x%29 半正定。注意这并不是充分条件,当是凸函数时一阶必要条件同时也是充分条件。如果是凸函数但不可微,一阶充要条件为 https://www.zhihu.com/equation?tex=0%5Cin+%5Cpartial+f%28x%29 ,即在点处,水平面为一个次梯度,其余点处的函数值都在水平面上方。
当优化问题具有约束时,最优性条件不仅非常有意义,而且非常有意思,且看下文表述。
2.3 强凸函数的良好性质

如果函数的性质很好,我们就能从当前解中得到关于最优解的信息。例如当 https://www.zhihu.com/equation?tex=f+ 满足时,我们可以得到:

https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7B2M%7D%5C%7C%5Cnabla+f%28x%29%5C%7C%5E2%5Cle+f%28x%29-f%28x%5E%2A%29%5Cle%5Cfrac%7B1%7D%7B2m%7D%5C%7C%5Cnabla+f%28x%29%5C%7C%5E2

https://www.zhihu.com/equation?tex=%5Cfrac%7Bm%7D%7B2%7D%5C%7Cx-x%5E%2A%5C%7C%5E2%5Cle+f%28x%29-f%28x%5E%2A%29%5Cle+%5Cfrac%7BM%7D%7B2%7D%5C%7Cx-x%5E%2A%5C%7C%5E2
这意味着从当前的梯度可以推知当前函数值与最优函数值之间的距离,进而推知当前解与最优解的距离。
证明:将在点处Taylor展开到:

https://www.zhihu.com/equation?tex=f%28x%5E%2A%29%3Df%28x%29%2B%5Cnabla+f%28x%29%28x%5E%2A-x%29%2B%28x%5E%2A-x%29%5Cnabla%5E2f%28%5Ctilde+x%29%28x%5E%2A-x%29
根据,所以:

https://www.zhihu.com/equation?tex=%5Cnabla+f%28x%29%28x%5E%2A-x%29%2Bm%5C%7Cx-x%5E%2A%5C%7C%5E2%5Cle+f%28x%5E%2A%29-f%28x%29%5Cle+%5Cnabla+f%28x%29%28x%5E%2A-x%29%2BM%5C%7Cx-x%5E%2A%5C%7C%5E2
根据二次函数的性质,我们知道:

https://www.zhihu.com/equation?tex=%5Cmin_y+%5C%7B%5Cnabla%5E%5Ctop+%28y-x%29%2B%5Cfrac%7B%5Calpha%7D%7B2%7D%5C%7Cy-x%5C%7C%5E2%5C%7D%3D-%5Cfrac%7B1%7D%7B2%5Calpha%7D%5C%7C%5Cnabla%5C%7C%5E2
从而可以得到第一个式子。第二个式子则将在点处Taylor展开到:

https://www.zhihu.com/equation?tex=f%28x%29%3Df%28x%5E%2A%29%2B%28x-x%5E%2A%29%5Cnabla%5E2f%28%5Ctilde+x%29%28x-x%5E%2A%29
进而根据得到。
2.3 最速下降方法

很多情况下,我们并不能直接求解,这时候我们可以通过迭代的方式进行求解。令人欣慰的是,我们知道梯度信息,当我们沿着负梯度方向前进适当距离时,函数值会下降,我们或许更接近最优解了。最简单的梯度下降形式为:

https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3Dx_k-%5Calpha_k+%5Cnabla+f%28x_k%29
其中 https://www.zhihu.com/equation?tex=%5Calpha_k 是步长,步长的选取很有学问,可以选取常数步长,衰减步长等。也可以通过搜索的方式确定步长,如精确搜索,或者可以降低计算量,采用大名鼎鼎的Armijo规则、Goldstein规则搜索。一般来说,函数的性质越好,相同收敛性和收敛速度下,对步长的要求越少。
在此介绍Armijo规则,其搜索想要达到的目标是不断增大非负整数,寻找到第一个使得如下式子成立:

https://www.zhihu.com/equation?tex=f%28x_k%2B%5Cbeta%5Em+s+d_k%29%5Cle+f%28x_k%29+%2B%5Csigma+%5Cbeta%5Ems%5Cnabla+f%28x_k%29%5E%5Ctop+d_k
其中 https://www.zhihu.com/equation?tex=%5Csigma 和 https://www.zhihu.com/equation?tex=%5Cbeta 是设定的参数,是搜索方向。当步长选取非常小时,基本上按照梯度的斜率下降。但这个式子的含义是,没必要要求那么苛刻,我们设置一个 https://www.zhihu.com/equation?tex=%5Csigma%5Cin%280%2C1%29 的“宽容因子”。牺牲了下降的斜率,但是换来了更大的步子。通常情况下,需要权衡这两者,以取得较快的下降速度。
2.4 牛顿法

在梯度下降方法中,我们很难不去问这样一个问题,沿着负梯度方向是真的时下降最快的方向吗?如果我们知道二阶信息,能不能更快地迭代呢?牛顿法正是通过来修正负梯度方向 https://www.zhihu.com/equation?tex=-%5Cnabla+f ,进而实现更快地收敛速度。其迭代方式为:

https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3Dx_k-%5Calpha_k+%28%5Cnabla%5E2+f%28x_k%29%29%5E%7B-1%7D%5Cnabla+f%28x_k%29
当函数为二次型时,该式起到的效果是将负梯度方向修正为指向最优解的方向。因此一个函数如果比较接近二次型,比如当二阶连续可微的函数在局部最优解附近时,将会大大加快收敛速度。
牛顿法虽然能更快收敛,但其计算量代价不容忽视。当决策变量维度较高时,Hessian矩阵的计算和求逆需要很大计算量,甚至复杂到没办法计算。这时候可以使用牛顿法的变种,比如:

https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3Dx_k-%5Calpha_k+%5Cbegin%7Bpmatrix%7D++%2A+%26+0+%26+%5Ccdots+%26+0%5C%5C++0+%26+%2A+%26+%5Ccdots+%26+0%5C%5C++%5Cvdots+%26+%5Cvdots+%26+%5Cddots+%26+%5Cvdots%5C%5C++0+%26+0+%26+%5Ccdots+%26%2A+%5Cend%7Bpmatrix%7D+%5E%7B-1%7D%5Cnabla+f%28x_k%29

https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3Dx_k-%5Calpha_k+%28%5Cnabla%5E2+f%28x_0%29%29%5E%7B-1%7D%5Cnabla+f%28x_k%29
或者通过其他方式进行估计:

https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3Dx_k-%5Calpha_k+%5B%5Ctext%7Bapproximation+of+%7D%28%5Cnabla%5E2+f%28x_0%29%29%5E%7B-1%7D%5D%5Cnabla+f%28x_k%29
2.4 共轭梯度法

与最速下降方法不同,共轭梯度法的思路并不是每次沿着“最速”的方向前进,而是找到一系列共轭的方向,依次沿着这些方向前进。共轭方向是被精心挑选的,使得对于二次型函数,依次沿着这些方向精确搜索后,就能够得到最优解。也就是说,每次优化的方向都已经“优化完了”,在该方向上到达了最优解。虽说共轭梯度法从二次型推导而来,但它在非二次型函数上也可以有很好的收敛性能。
共轭方向 https://www.zhihu.com/equation?tex=d_i 需要满足如下“Q-共轭”性质:

https://www.zhihu.com/equation?tex=d_i%5E%5Ctop+Qd_j%3D0
从这个式子可以轻易推导出共轭方向一定是线性无关的,因此具有n个共轭方向。
若对于二次型 https://www.zhihu.com/equation?tex=f%28x%29%3Dx%5E%5Ctop+Qx%2Bb%5E%5Ctop+x ,每次步长搜索都是精确搜索:

https://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%28x_%7Bk%2B1%7D%2B%5Calpha+d_i%29%7D%7B%5Cpartial+%5Calpha%7D%3D0
那么有 https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3D%7B%5Carg%5Cmin%7D_%7Bx%5Cin+x_0+%2B+%5Cbm%7B%5Cmathrm%7Bspan%7D%7D%5C%7Bd_0%2C%5Ccdots%2Cd_k%5C%7D%7Df%28x%29 ,也就是说每次沿着新共轭方向优化,不会影响已经优化好的方向。
共轭方向可以从一系列梯度 https://www.zhihu.com/equation?tex=g_k 中使用Schmidt正交化生成:

https://www.zhihu.com/equation?tex=d_k%3D-g_k%2B%5Csum_%7Bj%3D0%7D%5E%7Bk-1%7D%5Cfrac%7Bg_k%5E%5Ctop+Q+d_j%7D%7Bd_j%5E%5Ctop+Q+d_j%7Dd_j , https://www.zhihu.com/equation?tex=d_0%3D-g_0
这个式子可以写成迭代的形式,方便求解:

https://www.zhihu.com/equation?tex=d_k%3D-g_k%2B%5Cbeta_k+d_%7Bk-1%7D , https://www.zhihu.com/equation?tex=%5Cbeta_k%3D%5Cfrac%7Bg_k%5E%5Ctop+g_k%7D%7Bg_%7Bk-1%7D%5E%5Ctop+g_%7Bk-1%7D%7D
3 约束优化

通常我们遇到的优化问题都是具有约束的,因此接下来在无约束优化的基础上,探讨如何在具有约束的情况下进行优化。
3.1 梯度投影法

最简单的思路是,仍然按照无约束优化的算法优化,一旦当前解出了可行集,就把它弄回去。这种方法称为梯度投影法,即下面两步交替进行:

https://www.zhihu.com/equation?tex=%5Ctilde+x_%7Bk%2B1%7D%3Dx_k-%5Calpha_k+d_k

https://www.zhihu.com/equation?tex=x_%7Bk%2B1%7D%3D%5Carg%5Cmin_%7By%5Cin+C%7D%5C%7Cx-y%5C%7C
这里要求 https://www.zhihu.com/equation?tex=C 是凸集,此时投影是存在(由Weiestrass定理)且唯一(由反证法和凸集定义)的。
3.2 条件梯度法

相比首先考虑最优性迭代的梯度投影法不同,条件梯度法的思路首先考虑约束。条件梯度法的思路是寻找可行方向,进而在可行方向上优化,找到可行集合中沿可行方向最远的点。将负梯度方向作为可行方向(如果负梯度方向不可行,此时已经是局部最优解),构建如下具有线性目标函数的子优化问题:

https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D+%5Cmin_x%26~~~%5Cnabla+f%28x_k%29%5E%5Ctop%28x-x_k%29%5C%5C+%5Ctext%7Bs.t.%7D+%26~~~x%5Cin+C+%5Cend%7Balign%7D
如果约束条件比较简单(如线性约束),此时子优化问题将很容易求解(线性规划),这是条件梯度法的好处之一。
3.3 拉格朗日橘子定理

对于函数 https://www.zhihu.com/equation?tex=f%2Ch 连续可微、优化问题具有等式约束的情况,拉格朗日乘子定理给出了最优解的必要条件。
拉格朗日乘子定理:若是可微函数在的条件下的局部最小值点,假设约束的梯度 https://www.zhihu.com/equation?tex=%5Cnabla+h_1%28x%5E%2A%29%2C%5Ccdots%2C%5Cnabla+h_m%28x%5E%2A%29 线性无关(正则性),则存在唯一的拉格朗日乘子使得:

https://www.zhihu.com/equation?tex=%5Cnabla+f%28x%5E%2A%29%2B%5Csum_%7Bi%3D1%7D%5Em%5Clambda_i%5E%2A+%5Cnabla+h_i%28x%5E%2A%29%3D0
并且如果函数二次可微,在 https://www.zhihu.com/equation?tex=%5C%7By%7C%5Cnabla+h_i%28x%5E%2A%29%5E%5Ctop+y%3D0%2Ci%3D1%2C%5Ccdots%2Cm%5C%7D 上有:

https://www.zhihu.com/equation?tex=%5Cnabla%5E2+f%28x%5E%2A%29%2B%5Csum_%7Bi%3D1%7D%5Em%5Clambda_i%5E%2A+%5Cnabla%5E2+h_i%28x%5E%2A%29%5Cge0
该定理可以通过惩罚方法证明,证明过程中可以得到的显式表达式:

https://www.zhihu.com/equation?tex=%5Clambda%5E%2A%3D-%5Cleft%28%5Cnabla+h%28x%5E%2A%29%5E%5Ctop+%5Cnabla+h%28x%5E%2A%29%5Cright%29%5E%7B-1%7D%5Cnabla+h%28x%5E%2A%29%5E%5Ctop%5Cnabla+f%28x%5E%2A%29
求逆的部分解释了为什么得到唯一拉格朗日乘子要求正则性。
3.4 KKT最优性条件

KKT条件推广了拉格朗日方法,对于函数 https://www.zhihu.com/equation?tex=f%2Ch%2Cg 连续可微、优化问题具有等式约束和不等式约束 https://www.zhihu.com/equation?tex=g%28x%29%5Cle0 的情况,给出了最优解的必要条件。
Karush-Kuhn-Tucker最优性必要条件:若是函数在的条件下的局部最小值点,假设约束的梯度 https://www.zhihu.com/equation?tex=%5Cnabla+h_1%28x%5E%2A%29%2C%5Ccdots%2C%5Cnabla+h_m%28x%5E%2A%29%2C%5Cnabla+g_i%28x%5E%2A%29%2C+i%5Cin%5C%7Bi%7Cg_i%28x%5E%2A%29%3D0%5C%7D 线性无关(正则性),则存在唯一的拉格朗日乘子使得:

https://www.zhihu.com/equation?tex=%5Cnabla+f%28x%5E%2A%29+%2B%5Csum_%7Bi%3D1%7D%5Em%5Clambda_i%5E%2A+%5Cnabla+h_i%28x%5E%2A%29+%2B%5Csum_%7Bi%3D1%7D%5Er%5Cmu_i%5E%2A+%5Cnabla+g_i%28x%5E%2A%29+%3D0
其中。对于,。
3.5 FJ最优性条件

FJ条件推广了KKT条件,对于非正则的情况,给出了最优解的必要条件。
Fritz John最优性必要条件:若是函数在的条件下的局部最小值点,则存在标量 https://www.zhihu.com/equation?tex=%5Cmu_0%5E%2A 和乘子使得:

https://www.zhihu.com/equation?tex=%5Cmu_0%5E%2A%5Cnabla+f%28x%5E%2A%29+%2B%5Csum_%7Bi%3D1%7D%5Em%5Clambda_i%5E%2A+%5Cnabla+h_i%28x%5E%2A%29+%2B%5Csum_%7Bi%3D1%7D%5Er%5Cmu_i%5E%2A+%5Cnabla+g_i%28x%5E%2A%29+%3D0
其中。对于,。 https://www.zhihu.com/equation?tex=%5Cmu_0%5E%2A%2C%5Clambda%5E%2A%2C%5Cmu%5E%2A+ 不全为零。
FJ条件较为通用,我们可以通过函数的性质,从FJ条件推出KKT条件,从而得到更强的必要条件。
3.6 从FJ条件到KKT条件

如下几种情况均能够使得FJ条件加强为KKT条件:

[*] 是线性函数,且是凹函数。
[*]Mangasarian-Fromovitz条件: https://www.zhihu.com/equation?tex=%5Cnabla+h_i%28x%5E%2A%29 线性无关,且存在向量 https://www.zhihu.com/equation?tex=d ,使得 https://www.zhihu.com/equation?tex=d%5E%5Ctop%5Cnabla+h_i%28x%5E%2A%29%3D0 ,对于有 https://www.zhihu.com/equation?tex=d%5E%5Ctop%5Cnabla+g_i%28x%5E%2A%29%3C0 。
[*]Slater条件:是线性函数,是凸函数,且存在对于有 https://www.zhihu.com/equation?tex=g_i%28x%29%3C0 。

xiangtingsl 发表于 2022-2-21 17:04

拉格朗日橘子定理

zt3ff3n 发表于 2022-2-21 17:09

反正不是橙子定理[飙泪笑]
页: [1]
查看完整版本: Notes: Nonlinear Programming