最优化算法【牛顿法、拟牛顿法、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算法,
根据自己需要修改。
参考
牛顿法和拟牛顿法