本文参考了[原创]关于 最优化/Optimization 的一些概念解释的基础上加入了一些新东西
参考了牛顿法与拟牛顿法学习笔记中的部分内容
[1]关于 凸
顾名思义,凸就是曲线是一个山谷形状,凹就是曲线是山峰形状。
凸函数是一个凸子集
(区间)上的实值函数 ,如果在其定义域上的任意两点
,以及 ,有也就是说,一个函数是凸的当且仅当其上境图(在函数图像上方的点集)为一个凸集。
如果对于任意的
有,函数
是严格凸的。[2]搜索方向
在最优化领域,我们经常会遇到“在某个方向上进行搜索”的说法,例如,使用共轭方向法来寻找最优解的过程中,我们会在共轭方向上进行搜索,那么,这个“方向”到底指的是什么呢?
对一维空间中的方向,我们可能有一种模糊的概念:就像是面前有一条笔直的路,我们沿着它走下去,想要寻找梦中的那个美丽佳人,但是我们不知道她在哪里,于是只能一边走,一边看,有时步子迈大点,有时步子迈小点。这就是一个“在一维方向上进行搜索”的例子。
然后推广到二维平面上:我们可以先在水平方向上移动一段距离,再在垂直方向上移动一段距离,综合起来看,你就可以在在二维平面上移动到任意的地方了。单独看水平或者垂直方向上你的移动,那就是在一个“方向”上的搜索。
假设有一个函数:
其自变量为 n 维的,即:
我们已知了X的初始点
,现在还有一个实数a,以及一个搜索方向 d (取direction之意),那么,什么才算是在方向 d 上对目标函数的搜索呢?其实就是求函数值:并且判断该函数值是否满足一定的条件(例如,不断地减小),如果不满足,就调整搜索方向,并再次计算、并判断的过程。
有了这个概念,我们就可以在N维空间中,沿某一个方向作搜索(尽管我们在几何上想像不出来>三维的空间是什么样子的,但是这并不影响我们定义它)。
以三维的一个例子说明。设
初始位置为 , ,沿着d方向迈一步,步长为a
+0.5 =可见函数在d方向发生位移a后增大了。若要让函数减小,那么可以沿着d的反方向
进行尝试。
[3]Hessian矩阵
函数的二阶导数矩阵
,通常这样表示因为连续函数的二阶混合偏导数与求导次序无关,所以这个矩阵是对称的。即是说
所以这个矩阵是对称矩阵,行数和列数都是变量的个数 n
[4]线搜索方法
一维搜索,又可以叫线搜索,针对的是单峰区间或单峰函数,每次都是沿着x轴走,用于寻找函数在某一区间之内的极值点。
所谓单峰,顾名思义,你可以在头脑中形成这样一种情景:函数的图形画出来就像一个山峰一样,并且只有一个峰。
但是显然,很多函数并不是单峰的。尽管如此,只要我们确定这个函数在某一区间内是单峰的,那么我们仍然可以使用一维搜索技术来寻找极值点。
[5]信赖域方法
为函数划定一个边界,在这个边界(定义域)内,寻找函数的极值点。
信赖域方法根据一定的原则,直接确定位移 ,同时,与一维搜索不同的是,它并没有先确定搜索方向。如果根据“某种原则”确定的位移能使目标函数值充分下降,则扩大信赖域;若不能使目标函数值充分下降,则缩小信赖域。如此迭代下去,直到收敛。就找到了极值点。
[6]共轭梯度法
共轭方向法是介于最速下降法和牛顿法之间的一种存在——它的收敛速度(二阶收敛)比最速下降法(线性收敛)快,同时它的计算量又比牛顿法要小,因此它的存在是有意义的。
需要注意,共轭方向法可以不使用目标函数的一阶导数信息(当然也可以使用)。所以,如果目标函数的一阶导数不容易求的话,共轭方向法可能就可以派上用场了。
共轭方向法的显著特征就是:两次搜索方向之间是有关联的,这种关联就是“共轭”。
[7]牛顿法
假设
为凸函数且连续二阶可微,那么可以构造以下迭代格式: 来逼近函数的极小值。[8]拟牛顿法
牛顿法虽然收敛速度快,但是计算过程需要计算目标函数的hessian矩阵。不仅计算复杂度大,而且可能因为矩阵不是正定导致牛顿法失效。为了解决这两个问题,拟牛顿法出现了。
基本思想:不计算hessian阵,直接构造出可以近似hessian阵的对称正定阵,在这个条件下求解。涉及的算法包括:DFP算法,BFGS算法,L-BFGS算法。
[9]最速下降法
以负梯度方向作为极小化方法的下降方向的方法。(一句话概括)
[10]最小二乘法
在做数据建模或者曲线拟合的时候,我们通常会用到最小二乘法。假设作为数学模型的函数为
,其中 S 为参数集向量(即一系列的参数), x 为自变量。在这种情况下,为了求出 S ,需要对下式进行极小化:对已知的一个数据集 xi(i=1,2,⋯,n) ,能极小化该式的 S 就是最优参数。
换个角度说,就是要拟合曲线的误差越小越好。
[11]单纯形法
一种解线性规划问题的办法。通过画单纯性表,做矩阵初等行变换,变到最后可能求出最优解,也可能不行。