TensorFlow实战系列6--学习率的设置


 上面提到在优化神经网络时,需要设置学习率(learning rate)控制参数更新的速度。学习率决定了参数每次更新的幅度。如果幅度过大,那么可能导致参数在极优值的两侧来回移动。还是以优化J(x)=x2 函数为样例。如果在优化中使用的学习率为1,那么整个优化过程将会如表2 所示。


 从上面的样例可以看出,无论进行多少轮迭代,参数将在5 和-5 之间摇摆,而不会收敛到一个极小值从上面的样例可以看出,无论进行多少轮迭代,参数将在5 和-5 之间摇摆,而不会收敛到一个极小值。相反,当学习率过小时,虽然能保证收敛性,但是这会大大降低优化速度。我们会需要更多轮的迭代才能达到一个比较理想的优化效果。比如当学习率为0.001 时,迭代5 次之后,x 的值将为4.95。要将x 训练到0.05 需要大约2300 轮;而当学习率为0.3 时,只需要5 轮就可以达到。综上所述,学习率既不能过大,也不能过小。为了解决设定学习率的问题,TensorFlow 提供了一种更加灵活的学习率设置方法——指数衰减法。tf.train.exponential_decay 函数实现了指数衰减学习率。通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。exponential_decay 函数会指数级地减小学习率,它实现了以下代码的功能:

decayed_learning_rate =
learning_rate * decay_rate ^ (global_step / decay_ steps)
 其中decayed_learning_rate 为每一轮优化时使用的学习率,learning_rate 为事先设定的初始学习率,decay_rate 为衰减系数,decay_steps 为衰减速度。下面给出了一段代码来示范如何在TensorFlow 中使用tf.train.exponential_decay 函数。

# 通过exponential_decay函数生成学习率。
learning_rate = tf.train.exponential_decay(
learning_rate_base, global_step, decay_step, decay_rate)
# 使用指数衰减的学习率。在minimize函数中传入global_step将自动更新
# global_step参数,从而使得学习率也得到相应更新。
learning_step =
tf.train.GradientDescentOptimizer(learning_rate)\
.minimize(...my loss..., global_step=global_step)


猜你喜欢

转载自blog.csdn.net/tian_qing_lei/article/details/79265666