如果想尝试调整一些超参数,该如何选择调试值呢?
在早一代的机器学习算法中,如果有两个超参数,常见的做法是在网格中取样点,然后系统的研究这些数值,例如放置的点,实际证明,网格可以是,也可多或可少。
对于这个例子,可以尝试所有的25个点,然后选择哪个参数效果最好。当参数的数量相对较少时,这个方法很实用。
在深度学习领域,推荐使用下面的做法。随机选择点,可以选择同等数量的25个点,接着用这些随机取的点试验超参数的效果,之所以这么做是因为对于你要解决的问题而言,很难提前知道那个超参数最重要。举个例子,假设超参数一是学习速率,取一个极端例子,假设超参数二是算法中分母中,这种情况下的取值很重要,而的取值则无关紧要。
如果在网格中取点,接着试验了的5个取值,那么会发现无论取何值,结果基本上都是一样的。一共有25种模型,但是进行试验的值只有5个。如果随机取值,可以试验25个独立的的值,这样似乎可以发现效果最好的那个。
这种两个参数的情况,如果有三个超参数,要搜索的不是一个方格,而是一个立方体,接着在三维立方体中取值,你会试验大量的更多的值。
在实践中,要搜索的可能不止三个超参数,有时很难预知哪个是最重要的超参数。对于具体应用而言,随机取值而不是网格取值表明,探究了更多重要超参数的潜在值。
无论结果是什么,当你给超参数取值时,另一个惯例是采用从粗糙到精细的策略。比如在二维的例子中进行取值,也许会发现效果最好的某个点,也许这个点周围的其它一些点效果也很好。那么接下来要做的是放大这块小区域,然后在其中更密集地取值或随机取值,聚集更多的资源在这个小区域中搜索。如果你怀疑这些超参数在这个区域的最优结果,拿在整个的方格中进行粗略搜索后,接下来聚焦在更小的方格中。在更小的方格中,可以更密集地取点。所以这种从粗到细的搜索也经常使用。通过实验超参数的不同取值,可以选择对于训练集目标而言的最优值或对于开发集而言的最优值,或者在超参搜索过程中你最想优化的东西。