背景:调整学习率可能会对模型提升1~2%,当前我们采用的学习率比较简单粗暴,使用指定学习率,为了优化模型,现对学习率进行探索,希望对我们模型的指标结果有所提升
一、工业界学习率现存形式
1、指定学习率
固定学习率,只在模型训练的全过程中,学习率只采用某个固定值,如0.15,进行模型训练
2、指定学习率+衰减
指定学习率+衰减,顾名思义是,满足一定条件内,使用固定学习率,如0.15,达到条件后,采用衰减的形式
代码如下:
指定学习率+衰减
initial_learning_rate = 0.15
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate,
decay_steps=100000,
decay_rate=0.8,
staircase=True)
3、warm up
谈到warm之前,总结一下,学习率几种常见的衰减形式
3.1 衰减函数
- 指数衰减
tf.train.exponential_decay()
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay
指数衰减 代码
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate,
decay_steps=100000, # 衰减周期,当staircase=True时,学习率在decay_steps内保持不变,即得到离散型学习率;
decay_rate=0.8,#衰减率系数
staircase=True) # 是否定义为离散型学习率,默认False
def decayed_learning_rate(step):
return initial_learning_rate * decay_rate ^ (step / decay_steps)
# 当为False时,需要加一个判断语句
- 倒数衰减
tf.train.inverse_time_decay()
tf.keras.optimizers.schedules.InverseTimeDecay
倒数衰减代码
tf.keras.optimizers.schedules.InverseTimeDecay(
initial_learning_rate, decay_steps, decay_rate, staircase=False, name=None
)
# staircase=False
def decayed_learning_rate(step):
return initial_learning_rate / (1 + decay_rate * step / decay_step)
- 分段常数衰减:
tf.train.piecewise_constant
tf.keras.optimizers.schedules.PiecewiseConstantDecay
分段常数衰减
# tf1.x系列
tf.train.piecewise_constant(
x,
boundaries, # 列表,表示分割的边界;
values, # 列表,分段学习率的取值;
name=None):
# parameter
global_step = tf.Variable(0, trainable=False)
boundaries = [