学习率(Learning rate)的理解以及如何调整学习率
1. 什么是学习率(Learning rate)?
学习率(Learning rate)作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。
这里以梯度下降为例,来观察一下不同的学习率对代价函数的收敛过程的影响(这里以代价函数为凸函数为例):
回顾一下梯度下降的代码:
repeat{
$ \theta_j = \theta_j - \alpha \frac{\Delta J(\theta)}{\Delta \theta_j} $
}
当学习率设置的过小时,收敛过程如下:
当学习率设置的过大时,收敛过程如下:
由上图可以看出来,当学习率设置的过小时,收敛过程将变得十分缓慢。而当学习率设置的过大时,梯度可能会在最小值附近来回震荡,甚至可能无法收敛。
我们再来看一下学习率对深度学习模型训练的影响:
可以由上图看出,固定学习率时,当到达收敛状态时,会在最优值附近一个较大的区域内摆动;而当随着迭代轮次的增加而减小学习率,会使得在收敛时,在最优值附近一个更小的区域内摆动。(之所以曲线震荡朝向最优值收敛,是因为在每一个mini-batch中都存在噪音)。
因此,选择一个合适的学习率,对于模型的训练将至关重要。下面来了解一些学习率调整的方法。
2. 学习率的调整
2.1 离散下降(discrete staircase)
对于深度学习来说,每 $ t $ 轮学习,学习率减半。对于监督学习来说,初始设置一个较大的学习率,然后随着迭代次数的增加,减小学习率。
2.2 指数减缓(exponential decay)
对于深度学习来说,学习率按训练轮数增长指数差值递减。例如:
\[ \alpha = 0.95^{epoch\_num} \cdot \alpha_0 \]
又或者公式为:
\[ \alpha = \frac{k}{\sqrt {epoch\_num}} \]
其中epoch_num为当前epoch的迭代轮数。不过第二种方法会引入另一个超参 $ k $ 。
2.3 分数减缓(1/t decay)
对于深度学习来说,学习率按照公式 $ \alpha = \frac{\alpha}{1+ {decay _ rate} * {epoch _ num}} $ 变化, decay_rate控制减缓幅度。
引用及参考:
[1] https://mooc.study.163.com/learn/2001281003?tid=2001391036#/learn/content?type=detail&id=2001702125&cid=2001693086
[2] https://www.cnblogs.com/keguo/p/6244253.html
[3] https://blog.csdn.net/jningwei/article/details/79243800
[4] https://baijiahao.baidu.com/s?id=1591531217345055627&wfr=spider&for=pc
写在最后:本文参考以上资料进行整合与总结,属于原创,文章中可能出现理解不当的地方,若有所见解或异议可在下方评论,谢谢!
若需转载请注明:https://www.cnblogs.com/lliuye/p/9471231.html
学习率(Learning rate)的理解以及如何调整学习率的更多相关文章
- 深度学习: 学习率 (learning rate)
Introduction 学习率 (learning rate),控制 模型的 学习进度 : lr 即 stride (步长) ,即反向传播算法中的 ηη : ωn←ωn−η∂L∂ωnωn←ωn−η∂ ...
- 学习率 Learning Rate
本文从梯度学习算法的角度中看学习率对于学习算法性能的影响,以及介绍如何调整学习率的一般经验和技巧. 在机器学习中,监督式学习(Supervised Learning)通过定义一个模型,并根据训练集上的 ...
- mxnet设置动态学习率(learning rate)
https://blog.csdn.net/xiaotao_1/article/details/78874336 如果learning rate很大,算法会在局部最优点附近来回跳动,不会收敛: 如果l ...
- 权重衰减(weight decay)与学习率衰减(learning rate decay)
本文链接:https://blog.csdn.net/program_developer/article/details/80867468“微信公众号” 1. 权重衰减(weight decay)L2 ...
- Dynamic learning rate in training - 培训中的动态学习率
I'm using keras 2.1.* and want to change the learning rate during training. I know about the schedul ...
- ubuntu之路——day8.5 学习率衰减learning rate decay
在mini-batch梯度下降法中,我们曾经说过因为分割了baby batch,所以迭代是有波动而且不能够精确收敛于最小值的 因此如果我们将学习率α逐渐变小,就可以使得在学习率α较大的时候加快模型训练 ...
- Pytorch调整学习率
每隔一定的epoch调整学习率 def adjust_learning_rate(optimizer, epoch): """Sets the learning rate ...
- 跟我学算法-吴恩达老师(mini-batchsize,指数加权平均,Momentum 梯度下降法,RMS prop, Adam 优化算法, Learning rate decay)
1.mini-batch size 表示每次都只筛选一部分作为训练的样本,进行训练,遍历一次样本的次数为(样本数/单次样本数目) 当mini-batch size 的数量通常介于1,m 之间 当 ...
- Keras 自适应Learning Rate (LearningRateScheduler)
When training deep neural networks, it is often useful to reduce learning rate as the training progr ...
随机推荐
- ubuntu终端下快捷键之--字体放大缩小
1.快捷键 Ctrl - 字体缩小 Ctrl + (有的电脑是“Ctrl Shift +” 三个按键同时按下)字体放大 Ctrl 0 恢复默认字体 2.终端设置默认字体 在终端下,点击右键- ...
- Get與Post的區別--總結隨筆
關於Get與Post的區別的文章,在網上太多了:有優點有缺點,今天我給各位大哥做一個總結性的隨筆,還請多多包涵~ 首先是W3School上的答案,請查收: GET在浏览器回退时是无害的,而POST会再 ...
- svn版本控制常用命令
查看未提交的文件(含新增的和修改过得) svn status 检出代码 svn checkout svn://192.168.0.10/v2019.1/spark \ /Users/zhangsa ...
- Java基础——常用类之日期时间类
如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...
- getopt例子
(本例基于win7 + python3.4) import getopt, sys ''' getopt 模块专门用来处理命令行参数 函数 getopt(args, shortopts, longop ...
- Deep Learning综述[上]
Deep-Learning-Papers-Reading-Roadmap: [1] LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. "Dee ...
- python爬虫之Scrapy框架(CrawlSpider)
提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬去进行实现的(Request模块回调) 方法二:基于CrawlSpi ...
- vs2012调试时,抛出异常的等待时间很慢,原来是QQ电脑管家搞的鬼。
vs2012调试时,抛出异常的等待时间以前都正常,不知什么时候起变得很慢,就是出错以后要等30秒以上才会提示,一直找不到原因. 今天看了一下任务管理器,发现有个QQpcrTP进程(好像是,因为卸载了) ...
- WHO ARE YOU?--writeup
TIPS:广东强网杯线上题 总结知识点:BASE64,ROT13 0x00 Base64 什么是Base64? Base64编码原理 其用途 什么是Base64? Base64是一种基于64个可打印字 ...
- k8s常用命令记录
目录 kubectl常用命令 kubectl get pod -n dev 查看日志 查看pod详情 删除pod 删除job 进入pod里面 查看namespace 创建namespace 删除nam ...