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