21

我有一个非常简单的 ANN,它使用 Tensorflow 和 AdamOptimizer 来解决回归问题,现在我正在调整所有超参数。

目前,我看到了许多不同的超参数需要调整:

  • 学习率:初始学习率,学习率衰减
  • AdamOptimizer 需要 4 个参数(学习率、beta1、beta2、epsilon)所以我们需要调整它们 - 至少是 epsilon
  • 批量大小
  • nb 次迭代
  • Lambda L2-正则化参数
  • 神经元数量,层数
  • 隐藏层使用什么样的激活函数,输出层使用什么样的激活函数
  • 辍学参数

我有 2 个问题:

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

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

编辑:这是我得到的不同初始学习率、批量大小和正则化参数的图表。紫色曲线对我来说完全奇怪......因为成本下降的速度比其他曲线慢,但它被困在较低的准确率上。模型是否有可能陷入局部最小值?

准确性

成本

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

谢谢你的帮助 !保罗

4

5 回答 5

7

我的一般顺序是:

  1. 批量大小,因为它将在很大程度上影响未来实验的训练时间。
  2. 网络架构:
    • 网络中的神经元数量
    • 层数
  3. 休息(辍学,L2 reg等)

依赖项:

我假设最佳值

  • 学习率和批量大小
  • 学习率和神经元数量
  • 神经元数量和层数

彼此强烈依赖。虽然我不是那个领域的专家。

至于你的超参数:

  • 对于 Adam 优化器:“论文中的推荐值为 eps = 1e-8, beta1 = 0.9, beta2 = 0.999。” (来源
  • 对于 Adam 和 RMSProp 的学习率,我发现 0.001 左右的值对于大多数问题来说是最佳的。
  • 作为 Adam 的替代方案,您还可以使用 RMSProp,它可以将内存占用减少多达 33%。有关更多详细信息,请参阅此答案
  • 您还可以调整初始权重值(请参阅All you need is a good init)。虽然,Xavier 初始化器似乎是避免调整权重初始化的好方法。
  • 我没有将迭代/时期的数量调整为超参数。我训练网络直到其验证误差收敛。但是,我给每次运行一个时间预算。
于 2017-01-05T15:35:08.147 回答
4

让 Tensorboard 运行起来。在那里绘制错误。您需要在 TB 查找要绘制的数据的路径中创建子目录。我在脚本中创建子目录。所以我改变了脚本中的一个参数,在那里给试验命名,运行它,然后在同一个图表中绘制所有试验。您很快就会对图形和数据的最有效设置有所了解。

于 2016-05-26T22:37:05.450 回答
2

对于不太重要的参数,您可能只需选择一个合理的值并坚持下去。

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

于 2016-05-26T19:54:14.810 回答
0

我不知道任何特定于 tensorflow 的工具,但最好的策略是首先从基本超参数开始,例如学习率 0.01、0.001、weight_decay 0.005、0.0005。然后调整它们。如果您使用的是 caffe,手动执行此操作将花费大量时间,以下是从一组输入值中获取超参数并为您提供最佳设置的最佳选项。

https://github.com/kuz/caffe-with-spearmint

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

http://fastml.com/optimizing-hyperparams-with-hyperopt/

对于层数,我建议你先做更小的网络,增加数据,等你有足够的数据后,增加模型复杂度。

于 2017-01-20T08:03:22.167 回答
0

在你开始之前:

  • 设置batch size为适用于您的硬件的最大值(或 2 的最大幂)。只需增加它,直到出现 CUDA 错误(或系统 RAM 使用率 > 90%)。
  • 将正则化设置为低值。
  • 神经元和层的架构和确切数量 - 使用已知架构作为灵感,并根据您的特定性能要求调整它们:更多层和神经元 -> 可能是更强大但更慢的模型。

然后,如果你想一个一个地做,我会这样:

  1. 调音learning rate范围广。

  2. 调整优化器的其他参数。

  3. 调整正则化(dropout、L2 等)。

  4. 微调learning rate- 这是最重要的超参数。

于 2020-07-27T11:41:58.737 回答