如何找到最优学习率?

2017-11-30 17:07:21 来源:网络

原标题:如何找到最优学习率?

雷锋网按:本文作者Sherlock,本文首发于作者的知乎专栏《深度炼丹》, 雷锋网获其授权发布。

经过了大量炼丹的同学都知道,超参数是一个非常玄乎的东西,比如batch size,学习率等,这些东西的设定并没有什么规律和原因,论文中设定的超参数一般都是靠经验决定的。但是超参数往往又特别重要,比如学习率,如果设置了一个太大的学习率,那么loss就爆了,设置的学习率太小,需要等待的时间就特别长,那么我们是否有一个科学的办法来决定我们的初始学习率呢?

在这篇文章中,我会讲一种非常简单却有效的方法来确定合理的初始学习率。

学习率的重要性

目前深度学习使用的都是非常简单的一阶收敛算法,梯度下降法,不管有多少自适应的优化算法,本质上都是对梯度下降法的各种变形,所以初始学习率对深层网络的收敛起着决定性的作用,下面就是梯度下降法的公式

这里就是学习率,如果学习率太小,会导致网络loss下降非常慢,如果学习率太大,那么参数更新的幅度就非常大,就会导致网络收敛到局部最优点,或者loss直接开始增加,如下图所示。

学习率的选择策略在网络的训练过程中是不断在变化的,在刚开始的时候,参数比较随机,所以我们应该选择相对较大的学习率,这样loss下降更快;当训练一段时间之后,参数的更新就应该有更小的幅度,所以学习率一般会做衰减,衰减的方式也非常多,比如到一定的步数将学习率乘上0.1,也有指数衰减等。

这里我们关心的一个问题是初始学习率如何确定,当然有很多办法,一个比较笨的方法就是从0.0001开始尝试,然后用0.001,每个量级的学习率都去跑一下网络,然后观察一下loss的情况,选择一个相对合理的学习率,但是这种方法太耗时间了,能不能有一个更简单有效的办法呢?

一个简单的办法

Leslie N. Smith 在2015年的一篇论文“Cyclical Learning Rates for Training Neural Networks”中的3.3节描述了一个非常棒的方法来找初始学习率,同时推荐大家去看看这篇论文,有一些非常启发性的学习率设置想法。

这个方法在论文中是用来估计网络允许的最小学习率和最大学习率,我们也可以用来找我们的最优初始学习率,方法非常简单。首先我们设置一个非常小的初始学习率,比如1e-5,然后在每个batch之后都更新网络,同时增加学习率,统计每个batch计算出的loss。最后我们可以描绘出学习的变化曲线和loss的变化曲线,从中就能够发现最好的学习率。

下面就是随着迭代次数的增加,学习率不断增加的曲线,以及不同的学习率对应的loss的曲线。

从上面的图片可以看到,随着学习率由小不断变大的过程,网络的loss也会从一个相对大的位置变到一个较小的位置,同时又会增大,这也就对应于我们说的学习率太小,loss下降太慢,学习率太大,loss有可能反而增大的情况。从上面的图中我们就能够找到一个相对合理的初始学习率,0.1。

之所以上面的方法可以work,因为小的学习率对参数更新的影响相对于大的学习率来讲是非常小的,比如第一次迭代的时候学习率是1e-5,参数进行了更新,然后进入第二次迭代,学习率变成了5e-5,参数又进行了更新,那么这一次参数的更新可以看作是在最原始的参数上进行的,而之后的学习率更大,参数的更新幅度相对于前面来讲会更大,所以都可以看作是在原始的参数上进行更新的。正是因为这个原因,学习率设置要从小变到大,而如果学习率设置反过来,从大变到小,那么loss曲线就完全没有意义了。

实现

上面已经说明了算法的思想,说白了其实是非常简单的,就是不断地迭代,每次迭代学习率都不同,同时记录下来所有的loss,绘制成曲线就可以了。下面就是使用PyTorch实现的代码,因为在网络的迭代过程中学习率会不断地变化,而PyTorch的optim里面并没有把learning rate的接口暴露出来,导致显示修改学习率非常麻烦,所以我重新写了一个更加高层的包mxtorch,借鉴了gluon的一些优点,在定义层的时候暴露初始化方法,支持tensorboard,同时增加了大量的model zoo,包括inceptionresnetv2,resnext等等,提供预训练权重,model zoo参考于Cadene的repo。目前这个repo刚刚开始,欢迎有兴趣的小伙伴加入我。

