使用贝叶斯优化进行超参数调整以及一些启发式选择进行探索的最佳方法是什么?
在诸如spearmint或hyperopt之类的包中,您可以指定要探索的范围,但我还想探索一些不一定属于该范围的启发式值。有什么建议“最好的做法是什么?”
答案 0 :(得分:0)
我已经将贝叶斯优化应用于生产中的超参数调整,因此我遇到了类似的问题。
不同的贝叶斯方法在探索/开发权衡方面具有不同的特征,例如,通过选择接近已知极值的下一个点,改进概率(PI)倾向于更多地利用,而upper confidence bound(UCB)相反,更喜欢探索。问题是第一个局部最大值通常不足以开发,但“探索性”方法需要花费太多时间和运气才能单独使用它们。
对我来说最好的结果的方法是portfolio strategy(也称为混合策略),它基本上是由其他方法组成的。例如,在每一步中,它可以选择具有40%概率的UCB,具有40%的PI和具有20%概率的普通随机点。重要的是所有方法都共享结果,例如,如果在某个时刻随机方法选择一个好的候选方法,那么它会改变UC模型的UCB和PI,所以从这时起PI更有可能利用这一点。我有时会注意到,即使是消极但意想不到的结果也会显着改变GP的形状,从而影响UCB及其探索方式。
显然,投资组合分布本身也会随着时间而变化。通过探索更多然后转向剥削开始是有意义的,但仍留有一些机会探索(ε-贪婪的极限)。至于范围选择,我倾向于尽可能大,让贝叶斯优化决定哪些值值得更多尝试,至少在开始时。请注意,PI方法并不关心您的范围有多大。随着范围的扩大,UCB倾向于采取更多尝试。根据我的经验,通常在几次运行后某些范围(例如正则化器小于0.01)和结果(严重过度拟合)之间的相关性变得明显,并且这允许缩小所有方法的范围。但我从一开始就不建议这样做“过早优化”。
最后,我为贝叶斯优化编写了自己的库。如果您对代码感兴趣,请check it out on GitHub。