如何设置训练神经网络的学习率



关于选择NN中隐藏层和单元的数量的答案:https://stackoverflow.com/a/10568938/2265724
帖子建议增加隐藏单元的数量,直到泛化误差开始增加
但我的问题是学习率。给定隐藏单元的数量值(即图中的一个数据点或一个特定架构,例如10个隐藏单元),我如何设置学习率和训练多少个时期
1.使用固定的学习率(在检查它收敛后,即成本下降)并运行n个时期,或者直到成本(或验证误差)稳定下来(如果它确实以良好的渐进方式下降)
2.如1中的提前停止
3.如1或2中所示,但在某个(线性或对数)范围内尝试各种不同的学习率
4.如3所示,包括学习率衰减
5.如在3或4中,包括作为正则化的权重衰减,或者可能更好的是,丢弃

参数的数量从1增加到5。1是最快的,但听起来并不令人满意(为什么不尝试其他学习率呢?)。3-5是耗时的。因为如果我不高兴,我需要通过增加隐藏单元的数量来尝试另一种架构。并重复,直到获得帖子中显示的图形。

我是否正确理解和实践了这一点?

这是一个难题;机器学习中甚至有一个子领域致力于探索这一点,称为超参数优化。

解决超参数问题的最基本方法是暴力搜索,在这种方法中,你可以尝试沿着网格系统地改变超参数设置("网格搜索"),并选择最好的一个。这很慢,也很烦人,因为似乎应该有更好的方法。

关于改进网格搜索,有几个不同的学派:

  • 进化方法将一些适应度得分分配给超参数的组合,然后尝试重用一起表现良好的参数设置的组合。我最近在这个阵营中看到的最流行的方法是CMA-ES。

  • 贝叶斯方法试图对研究人员认为对每个超参数合理的值进行某种先验分布。然后,通过评估几个不同的超参数设置,您可以以统计上最优的方式将结果性能与先前的性能相结合。

用于达到较低泛化误差的学习率可能取决于问题。根据先前的经验,最佳学习率可以基于多个参数而不同,这些参数包括历元大小、学习迭代次数、隐藏层和/或神经元的数量以及输入的数量和格式。为了确定所研究的每个问题的理想学习条件,经常使用试错法。

过去有一些论文在给定训练数据量、隐藏层、神经元和输出的情况下,为神经网络参数提供了合理的起点。这可能是一个很好的起点。

也许可以使用其他动态模型来鼓励最小化局部极小值之外的泛化误差。每个问题都有自己的理想参数,需要修改参数或使用某种形式的动态或自动模型来找到理想参数。

最新更新