参考文献:Hyperband: Bandit-Based Configuration Evaluation for Hyperparameter Optimization算法
机器学习中模型性能的好坏每每与超参数(如batch size,filter size等)有密切的关系。最开始为了找到一个好的超参数,一般都是靠人工试错的方式找到"最优"超参数。可是这种方式效率太慢,因此相继提出了网格搜索(Grid Search, GS) 和 随机搜索(Random Search,RS)。数组
可是GS和RS这两种方法总归是盲目地搜索,因此贝叶斯优化(Bayesian Optimization,BO) 算法闪亮登场。BO算法能很好地吸收以前的超参数的经验,更快更高效地最下一次超参数的组合进行选择。可是BO算法也有它的缺点,以下:微信
为了解决上述问题,Hyperband算法被提出。在介绍Hyperband以前咱们须要理解怎样的超参数优化算法才算是好的算法,若是说只是为了找到最优的超参数组合而不考虑其余的因素,那么咱们那能够用穷举法,把全部超参数组合都尝试一遍,这样确定能找到最优的。可是咱们都知道这样确定不行,由于咱们还须要考虑时间,计算资源等因素。而这些因素咱们能够称为Budget,用$B$表示。dom
假设一开始候选的超参数组合数量是$n$,那么分配到每一个超参数组的预算就是$\frac{B}{n}$。因此Hyperband作的事情就是在$n$与$\frac{B}{n}$作权衡(tradeoff)。机器学习
上面这句话什么意思呢?也就是说若是咱们但愿候选的超参数越多越好,由于这样可以包含最优超参数的可能性也就越大,可是此时分配到每一个超参数组的预算也就越少,那么找到最优超参数的可能性就下降了。反之亦然。因此Hyperband要作的事情就是预设尽量多的超参数组合数量,而且每组超参数所分配的预算也尽量的多,从而确保尽量地找到最优超参数。函数
Hyperband算法对 Jamieson & Talwlkar(2015)提出的SuccessiveHalving算法作了扩展。因此首先介绍一下SuccessiveHalving算法是什么。oop
其实仔细分析SuccessiveHalving算法的名字你就能大体猜出它的方法了:假设有$n$组超参数组合,而后对这$n$组超参数均匀地分配预算并进行验证评估,根据验证结果淘汰一半表现差的超参数组,而后重复迭代上述过程直到找到最终的一个最优超参数组合。性能
基于这个算法思路,以下是Hyperband算法步骤:学习
注意上述算法中对超参数设置采样使用的是均匀随机采样,因此有算法在此基础上结合贝叶斯进行采样,提出了BOHB:Practical Hyperparameter Optimization for Deep Learning优化
文中给出了一个基于MNIST数据集的示例,并将迭代次数定义为预算(Budget),即一个epoch表明一个预算。超参数搜索空间包括学习率,batch size,kernel数量等。
令$R=81,\eta=3$,因此$s_{max}=4,B=5R=5×81$。
下图给出了须要训练的超参数组和数量和每组超参数资源分配状况。
由算法能够知道有两个loop,其中inner loop表示SuccessiveHalving算法。再结合下图左边的表格,每次的inner loop,用于评估的超参数组合数量愈来愈少,与此同时单个超参数组合能分配的预算也逐渐增长,因此这个过程能更快地找到合适的超参数。
右边的图给出了不一样$s$对搜索结果的影响,能够看到$s=0$或者$s=4$并非最好的,因此并非说$s$越大越好。
<footer style="color:white;;background-color:rgb(24,24,24);padding:10px;border-radius:10px;"><br> <h3 style="text-align:center;color:tomato;font-size:16px;" id="autoid-2-0-0"><br> <br> <center> <span>微信公众号:AutoML机器学习</span><br> <img src="https://ask.qcloudimg.com/draft/1215004/21ra82axnz.jpg" style="width:200px;height:200px"> </center> <b>MARSGGBO</b><b style="color:white;"><span style="font-size:25px;">♥</span>原创</b><br> <span>若有意合做或学术讨论欢迎私戳联系~<br>邮箱:marsggbo@foxmail.com</span> <b style="color:white;"><br> 2018-12-22<p></p> </b><p><b style="color:white;"></b><br> </p></h3><br> </footer>