牛顿、拟牛顿、高斯牛顿、LM迭代法
约束非线性最优化的数值算法大致可以分为 基于梯度的方法和直接搜索方法,基于梯度的方法使用一阶导数 (梯度) 或二阶导数(黑塞(Hessians)矩阵)。通常情况下,算法只建立问题的局部模型。此外,许多这种算法总是寻求目标函数,或者由目标函数和约束条件合成的一个优值函数的某种减小,来确保迭代过程的收敛。如果收敛的话,这种算法只找到局部最优解,因此被称为局部最优化算法。
基本概念
方向导数:函数在自变量的某个方向上的导数。以一个二元函数为例,自变量有x和y,该函数在某一点方向有(x,y)这个向量组成的无穷多个。
梯度:梯度是一个矢量,在这个方向上的方向导数达到最大值。某一点的梯度就是某一点方向导数的最大值,也就是从该点出发函数值变化最剧烈的方向(梯度方向代表增加最快的方向,负梯度方向代表减少最快的方向)。梯度的求法即为该点所有方向的偏导数组成的向量。
Jacobian矩阵:Rn→Rm是一个从欧式n维空间转换到欧式m维空间的函数。(注意理解方式)可以理解为这个函数由m个实函数组成: y1(x1,…,xn), …, ym(x1,…,xn),或者理解为这个函数的输出形式为这样的m维的向量。这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵,这就是所谓的Jacobian矩阵,这个矩阵的第i行是由第i个函数的梯度函数的转置yi(i=1,…,m)表示的。
Hessian矩阵:
对于这样的一个函数:
,Hessian矩阵是它的二阶偏导数组成的方块矩阵。Hessian矩阵只针对一个函数,而不像Jacobian矩阵可以针对一个函数组。
优化思想
我们知道,泰勒公式是为了求解一个复杂的函数在某处附近(x0附近)的近似函数。最常用的是泰勒公式的前两阶展开式。从函数逼近的角度理解
利用上面的两个式子,我们知道,我们可以用x0(x0理解为一个离x很近的数)处的值,去逼近离x0不远的x处的值。也就是说,泰勒公式可以用一个离目标点近处的点,去求大概的目标点的值。
从迭代的角度理解,x可以写成x_k,而 x0可以写成x_k-1,意思就是第k次迭代f(x_k)的值,可以由不远处第k-1次迭代时候f(x_k-1)的值逼近而来
迭代方法
最速下降法(一阶梯度法)——用梯度直接当Δx
顾名思义,我们是每次找一个函数值下降最快的方向,不断更新x的值,最终下降到最优值。
我们给一个函数f(x)我们要求f(x)的最小值,我们需要打破初等数学学习的函数的概念,认识到f(x)可能是一个1à1的函数,也可能是Nà1的函数。
但对于解优化的问题,f(x)不可能是NàM的函数,原因在于如果输出是一个M维的向量,我们没办法定义输出的最值,所以必须输出是一个标量数字,我们这个问题才可以解。
我们已经讨论了,给定一点,该点下降最快的方向,就是反梯度的方向,而梯度的求法我们之前已经给出。所以,下一个逼近的x的值应该是:
其中α是步长,决定了每次迭代需要往反梯度方向走多远。当f是多元函数时,梯度用Jacobian矩阵来表示。
牛顿迭代法
在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f&#