博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
超参数搜索——网格搜索和随机搜索
阅读量:6416 次
发布时间:2019-06-23

本文共 945 字,大约阅读时间需要 3 分钟。

我们在搜索超参数的时候,如果超参数个数较少(三四个或者更少),那么我们可以采用网格搜素,一种穷尽式的搜索方法。

但是当超参数个数比较多的时候,我们仍然采用网格搜索,那么搜索所需时间将会指数级上升。

比如我们有四个超参数,每个范围都是[10,100],那么我们所需的搜索次数是10*10*10*10=10^4。

如果再增加一个超参数,那么所需的搜索次数是10^5,搜索时间指数级上升。

 

所以很多很多个超参数的情况,假如我们仍然采用网格搜索,那么……gg,算到天荒地老就不一定有结果。

所以出现了这样的做法,网格搜索,但是网格取稀疏一点,比如上面例子中的[10,100],我们就去10,30,50,70,90这几个数,降低一下搜索次数。

这样变快了一点,但是有可能找到的超参数不是全局最小。

 

所以又有人提出了随机搜索的方法,随机在超参数空间中搜索几十几百个点,其中就有可能会有比较小的值。

这种做法比上面稀疏化网格的做法快,而且实验证明,随机搜索法结果比稀疏化网格法稍好。

 

笔者刚刚在寻找资料的时候,还看到了一种做法,批量化随机搜索法。具体做法如下:

假设我们要找25个点,那么我们把这25个分成5个批次,每个批次5个点。

我们做第一个批次的时候,假设超参数范围是[0,100],我们有1个超参数(容易理解),那么我们把这个范围切分为[0,20],[20,40],[40,60],[60,80],[80,100]。

也就是把范围平均切分为5份,我们在每一份之中随机找到一个点,最终可以找到5个点,我们再找到里面的最小点。

接着,在第二个批次之中,我们在找到的最小点附近,再找5个随机点,在这5个随机点之中得到最小点。

接着,在第三个批次之中,重复同样的操作。

这样可以保证我们找到一个局部最小值点,结果可能会比随机搜索稍好一点。

当然,如果随机搜索直接得到更好的局部最小值,甚至全局最小值,那么……只能说你的运气爆表了。

这种批次随机寻找的方法,基本上可以说优于稀疏化网格法,但不一定优于随机搜索法。

 

参考资料:

1、笔者刚刚提到的批次随机搜索法的来源:

2、知乎关于这部分知识的一些问答:

转载于:https://www.cnblogs.com/chenjx85/p/9430950.html

你可能感兴趣的文章
看图轻松理解数据结构与算法系列(Radix树)
查看>>
写在专栏前-Java那些事儿
查看>>
亿万级访问量下的前端同构直出实践
查看>>
SpringSession系列-分布式 session 实现方案及 SpringSession 功能分析
查看>>
Sybase数据库安全
查看>>
令牌的故事(CVE-2015-0002)
查看>>
数据结构——二叉树的存储结构
查看>>
HTTP状态码简明宝典
查看>>
Java 基础 - 对java多态的理解
查看>>
iOS开发笔记(五):UIScrollView实现原理
查看>>
HTTPie 官方文档中文翻译版
查看>>
Bulk 异常引发的 Elasticsearch 内存泄漏
查看>>
Java 8 Stream
查看>>
Android6 0新应用权限管理机制详解
查看>>
leetCode 6 ZigZag Conversion
查看>>
作为一位Java架构师需要点亮的那些技能树
查看>>
一个行为标准Popup组件(vue), 强大的过度动画支持, 和定位支持
查看>>
移动端适配知识你到底知多少
查看>>
Java基础笔记16
查看>>
TiDB 在 G7 的实践和未来
查看>>