学习率变更策略

学习率变更策略

2019年04月02日 16:29:21 急流勇进 阅读数 203更多

分类专栏: 技巧/经验/心得

如果让我投票给深度学习中,最不想调试,但又必须要小心调试的参数,毫无疑问会投给学习率,今天就来说说这个。

01 项目背景

我们选择了GHIM-10k数据集,这是一个图像检索数据集,包含20个类别,分别是日落,船舶,花卉,建筑物,汽车,山脉,昆虫等自然图像,各个类别拥有较好的多样性,而类别之间也有比较好的区分度。数据集共10000张图像,每个类别包含500张JPEG格式的大小为400×300或300×400的图像。

如下图就是其中的烟花类别。

定义了一个6层的卷积神经网络,网络结构如下:

细节咱就不多说,如果你想复现本文结果,可以发送关键词“有三AI训练营12-16”到后台获取网络配置等文件。

02 学习率变更策略

学习率是一个非常重要的参数,可以直接影响模型的收敛与否。不同的学习率变更策略也会影响最终的迭代结果。

下面以sgd优化方法,来介绍各种策略。caffe框架中的策略包括fixed,step,exp,inv,multistep,poly,sigmoid。

2.1 fixed

fixed,即固定学习率,这是最简单的一种配置,只需要一个参数。

lr_policy: "fixed"

base_lr: 0.01

如上图,在整个的优化过程中学习率不变,这是非常少使用的策略,因为随着向全局最优点逼近,学习率应该越来越小才能避免跳过最优点。

2.2 step

采用均匀降低的方式,比如每次降低为原来的0.1倍

lr_policy: "step"

base_lr: 0.01

stepsize: 10000

gamma:0.1

这是非常常用的一个学习率迭代策略,每次将学习率降低为原来的一定倍数,属于非连续型的变换,使用简单,而且效果通常较好。

不过从上图也可以看出,其实学习率的变化一点都不平滑。

2.3  multistep

采用非均匀降低策略,指定降低的step间隔,每次降低为原来的一定倍数。

lr_policy: "multistep"

gamma: 0.5

stepvalue: 10000

stepvalue: 30000

stepvalue: 60000

这是比step更加复杂的策略,也是采用非连续型的变换,但是变换的迭代次数不均匀,也是非常常用的策略,需要经验。

2.4 exp

这是一种指数变化,new_lr = base_lr * (gamma^iter),可知这是连续变化,学习率的衰减非常的快,gamma越大则衰减越慢,但是因为caffe中的实现使用了iter作为指数,而iter通常都是非常大的值,所以学习率衰减仍然非常快。

2.5 inv

new_lr = base_lr * (1 + gamma * iter) ^ (- power),可以看出,也是一种指数变换,参数gamma控制曲线下降的速率,而参数power控制曲线在饱和状态下学习率达到的最低值。

2.6 poly

new_lr = base_lr * (1 – iter/maxiter) ^ (power),可以看出,学习率曲线的形状主要由参数power的值来控制。当power = 1的时候,学习率曲线为一条直线。当power < 1的时候,学习率曲线是凸的,且下降速率由慢到快。当power > 1的时候,学习率曲线是凹的,且下降速率由快到慢。

2.7 sigmoid

new_lr = base_lr *( 1/(1 + exp(-gamma * (iter - stepsize))))

参数gamma控制曲线的变化速率。gamma必须小于0才能下降,而这在caffe中并不被支持。

究竟这些策略的实际表现结果如何呢?请看下面的实验结果。

03 实验结果

下面就展示以上的学习率策略下的实验结果,由于type=sigmoid不能进行学习率的下降,所以不进行对比。学习率的具体变更方式如下。

训练数据集大小9000,batchsize=64,可知10000次迭代时,epoch=64*10000/9000>70,在该学习率下应该已经充分训练了,实验结果如下。

收敛的结果如上,可知道都得到了收敛,但是效果不同。我们在这里要下几个结论,虽然只有一个案例,但是根据笔者多年使用经验,确实如此。

step,multistep方法的收敛效果最好,这也是我们平常用它们最多的原因。虽然学习率的变化是最离散的,但是并不影响模型收敛到比较好的结果。

其次是exp,poly。它们能取得与step,multistep相当的结果,也是因为学习率以比较好的速率下降,操作的确很骚,不过并不见得能干过step和multistep。

inv和fixed的收敛结果最差。这是比较好解释的,因为fixed方法始终使用了较大的学习率,而inv方法的学习率下降过程太快,这一点,当我们直接使用0.001固定大小的学习率时可以得到验证,最终收敛结果与inv相当。

在此问大家一个问题,你觉得上面的模型,收敛到最好的状态了吗?不妨后台留言讨论。

04 总结

今天只是小试牛刀,也挖了很多的坑给大家(我们以后会填上的)。如果不是为了刷指标,很多时候,学习率变更策略不太需要精挑细选,比如上面的step和multistep,实际表现差不多,笔者常使用multistep,虽然这确实是个经验活儿,不过再白痴也总不能傻到用fixed策略去训练。

