優化器 牛頓法總結

2022-03-13 13:03:24 字數 1610 閱讀 8947

---這裡記錄下一些關於牛頓法來作為優化器的個人筆記 :)

關於牛頓法,先不說其中的概念,來簡單看乙個例子? 不用計算器,如何手動開乙個值的平方根,比如計算 ? 不用程式和**如何求?

----比較簡單有木有,直接上用公式來套就好了.

xt = ( xt-1 + ( a / xt-1 ) ) / 2

我們看 sqrt(4) 這個值的區間在1<=sqrt(4)<=4裡,寫成這種形式吧[1,4],我們令x0 = 1,

x = ( 1 + (4/1))/2 = 5/2 =2.5

x = (2.5 + (4/2.5))/2 = 2.05

x = (2.05 + ( 4 /2.05 ))/2 = 2.0006 

於是我們就求出x的近似值為2

那麼這個公式是如何得來的呢?

這個公式其實是依據牛頓法得來的?牛頓法長成什麼樣子呢?

就是長成這個樣子,我們發現這個樣子和我們的sgd還是很像的,這兩者的區別記錄在後面吧~。

而牛頓迭代法,這個公式其實就是泰勒級數展開的前幾項 f(x),並使得f(x) =0,求解後的結果,而泰勒級數是採用無限項的來等價表示乙個函式,比如:

,那牛頓法採用的是泰勒級數的前幾項 -- 有限的項,來近似表示乙個函式f(x).

那麼如何上面這個公式是如何通過牛頓法得到的呢?

上面的題,我們將其轉換車更加通用的一些,比如改為如何求解sqrt(a)? 

------這又等價於sqrt(a)=x  轉換成-->  x^2 = a , (a 屬於實數域),  進一步轉換成--->f(x) = x^2 -a =0

我們知道 f(x) = x^2 - a =0 ,因為只要求某乙個點的值,所以我們只需要知道這個點的切線就可以了, 由此我們依據泰勒級數定義,對其進行一階展開,可以知道 f(x) ~g(x) =  f(x0) + f ' (x0)*(x - x0),我們令g(x)=0

於是我們就得到了 x = x0 - f(x0) / f '(x0);

然後我們再次化解這個公式:

x = x0 - (x0^2 - a / 2x0 )  = (x0^2 + a) /2x0  = (x0 + a/x0)/2

這樣我們就得到了最開始的那個公式了。

但是我們在用牛頓法作為優化器的時候,是要求極小值的啊? 那麼如何快速的求出極小值呢?

我們知道一階導,為曲線切線方向,二階導為切線的切線方向回想一下sgd法,sgd只是在一階導上,進行權值更新,基本上就是處於求切線方向,前進乙個步長,然後再矯正,再求當前點的切線,再矯正:

這種方式就會出現綠線的情況,那麼牛頓法就給出另一種思路: 我們再沿著切線方向走的時候,不必按照固定的步長走動,我們可以依據切線的變化率來動態調整行走的步子,於是就有了這個公式:

當二階導趨近於0的時候,說明一階導有極小值,那麼此時就應該讓它接近這個極小值,而loss函式為凸函式 ,f』(x)趨近極小值的時候,f(x)就也就可以快速的接近極小值,而不出現大幅度搖擺,就出現了紅色那條線.

一般來說,對於那種高階多項式採用牛頓法效果會比sgd好些.

優化演算法 牛頓法

牛頓法 英語 newton s method 又稱為牛頓 拉弗森方法 英語 newton raphson method 它是一種在實數域和複數域上近似求解方程的方法。方法使用函式f x 的泰勒級數的前面幾項來尋找方程f x 0的根。一般情況對於f x 是一元二次的情況直接應用求根公式就可以了,但是對...

最優化演算法 牛頓法

牛頓搜尋演算法,參考edwin 最優化導論 7.5章節,演算法採用go語言實現。filename newton search.go author fredric date 2017.09.01 note 牛頓搜尋演算法 history package search import fmt math 根...

最優化演算法 牛頓法

牛頓搜尋演算法,參考edwin 最優化導論 7.5章節,演算法採用go語言實現。filename newton search.go author fredric date 2017.09.01 note 牛頓搜尋演算法 history package search import fmt math 根...