1506.01186-Cyclical Learning Rates for Training Neural Networks

论文中提出了一种循环调整学习率来训练模型的方式。

如下图:

通过循环的线性调整学习率,论文作者观察到的一种比较典型的曲线如下图:

图中,使用循环调整方式的模型,虽然训练中准确度有很大的波动,但是这种波动并不影像模型很快的收敛,并且以更快的速度收敛到了固定学习率或者学习率衰减方案中能达到的最高准确率。

这种方式需要设置的超参有三个, min bound,max bound ,step size。

step size一般选择epoch的step数的2-8倍。例如一个epoch里面有500步,则2000作为step size是不错的选择。

确定step size之后,使用一个简短的训练来确定 min-max bound,在一个训练里,以循环学习率的方式,线性的提升学习率,画出学习率与准确率关系的曲线。模型准确率最快增长的学习率适合用来做min bound,模型准确率增长减缓甚至直接出现负增长的地方,适合作max bound。如下图中所示:

模型一开始就出现了很快的准确率增长,所以选择0.001作为min bound,而0.005的位置出现了负增长,这里作为max bond。

另外论文提出了另外两种变种:

  • triangular2; the same as the triangular policy except the learning rate difference is cut in half at the end of each cycle. This means the learning rate difference drops after each cycle.

    每次cycle之间才做一次lr decay

  • exp range; the learning rate varies between the minimum and maximum boundaries and each boundary value declines by an exponential factor of gamme^iteration

    随着每个iteration都做一次lr decay

论文还尝试把循环学习率与各种优化算法都结合了一下,但是看结果,除了nestrov动量法,其他几种优化算法的效果都不好。

这是可以理解的,因为除了单纯的动量法,其他几种方法,都会针对学习率进行动态的调整。而循环学习率引入的学习率循环变化必然会破坏学习率动态调整的某些特性。所以结果就变得无法估计。

另外,针对学习率固定decay的效果与循环学习率的对比,论文作者单独设计了一个实验,循环学习率只循环一次,在学习率达到最小的时候,就固定住,或者做decay,不再上升,但是最后的结果,还是不如循环学习率的效果好。

这种循环学习率的方式,似乎是因为循环引入了更多的随机性?让梯度有了更多的机会往不同的方向探索?

论文中没有提出很好的理论解释。

1506.01186-Cyclical Learning Rates for Training Neural Networks的更多相关文章

  1. (转)A Recipe for Training Neural Networks

    A Recipe for Training Neural Networks Andrej Karpathy blog  2019-04-27 09:37:05 This blog is copied ...

  2. [Converge] Training Neural Networks

    CS231n Winter 2016: Lecture 5: Neural Networks Part 2 CS231n Winter 2016: Lecture 6: Neural Networks ...

  3. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. 请不要ctrl+c/ctrl+v作业. Optimization Methods Until now, you've always u ...

  4. Training Neural Networks: Q&A with Ian Goodfellow, Google

    Training Neural Networks: Q&A with Ian Goodfellow, Google Neural networks require considerable t ...

  5. 实现径向变换用于样本增强《Training Neural Networks with Very Little Data-A Draft》

    背景: 做大规模机器学习算法,特别是神经网络最怕什么--没有数据!!没有数据意味着,机器学不会,人工不智能!通常使用样本增强来扩充数据一直都是解决这个问题的一个好方法. 最近的一篇论文<Trai ...

  6. Learning How To Code Neural Networks

    原文:https://medium.com/learning-new-stuff/how-to-learn-neural-networks-758b78f2736e#.ly5wpz44d This i ...

  7. A Recipe for Training Neural Networks [中文翻译, part 1]

    最近拜读大神Karpathy的经验之谈 A Recipe for Training Neural Networks  https://karpathy.github.io/2019/04/25/rec ...

  8. [CS231n-CNN] Training Neural Networks Part 1 : activation functions, weight initialization, gradient flow, batch normalization | babysitting the learning process, hyperparameter optimization

    课程主页:http://cs231n.stanford.edu/   Introduction to neural networks -Training Neural Network ________ ...

  9. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Initialization)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. Initialization Welcome to the first assignment of "Improving D ...

随机推荐

  1. IMDG

    将内存作为首要存储介质不是什么新鲜事儿,在对主存的使用上,内存数据网格(In Memory Data Grid,IMDG)与IMDB类似,但二者在架构上完全不同.IMDG特性可以总结为以下几点: 数据 ...

  2. MySQL面试题中:主从同步部署介绍

    主从同步部署1.两台相同版本的mysql数据库,一台做主库,一台从库 主库开启binlog 在配置文件中的[mysqld]模块中添加log-bin=mysql-bin和server-id=1,一定要保 ...

  3. python基础知识2---核心风格

    阅读目录 一.语句和语法 二.变量定义与赋值 三.内存管理 内存管理: 引用计数: 简单例子 四.python对象 五.标识符 六.专用下划线标识符 七.编写模块基本风格 八.示范 一.语句和语法 # ...

  4. (转)Windows 平台下解决httpd.exe: syntax error on line 39

    近来在研究PHP,结果为了Apache的安装伤神不已...小白我在安装后,启动Apache的服务虽然可以,不过,在Apache sevice monitor 中启动services时就会出现如下的问题 ...

  5. k8s nodeport下访问请求未被分发到所有node的排错(转)

    原文 https://www.myf5.net/post/2343.htm 现象: 从内部某个pod的容器里直接访问service的cluster地址,请求可以被正常转发到各个node上的pod里 但 ...

  6. Scrapy实战篇(九)之爬取链家网天津租房数据

    以后有可能会在天津租房子,所以想将链家网上面天津的租房数据抓下来,以供分析使用. 思路: 1.以初始链接https://tj.lianjia.com/zufang/rt200600000001/?sh ...

  7. Python【每日一问】10

    问:请解释一下迭代器 答:可以被 __next__() 函数调用并不断返回下一个值的对象称为迭代器:Iterator

  8. LeetCode 797. All Paths From Source to Target

    题目链接:https://leetcode.com/problems/all-paths-from-source-to-target/description/ Given a directed, ac ...

  9. nil/Nil/NULL/NSNull

    nil/Nil/NULL/NSNull的区别 一个简单的小例子: NSObject *obj = nil; NSLog(@"%@",obj); =>null NSObject ...

  10. Markdown 简单语法

    标题 文本前面加上 '#' 和一个空格 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 加粗 文本两侧加上 '**' 加粗文本 斜体 文本两侧加上 '*' 斜体文本 斜体加粗 文本两侧加上 ...