方程求根
最简单的方程求根的问题可以描述为求令
二分法
二分法是基于数学上根的存在性的条件,即若
二分法在区间取值正确的情况下能够保证线性收敛,但是其缺点也很明显,就是收敛速度太慢了。对于选的比较宽的初始区间需要非常多次迭代才能够达到较为理想的精度。
不动点迭代
这个过程比起二分法更加简单,若方程
不动点迭代方法也是线性收敛的,但是对于函数
牛顿法
对于函数
这个过程写成迭代的
线性方程组求解
求解线性方程组即
这里的矩阵范数一般取无穷范数。其实际意义为参数
以下列举的是线性方程组的数值求解方法,其中高斯消元法等用于对小规模线性方程组求解,而迭代法则适用于系数矩阵
高斯消元法与LU分解
高斯消元法的基本思想与手工解线性方程组是完全一样的,即对n条方程消去其中某条方程的前n-1个未知数,从而求解第n个未知数,这样原来n个未知数的线性方程组变为n-1个未知数的线性方程组,重复上述消元步骤直至方程组的n个未知数完全被求解。矩阵形式下可以看作是消去矩阵
再用第二行中第二列之后的系数进行同样的操作消去第二列的系数,最后从矩阵最后一行往上回代可逐个求解出
LU分解则是把上述对系数矩阵
高斯消元法与LU分解的方法计算复杂度较高,但是相比于真正意义上的数值算法,它求解的更加像是方程组的“解析解”,即能够用符号直接代表求解出的
迭代法
首先迭代法中首先最基础的是Jacobi迭代法。Jacobi迭代法可以认为是不动点迭代法的线性多元求解版本。在给定初始解条件下,每条方程改写为用
与不动点迭代法一样,上述迭代法也存在收敛条件,收敛条件为系数矩阵
由于Jacobi迭代法存在收敛较慢的问题,其改进的方法有Gauss-Seidel法和逐次超松弛法(SOR)法。Gauss-Seidel法将每一步迭代的第i个未知数的结果代入后面n-1个未知数中,即Jacobi迭代法是经历一轮迭代后再更新迭代式中的
逐次超松弛法(SOR)在Gauss-Seidel法的基础上增加了对上一次的值的加权平均,即对方程组中的其中一个未知数
其中
无约束极值优化
最小二乘法
作为最简单的求解极值方法,最小二乘法能够给出
若
线搜索算法
线搜索指的是一类通过求解每次下降所需要的方向和距离,得到作用在自变量上迭代的步长。简单来讲就是可以写成
在满足该准则的
梯度下降法
如果对函数
令
这就是梯度下降法(Gradient-Descent Method)的表达式,部分写法可能将梯度归一化与预设参数
梯度下降法作为一种简单的迭代数值方法被广泛用于包括机器学习的各种优化问题中。对其主要的改进包括动量法(简单来讲就是对每一步迭代的梯度进行一阶低通滤波,提高其稳定性),以及上面提到的参数
共轭梯度法
共轭梯度法(Conjugate Gradient,CG)主要用于求解由对称矩阵
对其求导并且令导数为0可得极值点满足
共轭梯度法与梯度下降法十分类似,首先考虑在给定第k步线搜索方向
当
而如果考虑上下降方向的问题,可以直接设定
不过这个正交化的过程需要储存之前所有步的下降方向矢量,这又增加了储存空间。实际共轭梯度法中是选择残差
共轭梯度法的一种改进是,通过方程
高斯牛顿法
按照线搜索的基本思想,即找到一个能够使得下降最大的步长
对函数
其中
上面提到过,这类最小二乘法一般是有显式解的,在
使用
矩阵D一般取
针对较大步长一阶近似不精确的问题,L-M法引入信赖域算法解决,即直接在原目标优化问题上增加约束,限制每一步的步长大小
至于如何求解带约束的优化问题,在后面一节“有约束极值优化”将会提到。
牛顿法
牛顿法求极值实际上相当于求方程
其中我们一般称
阻尼牛顿法
阻尼牛顿法可以看作是缩减步长的牛顿法。它为步长增加系数,确保每步都是沿优化方向单调(即符合Armijo准则)。令
当然比较典型的做法应该是不需要设定衰减的参数
拟牛顿法
针对Hession矩阵的逆直接求解难的问题,拟牛顿法(Quasi-Newton Method)系列的思路是通过间接的方法估计Hession矩阵替代掉二阶导数。对梯度进行泰勒展开可得
拟牛顿法的关键在于如何通过
信赖域算法
将优化问题拆分为一块局部区域上的优化问题,这块小区域就是所谓信赖域。对于某些非线性函数来讲,通常其数学表示在全局上可能时非常困难的,而在局部小范围内是非常有可能表示为一个线性或者二次型的优化问题,这就可以利用上面提到的几种方法来完成子问题的优化。而且这样简化之后问题的求解难度大大降低了,单个步长的求解速度也会有所提升。上面提到的带约束的高斯牛顿法可以算作是一种信赖域优化算法。但是与高斯牛顿法不同的是通常我们会利用函数的二阶泰勒展开,即对于优化问题
对上述式子求导并令其等于0可以得到到达极值点步长满足的方程
有约束极值优化
非线性约束优化问题可以说是不限于线性的通例,可以表示为以下形式
显然对于上面两种约束,等式约束是对问题的降维,可以认为是规定了
以上这些是对产生极值的必要条件,即Karush-Kuhn-Tucker(KKT)条件的基本解释。等式约束可以使用Lagrange乘数法转化为一个无约束非线性优化问题,而无约束优化就可以采用上述提到的一系列方法计算。对于不等式约束仍需通过KKT条件简化后讨论是否可能作为等式约束加入优化过程中。对于上述问题,定义Lagrange函数为
其KKT条件可以表示为
其中第二三式可以认为是分别对Lagrange函数的
上面提到的KKT条件用于给出一般的非线性约束的优化问题的极值条件,这样至少可以在数值上验证其为最值并且指导相应优化算法的思路。下面列举一些常用的用于用于求解非线性约束的优化问题的算法,大部分主要针对的是等式约束的优化(不等式约束的优化可以通过有效集法转化为等式约束的优化)
投影梯度法
这个方法是用于求解线性等式或不等式约束的优化。其过程可以理解为在没有走出边界时采用梯度下降法优化,碰到边界或者落在在边界上是将迭代方向中垂直边界的分量去除,或者说将梯度投影到边界上,达到“贴着边界”走的优化。对于约束
二次规划
二次规划可以说是经典的二次型等式约束优化问题,其数学表示为
其中
分别对
通常将两个等式写成一个大矩阵的形式即
一般上述矩阵的规模都比较大,可以通过上述无约束优化方法中的如共轭梯度法等方式可以求解该方程。对于矩阵Q为正定矩阵的二次规划目标而言,如果存在满足上述条件的局部最优点那么它也是全局最优点,即二次规划中全局最优点只有一个。
有效集法(Active-Set)
有效集法,或者叫做积极集法,是通过判断不等式约束中哪些可以作为有效的等式约束进行优化,在不断迭代中找到有效的等式约束。具体的思路是:给定不等式约束中生效的约束作为初始有效集,先用求解等式约束的优化算法计算出极值点,然后验证该结果是否满足KKT条件。对于优化结果违反的不等式约束,将其作为等式约束加入有效集中,同时调整步长距离使得优化结果满足该约束;而对于计算出Lagrange乘数小于0对应的等式约束,可以认为该等式约束是错误的,将其从有效集中移除。调整有效集后再进行用Lagrange乘数法+无约束极值优化算法计算,重复直至算法收敛。上述过程用流程图表示为
可见有效集法思路是将不等式约束转化为等式约束,再用等式约束的优化算法迭代求解。不过这个算法需要给定一个满足约束条件的初始解,求解初始解仍然绕不开求解不等式约束。
序列二次规划法(SQP)
对于上述非线性约束优化问题,如果只考虑等式约束,其Lagrange函数为
要求解极值点即为Lagrange函数导数为0的解,即求解方程
完全展开为等式之后可以发现第一行的等式中两边
如果参考二次规划(QC)问题的求解式,将每个矩阵表达式里的参数一一对应的,话我们发现实际上这个过程也是在求解一个如下的QC问题
将上述非线性的优化过程的每一步转化为一个QC子问题,这就是序列二次规划法(SQP)的核心。优化的目标函数并不是对原始函数的二阶近似,非要说的话也是对Lagrange函数的二阶近似。其迭代的思想虽然也是将整个非线性优化问题拆分为每一步优化的求解,但是其本质是牛顿法对Lagrange函数的迭代而不是“增加了约束的高斯牛顿法”。
SQP能够解决方向求解的问题,但在实践中都和其他算法组合使用,例如增加线搜索调整步长距离,使用BFGS计算Hession矩阵
罚函数法
也被称作障碍函数法,将上述的等式和不等式约束的优化转化为无约束优化的一种方法。其思路是将违反约束作为惩罚加到目标函数上,让约束本身也作为最小化优化的目标之一。这样虽然求解上等效于无约束问题,但是软化了约束条件,同时由于罚函数的影响算法不一定能够精确地收敛至原函数的极值点上。
增广拉格朗日法
可以认为增广拉格朗日法罚函数法+拉格朗日法,它在原来Lagrange函数上增加了约束的二次项作为罚函数。若只考虑非线性约束优化问题中的等式约束,待优化的Lagrange函数写为
每次迭代除了逐渐增大惩罚参数
数值积分方法
用于求解微分方程,或者说已知某点的微分求整条轨迹。数值计算总是离散的,因此积分方法也必须是基于离散值的积分。设
前向/后向欧拉积分
前向欧拉积分表示为
后向欧拉积分表示为
后向欧拉积分的
龙格库塔法(Runge-Kutta,RK法)
参考
- Timothy Sauer - Numerical Analysis(Third Edition)
- Quadratic Programming Algorithms - MATLAB
- Unconstrained Nonlinear Optimization Algorithms - MATLAB
- Jonathan Richard Shewchuk - An Introduction to the Conjugate Gradient Method Without the Agonizing Pain
- Constrained Nonlinear Optimization Algorithms - MATLAB