我有兴趣尝试开发一个框架来自动调整深度学习模型的超参数,我正在寻找可能有用的资源的建议/参考以及对我在下面提出的策略的建议/批评。我意识到实验可能是最好的前进方式,但我不想不必要地重复别人的工作。
我知道一种流行的方法是假设模型错误的函数。HPs 是一个贝叶斯过程,其参数会随着新点的评估而更新(即,对底层深度学习模型进行昂贵的全面训练),因此可以通过快速预测更好的候选点来更快地收敛到最优 HPs下一个要评估的 HP 比简单的网格搜索能够。Ilija Ilievski 等人通过使用 RBF 代理模型(使用 pySOT)而不是贝叶斯https://github.com/ilija139/HORD报告了更有效的收敛。
鉴于某些 HP 的变化(我们称它们为便宜),例如。ADAM 初始学习率和学习率衰减不会影响训练时间,而某些 HP 会加倍(我们称它们为昂贵的),例如。SGD 批量大小或总步数将使训练时间加倍,通过尝试快速提炼廉价 HPs 来解决这个问题是否有意义,而目标函数评估起来很便宜,然后让目标函数逐渐变得更昂贵随着昂贵的 HP 膨胀?
实施这种策略的一种方法可能是将昂贵的 HP 保持在相对较低的值,同时精炼廉价的 HP,然后允许昂贵的 HP 增长,然后迭代此过程直到满足某些先决条件,即。模型错误不再下降或超出处理器时间预算。
我认为可以有效实现类似目标的另一种可能更“有机”的方法是为对象功能的每次评估提供一定的处理器时间预算,该预算将逐渐增加。因此,当目标函数超出其预算时,它将(优雅地)停止,并且模型给出的任何错误结果都将与使用的任何 HP 一起执行(步数是实际采取的步数,而不是什么被要求)。这个想法是,这将迫使 HP 替代品在最初快速精炼廉价 HP,同时允许随着时间的推移精炼昂贵的 HP。
这有意义吗?