神经网络优化篇:详解为超参数选择合适的范围(Using an appropriate scale to pick hyperparameters)
为超参数选择合适的范围
假设要选取隐藏单元的数量\(n^{[l]}\),假设,选取的取值范围是从50到100中某点,这种情况下,看到这条从50-100的数轴,可以随机在其取点,这是一个搜索特定超参数的很直观的方式。或者,如果要选取神经网络的层数,称之为字母\(L\),也许会选择层数为2到4中的某个值,接着顺着2,3,4随机均匀取样才比较合理,还可以应用网格搜索,会觉得2,3,4,这三个数值是合理的,这是在几个在考虑范围内随机均匀取值的例子,这些取值还蛮合理的,但对某些超参数而言不适用。
看看这个例子,假设在搜索超参数\(a\)(学习速率),假设怀疑其值最小是0.0001或最大是1。如果画一条从0.0001到1的数轴,沿其随机均匀取值,那90%的数值将会落在0.1到1之间,结果就是,在0.1到1之间,应用了90%的资源,而在0.0001到0.1之间,只有10%的搜索资源,这看上去不太对。
反而,用对数标尺搜索超参数的方式会更合理,因此这里不使用线性轴,分别依次取0.0001,0.001,0.01,0.1,1,在对数轴上均匀随机取点,这样,在0.0001到0.001之间,就会有更多的搜索资源可用,还有在0.001到0.01之间等等。
所以在Python中,可以这样做,使r=-4*np.random.rand()
,然后\(a\)随机取值,$ a =10^{r}\(,所以,第一行可以得出\)r \in [ 4,0]\(,那么\)a \in[10{-4},10]$,所以最左边的数字是\(10^{-4}\),最右边是\(10^{0}\)。
更常见的情况是,如果在\(10^{a}\)和\(10^{b}\)之间取值,在此例中,这是\(10^{a}\)(0.0001),可以通过\(\operatorname{}{0.0001}\)算出\(a\)的值,即-4,在右边的值是\(10^{b}\),可以算出\(b\)的值\(\operatorname{}1\),即0。要做的就是在\([a,b]\)区间随机均匀地给\(r\)取值,这个例子中\(r \in \lbrack - 4,0\rbrack\),然后可以设置\(a\)的值,基于随机取样的超参数\(a =10^{r}\)。
所以总结一下,在对数坐标下取值,取最小值的对数就得到\(a\)的值,取最大值的对数就得到\(b\)值,所以现在在对数轴上的\(10^{a}\)到\(10^{b}\)区间取值,在\(a\),\(b\)间随意均匀的选取\(r\)值,将超参数设置为\(10^{r}\),这就是在对数轴上取值的过程。
最后,另一个棘手的例子是给\(\beta\) 取值,用于计算指数的加权平均值。假设认为\(\beta\)是0.9到0.999之间的某个值,也许这就是想搜索的范围。记住这一点,当计算指数的加权平均值时,取0.9就像在10个值中计算平均值,有点类似于计算10天的温度平均值,而取0.999就是在1000个值中取平均。
所以和上面的内容类似,如果想在0.9到0.999区间搜索,那就不能用线性轴取值,对吧?不要随机均匀在此区间取值,所以考虑这个问题最好的方法就是,要探究的是\(1-\beta\),此值在0.1到0.001区间内,所以会给\(1-\beta\)取值,大概是从0.1到0.001,应用之前介绍的方法,这是\(10^{-1}\),这是\(10^{-3}\),值得注意的是,在之前的内容里,把最小值写在左边,最大值写在右边,但在这里,颠倒了大小。这里,左边的是最大值,右边的是最小值。所以要做的就是在\([-3,-1]\)里随机均匀的给r取值。设定了\(1- \beta = 10^{r}\),所以\(\beta = 1-10^{r}\),然后这就变成了在特定的选择范围内超参数随机取值。希望用这种方式得到想要的结果,在0.9到0.99区间探究的资源,和在0.99到0.999区间探究的一样多。
所以,如果想研究更多正式的数学证明,关于为什么要这样做,为什么用线性轴取值不是个好办法,这是因为当\(\beta\) 接近1时,所得结果的灵敏度会变化,即使\(\beta\)有微小的变化。所以\(\beta\) 在0.9到0.9005之间取值,无关紧要,的结果几乎不会变化。
但\(\beta\)值如果在0.999到0.9995之间,这会对的算法产生巨大影响,对吧?在这两种情况下,是根据大概10个值取平均。但这里,它是指数的加权平均值,基于1000个值,现在是2000个值,因为这个公式\(\frac{1}{1- \beta}\),当\(\beta\)接近1时,\(\beta\)就会对细微的变化变得很敏感。所以整个取值过程中,需要更加密集地取值,在\(\beta\) 接近1的区间内,或者说,当\(1-\beta\) 接近于0时,这样,就可以更加有效的分布取样点,更有效率的探究可能的结果。
希望能帮助选择合适的标尺,来给超参数取值。如果没有在超参数选择中作出正确的标尺决定,别担心,即使在均匀的标尺上取值,如果数值总量较多的话,也会得到还不错的结果,尤其是应用从粗到细的搜索方法,在之后的迭代中,还是会聚焦到有用的超参数取值范围上。
神经网络优化篇:详解为超参数选择合适的范围(Using an appropriate scale to pick hyperparameters)的更多相关文章
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- 命令创建.net core3.0 web应用详解(超详细教程)
原文:命令创建.net core3.0 web应用详解(超详细教程) 你是不是曾经膜拜那些敲几行代码就可以创建项目的大神,学习了命令创建项目你也可以成为大神,其实命令创建项目很简单. 1.cmd命令行 ...
- Dojo初探之2:设置dojoConfig详解,dojoConfig参数详解+Dojo中预置自定义AMD模块的四种方式(基于dojo1.11.2)
Dojo中想要加载自定义的AMD模块,需要先设置好这个模块对应的路径,模块的路径就是这个模块的唯一标识符. 一.dojoConfig参数设置详解 var dojoConfig = { baseUrl: ...
- yolo3各部分代码详解(超详细)
0.摘要 最近一段时间在学习yolo3,看了很多博客,理解了一些理论知识,但是学起来还是有些吃力,之后看了源码,才有了更进一步的理解.在这里,我不在赘述网络方面的代码,网络方面的代码比较容易理解,下面 ...
- JS-排序详解:冒泡排序、选择排序和快速排序
JS-排序详解-冒泡排序 说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b,a在 ...
- Dockerfile命令详解(超全版本)
制作Dockerfile为Docker入门学习的第一步(当然,除了环境搭建). 本文收集.整理了官网关于制作Dockerfile的全部命令(除SHELL没整理,这个就不弄了),可帮助大家快速进入Doc ...
- CentOS 7 下编译安装lnmp之PHP篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...
随机推荐
- 实践案例丨Pt-osc工具连接rds for mysql 数据库失败
[现象] 主机可以telent 通rds 端口,并且使用mysql-client 连接正常: 如下图所示:使用pt-osc工具连接时,一直没有响应,一直卡在哪里 等了4-5分钟左右后,会有响应,如下图 ...
- 基于lio-sam框架,教你如何进行回环检测及位姿计算
摘要:本篇主要解析lio-sam框架下,是如何进行回环检测及位姿计算的. 本文分享自华为云社区<lio-sam框架:回环检测及位姿计算>,作者:月照银海似蛟龙 . 前言 图优化本身有成形的 ...
- 云图说|分布式事务管理DTM:“买买买”背后的小帮手
摘要:分布式事务管理DTM通过提供高性能.高可靠.低侵入等核心价值,可以更好的帮助企业应对微服务场景带来的一致性问题. 本文分享自华为云社区<[云图说]第224期 分布式事务管理DTM,&quo ...
- 带你掌握二进制SCA检测工具的短板及应对措施
摘要:本文针对二进制SCA检测技术短板所面临的一些特殊场景.检测影响及应对措施进行详细分析和说明,希望对使用二进制SCA检测工具的测试和研发人员有所帮助. 本文分享自华为云社区<二进制SCA检测 ...
- [ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective settings
原因: maven 的配置文件 setting.xml 有错. 比如在配置文件中多了一行: 导致配置文件的格式不正确.
- Mac 向日葵设置
- Spring Boot实战:静态资源无法访问
发现 static 或 public 下面的图片无法访问 spring: profiles: active: dev resources: static-locations: classpath:/ ...
- python发送邮件+多人+附件 !!!!
import smtplib import os from email.header import Header from email.mime.text import MIMEText # shen ...
- 谣言粉碎机?Python验证股市操盘口诀
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 经常炒股的朋友,应该都听说过这段操盘口诀: 早上大跌要买,早上大涨要卖 下午大涨不追,下午大跌次日买 早 ...
- umount.nfs4: /home/videorec/sharedir: device is busy
用umount取消挂载时报错设备繁忙:device is busy.原因是还有进程在打开目录下的文件,可以先杀死进程,再卸载,或者强制卸载 umount 使用umount强制卸载,参数如下: -l ...