学习率既不能过大, 也不能过小 。为了更好地设置学习率,我们可以逐步减小己经设置好的学习率。
1.指数形式的衰减
TensorFlow提供了train.exponential_ deccy() 函数,可以对学习率进行指数形式的衰减。
如果用 decayed_learning_rate代表每一轮优化时使用的学习率,learning_ rate 为事先预定义的初始学习 率, decay_rate为衰减系数, decay_ steps 为衰减速度,那么train . exponential_ decay() 函数按以下公式返回decayed_learning_rate 的值:
使用这个函数时,通常会将 learning_rate 设置为比较大的一个数(但是绝对要比1小 )来获得一个比较快的参数更新速度,然后随着法代的继续逐步减小学习率,这样会使模型在训练后期更加稳定。
#learning_rate是初始学习率, global step是当前训练进行的轮数,
#decay steps 是衰减速度,#decay_rate 是衰减系数, staircase 参数指定了衰减方式
exponential_decay(learning_rate,global_step,deca y_steps,decay_rate,staircase,name)
一般来说,初始学习率、衰减系数和衰减速度都是根据经验设置的,参数 staircase 用于选择不同的衰减方式。 staircase 默认值为 False ,这时的学习率会按照指数的形式连续衰减。(学习率连续衰减)
当 staircase 的值被设置为 True 时, decay_steps 通常代表了迭代多少轮后再更新学习率参数,而这个迭代轮数也就是总训练样本数除以每一个 batch 中的训练样本数 。 这样做的结果是global_step/decay_steps 被取为近似值,最终的学习率成为一个阶梯函数( Staircase Function )。(学习率阶梯状衰减)
上述两种学习率衰减形式如下:
学习率如果连续衰减,那么不同的训练数据就会有不同的学习率。这样做稍有弊端,当学习率减小时,在相似的训练数据下参数更新的速度也会放慢,这就相当于减小了训练数据对模型训练结果的影响。
对于阶梯衰减的学习率,为了使得训练数据集中的所有数据对模型训练有相等的作用(表现为学习率相等), 通常是将所有的训练数据都完整地过一遍再减小一次学习率。
(learning_rate=0.8, decay_rate=0.9, decay steps=100)代表初始学习率为 0.8,每训练 100 轮后学习率乘以 0.9 。
2. 反时限学习率衰减
train . inverse time_ decay()函数实现了反时限学习率衰减。
#函数原型
#inverse_time_decay(learnin_ rate, global_step, decay_steps,decay_rate,staircase,name)
将反时限衰减应用到学习率设置,计算公式:
3.自然指数学习率衰减
train.natural_ exp_ decay()函数实现了自然指数衰减学习率 。
#函数原型
#natural_exp_decay(learning_rate,global_step,decay_steps,decay_rate , staircase, name)
将自然指数衰减应用于学习率设置,计算公式:
4. 分片常数学习率衰减
train.piecewise_constant()函数实现了分片常数学习率衰减。
#函数原型
#piecewise_constant(x, boundaries, values, name)
例如, 前 5000 轮迭代使用 0.8 作为学习率, 5000 ~ 10000 轮使用 0.6 作为学习率, 以后使用 0.2 作为学习率,可以得到如下所示函数图像。
5. 多项式学习率衰减
多项式学习率衰减的特点是可以确定结束的学习率。 train.polynomial_decay()函数实现了多项式学习率衰减。
#函数原型
#polynomial_decay(learning_rate ,global_step,decay_steps,end_learning_rate, power,cycle, name)
这个函数会将多项式衰减应用于学习率的设置,使初始学习率learτiing_rate在给定的decay_steps中达到结束学习率end_ learning_ rate。参数 global_step 用来计算学习率的衰减速度。
如果将反时限多项式衰减应用到学习率设置,则计算公式为:
如果 cycle为 True ,则decay_steps 参数使用 decay_steps 的倍数 。具体公式如下(ceil 表示向上取整) :