1. 程式人生 > >神經網路的優化演算法選擇

神經網路的優化演算法選擇

博文內容轉載至:http://blog.csdn.net/ybdesire/article/details/51792925

優化演算法

解決優化問題,有很多演算法(最常見的就是梯度下降),這些演算法也可以用於優化神經網路。每個深度學習庫中,都包含了大量的優化演算法,用於優化學習速率,讓網路用最快的訓練次數達到最優,還能防止過擬合。 
keras中就提供了這樣一些優化器[1]:

  • SGD:隨機梯度下降
  • SGD+Momentum: 基於動量的SGD(在SGD基礎上做過優化)
  • SGD+Nesterov+Momentum:基於動量,兩步更新的SGD(在SGD+Momentum基礎上做過優化)
  • Adagrad:自適應地為各個引數分配不同學習速率
  • Adadelta: 針對Adagrad問題,優化過的演算法(在Adagrad基礎上做過優化)
  • RMSprop:對於迴圈神經網路(RNNs)是最好的優化器(在Adadelta基礎上做過優化)
  • Adam:對每個權值都計算自適應的學習速率(在RMSprop基礎上做過優化)
  • Adamax:針對Adam做過優化的演算法(在Adam基礎上做過優化)

如何選擇

有那麼多優化演算法,那麼我們該怎麼選擇呢。有大神為我們給出了一些建議[2][3]

  • 如果你的資料輸入量很小,那就選一種自適應學習速率的方法。這樣你就不用對學習速率進行調優,因為你的資料本來就小,NN學習耗時也小。這種情況你更應該關心網路分類的準確率。
  • RMSprop, Adadelta, 和 Adam 非常相似,在相同的情況下表現都很好。
  • 偏置校驗讓Adam的效果稍微比RMSprop好一點
  • 進行過很好的引數調優的SGD+Momentum演算法效果好於Adagrad/Adadelta

結論:到目前(2016.04)為止,如果你不知道為你的神經網路選擇哪種優化演算法,就直接選Adam吧!(Insofar, Adam might be the best overall choice.[2])

參考