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


38

我正在寻找一篇可以帮助指导如何选择深度结构的超参数(如堆叠式自动编码器或深度信任网络)的指南。超参数很多,我对如何选择它们感到很困惑。另外,也不可以使用交叉验证,因为培训确实需要很多时间!


我推荐Ian Goodfellow的深度学习书:deeplearningbook.org
Vadim Smolyakov

Answers:


24

基本上有四种方法:

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

14

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

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

  • 无导数的方法,例如Nelder-Mead单纯形法或DIRECT
  • 进化方法,例如CMA-ES和粒子群
  • 基于模型的方法,例如EGO和顺序Kriging

您可能需要研究Optunity,这是一个Python软件包,其中提供了用于超参数调整的各种求解器(到目前为止,我提到的所有内容都包括EGO和Kriging)。机会很快将适用于MATLAB和R。免责声明:我是该软件包的主要开发人员。

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


10

别再看了!Yoshua Bengio发表了我最喜欢的应用论文之一,当所有新的机器学习工程师开始训练神经网络时,我都推荐给他们:针对基于梯度的深度架构训练的实用建议。要获得他对超参数转向的看法:包括学习率,学习率时间表,提前停止,最小批量大小,隐藏层数等,请参阅第3节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.