论文链接

论文内容关键在于两点:

1.CLR提出了一种在神经网络训练中设置global learning rates的方法,用来解决手动实验去寻找最优学习率的问题,不需要额外的计算,且通常需要更少的迭代次数。它就是让学习率在迭代过程中周期性变化,而不是固定的值。

2.如何去估计CLR中的超参,如周期长度(cycle length)和边界值(boundary values)。

1.Cyclical Learning Rates

上图是Triangular learning rate policy(线性增加和减少),我们来看看计算式中的参数含义。

1.opt.LR是指定的最小学习率,等于图中的base_lr

2.epochCounter是当前epochs数

3.lr是当前用于迭代的学习率

4.stepsize是周期长度(cycle length)二分之一

5.max_lr是最大学习率,等于图中的max_lr

当epochCounter=stepsize时,x=0 lr=maxLR;当epochCounter=2*stepsize时,x=1,lr=base_lr;随着epochCounter的增加学习率在边界范围内周期变化。

另外两种策略如下

2.估计CLR中的超参

(1)cycle length = 2*stepsize

epoch = 训练集样本量/batchsize 

stepsize等于2~10的epoch

(2)boundary

通过绘制accuracy VS learning rate,例如下图

注意到准确率开始迅速增加的临界点和开始下降或者发生波动的临界点,这两种临界点就是边界值,base_lr和max_lr。

更一般的学习率和损失函数关系如下图

3.Pytorch中CLR的实现

# code inspired from: https://github.com/anandsaha/pytorch.cyclic.learning.rate/blob/master/cls.py
class CyclicLR(object):def __init__(self, optimizer, base_lr=1e-3, max_lr=6e-3,step_size=2000, mode='triangular', gamma=1.,scale_fn=None, scale_mode='cycle', last_batch_iteration=-1):if not isinstance(optimizer, Optimizer):raise TypeError('{} is not an Optimizer'.format(type(optimizer).__name__))self.optimizer = optimizerif isinstance(base_lr, list) or isinstance(base_lr, tuple):if len(base_lr) != len(optimizer.param_groups):raise ValueError("expected {} base_lr, got {}".format(len(optimizer.param_groups), len(base_lr)))self.base_lrs = list(base_lr)else:self.base_lrs = [base_lr] * len(optimizer.param_groups)if isinstance(max_lr, list) or isinstance(max_lr, tuple):if len(max_lr) != len(optimizer.param_groups):raise ValueError("expected {} max_lr, got {}".format(len(optimizer.param_groups), len(max_lr)))self.max_lrs = list(max_lr)else:self.max_lrs = [max_lr] * len(optimizer.param_groups)self.step_size = step_sizeif mode not in ['triangular', 'triangular2', 'exp_range'] \and scale_fn is None:raise ValueError('mode is invalid and scale_fn is None')self.mode = modeself.gamma = gammaif scale_fn is None:if self.mode == 'triangular':self.scale_fn = self._triangular_scale_fnself.scale_mode = 'cycle'elif self.mode == 'triangular2':self.scale_fn = self._triangular2_scale_fnself.scale_mode = 'cycle'elif self.mode == 'exp_range':self.scale_fn = self._exp_range_scale_fnself.scale_mode = 'iterations'else:self.scale_fn = scale_fnself.scale_mode = scale_modeself.batch_step(last_batch_iteration + 1)self.last_batch_iteration = last_batch_iterationdef batch_step(self, batch_iteration=None):if batch_iteration is None:batch_iteration = self.last_batch_iteration + 1self.last_batch_iteration = batch_iterationfor param_group, lr in zip(self.optimizer.param_groups, self.get_lr()):param_group['lr'] = lrdef _triangular_scale_fn(self, x):return 1.def _triangular2_scale_fn(self, x):return 1 / (2. ** (x - 1))def _exp_range_scale_fn(self, x):return self.gamma**(x)def get_lr(self):step_size = float(self.step_size)cycle = np.floor(1 + self.last_batch_iteration / (2 * step_size))x = np.abs(self.last_batch_iteration / step_size - 2 * cycle + 1)lrs = []param_lrs = zip(self.optimizer.param_groups, self.base_lrs, self.max_lrs)for param_group, base_lr, max_lr in param_lrs:base_height = (max_lr - base_lr) * np.maximum(0, (1 - x))if self.scale_mode == 'cycle':lr = base_lr + base_height * self.scale_fn(cycle)else:lr = base_lr + base_height * self.scale_fn(self.last_batch_iteration)lrs.append(lr)return lrs

4.Pytorch中CLR类的使用

model = NeuralNet()model.cuda()loss_fn = torch.nn.BCEWithLogitsLoss(reduction='sum')step_size = 300base_lr, max_lr = 0.001, 0.003   optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()),lr=max_lr)################################################################################################scheduler = CyclicLR(optimizer, base_lr=base_lr, max_lr=max_lr,step_size=step_size, mode='exp_range',gamma=0.99994)###############################################################################################

