牛顿法和拟牛顿法是求解无约束最优化的常用方法,牛顿法是迭代算法,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算比较复杂,拟牛顿法通过正定矩阵近似海赛矩阵的逆矩阵或海赛矩阵,简化了这一过程。
泰勒公式
在看牛顿法之前先看一下泰勒展开:
泰勒公式一句话描述:就是用多项式函数去逼近光滑函数
泰勒公式是将一个在
x=x0
处具有n阶导数的函数
f(x)
利用关于
(x−x0)
的n次多项式来逼近函数的方法。
若函数
f(x)
在包含
x0
的某个闭区间[a,b]上具有n阶导数,且在开区间(a,b)上具有(n+1)阶导数,则对闭区间[a,b]上任意一点x,成立下式:
其中, 表示
f(x)
的n阶导数,等号后的多项式称为函数f(x)在
x0
处的泰勒展开式,剩余的
Rn(x)
是泰勒公式的余项,是
(x−x0)n
的高阶无穷小。
如果
a=0
的话,就是麦克劳伦公式:
其组成部分是由幂函数和相应的系数组成,其中的幂函数其实只有两种形态,一种是关于 Y 轴对称,一种是关于原点对称,并且指数越大,增长速度越大。
那幂函数组成的多项式函数有什么特点呢?各幂函数加上相应的系数,通过改变系数,多项式可以像铁丝一样弯成任意的函数曲线。
eg:用多项式对 ex 进行逼近
ex=1+x+12!x2+⋯+1n!xn+Rn(x)
增加一个 \frac{1}{4!}x^4 看看
增加一个 \frac{1}{5!}x^5 看看
可以看出, 1n!xn 不断的弯曲着那根多项式形成的铁丝去逼近 ex 。并且 n 越大,起作用的区域距离0越远。
但还有一个例子我觉得有必要说一下:
用多项式对
sin(x)=x−13!x3+⋯+(−1)n(2n+1)!x(2n+1)+Rn(x)
同样的,我们再增加一个 17!x7 试试
可以看到 17!x7 在适当的位置,改变了 4x−13!x3+15!x5 的弯曲方向,最终让 x−13!x3+15!x5−17!x7 更好的逼近了 sin(x)
参考:
牛顿法
五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论,但牛顿法可以求出近似解。
要讲牛顿迭代法之前我们先说一个关键问题:切线是曲线的线性逼近。
下面是
f(x)=x2
的图像
放大切点处,看看
再放大切点处,看看
可以看出放大之后切线和f(x)非常接近了。很明显,如果我们进一步放大图像,A点切线就越接近f(x)。
现在可以引入牛顿法了:
随便找一个曲线上的A点(为什么随便找,根据切线是切点附近的曲线的近似,应该在根点附近找,但是很显然我们现在还不知道根点在哪里),做一个切线,切线的根(就是和x轴的交点)与曲线的根,还有一定的距离。此时从这个切线的根出发,做一根垂线,和曲线相交于B点,继续上面的步骤:
经过多次迭代后,很明显越来越接近曲线的根了(但只会更接近根),此时称为迭代收敛了。
牛顿法的代数解法:当曲线方程为
f(x)
,我们在
xn
点做切线,求
xn+1
:
此时容易得出,
xn
点的切线方程为:
f(xn)+f′(xn)(x−xn)
要求
xn+1
,即相当于求
f(xn)+f′(xn)(x−xn)=0
的解,即
f(xn)+f′(xn)(xn+1−xn)=0⟹
:
xn+1=xn−f(xn)f′(xn)
但还有一些形式的函数是不收敛的,所以要注意以下问题:
- 函数在整个定义域内最好是二阶可导的
- 注意起始点的选择
牛顿法的基本思想是:在现有极小点估计值的附近对
f(x)
做二阶泰勒展开,进而找到极小点的下一个估计值。设
xk
为当前的极小点估计值,则:
对于N>1的情形,二阶泰勒展开式可以做推广,此时
注意,
同样的,由于是求极小点,极值必要条件 要求它为
φ(X)
的驻点,即
当目标函数是二次函数时,由于二次泰勒展开函数与原目标函数不是近似而是完全相同的二次式,海森矩阵退化为一个常数矩阵,从任一初始点出发,只需一步迭代即可达到极小点,因此牛顿法是一种具有二次收敛的算法。对于非二次函数,若函数的二次性态较强,或迭代点已进入极小点的邻域,则其收敛速度也是很快的。
参考: