牛顿法求最优步长,什么是最优步长( 二 )


收敛快是牛顿迭代法最大的优点 , 但也有致命的缺点:Hesse矩阵及其逆的求解计算量大 , 更何况在某个迭代点Xk处Hesse矩阵的逆可能根本就不存在(即Hesse矩阵奇异) , 这样无法求得Xk+1 。
拟牛顿法
Hesse矩阵在拟牛顿法中是不计算的 , 拟牛顿法是构造与Hesse矩阵相似的正定矩阵 , 这个构造方法 , 使用了目标函数的梯度(一阶导数)信息和两个点的“位移”(Xk-Xk-1)来实现 。有人会说 , 是不是用Hesse矩阵的近似矩阵来代替Hesse矩阵 , 会导致求解效果变差呢?事实上 , 效果反而通常会变好 。
拟牛顿法与牛顿法的迭代过程一样 , 仅仅是各个Hesse矩阵的求解方法不一样 。
在远离极小值点处 , Hesse矩阵一般不能保证正定 , 使得目标函数值不降反升 。而拟牛顿法可以使目标函数值沿下降方向走下去 , 并且到了最后 , 在极小值点附近 , 可使构造出来的矩阵与Hesse矩阵“很像”了 , 这样 , 拟牛顿法也会具有牛顿法的二阶收敛性 。
对目标函数f(X)做二阶泰勒展开:
两边对X求导
当X=Xi时 , 有
这里我们用Hi来代表在点Xi处的Hesse矩阵的逆 , 则
(5)式就是拟牛顿方程 。
下面给出拟牛顿法中的一种--DFP法 。

我们希望Hi+1在Hi的基础上加一个修正来得到:
给定Ei的一种形式:
m和n均为实数 , v和w均为N维向量 。
(6)(7)联合起来代入(5)可得:
下面再给一种拟牛顿法--BFGS算法 。
(8)式中黑色的部分就是DFP算法 , 红色部分是BFGS比DFP多出来的部分 。
BFGS算法不仅具有二次收敛性 , 而且只有初始矩阵对称正定 , 则BFGS修正公式所产生的矩阵Hk也是对称正定的 , 且Hk不易变为奇异 , 因此BFGS比DFP具有更好的数值稳定性 。
请问你知道梯度下降法和牛顿法吗? 我想知道为什么牛顿法下降的速度比梯度下降的快

牛顿法求最优步长,什么是最优步长

文章插图
梯度法是从初值开始按照负梯度方向一步一步走 , 确定方向、确定步长、再确定方向、再确定步长......只顾眼前情况 , 大局观念差~
牛顿法是令目标函数梯度等于零 , 直接解方程 , 求方向 , 目的就是一步就跨到最优解 , 只不过由于求解是近似的 , 导致这一步走得不太准 , 还需要在迭代 , 但是已经能说明目标观念很强了~
牛顿迭代法求一个方程的解 MATLAB
牛顿法求最优步长,什么是最优步长

文章插图
m=0;%起始点
e=0.00001;%精度
h=0.000001;%步长
f=inline('1-y-2*sin(y+3)','y'); %x=1,c=2,k=3代入具体数值
t=0;
f0=feval(f,m);
f2=feval(f,m+h);
f1=feval(f,m-h);
n=m-2*h*f0/(f2-f1);
while abs(1-m/n)>e
m=n;
f0=feval(f,m);
f2=feval(f,m+h);
f1=feval(f,m-h);
n=m-2*h*f0/(f2-f1);
t=t+1;
if t>999
break
end
end
if t==1000
disp('没找到方程的根!')
else
disp(m);%方程的解
end
【牛顿法求最优步长,什么是最优步长】