否则,其他的提高精度的措施做的再到位,也很可能因此而废。

至于exp,inv,poly什么的,鄙人经验,貌似中看不中用。

原文地址:https://www.cnblogs.com/think90/p/11515053.html

时间: 2024-11-15 01:00:02

学习率变更策略的相关文章

PyTorch学习之六个学习率调整策略

PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 a. 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing.b. 自适应调整:自适应调整学习率 ReduceLROnPlateau.c. 自定义调整:自定义调整学习率 LambdaLR. 1 等间隔调整学习率 StepLR等间隔调整学习率,调整倍数为 ga

对CNN模块的分析

对 CNN 模块的分析,该论文(Systematic evaluation of CNN advances on the ImageNet)已经做过了,里面的发现是非常有帮助的: 使用没有 batchnorm 的 ELU 非线性或者有 batchnorm 的 ReLU. 使用一个学习到的 RGB 的彩色空间转换. 使用线性学习率衰退策略. 使用平均和最大池化层的和. 使用大约 128 到 256 的 mini-batch 大小.如果这对你的 GPU 而言太大,将学习率按比例降到这个大小就行. 使

ECOMP Architecture

摘要:       AT&T的Domain 2.0 (D2)计划聚焦于运用云技术(AT&T 集成云,the AT&T Integrated Cloud – AIC)和网络虚拟化技术来提供服务,以降低基本建设与运营费用,显著提升运营的自动化能力.ECOMP软件平台在D2环境下为承载级实时负载提供独立于产品/服务的设计.创建和生命周期管理能力.在实现AT&T D2的主要目标方面,ECOMP具有关键作用.ECOMP通过快速地部署新业务(由AT&T或第三方创建).创建云消费

JMeter:基本及参数化、关联

一.JMeter和LoadRunner对比 1.lr稳定,使用c写,jmeter跨平台,免费,开源,小巧,java写的: 2.jmeter没有进程方式,只有线程: 3.jmeter没有IP欺骗: 4.lr有不同带宽下的测试,jmeter没有. 二.JMeter的配置 1.path环境变量的配置: 程序的执行需要使用外部的指令javac,但是javac仅仅只能在jdk安装目录下的bin目录下执行,因此程序只能写入bin目录.程序开发过程中,不能将源代码写入JDK的安装目录,因此需要将源程序保存到任

软件架构————架构核对表

架构的典型组成部分 一.程序组织: 1.系统架构首先要以概括的形式对有关系统做一个综述.如果没有这种综述,要想将成千的局部图片拼成一幅完整的图画是相当伤脑筋的. 2.在架构中,应该发现对那些曾经考虑过的最终组织结构的替代方案的记叙,找到之所以选用最终的组织结构,而不用其他替代方案的理由. 3.架构应该定义程序的主要构造块.根据程序规模不同,各个构造块可能是单个类,也可能是有许多类组成的一个子系统. 4.应该明确定义各个构造块的责任.每个构造块应该负责某一个区域的事情,并且对其他构造块负责的区域知

Google大脑科学家贾杨清(Caffe缔造者)-微信讲座

Google大脑科学家贾杨清(Caffe缔造者)-微信讲座 机器学习Caffe 贾扬清 caffe 一.讲座正文: 大家好!我是贾扬清178,目前在Google Brain69,今天有幸受雷鸣师兄邀请来和大家聊聊Caffe48.没有太多准备,所以讲的不好的地方还请大家谅解. 我用的ppt671基本上和我们在CVPR上要做的tutorial是类似的,所以大家如果需要更多的内容的话,可以去tutorial.caffe.berkeleyvision.org,也欢迎来参加我们的tutorial:) 网页

通过Microsoft Azure服务设计网络架构的经验分享(转)

原文:http://www.infoq.com/cn/articles/azure-networking-tips 本文从产品设计和架构角度分享了 Microsoft Azure 网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构. Microsoft Azure 的网络架构特别针对企业私有云和混合云进行了设计,其中包含三个常用的服务: 虚拟网络(Virtual Network):连接本地网络与云端基础设施 流量管理器(Traffic Manager):将用

YOLO配置文件理解

[net] batch=64 每batch个样本更新一次参数. subdivisions=8 如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batch/subdivisions. 在darknet代码中,会将batch/subdivisions命名为batch. height=416 input图像的高 width=416 Input图像的宽 channels=3 Input图像的通道数 momentum=0.9 动量 decay=0.0005

谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版

谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版 一.讲座正文: 大家好!我是贾扬清237,目前在Google Brain83,今天有幸受雷鸣师兄邀请来和大家聊聊Caffe60.没有太多准备,所以讲的不好的地方还请大家谅解. 我用的ppt808基本上和我们在CVPR上要做的tutorial是类似的,所以大家如果需要更多的内容的话,可以去tutorial.caffe.berkeleyvision.org,也欢迎来参加我们的tutorial:) 网页上应该还有一些python的样例帮助大家上