Tune提供了很多有效的优化模型的超参搜索算法。Tune允许您结合使用不同的搜索算法和不同的试验调度程序。在默认情况下,Tune将隐式地使用Variant Generation算法来创建试验。
你可以利用这些搜索算法如下:
tune.run(my_function, search_alg=SearchAlgorithm(...))
目前,Tune提供了以下搜索算法(和库集成):
- 1.Grid Search and Random Search(网格搜索和随机搜索)
- 2.BayesOpt(贝叶斯优化)
- 3,HyperOpt(超参优化)
- 4.SigOpt
- 5.Nevergrad
- 6.Scikit-Optimize
- 7.GeneticSearch
1.Grid Search and Random Search(网格搜索和随机搜索)
默认情况下,Tune使用默认的搜索空间和变量生成(Variant Generation)过程来创建和排队测试。这支持随机搜索和网格搜索作为tune.run
的指定的config
参数。
class ray.tune.suggest.BasicVariantGenerator(shuffle=False) |
---|
基础:ray.tune.suggest.search.SearchAlgorithm
使用Tune的变量生成(variant generation)去分析变量。
其他详情请看:ray.tune.suggest.variant_generator.
例子:
>>> searcher = BasicVariantGenerator()
>>> searcher.add_configurations({"experiment": { ... }})
>>> list_of_trials = searcher.next_trials()
>>> searcher.is_finished == True
注意,其他搜索算法不一定要扩展该类,可能需要与默认tune格式不同的搜索空间声明。
2.BayesOpt Search(贝叶斯优化搜索)
BayesOptSearch
是一种由 bayesian-optimization包支持的搜索算法,用于执行 基于顺序模型的超参数优化 。注意,这个类没有扩展ray.tune.suggest
。因此,在使用BayesOptSearch时,您将无法使用Tune的默认变量生成/搜索空间声明。
要用这个BayesOpt 搜索算法,首先需要通过命令安装 bayesian-optimization包:
pip install bayesian-optimization
该算法需要设置搜索空间和定义实用函数。你可以使用BayesOptSearch如下:
tune.run(... , search_alg=BayesOptSearch(bayesopt_space, utility_kwargs=utility_params, ... ))
一个例子可以在bayesopt_example.py中找到。
class ray.tune.suggest.bayesopt.BayesOptSearch(space, max_concurrent=10, reward_attr=‘episode_reward_mean’, utility_kwargs=None, random_state=1, verbose=0, **kwargs) |
---|
基础:ray.tune.suggest.suggestion.SuggestionAlgorithm
BayesOpt的一个包装器提供试验建议。
参数:
space (dict) –连续的搜索空间。参数将从该空间取样,用于运行试验。
max_concurrent (int) –最大同时试验次数。默认为10。
reward_attr (str) –训练结果目标值属性。这指的是一个递增的值。
utility_kwargs (dict) – 参数来定义实用函数。必须为键类型、kappa和xi提供值。
random_state (int) –用于初始化BayesOpt。
verbose (int) – 设置BayesOpt包的复杂级别。
例子:
>>> space = {
>>> 'width': (0, 20),
>>> 'height': (-100, 100),
>>> }
>>> algo = BayesOptSearch(
>>> space, max_concurrent=4, reward_attr="neg_mean_loss")