几行代码实现强化学习

人工智能 机器学习
本文的目的是让您快速使用一些简洁的程序包,以便您可以轻松地开始学习强化学习。有关如何实施SOTA深度强化学习算法的深入教程,请参阅此内容。

在过去的一年中,强化学习已经取得了重大进步,最新技术每两个月发布一次。 我们已经看到AlphaGo击败了世界冠军围棋选手Ke Jie,Multi-Agents玩了捉迷藏,甚至AlphaStar在星际争霸中也拥有自己的实力。

实施这些算法可能会非常具有挑战性,因为它需要对深度学习和强化学习都有很好的理解。 本文的目的是让您快速使用一些简洁的程序包,以便您可以轻松地开始学习强化学习。

有关如何实施SOTA深度强化学习算法的深入教程,请参阅此内容。 强烈推荐您仔细阅读!

强化学习

一、环境

在开始实现这些算法之前,我们首先需要创建一个工作环境,即游戏。 对于算法而言,重要的是要了解什么是动作和观察空间。 为此,我们将介绍几个可用于选择有趣环境的软件包。

1. Gym

Gym是用于开发和比较强化学习算法的工具包。 它通常用于实验和研究目的,因为它提供了一个易于使用的界面来处理环境。

只需使用以下命令安装软件包:

  1. pip install gym 

之后,您可以使用以下代码创建环境:

  1. import gym 
  2. env = gym.make(‘CartPole-v0’) 

在 CartPole 环境中,您的任务是防止头连接到推车的电线杆掉落。

env变量包含有关环境(游戏)的信息。 要了解CartPole的操作空间是什么,只需运行env.action_space即可产生Discrete(2)。 这意味着可能有两个离散的动作。 要查看观察空间,请运行env.observation_space,它产生Box(4)。 此框代表 n(4)个封闭间隔的笛卡尔积。

要渲染游戏,请运行以下代码:

  1. import gym 
  2. env = gym.make('CartPole-v0') 
  3.  
  4. obs = env.reset() 
  5. while True: 
  6.     action = env.action_space.sample() 
  7.     obs, rewards, done, info = env.step(action) 
  8.     env.render() 
  9.  
  10.     if done: 
  11.         break 
[[336834]]

我们可以看到,如果我们选择采取随机行动,则小车车一直在失败。 最终,目标将是运行强化学习算法,该算法将学习如何解决此问题。

有关Gym中环境的完整列表,请参阅此。

注意:如果您在运行atari(阿塔利)游戏时遇到问题,请参见内容:https://github.com/openai/gym/issues/1726。

2. Retro

创建有趣的环境的另一个选项是使用Retro。 该软件包由OpenAI开发,可让您使用ROMS来模拟Airstriker-Genesis之类的游戏。

只需使用以下命令安装软件包:

  1. pip install gym-retro 

然后,我们可以使用以下方法创建和查看环境:

  1. import retro 
  2. env = retro.make(game='Airstriker-Genesis'

同样,要渲染游戏,请运行以下代码:

  1. import retro 
  2. env = retro.make(game='Airstriker-Genesis'
  3.  
  4. obs = env.reset() 
  5. while True: 
  6.     action = env.action_space.sample() 
  7.     obs, rewards, done, info = env.step(action) 
  8.     env.render() 
  9.  
  10.     if done: 
  11.         break 
几行代码实现强化学习

要安装ROMS,您需要找到相应的.sha文件,然后运行:

  1. python3 -m retro.import /path/to/your/ROMs/directory/ 

注意:有关易于使用的环境的完整列表,请运行:

  1. retro.data.list_games() 

3. Procgen

强化学习的一个典型问题是,生成的算法通常可以在特定环境下很好地工作,但无法学习任何可通用的技能。 例如,如果我们要改变游戏的外观或敌人的反应该怎么办?

为了解决这个问题,OpenAI开发了一个名为Procgen的软件包,该软件包允许创建过程生成的环境。 我们可以使用此软件包来衡量强化学习代理学习通用技能的速度。

渲染游戏非常简单:

  1. import gym 
  2. param = {"num_levels": 1, "distribution_mode": "hard"} 
  3. env = gym.make("procgen:procgen-leaper-v0", **param) 
  4.  
  5. obs = env.reset() 
  6. while True: 
  7.     action = env.action_space.sample() 
  8.     obs, rewards, done, info = env.step(action) 
  9.     env.render() 
  10.  
  11.     if done: 
  12.         break 
[[336835]]

这将生成可在其上训练算法的单个级别。 有几个选项可用于以程序方式生成同一环境的许多不同版本:

  • num_levels-可以生成的唯一级别数
  • distribution_mode-使用哪种级别的变量,选项为"easy简单","hard难","extreme极致","memory记忆","exploration探索"。 所有游戏都支持“易”和“难”,而其他选项则取决于游戏。

二、强化学习

现在,终于是时候进行实际的强化学习了。 尽管有许多可用的软件包可用于训练算法,但由于它们的可靠实现,我将主要研究“稳定Baselines ”。

请注意,我不会在此帖子中解释RL算法的实际工作方式,因为这本身就需要一个全新的帖子。 有关最新算法(例如PPO,SAC和TD3)的概述,请参见内容:

https://github.com/dennybritz/reinforcement-learning。

1. 稳定的基线(稳定Baselines)

稳定基准(SB)是基于OpenAI基准的,旨在使研究社区和行业更容易复制,改进和识别新想法。 他们在“基线”上进行了改进,使之成为一个更稳定,更简单的工具,使初学者可以尝试进行“强化学习”,而不会陷入实施细节中。

SB之所以经常使用,是因为它可以轻松,快速地应用最新的强化学习算法。 此外,创建和训练RL模型只需要几行代码。

安装可以简单地通过以下方式完成:pip install stable-baselines。 然后,为了创建和学习RL模型(例如PPO2),我们运行以下代码行:

  1. from stable_baselines import PPO2 
  2. from stable_baselines.common.policies import MlpPolicy 
  3. model = PPO2(MlpPolicy, env, verbose=1
  4. model.learn(total_timesteps=10_000log_interval=10

有些事情可能需要一些解释:

  • total_timesteps:要训练的样本总数
  • MlpPolicy:实现actor-critic的Policy对象。 在这种情况下,将使用2层64层的多层感知器。还有视觉信息策略,例如CnnPolicy甚至CnnLstmPolicy

为了将此模型应用于CartPole示例,我们需要将环境包装在Dummy中,以使其可供SB使用。 然后,在CartPole环境中训练PPO2的完整示例如下:

  1. from stable_baselines.common.policies import MlpPolicy 
  2. from stable_baselines.common.vec_env import DummyVecEnv 
  3. from stable_baselines import PPO2 
  4. import gym 
  5.  
  6. env = gym.make('CartPole-v0') 
  7. env = DummyVecEnv([lambda: env]) 
  8.  
  9. model = PPO2(MlpPolicy, env, verbose=1
  10. model.learn(total_timesteps=50_000log_interval=10
  11.  
  12. obs = env.reset() 
  13. while True: 
  14.     action, _states = model.predict(obs) 
  15.     obs, rewards, dones, info = env.step(action) 
  16.     env.render() 
[[336836]]

如上图所示,PPO2仅用50,000步就设法找到一种保持极点稳定的方法。 这只需要几行代码和几分钟的处理!

如果要将其应用于Procgen或Retro,请确保选择一个允许基于卷积的网络的策略,因为观察空间很可能是环境当前状态的图像。

最后,CartPole示例非常简单,仅需训练50,000步即可。 大多数其他环境在显示出显着改进之前通常需要执行几千万步。

注意:《稳定基准》的作者警告初学者在产品中使用该软件包之前,对强化学习要有很好的了解。 强化学习有许多关键组成部分,如果其中任何一个出现错误,该算法将失败,并且可能会留下很少的解释。

2. 其他软件包

还有其他一些常用于应用RL算法的软件包:

  • TF-Agents-比稳定基线需要更多的编码,但通常是强化学习研究的必备软件包。
  • MinimalRL-在Pytorch中以非常少的代码实现的最新RL算法。 它绝对有助于理解算法。
  • DeepRL-Pytorch的另一种实现,但是此版本还具有实现要使用的其他环境。
  • MlAgents-一个开放源代码的Unity插件,使游戏和模拟可用作培训代理的环境。

三、结论

强化学习可能是一个棘手的课题,因为很难调试代码中是否以及何时出现问题。 希望这篇文章可以帮助您开始进行强化学习。

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2023-03-23 16:30:53

PyTorchDDPG算法

2023-01-24 17:03:13

强化学习算法机器人人工智能

2023-06-25 11:30:47

可视化

2023-03-09 08:00:00

强化学习机器学习围棋

2019-08-12 08:43:53

GitHub代码开发者

2023-11-07 07:13:31

推荐系统多任务学习

2021-09-17 15:54:41

深度学习机器学习人工智能

2022-11-02 14:02:02

强化学习训练

2024-04-03 07:56:50

推荐系统多任务推荐

2020-11-12 19:31:41

强化学习人工智能机器学习

2021-06-11 09:28:04

人工智能机器学习技术

2024-12-09 08:45:00

模型AI

2020-04-01 12:18:11

人工智能强化学习开源

2019-09-29 10:42:02

人工智能机器学习技术

2023-04-23 10:12:14

算法强化学习

2023-07-20 15:18:42

2024-08-28 13:53:42

多代理强化学习机器人

2020-01-23 15:33:07

AI 数据人工智能

2023-08-28 06:52:29

2024-05-30 16:37:29

点赞
收藏

51CTO技术栈公众号