下面就是部分代码,近期会把找学习率的代码合并到mxtorch中。这里使用的数据集是kaggle上的dog breed,使用预训练的resnet50,ScheduledOptim的源码点这里。

criterion = torch.nn.CrossEntropyLoss()net = model_zoo.resnet50(pretrained=True)net.fc = nn.Linear(2048, 120)with torch.cuda.device(0):
  net = net.cuda()basic_optim = torch.optim.SGD(net.parameters(), lr=1e-5)optimizer = ScheduledOptim(basic_optim)lr_mult = (1 / 1e-5) ** (1 / 100)lr = []losses = []best_loss = 1e9for data, label in train_data:
   with torch.cuda.device(0):
       data = http://tech.ifeng.com/a/20171130/Variable(data.cuda())
       label = Variable(label.cuda())
   # forward
   out = net(data)
   loss = criterion(out, label)
   # backward
   optimizer.zero_grad()
   loss.backward()
   optimizer.step()
   lr.append(optimizer.learning_rate)
   losses.append(loss.data[0])
   optimizer.set_learning_rate(optimizer.learning_rate * lr_mult)
   if loss.data[0] < best_loss:
       best_loss = loss.data[0]
   if loss.data[0] > 4 * best_loss or optimizer.learning_rate > 1.:
       breakplt.figure()plt.xticks(np.log([1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1]), (1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1))plt.xlabel('learning rate')plt.ylabel('loss')plt.plot(np.log(lr), losses)plt.show()plt.figure()plt.xlabel('num iterations')plt.ylabel('learning rate')plt.plot(lr)

one more thing

通过上面的例子我们能够有一个非常有效的方法寻找初始学习率,同时在我们的认知中,学习率的策略都是不断地做decay,而上面的论文别出心裁,提出了一种循环变化学习率的思想,能够更快的达到最优解,非常具有启发性,推荐大家去阅读阅读。

,如何美好的反义词 找到最优学习率?

相关:

仁光科技未来智能界面首次亮相互联网大会原标题:仁光科技未来智能界面首次亮相互联网大会 风起云涌、气象万千的互联网时代,如何把握机遇,让互联网更好造福人类?全球互联网界政要和行业大佬又一次相聚在白墙黛瓦的浙江乌镇,开始了新的思考。 12月3-5日,世界互联网风口在乌镇。 本次互联网大会的主题是“发展数字经济,促进开放共享——携手共建网络空间命运共同体”。数字经济众望所归,成为焦点。数字经济作为一种新的经济形态,正成为转型升级的重要驱动力..

於菲公开信回应:内讧与我无关 小心迅雷成快播第二原标题:於菲公开信回应:内讧与我无关 小心迅雷成快播第二 雷锋网报道,11月30日上午,原迅雷高级副总裁於菲针对其涉嫌利益输送一事作出回应,称陈磊团队对其谣言中伤,蓄意抹黑,并表示: 迅雷金融公司与迅雷集团之间的投资协议和业务合作条款,严格按照迅雷内部合同审核签订流程操作,不存在任何瑕疵; 於菲本人从未成为迅雷金融公司的实际控制人,后辞去金融业务相关公司所有职务,不再在迅雷金融公司持有任何..

上王者不是梦 X20王者荣耀周年庆限量版来了原标题:上王者不是梦 X20王者荣耀周年庆限量版来了 前段时间,王者荣耀举办了盛大的周年庆典。作为周年庆合作伙伴的vivo也表示,为庆祝王者荣耀周年,将带来一款vivoX20全面屏手机王者荣耀周年庆限量版,让玩家从内而外沉浸在王者荣耀的游戏世界。 王者荣耀周年庆刚刚过去不久的今天,vivo正式携全新的X20王者荣耀周年庆限量版亮相,全新设计惊艳了不少网友,X20王者荣耀周年庆限量版到底长什么样,我们一起来看看吧。..

