首页 > 解决方案 > 是否可以使用 ray Tune 搜索算法指定“episodes_this_iter”?

问题描述

我是编程/射线的新手,并且有一个简单的问题,即在使用 Ray Tune 时可以指定哪些参数。特别是,光线调谐文档说所有自动填充的字段(steps_this_iter、episodes_this_iter 等)都可以用作停止条件或在调度程序/搜索算法规范中。

但是,以下仅在我删除“episodes_this_iter”规范后才有效。这是否仅作为停止标准的一部分起作用?

ray.init()
tune.run(
    PPOTrainer,
    stop = {"training_iteration": 1000},
    config={"env": qsdm.QSDEnv,
          "env_config": defaultconfig,
            "num_gpus": 0,
            "num_workers": 1,
            "lr": tune.grid_search([0.00005, 0.00001, 0.0001]),}, 
    "episodes_this_iter": 2500, 
)

标签: reinforcement-learningrayrllib

解决方案


tune.run()是填充这些字段的那个,因此我们可以在其他地方使用它们。停止标准只是我们可以使用它们的地方之一。

要了解该示例为何不起作用,请考虑一个更简单的类比: episodes_total: 100

培训师本身是增加情节计数的人,因此系统的其余部分知道我们走了多远。如果我们尝试将其更改或将其修复为特定值,则对它们不起作用。相同的推理适用于列表中的其他字段。


至于调度器和搜索算法,我没有经验。但是我们要做的是将这些条件放在时间表或搜索算法本身中,而不是直接放在训练器中。

这是一个贝叶斯优化搜索的例子,虽然我不知道这样做意味着什么:

from ray.tune.suggest.bayesopt import BayesOptSearch

tune.run(

        # ...

        # 10 trials
        num_samples=10,

        search_alg=BayesOptSearch(

                # look for learning rates within this range:
                {'lr': (0.1, 0.00001)},

                # optimise for this metric:
                metric='episodes_this_iter',  # <------- auto-filled field here
                mode='max',

                utility_kwargs={
                        'kind': 'ucb',
                        'kappa': '2.5',
                        'xi': 0.0
                }
        )
)

推荐阅读