如何进行超参数的调节
- 什么是超参数
- 如何设置超参数
什么是超参数
在深度学习以及机器学习中,在我们训练模型之前,有些东西是机器无法通过数据学习得来的,需要我们提前去设置好,这就是超参数。超参数的设定将直接影响了模型的训练过程以及最终的性能效果。
一下是我百度的超参数的定义:
在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
那么应该如何去设置超参数呢?
如何设置超参数
1.最初最简单的想法就是设置一个可以使数据集表现最好的超参数。
但是这种方式其实非常的糟糕,比如说在之前博客中写到的k-邻近算法,当我们假设k是一个非常小的值,算法可以完美的分类训练集中的每一数据,即使训练集中的数据包含噪点。
但是实践表明,当k取一个更大数值的时候,虽然模型可能在训练集上表现不好,但是模型对于训练集中未出现的数据分类性能更佳。
我们进行模型训练的宗旨不是说在训练集上取得完美的表现,而是在训练集以外的数据上有较好的表现。(前者的情况也叫 过拟合 )
2.基于以上想法,我们可能会想到将数据集分为训练集和测试集。
我们用不同的超参数在训练集上进行模型的训练,然后将训练好的模型在测试集上进行比较,找出一个在测试集上表现最好的模型。
这看起来似乎是一个合理的策略,但实际上也是非常糟糕的。因为我们设置测试集的目的是让我们知道训练的模型在未知数据上的表现是怎么样的。
当我们使用上述这种方法来选取超参数的时候,我们在训练模型的时候就相当于考虑了测试集中的数据,这样在预测模型性能的时候就不是使用的未知数据集。
3.最常见的方法是将数据分为三组,包括训练集,测试集和验证集。
通常的做法是在训练集上用不同的超参数训练模型,在验证集上进行评估,然后选在一组在验证集上表现最好的超参数到测试集上评估模型的性能。
最终在测试集上 得出来的模型性能就是我们最后要写在论文里面的数据。 这个数据才能表达出你的算法在从未见过的数据上表现如何。
4.设置超参数还有一个更为常见的方法就是交叉验证(Cross-Validation)。 这是统计学里面一个比较重要的方法。本篇文章不会从统计学的角度来过多解释。
之所以会考虑交叉验证,是因为以上的所有方法都会存在两个个弊端,
- 首先第一个就是最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法。什么意思呢?我们再看一张图:
右边是十种不同的训练集和测试集划分方法得到的test MSE,可以看到,在不同的划分方法下,test MSE的变动是很大的,而且对应的最优degree也不一样。所以如果我们的训练集和测试集的划分方法不够好,很有可能无法选择到最好的模型与参数。
- 其次第二个弊端就是用了部分数据进行模型的训练。我们都知道,当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。
交叉验证的方法适合于数据集比较小的情况。通常的做法是将数据集先固定的分出测试集,然后将剩下的数据集我们不是只分为一个训练集和一个验证集,而是分成多组,见下图:
在深度学习领域中,我们往往需要涉及到大量的数据,本身计算量就很大,因此 在深度学习中很少使用交叉验证这种方式。
本文参考文献:
cs231n机器学习 Cross-Validation(交叉验证)详解