1. 程式人生 > >機器學習各優化演算法的簡單總結

機器學習各優化演算法的簡單總結

1 梯度下降

1.1 SGD

演算法介紹

SGD(Stochasitic Gradient Descent)很簡單,就是沿著梯度的反方向更新引數,優化目標函式。優化公式如下:
di=g(θi1)
θi=θi1λdi
其中di為當前位置的梯度,也就是損失函式關於引數的一階導數

優點

操作簡單,計算量小,在損失函式是凸函式的情況下能夠保證收斂到一個較好的全域性最優解

缺點

  • λ是個定值(在最原始的版本),它的選取直接決定了解的好壞,過小會導致收斂太慢,過大會導致震盪而無法收斂到最優解。
  • 對於非凸問題,只能收斂到區域性最優,並且沒有任何擺脫區域性最優的能力(一旦梯度為0就不會再有任何變化)
    對於非凸的優化問題,我們可以將其轉化為對偶問題,對偶函式一定是凹函式,但是這樣求出來的解並不等價於原函式的解,只是原函式的一個確下界

1.2 Momentum

演算法介紹

Momentum改進自SGD,讓每一次的引數更新方向不僅取決於當前位置的梯度,還受到上一次引數更新方向的影響。 di=βdi1+(1β)g(θi1) θi=θi1λdi Momentum的意思就是動量,也就意味著上一次更新的方向對本次更新仍然有影響。

優點

一定程度上緩解了SGD收斂不穩定的問題,並且有一定的擺脫區域性最優的能力(當前梯度為0時,仍可能按照上次迭代的方向衝出區域性最優點),直觀上理解,它可以讓每次迭代的“掉頭方向不是那個大“。

缺點

這裡又多了另外一個超引數β需要我們設定,它的選取同樣會影響到結果。

β一般取0.9

1.3 Nestrov Momentum

演算法介紹

Nestrov Momentum的意義在於,既然下一次一定會更新λdi,那麼求梯度的時候就可以用提前位置的梯度g(θi1λdi),則: di=βdi1+(1β)g(θi1) di=βdi1+(1β)g(θi1λdi) θi=θi1λdi

優點

實驗中,一般用Nestrov Momentum比較多,由於結合了二階導數的資訊,收斂比Momentum要更快一些。

缺點

仍然是多了一個超引數需要調整

2 自適應方法

2.1 Adagrad

演算法介紹

ci=ci1+g2(θi1) θi=θi1λci+εg(θi1) 其中,ci是一個cache,儲存了各位置梯度的平方,ε一般取值為104108,為了防止分母取零。

優點

Adagrad不需要手動調節學習率λ,因為整體來看,學習率為