ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
* 应该堆叠多少层? * 每层应该包含多少个单元或过滤器? * 激活应该使用`relu`还是其他函数? * 在某一层之后是否应该使用`BatchNormalization`? * 应该使用多大的 dropout 比率? 在架构层面的参数叫作**超参数**(hyperparameter),以便将其与模型参数区分开来,后者通过反向传播进行训练。 * [ ] 选择一组超参数(自动选择)。 * [ ] 构建相应的模型。 * [ ] 将模型在训练数据上拟合,并衡量其在验证数据上的最终性能。 * [ ] 选择要尝试的下一组超参数(自动选择)。 * [ ] 重复上述过程。 * [ ] 衡量模型在测试数据上的性能。 > 贝叶斯优化、遗传算法、简单随机搜索 > 更新超参数则非常具有挑战性。我们来考虑以下两点: * 计算反馈信号(这组超参数在这个任务上是否得到了一个高性能的模型)的**计算代价**可能非常高,它需要在数据集上创建一个新模型并从头开始训练。 * 超参数空间通常由许多**离散**的决定组成,因而既不是连续的,也不是可微的。因此,你通常不能在超参数空间中做梯度下降。相反,你必须依赖不使用梯度的优化方法,而这些方法的效率比梯度下降要低很多。 **随机搜索**(随机选择需要评估的超参数,并重复这一过程)就是最好的解决方案,虽然这也是最简单的解决方案 **Hyperopt** 比随机搜索更好,是一个用于超参数优化的 Python 库,其内部使用 Parzen 估计器的树来预测哪组超参数可能会得到好的结果 ***** **注意**: **在进行大规模超参数自动优化时**,有一个重要的问题需要牢记,那就是**验证集过拟合**。因为你是使用验证数据计算出一个信号,然后根据这个信号更新超参数,所以你实际上是在**验证数据上训练超参数**,很快会**对验证数据过拟合**。请始终记住这一点。