DeepLearning论文阅读笔记(一):Cyclical Learning Rates for Training Neural Networks(CLR)相关推荐

  1. 论文阅读笔记:Link Prediction Based on Graph Neural Networks

    文章目录 说明 Abstract 1 Introduction 2 Preliminaries Notations Latent features and explicit features Grap ...

  2. 论文阅读笔记:SCAN: Learning to Classify Images without Labels

    论文阅读笔记:SCAN: Learning to Classify Images without Labels 摘要 简介和相关工作 方法 表征学习 语义聚类损失 2.3 通过自标记进行微调 3 实验 ...

  3. 论文阅读 (78):FlowNet: Learning Optical Flow with Convolutional Networks

    文章目录 1 概述 1.1 题目 1.2 摘要 1.3 代码 1.4 引用 2 网络架构 2.1 收缩部分 2.2 扩展部分 2.3 变分细化 (Variational refinement) 3 训 ...

  4. 论文阅读 - Joint Beat and Downbeat Tracking with Recurrent Neural Networks

    文章目录 1 概述 2 信号预处理 3 分类神经网络 4 动态贝叶斯网络(HMM) 4.1 原始的bar pointer model 4.2 原始的bar pointer model的缺点 4.3 改 ...

  5. 论文阅读——ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

    ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 改进版通道注意力 from CVPR2020 期 ...

  6. 论文阅读之《DeepIlluminance: Contextual IlluminanceEstimation via Deep Neural Networks》

    ArXiv2019 Jun Zhang合肥工业大学 Tong Zheng合肥工业大学 Shengping Zhang哈尔滨工业大学(威海) Meng Wang合肥工业大学 Introduction 回 ...

  7. 论文阅读笔记:ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections

    提示:阅读论文时进行相关思想.结构.优缺点,内容进行提炼和记录,论文和相关引用会标明出处. 文章目录 前言 介绍 相关工作 神经投影网络(Neural Projection Networks) Pro ...

  8. 论文阅读笔记--Federated Continual Learning with Weighted Inter-client Transfer

    本文提出了一种新的场景,联邦学习(FL)的每个client各自执行一系列的持续学习(Continual Learning)任务,为了说明这个场景的实际意义,文章给出了这样一个场景: 若干个医院要通过一 ...

  9. 论文阅读笔记《Few-Shot Learning with Global Class Representations》

    小样本学习&元学习经典论文整理||持续更新 核心思想   本文提出一种基于度量学习的小样本学习算法.与其他算法将训练集分成基础类别和新类别,进行两个阶段的训练方式不同,本文将包含大量样本的基础 ...

  10. 论文阅读笔记《Meta-Transfer Learning for Few-Shot Learning》

    小样本学习&元学习经典论文整理||持续更新 核心思想   本文提出一种基于迁移学习的元学习算法(Meta-Transfer Learning,MTL)用于解决小样本学习问题,通过对深层卷积神经 ...

最新文章

  1. 第四章-分布式数据库HBase
  2. 100w氮化镓充电器_SHARGE闪极-100W大功率氮化镓充电器体验
  3. 求一个字符串的前缀与另一个字符串的后缀的最大相同子串
  4. 逆反过程的学习会如何
  5. MaxCompute 实现增量数据推送(全量比对增量逻辑)
  6. spring事务的传播性的理解
  7. 3月国内网站流量:腾讯夺第二 360安全中心降至第三
  8. 952开头的电话一天响两三次,不是诈骗就是推销,请问该怎么屏蔽呢?
  9. openwrt下ipk生成过程及原理
  10. Word解析之Word内部结构
  11. HTML页面转PDF 思路
  12. audio音频使用天坑
  13. JAVA期末考广东科技学院,我是叩丁狼广州Java老学员,我来说说自己的故事
  14. Hadoop大数据入门到实战(第六节)- HDFS文件系统(JavaApi)
  15. D2. Two Hundred Twenty One (hard version)
  16. ConcurrentHashMap学习
  17. cad指示箭头快捷键命令_cad中箭头怎么画_cad箭头画法命令 - 学无忧
  18. A Game of Thrones(33)
  19. 防火墙和入侵防护IPS
  20. 2021上海交大附中高考成绩查询,2021年上海高中排名

热门文章

  1. pygame简易超级玛丽制作
  2. 串口通信的隔离传输方案记录
  3. Jenkins——Jenkins+harbor+gitlab(git) 部署maven项目
  4. 性能优化之mysql优化_性能优化之MySQL优化
  5. Windows下如何对声卡音频输出进行录音
  6. cf487e Tourists 题解(圆方树)
  7. 360安全卫士企业版本 跳过卸载保护密码
  8. 微信 获取signature签名
  9. oracle数据投毒,Oracle 监听投毒COST解决
  10. PLC1200 模拟量采集