11月30日晚间上市公司利好消息一览(附名单)   沪深两市多家上市公司11月30日晚间发布重要公告,以下为利好的消息汇总:   大宗交易方式,以自有资金或自筹资金对公司股票进行增持,累计增持比例不超过公司总股本的2%。    (责任编辑:DF062)

兄弟创业倾力支持《大梦小家》讲述现代袍泽之情原标题:兄弟创业倾力支持《大梦小家》讲述现代袍泽之情 图片由宣传方提供 为普通人住宅装修,也为梦想助力;帮助平凡的人前进,也帮助温暖的爱传递,本期《大梦小家》接到一位创业公司老板的委托来到杭州,帮助他为自己的好兄弟兼合伙人改善生活环境,由海泉、苏醒、吉克隽逸组成的“梦想行动队”也将在这里继续完成自己的温暖使命。 兄弟一家倾力扶持创业 事事铭记一心报答恩情 委托人张宁,是一家贸易公司的创始人..

联合国中国代表:强烈敦促朝鲜停止加剧半岛紧张行动原标题:常驻联合国代表团临时代办吴海涛大使在安理会朝鲜发射弹道导弹问题公开会上的发言主席先生:感谢费尔特曼副秘书长和卡尔迪大使的通报。安理会决议对朝鲜利用弹道导弹技术进行发射活动有明确规定。中方对朝方有关发射活动表示严重关切和反对。我们强烈敦促朝方遵守安理会相关决议,停止采取加剧朝鲜半岛紧张的行动。最近一段时间,朝鲜半岛局势总体稳定,这为推动政治外交努力提供了“窗口期”。但遗憾的是,这一“窗口期..

证监会:2017年截止10月底共罚没款共计63.61亿 超去年总和摘要 【证监会:2017年截止10月底共罚没款共计63.61亿元 超过去年全年总和】宣昌能对全系统行政处罚工作所取得的成效给予了充分肯定,2017年截止10月底,共作出182项行政处罚决定,罚没款共计63.61亿元,超过去年全年总和,共对34人实施市场禁入,接近去年全年水平,同时指出,当前执法环境日趋严峻复杂,执法压力不断增大,执法工作的中心地位日益凸显,需要执法战线全体同志主动作为,凝聚执法合力,..

刘士余:资本市场的发展必须以充分的信息披露为核心摘要 【刘士余:资本市场的发展必须以充分的信息披露为核心】刘士余主席出席纪念潘序伦先生创办立信九十周年活动,刘士余指出,资本市场的发展必须以充分的信息披露为核心,公众公司披露的信息尤其是会计信息是投资者决策的重要依据。   2017年11月28日下午,中国证监会主席刘士余在上海出席纪念潘序伦先生创办立信九十周年活动并致辞..

陈小春Jasper同台献舞 杜江吴尊化身迷叔疯狂打call陈小春Jasper凤凰网娱乐讯 近日,在最新播出的《爸爸去哪儿5》中,陈小春和Jasper为大家演唱英文歌曲,父子俩边唱边跳,画面十分温馨,吸引了一众迷叔迷妹。父子俩与观众互动在视频中可以看到,父子俩还亲切地与观众互动,neinei和小山竹被舞台上的节目吸引住了目光,而杜江和吴尊则是化身迷叔,为其疯狂打call,颇有演唱会现场的氛围。neinei和小山竹吴尊杜江打call网友们看到之后都被萌化了,纷纷表示:“Jasper你真是个万人..

每年要进850亿欧元假货 欧盟要设假货国家观察名单   当地时间29日,欧盟委员会宣布为加大打击假货力度,将对那些进入欧洲的假货和盗版产品来源国家和在线市场制定观察名单。  根据欧盟方面提供的数据,每年进入欧盟的假货占欧盟总进口量的5%左右,价值在850亿欧元,而根据欧盟知识产权局(EUIPO)的统计,中国、黑山共和国以及马来西亚等国都是进入欧盟假货的主要来源国,进入欧盟的主要假货则包括鞋类、皮革制品、服装、电器和..