Tensorflow笔记之神经网络进一步优化

      在前面已经介绍了神经网络优化的基本算法,通过梯度下降算法和反向传播算法。其中梯度下降算法学习率的设置尤为重要,因为它是控制参数更新的速度,决定了每次更新的幅度,如果幅度过大,那么可能导致参数在极优值得两侧来回移动。以J(x)=x{_{}}^{2}为例,如果优化中使用的学习率为1,那么整个优化过程如下表所示:

当学习率过大时,梯度下降算法的运行过程
轮数 当前轮参数值 梯度X学习率 更新后参数值
1 5

 

2x5x1=10

5-10=-5
2 -5 2x(-5)x1=-10 -5-(-10)=5
3 5

2x5x1=10

 

5-10=-5

    从上表中可以看出,无论迭代进行多少轮,参数将在5和-5之间摇摆,不会收敛到一个极小值。相反 ,当学习率过小时,虽然能保证收敛性,但这会大大降低优化速度。我们需要更多轮迭代才能达到一个比较理想的优化效果。所以学习率既不能过大,也不能过小,为了解决学习率问题,Tensorflow提供了一种更加灵活的学习率设置方法————指数衰减法。通过tf.train.exponential_decay函数实现了指数衰减学习率。这个函数实现了下面代码的功能:

 

decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)

 其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定好的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。下面给出了一段代码来示范如何在Tensorflow中使用该函数:

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

上述代码中设定学习率为0.1,因为制定了staircase=True,所以每训练100轮以后学习率乘0.96.

你可能感兴趣的