一、牛頓法
對於優化函式\(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演算法,
根據自己需要修改。
參考
牛頓法和擬牛頓法