【问题标题】:how to set learning rate for training neural net [closed]如何设置训练神经网络的学习率 [关闭]
【发布时间】:2014-10-21 20:48:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: neural-network


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 所以你的意思是学习率应该被修改,即上面的选项 1 或 2 不令人满意。然后,多少修补,即尝试多少 n 点,例如在 [0.001,1] 中。在我的问题中,n = 10 需要几天时间。我看过论文说“......我们用学习率 = 0.01 训练了我们的神经网络......”,不清楚他们做了多少修补。
      • 在我自己的研究和出版物中,我通常会修改神经网络参数,然后在研究论文中报告最佳条件。这些参数在我的论文中进行了评估和讨论,但在出版物中保持简短。这并不是说现在可能有更多可用的动态模型,但过去的经验表明,不仅学习率和泛化误差之间存在相关性,神经网络的其他参数也存在相关性。我通常应用进程号 3(线性),这可能需要时间取决于测试的数量。
      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2021-03-30
      相关资源
      最近更新 更多