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

什麼是優化器(Optimizer)

神經網絡越複雜 , 數據量越大 , 咱們須要在訓練神經網絡的過程上花費的時間也就越多. 緣由很簡單, 就是由於計算量太大了. 但是每每有時候爲了解決複雜的問題, 複雜的結構和大數據又是不能避免的, 因此咱們須要尋找一些方法, 讓神經網絡聰明起來, 快起來。那些能夠加速神經網絡訓練的方法就叫作優化器(Optimizer) 推薦閱讀:加速神經網絡訓練 (Speed Up Training)git

常見的優化器

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

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。

② 在收斂軌跡方面bash

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

示例2

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

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

如何挑選合適的優化器

其實從上述的兩個可視化的例子中咱們就能夠看到SGD的速度應該是最慢的,可是這並不影響他是咱們在實際使用中用到的最多的優化器。畢竟在實際使用中速度並非惟一決定因素,準確率纔是。 因此說:網絡

  1. 在研究調試咱們的神經網絡時咱們可使用一些比較快的優化器,例如:Adagrad、RMSProp等
  2. 研究的差很少了,模型也搭建好了,此時若是你須要有準確的結果用來發論文等,這時候最好把每個優化器都使用一遍,由於你也不知道究竟哪一個優化器最終獲得的結果是最好的,最適合你的網絡。
相關文章
相關標籤/搜索