Neural network 我们应该按什么顺序调整神经网络中的超参数?

Neural network 我们应该按什么顺序调整神经网络中的超参数?,neural-network,tensorflow,hyperparameters,Neural Network,Tensorflow,Hyperparameters,我有一个非常简单的ANN,使用Tensorflow和AdamOptimizer处理回归问题,现在我要调整所有超参数 现在,我看到许多不同的超参数需要调整: 学习率:初始学习率、学习率衰减 AdamOptimizer需要4个参数(学习速率、beta1、beta2、epsilon),所以我们需要对它们进行调优——至少是epsilon 批量 迭代次数 Lambda L2正则化参数 神经元数量,层数 隐藏层和输出层的激活功能是什么 退出参数 我有两个问题: 1) 你有没有看到其他我可能忘记的超参数

我有一个非常简单的ANN,使用Tensorflow和AdamOptimizer处理回归问题,现在我要调整所有超参数

现在,我看到许多不同的超参数需要调整:

  • 学习率:初始学习率、学习率衰减
  • AdamOptimizer需要4个参数(学习速率、beta1、beta2、epsilon),所以我们需要对它们进行调优——至少是epsilon
  • 批量
  • 迭代次数
  • Lambda L2正则化参数
  • 神经元数量,层数
  • 隐藏层和输出层的激活功能是什么
  • 退出参数
我有两个问题:

1) 你有没有看到其他我可能忘记的超参数

2) 目前,我的调整是相当“手动”的,我不确定我没有以正确的方式做每件事。 是否有特殊命令来调整参数?例如,先学习率,然后批量大小,然后。。。 我不确定所有这些参数都是独立的——事实上,我很确定其中一些参数不是独立的。哪些明显独立,哪些明显不独立?那么我们应该把它们调在一起吗? 是否有任何一篇论文或文章谈到按照特殊顺序正确调整所有参数

编辑: 下面是我得到的不同初始学习率、批量大小和正则化参数的图表。紫色的曲线对我来说太奇怪了。。。因为成本下降的速度和其他的一样慢,但是它的准确率却很低。模型是否可能陷入局部极小值

对于学习率,我使用了衰减: LR(t)=LRI/sqrt(历元)

谢谢你的帮助!
Paul

对于不太重要的参数,您可以选择一个合理的值并坚持使用


正如你所说,这些参数的最佳值都是相互依赖的。最简单的方法是为每个超参数定义一个合理的值范围。然后从每个范围随机抽取一个参数,并使用该设置训练模型。重复几次,然后选择最好的型号。如果幸运的话,您将能够分析哪些超参数设置工作得最好,并从中得出一些结论。

运行Tensorboard。在那里绘制错误。您需要在TB查找要打印的数据的路径中创建子目录。我在脚本中创建细分曲面。因此,我在脚本中更改了一个参数,在那里为试验命名,运行它,并在同一个图表中绘制所有试验。您很快就会感受到图形和数据的最有效设置。

我的一般顺序是:

  • 批量大小,因为它将在很大程度上影响未来实验的训练时间
  • 网络架构:
    • 网络中的神经元数量
    • 层数
  • 休息(辍学、二级注册等)
  • 依赖关系:

    我假设

    • 学习率和批量大小
    • 学习率和神经元数量
    • 神经元数量和层数
    相互依赖性强。但我不是这方面的专家

    至于您的超参数:

    • 对于Adam优化器:“本文中的推荐值为eps=1e-8,beta1=0.9,beta2=0.999。”()
    • 对于Adam和RMSProp的学习率,我发现0.001左右的值对于大多数问题都是最优的
    • 作为Adam的替代方案,您还可以使用RMSProp,它可以将内存占用减少多达33%。有关更多详细信息,请参阅
    • 还可以调整初始权重值(请参见)。尽管如此,Xavier初始值设定项似乎是一种很好的方法,可以避免调整权重初始化
    • 我没有将迭代次数/时代数调整为超参数。我训练网络直到其验证误差收敛。然而,我给每一次运行一个时间预算

    我不知道tensorflow的具体工具,但最好的策略是首先从基本超参数开始,如学习率0.01、0.001、权重衰减0.005、0.0005。然后调整它们。如果您使用的是caffe,那么手动操作将花费大量时间,下面是从一组输入值中获取超参数并提供最佳参数集的最佳选项

    有关详细信息,您也可以按照本教程进行操作:

    对于层的数量,我建议您首先缩小网络并增加数据,在获得足够的数据后,增加模型的复杂性。

    开始之前:

    • 将批处理大小设置为在硬件上工作的最大值(或最大功率为2)。只需增加它,直到出现CUDA错误(或系统RAM使用率>90%)
    • 将正则化设置为低值
    • 结构和神经元和层的确切数量-使用已知的结构作为灵感,并根据您的具体性能要求进行调整:更多的层和神经元->可能是更强但较慢的模型
    然后,如果你想一个接一个地做,我会这样说:

  • 在大范围内调整
    学习率

  • 调整优化器的其他参数

  • 调整规则化(退出、L2等)

  • 微调
    学习率
    ——这是最重要的超参数


  • 谢谢你的回答!因此,随机选择所有超参数的值并对它们进行整体优化比单独优化每个超参数更好?是的。除非有一些你知道的超参数没有那么重要。对于这些,您可以选择一个值并优化其余值。例如,人们可能会任意决定使用两层