以下是一些加速超参数优化的通用技术。
如果您有一个大型数据集,请使用简单的验证集而不是交叉验证。与 k 折交叉验证相比,这将使速度提高 ~k 倍。如果您没有足够的数据,这将无法正常工作。
在多台机器上并行处理问题。每台机器都可以拟合具有不同超参数选择的模型。这将使 m 台机器的速度提高 ~m 倍。
避免冗余计算。预先计算或缓存可重复用于后续模型拟合的计算结果(或迭代更新的工作量少于从头计算的工作量)。几个简单的例子:如果模型需要成对距离矩阵,请在开始时计算所有距离,而不是在每次拟合模型时重新计算它们。如果模型需要均值和协方差矩阵,则根据每个训练集中的点迭代更新它们,而不是从头开始计算。
如果使用网格搜索,请减少您愿意考虑的超参数值的数量(即使用较粗的网格)。这可能会带来很大的加速,因为组合的总数成倍增加。风险在于,如果网格变得太粗糙,您可能会错过最佳值。您可以通过执行初始粗略搜索,然后在最佳初始值附近执行更精细搜索来弥补这一点。这比第一种策略更安全,但仍然存在一些风险,即最初的粗略搜索可能最终会出现在更精细的搜索无法逃脱的次优邻域中。
使用随机搜索。Bergstra 和 Bengio (2012) 描述了这种策略,并表明与网格搜索相比,它可以提供很大的加速。原因是模型性能可能对某些超参数比其他超参数更敏感,而重要的超参数是先验未知的。网格搜索可以通过尝试许多不同的非影响超参数值来浪费迭代,同时保持有影响的超参数不变。随机搜索从一些简单的分布中采样随机超参数值,因此所有超参数在每次迭代时都会发生变化。更改无影响的超参数几乎没有效果(因此不会丢失任何内容),更改有影响的超参数会提供更多改进的机会。
无论是使用网格搜索还是随机搜索,请确保值之间的间距适合每个超参数(在网格搜索中,这是网格间距;在随机搜索中,它与超参数值的采样分布有关)。例如,为某些超参数尝试线性间隔值,为其他超参数尝试对数间隔值是有意义的。使用不适当的间距可能会导致覆盖差(增加错过最佳值的风险)或需要过度密集的覆盖来补偿(浪费计算时间)。
使用贝叶斯优化。这是一种更为复杂的方法,并且是一个活跃的研究课题。在超参数优化的上下文中,它尝试在超参数上学习损失函数的模型,并使用该模型自适应地选择下一个要尝试的超参数值。新超参数的损失函数值依次用于更新模型。
参考:
伯格斯特拉和本吉奥 (2012)。随机搜索超参数优化。