超参数优化(HPO)背后的理论还没有得到很好的发展。尽管如此,还是有几种超参数优化方法,例如贝叶斯优化(使用高斯过程)、随机搜索、网格搜索、遗传算法等。例如,参见论文Hyperparameter Search in Machine Learning (2015),它尝试形式化机器学习中的超参数优化问题,Random Search for Hyper-Parameter Optimization (2012),以及相关的维基百科文章。
在机器学习中的超参数搜索(以及类似地,在超参数优化的随机搜索中)一文中,作者正式定义了超参数优化问题如下
λ∗=arg minλL(Xtest;M=A(Xtrain;λ))(1)
在哪里λ是学习算法的超参数(例如梯度下降,其超参数是学习率和batch size),也就是用来训练模型的算法M(例如,具有固定架构的卷积神经网络)使用训练(Xtrain) 和测试 (Xtest) 数据集(为简单起见,忽略交叉验证和相关技术)。
简而言之,在等式中1,我们想找到超参数λ学习算法A最大限度地减少损失L在测试数据集上Xtest, 当模型M训练使用A和训练数据集Xtrain.
方程1因此忽略与模型相关的超参数(例如,多层感知器的层数)并且只考虑与学习算法相关的超参数。但是,请注意学习算法的最优超参数A取决于给定的训练和测试数据集,损失函数L和模型M. 最终,公式在1可以扩展到包括与模型相关的超参数(和其他超参数)。
因此,总的来说,HPO 方法(包括您提出的方法)的选择取决于几个因素,包括模型(及其架构)、需要解决的任务、损失函数、训练和测试数据集,以及 HPO 方法的计算复杂性和运行时效率。例如,如果超参数的空间是离散的并且很小,那么网格搜索(可以是穷举搜索)将为给定的任务和数据集找到超参数的最佳组合。但是,如果搜索空间很大,则网格搜索可能不切实际。
一般来说,您提出的方法不会是最佳的,因为正如您所说,超参数可能不是彼此独立的。例如,如果您使用随机梯度下降(即一次训练一个示例),您可能不想太快地更新模型的参数(也就是说,您可能不希望高学习率),假设单个训练样例不太可能给出能够在适当方向(即损失函数的全局甚至局部最优)更新参数的误差信号。但是,如果您使用批量梯度下降,批量大小越大,您就越有可能使用更高的学习率。这个例子只是为了给你一些直觉,但这可能并不适用于所有情况。
最常用的超参数优化方法(我上面提到的)似乎假设超参数通常不是相互独立的。事实上,这可能是一个正确的假设,因为在现实世界中,独立性假设几乎从不成立(例如,参见朴素贝叶斯分类器上下文中的相关讨论)。