最优化算法【牛顿法、拟牛顿法、BFGS算法】

一、牛顿法

对于优化函数\(f(x)\),在\(x_0\)处泰勒展开,

\[f(x)=f(x_0)+f^{'}(x_0)(x-x_0)+o(\Delta x) \]

去其线性部分,忽略高阶无穷小,令\(f(x) = 0\)得:

\[x=x_0-\frac{f(x_0)}{f^{'}(x_0)} \]

得牛顿法迭代公式:

\[x^{k+1}=x^k-\frac{f(x^k)}{f^{'}(x^k)} \]

对于最优化问题
令导数等于零,得最优解,所以迭代公式为

\[x^{k+1}=x^k-\frac{\nabla f(x^k)}{\frac{\partial^2f(x^k)}{\partial x_i\partial x_j}} \]

即:

\[x^{k+1}=x^k-H_k^{-1}\nabla f(x^k) \]

其中\(H_k\)为Hesse矩阵,表示函数二阶偏导数矩阵
上述方法每次迭代都需要求Hesse矩阵,比较复杂

二、拟牛顿法

解决Hesse矩阵问题
对于优化函数的泰勒展开公式,求导数得:

\[\nabla f(x)=\nabla f(x^k)+H_k(x-x^k) \]

\(y_k=\nabla f(x^{k+1})-\nabla f(x^k)\),\(\delta_k=x^{k+1}-x^k\),则:

\[y_k=H_k\delta_k \]

通过上式,可以依靠之前的\(f(x^k),f(x^{k-1}),x^k,x^{k-1}\)的数据计算Hesse矩阵,具体算法有DFP算法,BFGS算法。

三、L-BFGS算法

由于BFGS算法存在存储数据过多的问题,又提出了L-BFGS算法,来优化存储数据

conclusion

本来打算上述算法逐一实现一下,做到这里,发现上述算法是逐渐优化的关系,L-BFGS算法是最好的版本,因此可以直接网上下载L-BFGS算法,
根据自己需要修改。

参考
牛顿法和拟牛顿法

posted @ 2020-07-31 21:24  ldfm  阅读(1062)  评论(0编辑  收藏  举报