Deep Learning 之 最優化方法

寫在前面本文主要是對Deep Learning一書最優化方法的總結,具體詳細的算法,另起博文展開。
 

整個優化系列文章列表:

Deep Learning 之 最優化方法

Deep Learning 最優化方法之SGD

Deep Learning 最優化方法之Momentum(動量)

Deep Learning 最優化方法之Nesterov(牛頓動量)

Deep Learning 最優化方法之AdaGrad

Deep Learning 最優化方法之RMSProp

Deep Learning 最優化方法之Adam

深度學習中,經常需要用到優化方法,來尋找使得損失函數最小的最優解。

先上一些結論:

1.選擇哪種優化算法並沒有達成共識

2.具有自適應學習率(以RMSProp 和AdaDelta 爲代表)的算法族表現得相當魯棒,不分伯仲,但沒有哪個算法能脫穎而出。

3.對於當前流行的優化算法包括括SGD、具動量的SGD、RMSProp、具動量的RMSProp、AdaDelta 和Adam而言,選擇哪一個算法似乎主要取決於使用者對算法的熟悉程度(以便調節超參數)

4.基本不用二階近似優化算法

在這裏將這些優化方法分爲三類,詳見對應的blog:

一.最基本的優化算法

1.1SGD

SGD實際就是min-batch的實現,爲最基礎的優化算法,當今大部分優化算法都是以SGD爲基礎實現的。詳見 Deep Learning 最優化方法之SGD

1.2Momentum(動量)

Momentum引入了動量v,以指數衰減的形式累計歷史梯度,以此來解決Hessian矩陣病態問題
詳見 Deep Learning 最優化方法之Momentum(動量)

1.3Nesterov(牛頓動量)

Nesterov是對Momentum的變種。與Momentum不同的是,Nesterov先更新參數,再計算梯度
詳見 Deep Learning 最優化方法之Nesterov(牛頓動量)

 

二.自適應參數的優化算法

這類算法最大的特點就是,每個參數有不同的學習率,在整個學習過程中自動適應這些學習率。

2.1AdaGrad

學習率逐參數的除以歷史梯度平方和的平方根,使得每個參數的學習率不同
詳見 Deep Learning 最優化方法之AdaGrad

2.2RMSProp

AdaGrad算法的改進。
歷史梯度平方和—>指數衰減的移動平均,以此丟棄遙遠的過去歷史。
詳見 Deep Learning 最優化方法之RMSProp

2.3Adam

Adam算法可以看做是修正後的Momentum+RMSProp算法
詳見 Deep Learning 最優化方法之Adam

 

三.二階近似的優化算法

二階近似作爲早期處理神經網絡的方法,在此並不另起blog展開細講。

3.1牛頓法

牛頓法是基於二階泰勒級數展開在某點附近來近似損失函數的優化方法。主要需要求得Hessian矩陣的逆。如果參數個數是k,則計算你所需的時間是O(k^3)由於在神經網絡中參數個數往往是巨大的,因此牛頓法計算法消耗時間巨大。

具體更新公式如下:

這裏寫圖片描述

3.2共軛梯度法

共軛梯度(CG)是通過迭代下降的共軛方向(conjugate directions)以有效避免Hessian 矩陣求逆計算的方法。

3.3BFGS

Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法具有牛頓法的一些優點,但沒有牛頓法的計算負擔。在這方面,BFGS和CG 很像。然而,BFGS使用了一個更直接的方法近似牛頓更新。用矩陣Mt 近似逆,迭代地低秩更新精度以更好地近似Hessian的逆。

3.4L-BFGS

存儲受限的BFGS(L-BFGS)通過避免存儲完整的Hessian 逆的近似矩陣M,使得BFGS算法的存儲代價顯著降低。L-BFGS算法使用和BFGS算法相同的方法計算M的近似,但起始假設是M^(t-1) 是單位矩陣,而不是一步一步都要存儲近似。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章