一、牛顿法
对于优化函数(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{
abla f(x^k)}{frac{partial^2f(x^k)}{partial x_ipartial x_j}}
]
即:
[x^{k+1}=x^k-H_k^{-1}
abla f(x^k)
]
其中(H_k)为Hesse矩阵,表示函数二阶偏导数矩阵
上述方法每次迭代都需要求Hesse矩阵,比较复杂
二、拟牛顿法
解决Hesse矩阵问题
对于优化函数的泰勒展开公式,求导数得:
[
abla f(x)=
abla f(x^k)+H_k(x-x^k)
]
令(y_k= abla f(x^{k+1})- abla f(x^k)),(delta_k=x^{k+1}-x^k),则:
[y_k=H_kdelta_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算法,
根据自己需要修改。
参考
牛顿法和拟牛顿法