今天記錄一下我花了一些時間才理解的一個概念 —— 指數(shù)衰減法(exponential decay)
為什么要使用指數(shù)衰減法
在神經(jīng)網(wǎng)絡的參數(shù)更新過程中,學習率不能太大也不能太小,太大可能會導致參數(shù)在最優(yōu)值兩側來回移動氓涣,太小會大大降低優(yōu)化速度,為了解決學習率的問題蟆豫,TensorFlow 提供了一種靈活的學習率設置方法,即指數(shù)衰減法懒闷。
函數(shù)及參數(shù)
對應的命令為 tf.train.exponential_decay十减,通過這個函數(shù),可以先使用較大的學習率來快速得到一個比較優(yōu)的解愤估,然后隨著迭代的繼續(xù)逐步減小學習率帮辟,使得模型在訓練后期更加穩(wěn)定。
這個函數(shù)的參數(shù)為
- learning_rate —— 事先設定的初始學習率玩焰,
- global_step —— 當前迭代輪數(shù)
- decay_steps —— 衰減速度由驹,即多少輪可以迭代完一次所有樣本數(shù)據(jù)
- decay_rate —— 衰減系數(shù)
- staircase —— boolean 型,默認為 False震捣,暫時不講它的作用
- name 名字荔棉,默認為 None
原理
每迭代一輪,新的學習率都會根據(jù)以上參數(shù)更新一次蒿赢,式子如下
decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)
式子比較長,不過用到的都是上面介紹的參數(shù)渣触,這個式子實質(zhì)上就是一個指數(shù)乘上一個常數(shù)羡棵,最后得到新一輪的學習率,由于我們的目的是減小學習率嗅钻,所以根據(jù)指數(shù)的知識皂冰,decay_rate 必須在零到一之間店展,只有這樣,隨著指數(shù)項即(global_step / decay_steps)的增大秃流,新一輪的學習率才是減小的赂蕴。
那么為什么這個式子得到的新學習率減小的程度是在降低的呢,我們可以對上式求導舶胀,由于上式的右邊除了 global_step概说,其他項都是常數(shù),所以可以把上式簡寫為
y = a * (b^x)
對其求導結果為
y` = a * ln(b) * (b^x)
由于 b 在零到一之間嚣伐,所以隨著 x 的增大糖赔,導數(shù)在減小,即新學習率的變化率在減小轩端,也就是衰減的程度在降低放典。
如此就實現(xiàn)了開頭所說的
通過這個函數(shù),可以先使用較大的學習率來快速得到一個比較優(yōu)的解基茵,然后隨著迭代的繼續(xù)逐步減小學習率奋构,使得模型在訓練后期更加穩(wěn)定。