訓練神經網絡模型時通常要設置學習率learning_rate,可以直接將其設置為一個常數(通常設置0.01左右),但是用產生過戶學習率會使參數的更新過程顯得很僵硬,不能很好的符合訓練的需要(到后期參數僅需要很小變化時,學習率的值還是原來的值,會造成無法收斂,甚至越來越差的情況),過大無法收斂,過小訓練太慢。
所以我們通常會采用指數衰減學習率來優化這個問題,exponential_decay可以通過tf.train.exponential_decay函數直接設置,
global_step = tf.Variable(0, trainable=False)
lr = tf.train.exponential_decay(learning_rate=0.02,
global_step=global_step,
decay_steps=100,
decay_rate=0.9,
staircase=False)
learning_rate為原始學習率
global_step個人感覺好比一個計數器,你沒進行一次更新它就會增一
decay_steps為衰減間隔,顧名思義就是每隔多少步會更新一次學習率(它只有在staircase為true時才有效)
decay_rate衰減率
staircase若為true則每隔decay_steps步對學習率進行一次更新,若為false則每一步都更新
指數衰減學習率更新公式如下: