强化学习在过去一年中取得了重大进展,每两个月发布一次最先进的版本。我们已经看到AlphaGo击败世界围棋冠军柯洁,Multi-Agents玩捉迷藏,甚至AlphaStar在星际争霸中也占有一席之地。实施这些算法可能非常具有挑战性,因为它需要对深度学习和强化学习都有很好的理解。本文的目的是让您快速了解一些简洁的软件包,以便您可以轻松地开始学习强化学习。有关如何实施SOTA深度强化学习算法的深入教程,请参阅此内容。强烈建议您仔细阅读!1.环境在开始实现这些算法之前,我们首先需要创建一个工作环境,也就是游戏。对于算法来说,理解什么是动作和观察空间是很重要的。为此,我们将介绍几个可用于选择有趣环境的软件包。1.GymGym是一个用于开发和比较强化学习算法的工具包。它通常用于实验和研究目的,因为它提供了一个易于使用的界面来处理环境。只需使用以下命令安装包:pipinstallgym之后您可以使用以下命令创建环境:importgymenv=gym.make('CartPole-v0')在CartPole环境中,您的任务是防止头部连接到手推车的立杆上。env变量包含有关环境(游戏)的信息。要查看CartPole的动作空间是什么,只需运行env.action_space以生成Discrete(2)。这意味着可能有两个离散的动作。要查看观察空间,请运行env.observation_space,它会生成Box(4)。此框表示n(4)个闭区间的笛卡尔积。要渲染游戏,请运行以下代码:importgymenv=gym.make('CartPole-v0')obs=env.reset()whileTrue:action=env.action_space.sample()obs,rewards,done,info=env。step(action)env.render()ifdone:break我们可以看到,如果我们选择采取随机操作,购物车会一直失败。最终,目标将是运行强化学习算法,学习如何解决这个问题。请参阅此处以获取Gym中环境的完整列表。注意:如果您在运行atari游戏时遇到问题,请参阅内容:https://github.com/openai/gym/issues/1726。2.Retro创建有趣环境的另一个选项是使用Retro。该软件包由OpenAI开发,可让您使用ROM来模拟像Airstriker-Genesis这样的游戏。只需安装包:pipinstallgym-retro然后我们可以创建和查看环境:importretroenv=retro.make(game='Airstriker-Genesis')同样,要渲染游戏,运行:importretroenv=retro.make(game='Airstriker-Genesis')obs=env.reset()whileTrue:action=env.action_space.sample()obs,rewards,done,info=env.step(action)env.render()ifdone:break要安装ROM,您需要找到相应的.sha文件,然后运行:python3-mretro.import/path/to/your/ROMs/directory/注意:有关易于使用的环境的完整列表,请运行:retro.data.list_games()3.Procgen强化学习的一个典型问题是,生成的算法通常在特定环境中运行良好,但无法学习任何可泛化的技能。例如,如果我们想改变游戏的外观或敌人的反应怎么办?为了解决这个问题,OpenAI开发了一个名为Procgen的包,它允许创建程序生成的环境。我们可以使用这个包来衡量强化学习代理学习一般技能的速度。渲染游戏非常简单:importgymparam={"num_levels":1,"distribution_mode":"hard"}env=gym.make("procgen:procgen-leaper-v0",**param)obs=env.reset()whileTrue:action=env.action_space.sample()obs,rewards,done,info=env.step(action)env.render()ifdone:break这将生成可以训练算法的单一级别。有几个选项可用于以编程方式生成同一环境的许多不同版本:num_levels-可以生成的唯一级别的数量distribution_mode-使用哪些级别的变量,选项是“easy”、“hard”、“extreme”、“memory”》、《探索》。所有游戏都支持“简单”和“困难”,而其他选项则取决于游戏。2.强化学习现在,终于到了实际强化学习的时候了。虽然有很多包可用于训练算法,但由于其可靠的实现,我将主要研究“稳定的基线”。请注意,我不会在这篇文章中解释RL算法的实际工作原理,因为这本身就需要一篇全新的文章。有关PPO、SAC和TD3等最先进算法的概述,请参阅内容:https://github.com/dennybritz/reinforcement-learning。1.稳定基线(StableBaselines)稳定基线(SB)基于OpenAI基准,旨在让研究界和行业更容易复制、改进和识别新想法。他们对“基线”进行了改进,使其成为更稳定、更简单的工具,让初学者可以尝试“强化学习”,而不会陷入实施细节的泥潭。SB经常被使用,因为它允许简单快速地应用最先进的强化学习算法。此外,创建和训练RL模型只需要几行代码。安装可以简单地完成:pipinstallstable-baselines。然后,为了创建和学习RL模型(例如PPO2),我们运行以下代码行:fromstable_baselinesimportPPO2fromstable_baselines.common.policiesimportMlpPolicymodel=PPO2(MlpPolicy,env,verbose=1)model.learn(total_timesteps=10_000,log_interval=10)有些事情可能需要一些解释:total_timesteps:要训练的样本总数MlpPolicy:实现actor-critic的策略对象。在这种情况下,将使用2层64层多层感知器。还有视觉信息策略,例如CnnPolicy甚至CnnLstmPolicy为了将此模型应用到CartPole示例中,我们需要将环境包装在Dummy中以使其可供SB使用。那么,在CartPole环境下训练PPO2的完整例子如下:verbose=1)model.learn(total_timesteps=50_000,log_interval=10)obs=env.reset()whileTrue:action,_states=model.predict(obs)obs,rewards,dones,info=env.step(action)env.render()如上图所示,PPO2仅用了50,000步就设法找到了保持杆稳定的方法。这只需要几行代码和几分钟的处理时间!如果您将其应用于Procgen或Retro,请确保选择允许基于卷积的网络的策略,因为观察空间很可能是环境当前状态的图像。最后,CartPole示例非常简单,只需要训练50,000步。大多数其他环境通常需要数千万步才能显示出显着的改进。注意:《稳定基准》的作者警告初学者在生产中使用这个包之前要对强化学习有很好的理解。强化学习有很多关键组成部分,如果其中任何一个出现问题,算法就会失败,可能几乎没有任何解释。2.其他包还有其他一些常用于应用RL算法的包:TF-Agents-比stablebaselines需要更多的编码,但通常是强化学习研究的必备包。MinimalRL-在Pytorch中用很少的代码实现的最先进的RL算法。它绝对有助于理解算法。DeepRL-Pytorch的另一个实现,但这个版本还有额外的环境供实现使用。MlAgents-一个开源Unity插件,使游戏和模拟可用作训练代理的环境。3.结论强化学习可能是一个棘手的主题,因为如果代码出现问题以及何时出现问题,很难进行调试。希望这篇文章能帮助您开始强化学习。
