深度學習——學習率衰減(learning rate decay)

學習率衰減(learning rate decay)

爲了防止學習率過大,在收斂到全局最優點的時候會來回擺盪,所以要讓學習率隨着訓練輪數不斷按指數級下降,收斂梯度下降的學習步長。

學習率衰減可以用以下代碼實現
decayed_learning_rate = learning_rate * np.power(decay_rate,(global_step / decay_steps))

decay_rate衰減指數,可設爲略小於1的值,比如0.98。global_step是當前的迭代輪數decay_steps是你想要每迭代多少輪就衰減的度量值,可叫作衰減速度。比如decay_steps = 1000,意味着當global_step達到1000時就給learning_rate乘上0.98的一次方,達到2000就乘上0.98的二次方,以此類推,不斷縮小學習率。

TensorFlow提供了一個函數實現了指數衰減學習率,叫做tf.train.exponential_decay
用法如下

global_step = tf.Variable(0)
learning_rate = tf.train.exponential_decay(0.1, global_step, 1000, 0.98)
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost,\
global_step = global_step)

初始學習率爲1,衰減指數爲0.98,衰減速度爲1000,global_step會跟着minimize函數自動更新。
tf.train.exponential_decay還有一個參數是staircase,默認爲False,如果是False,學習率會平滑地衰減,而非每迭代1000輪才衰減一次,如果爲True,則會每迭代1000次才衰減一次,這種稱爲階梯函數。

學習率的本質可以說成是,在訓練初期,你希望學習的步長在可承受的範圍內儘量大一些,隨着訓練輪數的增加,爲了避免梯度下降無法收斂到全局最優點,甚至發散,你希望學習的步長越來越小,逐步逼近最優點,至少是在一個最優的範圍內來回震盪。

學習率衰減是非常有用的技巧,通常會和mini_batch的方法一併使用,你也可以手動衰減學習率,雖然這很耗費人力和精力。不過從我學到的知識來看,學習率衰減並不是你要考慮的首要問題,通常,你只需要不斷調整學習率,直至一個令人滿意的效果即可,並不一定需要用到學習率衰減。因爲還有很多更高級的超參數調整和搜索方式值得嘗試。

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