优化深度网络的超参数

Optimize hyperparameters for deep network

我目前正在尝试为 CLDNN(卷积、LSTM、深度神经网络)提出一种新颖的结构

就像任何其他网络一样,我在优化超参数方面遇到了困难。

我想尝试网格搜索和随机搜索来获得一组最佳超参数,但我不太清楚一些事情。

  1. 如果我 运行 使用一组临时超参数模拟网络,我如何测量超参数的 "goodness"?我正在考虑在每次模拟 N 个时期后记录成本和训练精度。

  2. 由于每次模拟都需要比较长的时间(对于我的网络来说,训练一个epoch大约需要70秒),有没有更快的方法来检查超参数的"goodness"而不用居然运行宁全训?

  3. 有超参数优化的通用tip/advice吗?

  1. 所以基本上 - 为了测量不同超参数的性能 - 最佳做法是模拟在每个参数设置的训练数据上训练最终分类器的过程 - 然后比较不同的结果你想超优化。
  2. 如果您更改训练过程(例如,通过在超优化阶段设置固定的轮数,然后在最终训练中设置不同的轮数)- 您不应期望在多个测试阶段获得的结果会泛化。在我看来,这可能会损害您的优化过程,尤其是某些超参数设置需要更多时间才能实际获得良好结果(例如,当您设置非常高的辍学率时)并且在选择最佳值期间缩短训练时间可能会使超参数设置给出在较早的训练阶段获得更好的结果更有利。
  3. 良好做法?:
    • 选择random search,不是网格搜索。通常你的训练网络对某些参数不太敏感,所以进行全网格搜索是浪费时间,
    • 如果您想尝试更复杂的方法,您可以尝试更复杂的方法,例如bayessian hyperoptimization,
    • 使用交叉验证或 运行 您的网络多次使用给定的超参数设置。这是由于神经网络可能对起始权重敏感 - 因此分数数据可能无法很好地泛化,
    • 并行化您的训练过程。尝试 运行 训练过程,例如在不同的机器上,然后简单地合并结果。