【TensorFlow 学习】神经网络的优化——2.学习率的设定

学习率的简单介绍

学习率的作用: 控制神经网络中参数更新的速度。

  1. 如果学习率过大,那么可能会导致参数在极优值的两侧来回移动。

例如 J ( x ) = x 2 J(x)=x^2 J(x)=x2 函数,如果学习率设置为 1,那么整个优化过程如下表:
在这里插入图片描述
无论进行多少轮迭代,参数将在 5 和 -5 之间摇摆,而不会收敛到一个极小值。

  1. 如果学习率过小,虽然能收敛,但是神经网络优化的速度会很慢。

学习率设置方法

指数衰减法

通过指数衰减的方法设置梯度下降算法中的学习率。

优点:

  • 让模型在训练的前期快速接近较优解。
  • 保证模型在训练后期不会有太大的波动,从而更加接近局部最优。

TensorFlow 中的实现:

tf.train.exponential_decay 函数

实现指数衰减的过程:
  1. 先使用较大的学习率来快速得到一个比较优的解;
  2. 随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定
decayed_learning_rate = \
	learning_rate * decay_rate ^ (global_step / decay_steps)
# decayed_learning_rate 为每一轮优化时使用的学习率
# learning_rate 为事先设定的初始学习率
# decay_rate 为衰减系数
# decay_steps 为衰减速度

exponential_decay 函数实现了上述代码的功能。

exponential_decay 函数解析:

tf.train.exponential_decay 函数可以通过设置参数 staircase 选择不同的衰减方式。

  1. staircase 默认值为 False,学习率为一个连续函数;
  2. staircase 设置为 True时,global_step / decay_steps 会被转化为整数,使得学习率为一个阶梯函数(staircase function)。

【TensorFlow 学习】神经网络的优化——2.学习率的设定_第1张图片

decay_steps 代表了完整的使用一遍训练数据所需要的迭代轮数,即总训练样本数除以每一个 batch 中的训练样本数。

  1. 对于阶梯衰减学习率:每完整地过完一遍训练数据,学习率就减小一次。 使得训练数据集中的所有数据对模型训练有相等的作用。
  2. 对于连续衰减学习率:不同的训练数据有不同的学习率。因此当学习率减小时,对应的训练数据对模型训练结果的影响会变小。
# 在 TensorFlow 中使用tf.train.exponential_decay 函数

global_step = tf.Varaiable(0)

# 通过 exponential_decay 函数生成学习率
learning_rate = tf.train.exponential_decay(0.1, global_step, 100, 0.96, staircase=True)

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

上述代码设定初始学习率为 0.1,因为指定了 staircase=True,所以每训练 100 轮后学习率乘以 0.96。

  1. 初始学习率、衰减系数和衰减速度都是根据经验设置的。
  2. 损失函数下降的速度和迭代结束之后总损失的大小没有必然联系。
  3. 不能通过前几轮损失函数下降的速度来比较不同神经网络的效果。

你可能感兴趣的:(机器学习,TensorFlow,神经网络的优化)