1. 程式人生 > >深度學習筆記3-優化函式

深度學習筆記3-優化函式

深度學習筆記3-優化函式

深度學習的優化演算法有隨機梯度下降法(SGD)、標準梯度下降法(BGD)、小批量梯度下降法(MBGD)、Momentum梯度優化(SGDM)、Adagrad、RMSprop、Adam等等演算法。SGD、BGD、MBGD很好理解,且在感知機那一節也有簡述,不再介紹了。以下重點介紹後四種:

  1. Momentum梯度優化(SGDM)
    Momentum梯度優化的表示式為:
    v =

    m μ × v L R ×
    d x v = {m_\mu } \times v - LR \times dx x + =
    v x + = v
    其中, v v 為速度, m μ m_\mu 為其係數, L R LR 為學習速率, d x dx 為引數的導數。與SGD相比,SGDM在更新引數 x x 時,會加入一個動量分量 m μ × v {m_\mu } \times v 。這樣做的好處是引數的更新考慮了以前的梯度變化,並且離此次更新越近,權重越高。這就意味著下降方向由此前累積的下降方向和當前時刻的下降方向共同決定。因此,如果前後梯度方向一致時,能夠加速學習;前後梯度方向不一致時,能夠抑制震盪。這就像小球下斜坡時,利用SGD會勻速下降,但利用SGDM會加速下降;當小球到達谷底,利用SGD會在谷底來回震盪,但利用SGDM會快速收斂到最小值。
    另外,在利用SGDM時,由於小球到達谷底會有一個動量,藉著這個動量小球可能跳出此區域性最小值,從而尋求全域性最大值。

  2. Adagrad
    在以上梯度更新時,學習速率 L R LR 都是個常數。對於經常更新的引數,我們已經積累了大量關於它的知識,不希望被單個樣本影響太大,希望學習速率慢一些;對於偶爾更新的引數,我們瞭解的資訊太少,希望能從每個偶然出現的樣本身上多學一些,即學習速率大一些。這就需要自適應學習速率了,Adagrad就是基於這樣的想法提出來的。Adagrad的表示式為:
    c a c h e + = d x 2 cache + = dx^2 x + = L R × d x ( c a c h e + e p s ) x + = - LR \times \frac{{dx}}{{(\sqrt {cache} + eps)}} 此時實際上的學習率由 L R LR 變成了 L R ( c a c h e + e p s ) \frac{{LR}}{{(\sqrt {cache} + eps)}} e p s eps 是一個小量,防止分母變零。 d x 2 dx^2 是引數的導數的平方。當引數更新越頻繁時, c a c h e cache 就越大,學習率就會越小。因此,能夠實現學習率的自動更改。如果這次梯度大,那麼學習速率衰減的就快一些;如果這次梯度小,那麼學習速率衰減的就慢一些。但它有個缺點,就是經過幾輪訓練後 L R LR 變得很小,可能會使得訓練過程提前結束,即便後續還有資料也無法學到必要的知識。

  3. RMSprop
    由於Adagrad單調遞減的學習率變化過於激進,可以引入一個衰減係數,讓學習率每回合都衰減一定比例,類似於Momentum中的做法。這就是RMSprop函式,以下為它的表示式:
    c a c h e = d e c a y × c a c h e + ( 1 d e c a y ) × d x 2 cache = decay \times cache + (1 - decay) \times d{x^2} x + = L R × d x ( c a c h e + e p s ) x + = - LR \times \frac{{dx}}{{(\sqrt {cache} + eps)}} 新引入的decay即為衰減係數。相比於Adagrad,這種方法很好的解決了深度學習中過早結束的問題。但它又會引入新的超引數 d e c a y decay

  4. Adam
    在以上優化函式中,SGDM能自適應調整梯度 d x dx ,Adagrad和RMSprop能夠自適應調節學習率。Adam則集合了這兩種思想,既能調節梯度,又能調節學習率。其表示式為:
    m = b e t a 1 × m + ( 1 b e t a 1 ) × d x m = beta1 \times m + (1 - beta1) \times dx v = b e t a 2 × v + ( 1 b e t a 2 ) × d x 2 v = beta2 \times v + (1 - beta2) \times d{x^2} x + = L R × m ( v + e p s ) x + = - LR \times \frac{m}{{(\sqrt v + eps)}} Adam函式在很多工中都取得了很好的效果,訓練時推薦使用Adam。但Adam也有缺點,這篇文章《Adam那麼棒,為什麼還對SGD念念不忘》詳細說明了它的缺點,並進一步給出了優化演算法的選擇策略,推薦有興趣的閱讀下。

tensorflow中已經集成了GradientDescentOptimizer、AdagradOptimizer、AdagradDAOptimizer、MomentumOptimizer、AdamOptimizer、FtrlOptimizer、RMSPropOptimizer;相應的pytorch中也有很全的優化函式庫。這些都可以很方便地進行呼叫

參考:
Adam那麼棒,為什麼還對SGD念念不忘
深度學習各種優化函式詳解
賀完結!CS231n官方筆記授權翻譯總集篇釋出