神经网络优化篇:详解为超参数选择合适的范围(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 ...
随机推荐
- 使用 Zpan 搭建低成本个人私有网盘,还不限速
摘要:本文就介绍一个不限速的低成本个人网盘--ZPan,相较于老牌的私有网盘 OwnCloud 等,Zpan 有一个独有的优势:不限速. 本文分享自华为云社区<使用 Zpan 搭建低成本个人私有 ...
- 毕昇 JDK:为啥是ARM 上超好用的 JDK
摘要:毕昇 JDK 是华为基于 OpenJDK 定制的开源版本,是一款高性能.可用于生产环境的 OpenJDK 发行版. 本文分享自华为云社区<[云驻共创]毕昇 JDK:"传奇再现&q ...
- 手把手教你如何配置DBeaver对接FusionInsigth MRS Spark2x
摘要:dbeaver是免费和开源为开发人员和数据库管理员通用数据库工具.本文介绍如何配置dbeaver对接FusionInsigth MRS Spark2x. 本文分享自华为云社区<DBeave ...
- 拥抱智能,AI 视频编码技术的新探索
随着视频与交互在日常生活中的作用日益突显,愈发多样的视频场景与不断提高的视觉追求对视频编码提出更高的挑战.相较于人们手工设计的多种视频编码技术,AI 编码可以从大数据中自我学习到更广泛的信号内在编码规 ...
- GOS会计凭证上传附件
1.GOS介绍 GOS是一个连接文档和SAP内各种对象的工具,在SAP的一些凭证中,可以通过GOS进行附件的上传.查看和删除等功能,例如采购订单.会计凭证等. 如果没有这个按钮,可以将当前登录用户的类 ...
- C# async await 异步执行方法封装 替代 BackgroundWorker
BackWork代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...
- Problem 1342B - Binary Period (思维)
AC代码: #include<bits/stdc++.h> using namespace std; int main() { //freopen("in.txt", ...
- 基于Kubernetes的Serverless PaaS稳定性建设万字总结
作者:许成铭(竞霄) 数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的 SLA 数字,更是与客户切身利益 ...
- vue中我改变了data中的一个值,但现在视图上没有实时更新,请问我怎么拿到更新后的值?
Vue在数据初始化的时候会对data,computed,watcher中的属性进行依赖收集,如果支持proxy,则直接使用proxy进行拦截,好处是可以深层次的进行拦截,如果不支持proxy,则使用o ...
- ReentrantLock 可重入锁总结
本文为博主原创,未经允许不得转载: ReentrantLock 是一种内置锁,也叫可重入锁(ReentrantLock),它允许线程再次获取已持有的同步锁,这样防止死锁的发生.在使用Reentrant ...