在深度学习中选择超参数的指南

机器算法验证 机器学习 深度学习 深度信念网络 超参数
2022-02-11 16:37:52

我正在寻找一篇论文,可以帮助就如何选择深度架构的超参数提供指导,例如堆叠式自动编码器或深度相信网络。有很多超参数,我很困惑如何选择它们。也不能使用交叉验证,因为训练确实需要很多时间!

3个回答

基本上有四种方法:

  1. 手动搜索:使用您对问题猜测参数的了解并观察结果。根据该结果调整参数。重复此过程,直到找到运行良好的参数或时间用完为止。
  2. 网格搜索:使用您对问题的了解来识别超参数的范围。然后从这些范围中选择几个点,通常是均匀分布的。使用每种参数组合训练您的网络并选择性能最佳的组合。或者,您可以围绕性能最佳的参数在更窄的域上重复搜索。
  3. 随机搜索:像网格搜索一样,您使用问题知识来识别超参数的范围。但是,不是以有条不紊的方式从这些范围中选择值,而是随机选择它们。重复此过程,直到找到运行良好的参数或使用您学到的知识来缩小搜索范围。在论文Random Search for Hyper-Parameter Optimization中,Bengio 博士提出这是一种基线方法,所有其他方法都应与之进行比较,并表明它往往比其他方法效果更好。
  4. 贝叶斯优化:最近的工作集中在通过使用从任何给定实验中获得的信息来决定如何调整下一个实验的超参数来改进这些其他方法。这项工作的一个例子是Adams 等人的机器学习算法的实用贝叶斯优化。

存在各种各样的方法。它们可以在很大程度上分为随机/无向搜索方法(如网格搜索或随机搜索)和直接方法。但是请注意,除非您很幸运,否则它们都需要测试大量的超参数设置(至少数百个,取决于参数的数量)。

在直接方法类中,可以确定几种不同的方法:

  • 无导数方法,例如 Nelder-Mead simplex 或 DIRECT
  • 进化方法,例如 CMA-ES 和粒子群
  • 基于模型的方法,例如 EGO 和顺序克里金法

你可能想研究一下Optunity,这是一个 Python 包,它为超参数调整提供了多种求解器(我提到的所有东西,除了 EGO 和 Kriging,现在)。Optunity 很快将可用于 MATLAB 和 R。免责声明:我是这个包的主要开发者。

根据我个人的经验,进化方法对于这些类型的问题非常强大。

不要再看了!Yoshua Bengio 发表了我最喜欢的一篇应用论文,我向所有刚开始训练神经网络的机器学习工程师推荐这篇论文:基于梯度的深度架构训练的实用建议。要了解他对超参数转换的看法:包括学习率、学习率计划、提前停止、小批量大小、隐藏层数等,请参阅第 3 节。