最優化演算法【牛頓法、擬牛頓法、BFGS演算法】

有點鋒芒發表於2020-07-31

一、牛頓法

對於優化函式\(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演算法,
根據自己需要修改。

參考
牛頓法和擬牛頓法

相關文章