查了很多地方說牛頓法是二階算法,一直沒找到二階項在哪。花了大半天的時間才弄明白。記錄一下。
牛頓法一般應用場景:
- 求方程的根;
- 求解最優化方法;
比如要求的根。
首先,選擇一個接近函數 零點的 ,計算相應的 和切線斜率(這裏表示函數的導數)。然後我們計算穿過點並且斜率爲的直線和 軸的交點的座標,也就是求如下方程的解:
通常x1會比x0更接近方程f (x) = 0的解。因此我們現在可以利用x1開始下一輪迭代。迭代公式可化簡爲如下所示:
已經證明,如果f ’ 是連續的,並且待求的零點x是孤立的,那麼在零點x周圍存在一個區域,只要初始值x0位於這個鄰近區域內,那麼牛頓法必定收斂。 並且,如果f ’ (x)不爲0, 那麼牛頓法將具有平方收斂的性能. 粗略的說,這意味着每迭代一次,牛頓法結果的有效數字將增加一倍。下圖爲一個牛頓法執行過程的例子。
由於牛頓法是基於當前位置的切線來確定下一次的位置,所以牛頓法又被很形象地稱爲是"切線法"。牛頓法的搜索路徑(二維情況)如下圖所示:
牛頓法搜索動態示例圖:
關於牛頓法和梯度下降法的效率對比:
從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全局思想。)
根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
注:紅色的牛頓法的迭代路徑,綠色的是梯度下降法的迭代路徑。
牛頓法的優缺點總結:
優點:二階收斂,收斂速度快;
缺點:牛頓法是一種迭代算法,每一步都需要求解目標函數的Hessian矩陣的逆矩陣,計算比較複雜。
當我們將牛頓法用作優化算法的時候,它就是二階的。
假設我們有一個凸優化問題
也就是說我們要找一個x來最小化f(x)。對於凸優化問題,f(x)的最小值點就是f(x)的極值點,也就是導數爲0的點。那麼我們上面的優化問題就轉換爲了如下的求根問題:
利用牛頓法求解上面的式子,我們先選取初始點x0,然後進行如下迭代
直到
綜上,牛頓法求根是一階算法,我們將優化問題轉爲求根問題需要一階導數,所以用牛頓法進行最優化是二階算法。
參考資料
http://sofasofa.io/forum_main_post.php?postid=1000966
https://www.cnblogs.com/shixiangwan/p/7532830.html