TensorFlow筆記(5)——優化手寫數字識別模型之優化器

僱個城管打天下發表於2018-12-12

什麼是優化器(Optimizer)

神經網路越複雜 , 資料量越大 , 我們需要在訓練神經網路的過程上花費的時間也就越多. 原因很簡單, 就是因為計算量太大了. 可是往往有時候為了解決複雜的問題, 複雜的結構和大資料又是不能避免的, 所以我們需要尋找一些方法, 讓神經網路聰明起來, 快起來。那些可以加速神經網路訓練的方法就叫做優化器(Optimizer) 推薦閱讀:加速神經網路訓練 (Speed Up Training)

常見的優化器

這個部分的理論知識實在太多了,我簡單的整理了一點點,詳見機器學習:各種優化器Optimizer的總結與比較 下面是TensorFlow中提供的相關優化器的API

tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSPropOptimizer
複製程式碼

視覺化比較幾個優化器

示例1

image
上圖比較了6種優化器收斂到目標點(五角星)的執行過程,從圖中可以大致看出: ① 在執行速度方面

  • 兩個動量優化器Momentum和NAG的速度最快,其次是三個自適應學習率優化器AdaGrad、AdaDelta以及RMSProp,最慢的則是SGD。

② 在收斂軌跡方面

  • 兩個動量優化器雖然執行速度很快,但是初中期走了很長的”岔路”。
  • 三個自適應優化器中,Adagrad初期走了岔路,但後來迅速地調整了過來,但相比其他兩個走的路最長;AdaDelta和RMSprop的執行軌跡差不多,但在快接近目標的時候,RMSProp會發生很明顯的抖動。
  • SGD相比於其他優化器,走的路徑是最短的,路子也比較正。

示例2

image
上圖在一個存在鞍點的曲面,比較6中優化器的效能表現,從圖中大致可以看出:

  • 三個自適應學習率優化器沒有進入鞍點,其中,AdaDelta下降速度最快,Adagrad和RMSprop則齊頭並進。
  • 兩個動量優化器Momentum和NAG以及SGD都順勢進入了鞍點。但兩個動量優化器在鞍點抖動了一會,就逃離了鞍點並迅速地下降,後來居上超過了Adagrad和RMSProp。
  • 很遺憾,SGD進入了鞍點,卻始終停留在了鞍點,沒有再繼續下降。

如何挑選合適的優化器

其實從上述的兩個視覺化的例子中我們就可以看到SGD的速度應該是最慢的,但是這並不影響他是我們在實際使用中用到的最多的優化器。畢竟在實際使用中速度並不是唯一決定因素,準確率才是。 所以說:

  1. 在研究除錯我們的神經網路時我們可以使用一些比較快的優化器,例如:Adagrad、RMSProp等
  2. 研究的差不多了,模型也搭建好了,此時如果你需要有準確的結果用來發論文等,這時候最好把每一個優化器都使用一遍,因為你也不知道究竟哪個優化器最終得到的結果是最好的,最適合你的網路。

相關文章