Pytorch模型的超参数优化

时间:2017-05-30 10:51:35

标签: machine-learning deep-learning pytorch hyperparameters

为Pytorch模型执行超参数优化的最佳方法是什么?实施例如随机搜索自己?使用Skicit Learn?或者还有其他我不知道的事情吗?

4 个答案:

答案 0 :(得分:6)

进行黑盒优化的最简单的无参数方法是随机搜索,它将比网格搜索更快地探索高维空间。有关于此的论文,但是tl; dr随机搜索每次都会在每个维度上获得不同的值,而使用网格搜索则不会。

Bayesian optimisation有很好的理论保证(尽管有近似值),像Spearmint这样的实现可以包装你拥有的任何脚本;有超参数,但用户在实践中看不到它们。通过显示比朴素贝叶斯优化更快的收敛,Hyperband得到了很多关注。它能够通过针对不同的迭代次数运行不同的网络来实现这一点,并且贝叶斯优化不能天真地支持它。虽然贝叶斯优化算法可以做得更好,可以考虑到这一点,例如FABOLAS,但在实践中,超频带非常简单,您可能更好地使用它并观察它以间隔调整搜索空间

答案 1 :(得分:5)

您可以使用Bayesian optimization(完全披露,我已为此套餐做出贡献)或Hyperband。这两种方法都试图自动化超参数调整阶段。据称,超频带是这个领域的先进技术。除了随机搜索之外,Hyperband是我听说过的唯一无参数方法。如果您愿意,您还可以考虑使用强化学习来学习最佳超参数。

答案 2 :(得分:5)

正如@jmancuso所提到的,我在HyperBand上取得了非常好的成绩。

您可以在Tune中找到此算法的实现。它是用于超参数调整的可扩展框架/工具,专门用于深度学习。

它还允许您在大约10行Python中切换有效的搜索算法(即HyperOpt / TPE和HyperBand)。

import ray
from ray import tune

def train_tf_model(config, tune_reporter):  # 1 new arg for reporting results
    # ... train here ....
    pass

ray.init()

tune.run(train_tf_model, config={
    "alpha": tune.grid_search([0.2, 0.4, 0.6]),
    "beta": tune.grid_search([1, 2]),
})

(免责声明:我积极参与这个项目!)

答案 3 :(得分:1)

我发现的是以下内容:

更多年轻项目

更新 新东西:

我还在post by @Richard Liaw找到了一个有用的表:

enter image description here