梯度下降和牛頓迭代
數值優化會經常遇到。網上搜了搜發現各大神已經總結的非常完美了。自己就手動推一遍牛頓迭代的公式好了,當作複習。
梯度下降和牛頓迭代主要做的事情就兩步
1、 找到搜尋的方向,
2、 迭代的步長
引子:
我們很多問題最後都會歸結到要尋找乙個凸函式的極值點,比如:
那麼怎麼才能找到極值點?
我們先拿乙個一維的曲線來舉例,怎麼找到極值點
首先我們所學的高等數學告訴我們導數為0的地方就是極值點。
那麼問題來了,當我們在x=x(k)的時候,怎樣才能得到極值點,很顯然我們需要兩步,一、找到極值點所在的方向,二、向極值點前進一小步。
梯度下降:
下降方向:負的梯度方向
牛頓法:
牛頓法公式推導:
說牛頓法要先說乙個重要的公式泰勒公式
其中h就為我們所需要求的海塞矩陣,公式10即為剛剛我們得出的下降方向和步長
擬牛頓法:
擬牛頓法的本質在用x和一階導數以及已知的海塞矩陣來近似計算當前的海塞矩陣,其中dfs,bfgs法是我們常見的。
dfs演算法:
公式推導如下分為秩一矯正和秩二矯正。
bfgs演算法:
如下圖推導,其實bfgs的推導只是把dfs中的qk和pk對換。
雖然得到了bfgs的迭代公式,可是還是矩陣相乘太多,於是我們用到sherman-morrison公式:
進行變換,可得
l-bfgs演算法:
l-bfgs的含義為limited-memory bfgs。
在bfgs演算法中,每次都要儲存近似hesse矩陣,在高維資料時,儲存h浪費很多的儲存空間,因此出現了l-bfgs演算法,顧名思義即用有限的記憶體實現bfgs。在l-bfgs演算法中,只儲存最近的 次迭代資訊,以降低資料的儲存空間。並且向量序列只儲存最新的m步即可。m由使用者自己決定,這樣h的儲存由原來的o(n*n)將到o(m*n)
引用:
這裡還有兩篇部落格寫的不錯
牛頓迭代與梯度下降
牛頓迭代法 newton s method 又稱為牛頓 拉夫遜 拉弗森 方法 newton raphson method 它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。首先牛頓法是求解函式值為0時的自變數取值的方法。利用牛頓法求解目標函式的最小值其實是轉化成求使目標函式的一階導為...
梯度下降法和牛頓下降法
泰勒公式可以表示為 f boldsymbol boldsymbol f boldsymbol boldsymbol boldsymbol frac boldsymbol boldsymbol boldsymbol o boldsymbol tag 在 2 中 boldsymbol x 1,x n b...
梯度下降 牛頓法
為什麼牛頓法比梯度下降法的迭代次數更少?a 牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。通俗來說梯度下降法每次只從你當前所處位置選乙個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,...