【Optimization in Operations Research 运筹学】牛顿法、高斯牛顿法、拟牛顿法与BFGS与为什么H要正定牛顿法亮点与弊端

1|0牛顿法

F(x+Δx)=F(x)+F(x)Δx+12F(x)Δx2
泰勒展开之后保留二次项
然后对展开式再进行求导 令导数等于0 直接得到前进的步长和方向 即Hx=b这里的x就是牛顿法求解的前进步长和方向。

1|0如何理解呢?

Δx之后得到的解析式再对x进行求导 得到导数等于0 则必然是一个极值点 因此此次前进的Δx是直接奔着下一次的结果的极值点方向去的

1|0为什么H要至少半正定?

F(x+Δx)=F(x)+F(x)Δx+12F(x)Δx2
展开后一次导数为0(因为至少要是极值点 一阶导数必为0)
F(x)Δx=0

任选一个Δx保证泰勒展开后原函数 + 0 + 二次项,中的二次项必须大于0,这样F(x+Δx)才会大于f(x)此时就是任意前进Δx,都会使得F(x)变大,我们的目的是变小。
F(x+Δx)=F(x)+0+12F(x)Δx2>F(x)

2|0高斯牛顿法

牛顿法直接对目标函数进行展开,而高斯牛顿法是先对里面f展开,然后再展开求导。
f(x+Δx)f(x)+J(x)Δx

12f(x)+J(x)Δx2=12(f(x)+J(x)Δx)T(f(x)+J(x)Δx)=12(f(x)22+2f(x)TJ(x)Δx+ΔxTJ(x)TJ(x)Δx)

然后将上式对Δx求导,且导数为0:

2J(x)Tf(x)+2J(x)TJ(x)Δx=0

随后得到:

J(x)TJ(x)Δx=J(x)Tf(x).

3|0拟牛顿法与BFGS

拟牛顿法解决了牛顿法迭代失败,对初始值要求高的问题。其中BFGS方法显著有效。

牛顿法的结果:

2f(x(t))Δx=f(x(t))

将二次求导结果逆过去:

Δx=2f(x(t))1f(x(t))

Dt即为优化的方向:

Δx(t+1)=Dtf(x(t))

然后理解一下二阶导数的性质:

f(x(t+1))f(x(t))2f(x(t))(x(t+1)x(t))

2f(x(t))1(f(x(t+1))f(x(t)))x(t+1)x(t)

上述两个式子可以重写一下:

Dt+1g=d

dx(t+1)x(t)

gf(x(t+1))f(x(t))

BFGS公式认为Dt初始值为单位阵,最大化问题为负的单位阵。然后随着迭代,Dt会随着下面的公式进行更新。

Dt+1Dt+(1+gDtgdg)ddTdgDtgdT+dgTDtdg

实际迭代过程类似于牛顿法,只是在当前求解最优Δx后,x更新前进,随后需要更新一下Dt,然后迭代次数+1,进入下次迭代。


__EOF__

本文作者铃灵狗的水墨书香
本文链接https://www.cnblogs.com/linglingdog/p/17913229.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   铃灵狗  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示