SGDR学习率调整策略

SGDR学习率调整策略

介绍

论文SGDR: STOCHASTIC GRADIENT DESCENT WITHWARM RESTARTS

SGDR,以一种周期性调整学习率的方法,周期性地增大学习率

原因

  • 梯度收敛的值可能是空间中的鞍点或者是相对较大的极小值点。

  • 鞍点严重影响模型的学习率,较大的极小值点导致模型性能较差。

  • 空间半径较大的极小值点,模型的泛化能力较强

因此,适度增大学习率,可以使模型更快(学习率较大)地逃离鞍点,从而加速模型收敛。同时,假如收敛的极值点的空间半径较小,更大的学习率有利于让模型跳出这个盆地区域,从而收敛到另一个空间半径较大的极小值点。

方法

η m i n \eta_{min} ηmin η m a x \eta_{max} ηmax为学习率的范围, T c u r T_{cur} Tcur为目前的训练次数, T T T为总训练次数

image-20210903190346978

代码实现

"""
引用自论文Barlow Twins: Self-Supervised Learning via Redundancy Reduction
https://github.com/facebookresearch/barlowtwins
"""
def adjust_learning_rate(args, optimizer, loader, step):
    max_steps = args.epochs * len(loader)
    warmup_steps = 10 * len(loader)
    base_lr = args.batch_size / 256
    if step < warmup_steps:	# 热启动
        lr = base_lr * step / warmup_steps
    else:
        
        # 先减去warm-up的训练次数
        step -= warmup_steps
        max_steps -= warmup_steps
        # SGDR
        q = 0.5 * (1 + math.cos(math.pi * step / max_steps))
        end_lr = base_lr * 0.001
        lr = base_lr * q + end_lr * (1 - q)
        
    optimizer.param_groups[0]['lr'] = lr * args.learning_rate_weights
    optimizer.param_groups[1]['lr'] = lr * args.learning_rate_biases

参考

Cyclic Learning rate和SGDR-学习率调整策略论文两篇

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值