【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)

本文是《TensorFlow从浅入深》系列之第1篇

【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)

在训练神经网络时,需要设置学习率(learning rate)控制参数更新的速度 。学习率决定了参数每次更新的幅度 。如果幅度过大,
那么可能导致参数在极优值的两侧来回移动。如优化J\left ( x\right )=x^{2} 函数,在优化中使用的学习率为1,则整个优化过程表4-1所示:

【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)_第1张图片

从表格可以看出,无论进行多少轮法代,参数将在 5 和,5 之间摇摆,而不会收敛到一个极小值 。
相反,当学习率过小时,虽然能保证收敛性,但是这会大大降低优化速度 。我们会需要更多轮的法代才能达到一个比较理想的优化效果 。


所以学习率既不能过大,也不能过小 。为了解决设定学习率的问题, TensorFlow提供了 一种更加灵活的学习率设置方法一一指数衰减法

tf.train.exponential_decay函数实现了指数衰减学习率。通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。 exponential_decay 函数会指数级地减小学习率,它实现了以下代码的功能:

其中 :

  1. decayed_learning_rate 为每一轮优化时使用的学习率 ;
  2. learning_rate 为事先设定的初始学习率;
  3. decay_rate 为衰减系数;
  4. decay_steps 为衰减速度 。decay_steps 通常代表了完整的使用一遍训练数据所需要的迭代轮数。这个迭代轮数也就是总训练样本数除以每一个 batch 中的训练样本数 。

tf.train.exponential_decay函数可以通过设置参数staircase选择不同的衰减方式。staircase的默认值为False,这时学习率随法代轮数变化的趋势如4-13图灰色曲线所示(连续衰减)。当staircase 的值被设置为True 时,global_stepIdecay_steps会被转化成整数。这使得学习率成为一个阶梯函数(staircase function )。4-13图中黑色曲线显示了阶梯状的学习率。(这种设置的常用场景是每完整地过完一遍训练数据,学习率就减小一次。这可以使得训练数据集中的所有数据对模型训练有相等的作用。当使用连续的指数衰减学习率时,不同的训练数据有不同的学习率,而当学习率减小时,对应的训练数据对模型训练结果的影响也就小了。)

【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)_第2张图片


TensorFlow中使用tf.train.exponential_decay实现指数衰减率。

tf.train.exponential_decay格式:

tf.train.exponential_decay(learning_rate, global_, decay_steps, decay_rate, staircase=True/False)

参数说明:

  1. learning_rate:初始学习率
  2. global_step:当前迭代次数
  3. decay_steps:衰减速度
  4. decay_rate:衰减系数,通常介于0-1之间。
  5. staircase=False:衰减方式,(默认值为False,当为True时,(global_step/decay_steps)则被转化为整数) 式。

一段代码来示范如何在 TensorFlow 中使用 tf.train .exponential_decay函数 。

【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)_第3张图片

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

你可能感兴趣的:(TensorFlow,--,从浅入深)