Tensorflow 自適應學習速率
在模型的初期的時候,往往設置為較大的學習速率比較好,因為距離極值點比較遠,較大的學習速率可以快速靠近極值點;而,后期,由於已經靠近極值點,模型快收斂了,此時,采用較小的學習速率較好,較大的學習速率,容易導致在真實極值點附近來回波動,就是無法抵達極值點。
在tensorflow中,提供了一個較為友好的API, tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
,其數學表達式是這樣的:
\[decayed\_learning\_rate = learning\_rate \times decay\_rate ^{ (global\_step / decay\_steps)} \]
先解釋API中的參數的意思,第一個參數learning_rate
即初始學習速率,第二個參數,是用來計算步驟的,每調用一次優化器,即自增1,第三個參數decay_steps
通常設為一個常數,如數學公式中所示,與第五個參數配合使用效果較好,第五個參數staircase
如果設置為True
,那么指數部分就會采用整除策略,表示每decay_step
,學習速率變為原來的decay_rate
,至於第四個參數decay_rate
表示的是學習速率的下降倍率。
global_step = tf.Variable(0, trainable=False)
starter_learning_rate = 0.1
learning_rate = tf.exponential_decay(starter_learning_rate, global_step, 100000, 0.96, staircase=True)
optimizer = tf.GradientDescent(learning_rate)
optimizer.minimize(...my loss..., global_step=global_step)
意思就是,初始的學習速率是0.1,每經過10萬輪次訓練后,學習速率變為原來的0.96