第九章:一维搜索
这章其实和上一章有异曲同工之妙,找极值点在小范围内其实就是导函数的零点。进退算法通过值的变大变小找区间这种思想在第八章实际上就是找到fa<0,fb>0,确定[a,b]区间。区间消去法这边提到的黄金分割法其实还挺神奇的,事实上你算好第一次的x1,x2后,之后的每一次都会满足新的x1+x2=a+b所以后续都是加减法,不用再乘什么0.618了(不过还是注意精度问题,毕竟每次都有舍入误差了)。这种想法你说在数值求根时可以用吗,我觉得也是可以的,同样那边的二分法这里也是可以用的。当然这边有种独特的方法叫做抛物线法,确定好三个点时直接插值个抛物线然后把抛物线的极小值点做新的区间点如此往复。
第十章:无约束非线性问题的求解
本章和上一章的区别在于把问题往多维空间延申了,大部分解析思想还是差不多的,就是导数可能都是矩阵表示了(不要看不懂了),还有也就是因为多维延申每次求导数对计算机要求太高,会牺牲一点速度采用一些算法。
在最速下降法这里有些同学可能会有点懵这些椭圆是什么,为什么这么走(我说我自己)。怎么说呢,最速下降法每次移动的方向(导数)都是这个瞬时最快的方向(但只是局部的),然后在这个方向上移动试图寻找到最小值。如果是一维的话那么无论怎样都可以一步到位,因为我们移动的t的维度就可以满足横坐标的改变了,此时求得的最小值也就是全局的最小值。但是如果自变量有两个那就未必了,你的t只有一个维度但是自变量却有两个维度。举个简单的例子,假设某个函数的极小值点是(0,0),我们的初始位置是(5,4),用求导法知道(5,4)这个点沿着(1,1)这个方向下降最快,我们沿这个方向能找到一个最小值点,但是很显然我们最终只能找到很接近的(1,0)点或者(0,-1)点,但是是永远到不了(0,0)点的(等于说我们知找到这个截面上最小值,一个截面就是一维情况了,这时也是肯定能找到的)。但如果我们沿着(1,0.8)下降虽然看起来刚开始可能慢了,但这个方向却是一次可以找到最小值的方向。假设这时最小值点是(1,0),再在这个局部找到(-1,1)这个方向,也很显然我们还是到不了(0,0),也许这次是(1/2,-1/2),这也是第一个点,刚开始下降比较快,后面可能会越来越慢。不过如果我们换一个点(15,10),这时候假设刚好求得导数方向是(3,2),那这下我们反而一次可以到位了,这是第二个点,搜索的次数也可能和初始的起点有关。另外,我们每次都是按照最优的想法去的,再用前面的例子,第一次实际上我们最后取了当时的最优步数4,这时每个的最优步数都是需要计算的,我们也可以固定步数为2,则这样我们从(5,4)这个点到(3,2),如果这时候梯度是(1.5,1)(当然实际可能性几乎没有),那么我们第二次就到了,这也说明局部最优未必全局最优。
回到最优步数的那个方法最速下降法,有个结论是相邻的两个搜索方向是垂直的(空间垂直),这个先丢一个证明吧
直观理解就是如果每一次搜索方向的终点都已经是这个方向的最小值的,如果两次搜索不垂直,那么下一次搜索路线一定可以分解为垂直前一次的和沿着前一次的,这时就会有沿着前一次搜索方向的分量了,但是我们刚刚说了前一次搜索已经是到最小值的,所以沿着前一次的搜索分量为0,所以两次搜索路线是垂直的。
牛顿法看着挺复杂,还有啥Hesse矩阵,不过如果对比着一维的牛顿法对比实际上是一样的(不过因为是求最小值所以实际上是导数的牛顿法和一维一致)。虽然这边有转置,有逆什么的,计算归计算,但是理解起来就是平方的表示以及在分母的表示罢了,对照着就每那么难理解了。
但是这个和最速下降比没有t的参数,其实算一种固定步长1,如果我们考虑t,算出最优步长,就有了沿牛顿方向的一维搜索最优步长修正牛顿法。考虑到最速下降法开始时效果显著,而快到最小值点附近很慢,所以有了结合最速下降法和牛顿法的Marquart法。
我们最后再看看共轭方向法(此处参考CSDN,作者:小小何先生无约束最优化(二) 共轭方向法与共轭梯度法_小小何先生的博客-CSDN博客_共轭方向法) 之前文章最速下降法、Newton法、修正Newton法介绍的最速下降法存在锯齿现象,Newton法需要计算目标函数的二阶导数。接下来介绍的共轭方向法是介于最速下降法和Newton法之间的一种方法,它克服了最速下降法的锯齿现象,从而提高了收敛速度;它的迭代公式也比较简单,不必计算目标函数的二阶导数,与Newton法相比,减少了计算量和存储量。它是比较实用而有效的最优化方法。
我们先将其在正定二次函数上研究,然后再把算法用到更一般的目标函数上。首先考虑二维的情形。