Fastai在计算机视觉和表格学习方面的表现令人惊叹。有人希望RL的情况也一样。这个回购协议的目的是要有一个尽可能容易启动的框架,但也为测试新代理而设计。


fast-rl的Python项目详细描述

快速强化学习

本回购协议不隶属于杰里米·霍华德或他的课程,可在此处找到:此处 我们将使用fastai库中的组件来构建和训练我们的强化学习(rl) 代理. < /P>

请注意,下面是现有rl框架的详细介绍:

然而,Pythorch中也有一些框架,最引人注目的是Facebook的地平线:

我的动机是现有的框架通常使用tensorflow,这并不反对tensorflow,但是我有 使用Pythorch在较短时间内完成更多任务。

Fastai在计算机视觉和表格学习方面的表现令人惊叹。有人希望RL的情况也一样。 这个回购协议的目的是要有一个尽可能容易启动的框架,但也要为测试而设计 新代理。

目录

  1. 安装
  2. beta todo
  3. 代码
  4. 版本控制
  5. 贡献
  6. 样式
  7. < > >

    安装

    很快我就想添加一些脚本来安装一些复杂的依赖项。我们有两个步骤:

    1.a快速 安装fastai 或者如果你是水蟒(这是一个好主意,我会使用水蟒),你可以做:
    conda安装-c pytorch-c fastai fastai

    1.b可选/附加环境 开放所有健身房:
    PIP安装健身房[全部]

    迷宫:
    git克隆https://github.com/mattchantk/gym maze.git
    CD健身迷宫
    python setup.py安装

    2实际回购 git克隆https://github.com/josiahls/fast reinforcement learning.git
    CD快速强化学习 python setup.py安装

    βtodo

    目前这些是我个人迫切需要的东西,然后好的东西将使这个回购 有价值的东西。它们按我计划执行的顺序列出。

    关键

    • [X]mdpdatabunch:完成到有用的程度。请参考:测试/测试环境 示例:
    from fast_rl.core.Envs import Envs
    from fast_rl.core.MarkovDecisionProcess import MDPDataBunch
    
    # At present will try to load OpenAI, box2d, pybullet, atari, maze.
    # note "get_all_latest_envs" has a key inclusion and exclusion so if you don't have some of these envs installed, 
    # you can avoid this here.
    for env in Envs.get_all_latest_envs():
        max_steps = 50  # Limit the number of per episode iterations for now.
        print(f'Testing {env}')
        mdp_databunch = MDPDataBunch.from_env(env, max_steps=max_steps, num_workers=0)
        if mdp_databunch is None:
            print(f'Env {env} is probably Mujoco... Add imports if you want and try on your own. Don\'t like '
                  f'proprietary engines like this. If you have any issues, feel free to make a PR!')
        else:
            epochs = 1 # N episodes to run
            for epoch in range(epochs):
                for state in mdp_databunch.train_dl:
                    # Instead of random action, you would have your agent here
                    mdp_databunch.train_ds.actions = mdp_databunch.train_ds.get_random_action()
    
                for state in mdp_databunch.valid_dl:
                    # Instead of random action, you would have your agent here and have exploration to 0
                    mdp_databunch.valid_ds.actions = mdp_databunch.valid_ds.get_random_action()
    
    • [X]DQN代理:参考测试/测试学习者/测试基本模型迷宫。这个测试是 有点像地狱的风景。你会注意到我计划使用学习者回调来实现一个fit函数。另外请注意,健身房迷宫环境 至少对于离散测试是很重要的,因为你可以用模型的奖励来加热迷宫。 完成了dqn agent的基本学习/优化。它无疑是不稳定的。请注意下一步。

    基本dqns最大的问题之一是q值经常移动。实际的基本dqn应该 成为一个固定目标DQN,但是让我们转移到一些调试工具,这样我们更有效。

    可测试代码:

    from fast_rl.agents.DQN import DQN
    from fast_rl.core.Learner import AgentLearner
    from fast_rl.core.MarkovDecisionProcess import MDPDataBunch
    
    data = MDPDataBunch.from_env('maze-random-5x5-v0', render='human')
    model = DQN(data)
    learn = AgentLearner(data, model)
    
    epochs = 450
    
    callbacks = learn.model.callbacks  # type: Collection[LearnerCallback]
    [c.on_train_begin(max_episodes=epochs) for c in callbacks]
    for epoch in range(epochs):
        [c.on_epoch_begin(episode=epoch) for c in callbacks]
        learn.model.train()
        for element in learn.data.train_dl:
            learn.data.train_ds.actions = learn.predict(element)
    
            [c.on_step_end(learn=learn) for c in callbacks]
        [c.on_epoch_end() for c in callbacks]
    [c.on_train_end() for c in callbacks]
    

    结果:

    <表> <广告>  src= < /广告> <正文> 图1:我们现在能够使用一些Fastai API培训代理

    我相信特工在第一集之后就爆炸了。别担心!我们会做一个RL翻译看看 继续!

    • [X]agentInterpretation:第一种方法是热映射 具有超级重要调试预期回报的环境。在上面的代码中,我们用迷宫测试 有充分的理由。与其他环境相比,迷宫热图奖励非常简单。

    用法示例:

    from fast_rl.agents.DQN import DQN
    from fast_rl.core.Interpreter import AgentInterpretationv1
    from fast_rl.core.Learner import AgentLearner
    from fast_rl.core.MarkovDecisionProcess import MDPDataBunch
    
    data = MDPDataBunch.from_env('maze-random-5x5-v0', render='human')
    model = DQN(data)
    learn = AgentLearner(data, model)
    
    epochs = 10
    
    callbacks = learn.model.callbacks  # type: Collection[LearnerCallback]
    [c.on_train_begin(max_episodes=epochs) for c in callbacks]
    for epoch in range(epochs):
        [c.on_epoch_begin(episode=epoch) for c in callbacks]
        learn.model.train()
        for element in learn.data.train_dl:
            learn.data.train_ds.actions = learn.predict(element)
            [c.on_step_end(learn=learn) for c in callbacks]
        [c.on_epoch_end() for c in callbacks]
    
        # For now we are going to avoid executing callbacks here.
        learn.model.eval()
        for element in learn.data.valid_dl:
            learn.data.valid_ds.actions = learn.predict(element)
    
        if epoch % 1 == 0:
            interp = AgentInterpretationv1(learn)
            interp.plot_heatmapped_episode(epoch)
    [c.on_train_end() for c in callbacks]
    
    <表> <广告>  src= < /广告> <正文> 图2:在第0集期间按状态计算的累计奖励。  src=

    如果我们改变:

    interp = AgentInterpretationv1(learn)
    interp.plot_heatmapped_episode(epoch)
    

    至:

    interp = AgentInterpretationv1(learn)
    interp.plot_episode(epoch)
    

    我们可以为特定剧集制作以下情节:

    <表> <广告>  src= < /广告> <正文> 图4:代理在第0集期间估计的奖励。  src=

    由agentEnterpretation对象决定,我们需要调试或改进代理。 我们将在创建适合学习者的功能的同时进行此操作。

    • []学习者基础:在DQN和添加DDQN、固定目标、DDDQN之后,我们需要转换这个(最有可能)混乱的测试 变成一个合适的物体。与基础学习者相似。
    • []DDPG代理:我们需要至少有一个代理能够执行连续的环境执行。注意,我们 可以通过binning使离散代理能够在连续域中操作。
    • []学习者重构:DDPG可能会把一切都搞砸,哈哈。我们需要重新思考学习者/也许尝试 消除本机Fastai库方法的一些自定义方法。

    附加的

    • []像Fastai这样的单一全局拟合功能。更好的是,实际上只需使用它们的通用拟合功能。

    代码

    一些关键的收获是Fastai使用回调。回调不仅允许日志记录,实际上还可以添加 对泛型fit函数的回调可以彻底改变其行为。我的目标是建立一个简单的图书馆 尽可能在服务器或自己的计算机上运行。我也对这种易于扩展的方式感兴趣。

    我有几个假设,我认为代码/支持算法应该遵循:

    • 环境应该是可pickle和可序列化的。它们应该能够多次关闭和启动 在运行时。
    • 对于每个步骤,代理所需的信息不应超过环境的图像或状态值。这意味着 不应期望环境允许输出接触点、子目标或striPS式逻辑输出。

    理性:

    • 关闭/启动:某些环境(pybullet)存在关闭和启动不同环境的问题。 幸运的是,我有一个叉子弹头,所以这些修改将被强制执行。
    • pickling:能够将环境封装为.pkl对于保存它和所有信息非常重要 它产生了。
    • 可串行化:如果我们想进行并行处理,环境需要可串行化才能在 这些过程。

    一些额外的假设:

    • 环境可以更容易无目标,或者有一个单一的目标,其中openai定义为envgoalenv

    这些假设对于我们从其他回购中实现其他env是必要的。我们不想被束缚在 开放式健身房。

    版本控制

    目前回购正处于阿尔法阶段。我计划把这个从alpha版本移到伪beta/working版本。 无论版本如何,我们都将遵循python风格的版本控制

    alpha版本:...例如0.1.0.

    Git+工作流

    样式

    Fastai没有严格遵循从Guidos推荐中派生的谷歌Python风格指南", 不过,在本回购协议中,我们将使用本指南。
    但是,有些例外情况(通常在fastai中发现):

    • 在if语句的情况下,允许"pep 8每行多个语句",只要它们仍然是 在列限制内。

    推荐PyPI第三方库