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

Pau*_*lin 19 neural-network hyperparameters tensorflow

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

现在,我看到了许多不同的超参数,我必须调整:

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

我有两个问题:

1)你看到我可能忘记的任何其他超参数吗?

2)目前,我的调音非常"手动",我不确定我是不是以正确的方式做所有事情.是否有特殊的顺序来调整参数?例如学习率首先,然后批量大小,然后......我不确定所有这些参数是否独立 - 事实上,我很确定其中一些参数不是.哪些明显独立,哪些明显不独立?我们应该把它们调在一起吗?是否有任何纸张或文章谈论正确调整特殊订单中的所有参数?

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

准确性

成本

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

谢谢你的帮助 !保罗

Kil*_*ner 6

我的一般命令是:

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

依赖关系:

我假设最佳值

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

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

至于你的超参数:

  • 对于Adam优化器:"论文中的推荐值为eps = 1e-8,beta1 = 0.9,beta2 = 0.999." (来源)
  • 对于Adam和RMSProp的学习率,我发现大约0.001的值对于大多数问题是最佳的.
  • 作为Adam的替代方案,您还可以使用RMSProp,它可以将内存占用减少多达33%.有关详细信息,请参阅此答案.
  • 您还可以调整初始权重值(请参阅所有您需要的是一个很好的初始化).虽然,Xavier初始化器似乎是防止必须调整重量的好方法.
  • 我不将迭代/纪元的数量调整为超参数.我训练网直到其验证错误收敛.但是,我给每次运行一个时间预算.


Aar*_*ron 2

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

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