深度學習三人行(第6期)----深度學習之學習率的命運

上一期,我們一起學習了深度學習中的優化器的進化,

深度學習三人行(第5期)----深度學習中的優化器選擇

今天我們一起看下學習率有着一個什麼樣的命運,我們多多交流,共同進步。本期主要內容如下:

  • 學習率的影響
  • 學習率的優化策略
  • 學習率優化調節的實現
  • 命運的安排

一. 學習率的影響

在深度學習中,尋找一個合適的學習率是比較困難的。在訓練深度網絡的過程中,如果學習率設置的過高,training學習曲線將會比較發散;如果學習率設置的過低,雖然訓練最終會收斂到收斂到最優值,但是將會消耗很長的時間;如果學習率設置的稍微高,但是沒那麼高的話,training初期的將會下降很快,但是可能會在最優值附近一直震盪(除非用一個自適應學習率的優化器,但是仍需要花時間穩定到最優點);如果計算資源受限的話,可能會不得不中斷學習,而得到一個次優點。如下圖:

有時候,我們可以通過分別用幾個不同的學習率來training幾個epochs,通過比較這幾個不同學習率的學習曲線來找到一個相對好一點的學習率。理想的學習率將會使學習過程很快,並很快收斂一個好的解。那麼有哪些好的策略來優化學習率呢?


二. 學習率的優化策略

通常,如果我們一開始用一個高的學習率,而當學習進度沒那麼快的時候,降低學習率的話,會比用一個固定的學習率更快的得到一個最優解。在學習過程中調整學習率有以下幾種常見的調整策略:

1. 階梯調節

在階梯調節中,比方說可以在一開始設置一個學習率0.1,然後在50個epochs後降到0.01,到100個epochs後將到0.001等。

2. 性能調節

性能調節是根據網絡在驗證集上的表現性能進行調節,在訓練的過程中,不斷的根據性能對學習率乘以一個衰減因子,來達到降低學習率的目的。

3. 指數調節

指數調節是將學習率的衰減設計成迭代次數的函數,如下:

這樣就能夠根據迭代次數的增加而逐步的衰減學習率,但是需要去調整初始學習率η0和超參數r。

4. 冪指調節

冪指調節跟指數調節有些類似,不同的是冪指調節將學習率衰減函數設計成冪指函數,如下:

超參數c一般設置爲1,冪指調節衰減的速度要比指數調節衰減的慢。

Andrew Senior在2013年的時候,用Momentum Optimization去優化一個語音識別的網絡中對常見的調節學習率的方法進行了對比,得出一個結論:性能調節和指數調節都能夠表現的非常好,但是由於指數調節比較好實施,並且收斂稍微快一點,所以傾向於指數調節。


三. 學習率優化調節的實現

在TensorFlow中學習率調節還是比較好實現的,如下是一個指數調節衰減的實現代碼:

1initial_learning_rate = 0.1
2decay_steps = 10000
3decay_rate = 1/10
4global_step = tf.Variable(0, trainable=False)
5learning_rate = tf.train.exponential_decay(initial_learning_rate, global_step,
6decay_steps, decay_rate)
7optimizer = tf.train.MomentumOptimizer(learning_rate, momentum=0.9)
8training_op = optimizer.minimize(loss, global_step=global_step)

如上,在設置完超參數之後,創建一個nontrainable的全局變量(初始化爲0)用來記錄當前的迭代次數。然後根據超參數用exponential_decay定義一個指數衰減學習率。接下來創建一個動力優化的優化器,最後讓優化器去最小化損失函數即可,非常簡單。然而……


四. 命運的安排

在我們上節講AdaGrad, RMSProp和Adam優化器出現之前,上面學到的調節學習率的方法還是很有用的,由於AdaGrad, RMSProp和Adam這三種優化器能夠天生的自帶調節學習率,而且效果還非常的不錯,所以一般在用這三種優化器的時候,往往不再去人爲調節學習率,也許這就是命運,這就是安排!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章