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