学习率衰减函数

训练前期学习率大,可以加快收敛速度,训练后期仍然使用较大的学习率,无法收敛到全局最小值,因此要减小学习率,保证后期平稳训练,更加接近最优点。可以人为经验指定,也可以随着迭代自适应衰减。

本文介绍一些 tensorflow 常用的学习率衰减方法。

 

1、指数衰减

def exponential_decay(
learning_rate, # 初始学习率
global_step, # 当前批次数
decay_steps, # 多少轮更新一次学习率(即总样本/批大小)
decay_rate, # 学习率衰减率(0,1)
staircase=False, # 是否离散衰减,默认为False,连续衰减
name=None # 操作的名字
)

decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)

衰减后的学习率 = 初始学习率 * 学习率衰减率(0,1)^(当前批次数 / 多少轮更新一次学习率(即总样本/批大小))

如果staircase=True,decayed_learning_rate = learning_rate * decay_rate ^ floor(global_step / decay_steps)

 

2、分段常数衰减

def piecewise_constant(
x, 
boundaries, # 分段边界,如[100000, 110000]
values, # 各段的学习率,[1.0, 0.5, 0.1]
name=None # 操作名
)

表示:

第1-100000步,学习率为1.0;

第100000-110000步,学习率为0.5;

其余为0.1

 

3、多项式衰减

def polynomial_decay(
learning_rate, # 初始学习率
global_step, # 当前批次数
decay_steps, # 多少轮更新一次学习率
end_learning_rate=0.0001, # 最终学习率
power=1.0, # 多项式的指数,默认为1,线性
cycle=False, # 定义学习率是否到达最低学习率后升高,然后再降低,默认False,保持最低学习率
name=None # 操作名
)

global_step = min(global_step, decay_steps)

decayed_learning_rate = (learning_rate - end_learning_rate) * (1 - global_step / decay_steps) ^ (power) + end_learning_rate

衰减后的学习率=(初始学习率 - 最终学习率)*(1 - 当前批次数/多少轮更新一次学习率)^ (多项式的指数)+最终学习率

 

4、自然指数衰减

def natural_exp_decay(
learning_rate, # 初始学习率
global_step, # 当前批次数
decay_steps, # 多少轮更新一次学习率
decay_rate, # 学习率衰减率 
staircase=False, # 是否离散衰减,默认为False,连续衰减
name=None # 操作名
)

decayed_learning_rate = learning_rate * exp(-decay_rate * global_step / decay_step)

衰减后的学习率 = 初始学习率 * exp( - 学习率衰减率 * 当前批次数 / 多少轮更新一次学习率)

 

5、反时间衰减

def inverse_time_decay(
learning_rate, # 初始学习率
global_step, # 当前批次数
decay_steps, # 多少轮更新一次学习率
decay_rate, # 学习率衰减率
staircase=False, # 是否离散衰减,默认为False,连续衰减
name=None # 操作名
)

decayed_learning_rate = learning_rate / (1 + decay_rate * global_step /decay_step)

衰减后的学习率 = 初始学习率 / (1 + 学习率衰减率 * 当前批次数 / 多少轮更新一次学习率)

如果 staircase=True,decayed_learning_rate = learning_rate / (1 + decay_rate * floor(global_step / decay_step))

 

6、余弦衰减

def cosine_decay(
learning_rate, # 初始学习率
global_step, # 当前批次数
decay_steps, # 多少轮更新一次学习率
alpha=0.0, 
name=None # 操作名
)

global_step = min(global_step, decay_steps)

cosine_decay = 0.5 * (1 + cos(pi * global_step / decay_steps))

decayed = (1 - alpha) * cosine_decay + alpha

decayed_learning_rate = learning_rate * decayed

 

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值