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

时间:2014-08-28 05:17:51

标签: neural-network

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

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

我是否理解并正确地练习了这个?

2 个答案:

答案 0 :(得分:5)

这是一个难题;甚至还有一个专门用于探索此问题的机器学习子领域,称为hyperparameter optimization

解决超参数问题的最基本方法是强力搜索,您可以尝试系统地改变网格上的超参数设置("网格搜索")并选择最佳的参数。这很慢,而且它也很烦人,因为看起来应该有更好的方法。

关于改进网格搜索,有几种不同的思想流派:

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

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

答案 1 :(得分:0)

用于达到较低泛化误差的学习率可能与问题有关。根据以前的经验,最佳学习速率可以基于许多参数而不同,包括时期大小,学习迭代次数,隐藏层和/或神经元的数量以及输入的数量和格式。经常使用试验和错误来确定所研究的每个问题的理想学习条件。

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

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