Ray关键概念疏理

本文深入探讨Ray的Tune超参数调优工具和RLlib强化学习框架。介绍了如何使用Tune进行CartPole问题的训练及参数搜索,并详细讲解了RLlib中的环境、多智能体环境、模型与预处理器的定义。此外,还阐述了自定义Policy、SampleBatch以及Trainer在RLlib中的应用,最后提供了相关资源链接供进一步学习。
摘要由CSDN通过智能技术生成

注意:Ray目前还在开发之中,某些API还没有稳定下来。此教程按照0.7.2版本撰写,已经发现最新版本模型定义的方式上有较大变化,使用的时候留意!

Tune

Tune是Ray提供的用于调整超参数的工具,提供了多种参数搜索算法。即使无需调整超参数,也可以作为训练程序的入口,优势在于更好的参数配置、日志输出、结果展示。RLlib里面的算法可以被封装为Trainer被Tune调用。
下面是使用Tune训练CartPole并搜索学习率的示例:

import ray
from ray import tune

ray.init(redis_address="localhost:6379")
tune.run(
    "PPO",
    stop={
   "episode_reward_mean": 200},
    config={
   
        "env": "CartPole-v0",
        "num_gpus": 0,
        "num_workers": 1,
        "lr": tune.grid_search([0.01, 0.001, 0.0001]),
    },
)

Tune逻辑图

Tune接受两种不同的方式进行训练,function-based API或Trainable API。定义function-based API的方式如下:

def trainable(config, reporter):
    """    
    Args:        
        config (dict): Parameters provided from the search algorithm            
            or variant generation.       
        reporter (Reporter): Handle to report intermediate metrics to Tune.    
    """

    while True:
        # ...
        reporter(**kwargs)

其中reporter属于类ray.tune.function_runner.StatusReporter,记录了用于控制参数搜索算法的性能反馈,如mean_accuracy。除了使用reporter,也可以用track.log(from ray.tune import track)。
Trainable API则需要定义一个类Trainable,子类需要覆写_setup_test_train_save_restore等函数。
可以参考使用PyTorch训练MNIST类似的来实现自己的Tune可训练对象,分别见mnist_pytorchmnist_pytorch_trainable

RLlib

RLlib是运行在Ray上层的强化学习框架,提供了丰富的接口函数用于快速构建算法。
RLlib层次概念图

Environments

RLlib支持OpenAI Gym作为仿真环境,也可以支持用户自定义的环境。下面重点讲一下如何定义多智能体的仿真环境。

MultiAgentEnv

Ray定义了类MultiAgentEnv来处理多智能体的环境,将原gym函数返回值拓展为了{agent_id: value}的形式
以下是example中的示例,全部代码在twostep_game

from ray.rllib.env.multi_agent_env import MultiAgentEnv

class TwoStepGame(MultiAgentEnv):
    action_space = Discrete(2)
    # Each agent gets a separate [3] obs space, to ensure that they can
    # learn meaningfully different Q values even with a shared Q model.
    observation_space = Discrete(6)
    def __init__(self, env_config):
        self.state = None
    def reset(self):
        self.state = 0
        return {
   "agent_1": self.state, "agent_2": self.state + 3}
    def step(self, action_dict
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值