牛顿法

牛顿法和拟牛顿法是求解无约束最优化的常用方法,牛顿法是迭代算法,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算比较复杂,拟牛顿法通过正定矩阵近似海赛矩阵的逆矩阵或海赛矩阵,简化了这一过程。

泰勒公式

在看牛顿法之前先看一下泰勒展开:
泰勒公式一句话描述:就是用多项式函数去逼近光滑函数

泰勒公式是将一个在x=x0处具有n阶导数的函数f(x)利用关于(xx0)的n次多项式来逼近函数的方法。
若函数f(x)在包含x0的某个闭区间[a,b]上具有n阶导数,且在开区间(a,b)上具有(n+1)阶导数,则对闭区间[a,b]上任意一点x,成立下式:
牛顿法

其中, 表示f(x)的n阶导数,等号后的多项式称为函数f(x)在x0处的泰勒展开式,剩余的Rn(x)是泰勒公式的余项,是(xx0)n的高阶无穷小。
如果 a=0的话,就是麦克劳伦公式:

f(x)=n=0Nf(n)(0)n!xn+Rn(x)

其组成部分是由幂函数和相应的系数组成,其中的幂函数其实只有两种形态,一种是关于 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) 进行逼近:

sin(x)=x13!x3++(1)n(2n+1)!x(2n+1)+Rn(x)

牛顿法

同样的,我们再增加一个 17!x7 试试

牛顿法

可以看到17!x7 在适当的位置,改变了 4x13!x3+15!x5 的弯曲方向,最终让x13!x3+15!x517!x7更好的逼近了sin(x)

牛顿法

参考:

http://www.matongxue.com/madocs/7.html#/madoc

牛顿法

五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论,但牛顿法可以求出近似解。

要讲牛顿迭代法之前我们先说一个关键问题:切线是曲线的线性逼近。

下面是 f(x)=x2 的图像
牛顿法

放大切点处,看看
牛顿法

再放大切点处,看看
牛顿法

可以看出放大之后切线和f(x)非常接近了。很明显,如果我们进一步放大图像,A点切线就越接近f(x)。

现在可以引入牛顿法了:
随便找一个曲线上的A点(为什么随便找,根据切线是切点附近的曲线的近似,应该在根点附近找,但是很显然我们现在还不知道根点在哪里),做一个切线,切线的根(就是和x轴的交点)与曲线的根,还有一定的距离。此时从这个切线的根出发,做一根垂线,和曲线相交于B点,继续上面的步骤:
牛顿法

牛顿法

牛顿法

经过多次迭代后,很明显越来越接近曲线的根了(但只会更接近根),此时称为迭代收敛了。

牛顿法的代数解法:当曲线方程为f(x) ,我们在xn点做切线,求xn+1
此时容易得出,xn点的切线方程为:f(xn)+f(xn)(xxn)要求xn+1,即相当于求f(xn)+f(xn)(xxn)=0的解,即f(xn)+f(xn)(xn+1xn)=0: xn+1=xnf(xn)f(xn)

但还有一些形式的函数是不收敛的,所以要注意以下问题:

  • 函数在整个定义域内最好是二阶可导的
  • 注意起始点的选择

牛顿法的基本思想是:在现有极小点估计值的附近对f(x)做二阶泰勒展开,进而找到极小点的下一个估计值。设xk为当前的极小点估计值,则:

φ(x)=f(xk)+f(xk)(xxk)+12f′′(xk)(xxk)2
表示f(x)xk附近的二阶泰勒展开式(略去了关于xxk的高阶项),由于求的是最值,由极值必要条件可知,φ(x)应满足
φ(x)=0
f(xk)+f′′(xk)(xxk)=0
从而得到
x=xkf(xk)f′′(xk)
于是,若给定初始值x0,则可以构造如下的迭代格式
xk+1=xkf(xk)f′′(xk),k=0,1....
可通过产生序列{xk}来逼近f(x)的极小点.在一定条件下,{xk}可以收敛到f(x)的极小点。
对于N>1的情形,二阶泰勒展开式可以做推广,此时
φ(X)=f(Xk)+f(Xk)(XXk)+12(XXk)T2f(Xk)(XXk)
其中ff的梯度向量,2ff的海森矩阵,其定义如下:

牛顿法

注意,f2f中的元素均为关于X的函数,以下简记为gH.特别是若f的混合偏导数可交换次序,则海森矩阵为对称矩阵。而f(Xk)2f(Xk)则表示将X取为xk后得到的实值向量和矩阵,以下分别将其简记为gkHk
同样的,由于是求极小点,极值必要条件 要求它为φ(X)的驻点,即

φ(X)=0
通过在上式中两边作用一个梯度算子,得到:
gk+Hk(XXk)=0
此时若矩阵Hk非奇异,可解得
X=XkH1kgk
若给定初始值X0,则可同样构造出迭代格式
Xk+1=XkH1kgk
这就是牛顿迭代法,其迭代格式中的搜索方向为H1kgk称为牛顿方向。

当目标函数是二次函数时,由于二次泰勒展开函数与原目标函数不是近似而是完全相同的二次式,海森矩阵退化为一个常数矩阵,从任一初始点出发,只需一步迭代即可达到极小点,因此牛顿法是一种具有二次收敛的算法。对于非二次函数,若函数的二次性态较强,或迭代点已进入极小点的邻域,则其收敛速度也是很快的。

参考:

http://blog.****.net/itplus/article/details/21896453

拟牛顿法