凸優化演算法之牛頓法

2022-04-15 18:07:58 字數 3020 閱讀 8299

對於求方程解問題,假設有函式f  :r->r,我們希望找到滿足f(θ

)=0 的

θ值. 這裡

θ是實數. 

牛頓方法執行下面的更新

求解過程如圖所示

簡單的來說

就是通過求當前點的導數得到下乙個點.用到的性質是導數值等於該點切線和橫軸夾角的正切值

利用凸函式的性質,最值所在點l'(θ

)=0f(θ

)=l'(

θ)牛頓方法的一般化: 

如果θ是乙個向量,那麼: 

h稱為海森矩陣(hessian matrix),是乙個n*n的矩陣,n是特徵量的個數,並且

牛頓方法的收斂速度比批處理梯度下降快很多,很少次的迭代就能夠非常接近最小值了;但是當n很大時,每次迭代求海森矩陣和逆代價是很大的。

牛頓法是二階收斂,梯度下降法是一階收斂的,所以牛頓法看得更遠,收斂更快。牛頓法的路徑更符合最優路徑。對於二階凸函式能夠一步到達。

實際中常常先用梯度下降法,在離得比較近時使用牛頓法;由於牛頓法需要每次更新海森矩陣,所以使用擬牛頓法。

舉例

求解問題   f(x1,x2) = -x1

4 - 2x2

4 + 2x1x2 + 2x2 + 6

▽x1f =-4x1

3+2x2

▽x2f = 2x1-8x2

3+2hessian = [ -12x1

2, 2; 2, -24x2

2]迭代次數計數

牛頓方法

"""

import

numpy

asnp

import

matplotlib

.pyplot

asplt

delta

=0.25

x1 =np

.arange(-

10,10,

delta

)x2 =np

.arange(-

10,10,

delta

)x1

,x2 =np

.meshgrid

(x1

,x2

)y =2

*x1*x2

+2*x2

-x1**4

-2*x2

**4+6

plt

.figure

()bg_fig

=plt

.contour(x1

,x2,y

)theta =np

.array([8

,8])

a ,b=,

a.(

theta[0

])b.(

theta[1

])h =np

.array

([[2,3

],[3,10

]])hi=np

.linalg

.inv(h

)for

i in

xrange(1

,50):

t =np

.array

([theta[0

]**3

*(-4)+2

*theta[1

]**2,(-

8)*theta[1

]**3+2

*theta[0

]+2])

h =np

.array

([[(-

12)*

theta[0

]**3,2

],[2

,(-24

)*theta[1

]**2

]])hi=

np.linalg

.inv(h

)theta

=theta -np

.dot(hi

,t )

a.(

theta[0

])b.(

theta[1

])plt

.plot(a ,b)

plt

.title

("newton's method"

)plt

.xlabel

('x1'

)plt

.ylabel

('x2'

)plt

.show

()

優化演算法 牛頓法

牛頓法 英語 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 根...