前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解近似策略优化(PPO)及其马里奥游戏环境实战

解近似策略优化(PPO)及其马里奥游戏环境实战

作者头像
AiTechYun
发布2019-08-23 23:12:22
1.7K0
发布2019-08-23 23:12:22
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

编辑 | sunlei

发布 | ATYUN订阅号

让AI准备好玩马里奥

文中蓝色字体为链接,部分外部链接无法从文章内部直接访问,请点击文末阅读原文以访问链接。

强化学习基本上分为两类,即策略梯度和价值函数,它们各有优缺点。在本文中,我们将讨论最先进的策略优化技术,即PPO或近似策略优化。

OpenAI对PPO的引用:

近似策略优化(PPO),其性能与最先进的方法相当或更好,而且实现和调优要简单得多。

在深入研究PPO的细节之前,我们需要了解一些事情,其中包括代理函数的概念,这将帮助我们理解使用PPO的动机。

代理函数:

代理函数可以称为梯度的一种近似形式,它更像一个新物体的梯度。

梯度和代理函数

我们使用这个创新的梯度,这样我们就可以执行梯度上升来更新我们的策略,这可以被认为是直接最大化代理函数。

代理函数帮助实现最优策略(来自Udacity深度强化学习nanodegree的图像)

但是,使用代理函数仍然会给我们留下一个问题,如果我们不断地重复过去使用的轨迹,同时不断地更新我们的策略,我们会发现,在某个时候,新策略可能会偏离旧策略,使我们之前对代用函数所做的所有近似都无效。这就是使用PPO的真正优势所在。

剪裁代理函数:

这是三个词的位置:

1、策略(要实现的最佳策略)

2、近端(代理函数的剪裁)

3、优化(使用代理函数)的出现及其实际意义,导致了算法的命名。

代理函数的裁剪(Udacity深层强化学习纳米图像)

通过对代理函数的裁剪,使其扁平化,使其更容易、更方便地收敛到最优策略。在这个剪辑下,当我们开始对当前策略应用渐变上升时,更新将保持与正常代理函数中的更新相同,但当我们到达平台时,更新将停止。及时,因为奖励函数是平的,梯度是零,这直接意味着策略更新将停止,我们的最优策略将得到实现。

在理解了这样一个复杂的强化学习算法是如此容易被理解之后,我们的头脑绝对等于被炸了。

我们在Mario环境中也有代码实现,所以要保持稳定并集中精力。

安装和运行Mario环境

让我们动起来

以下命令将帮助您安装超级马里奥兄弟的环境-

代码语言:javascript
复制
1pip install gym-super-mario-bros

这个代码段将帮助您呈现env,并让您使用它来熟悉操作和状态空间

代码语言:javascript
复制
 1from nes_py.wrappers import JoypadSpace
 2import gym_super_mario_bros
 3from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
 4env = gym_super_mario_bros.make('SuperMarioBros-v0')
 5env = JoypadSpace(env, SIMPLE_MOVEMENT)
 6
 7done = True
 8for step in range(5000):
 9    if done:
10        state = env.reset()
11    state, reward, done, info = env.step(env.action_space.sample())
12    env.render()
13
14env.close()

有关环境的更多细节,请参考此。

为《超级马里奥兄弟》编写PPO

为了方便起见,我们将使用OpenAI给出的基线,因为OpenAI拥有大量的RL算法,并不断更新其GitHub存储库。

关于pip用法的说明-pip用于python 2,pip3用于python3

我们将首先下载所需的软件包,然后是RL代码的基线库–

代码语言:javascript
复制
1sudo apt-get install zlib1g-dev libopenmpi-dev ffmpeg
2sudo apt-get update
3
4pip3 install opencv-python cmake anyrl gym-retro joblib atari-py
5
6git clone https://github.com/openai/baselines.git

根据您的需求安装Tensorflow (CPU或GPU)

代码语言:javascript
复制
1pip install tensorflow-gpu # for GPU
2pip install tensorflow # for CPU

最后,安装基线包-

代码语言:javascript
复制
1cd baselines
2pip3 install -e .

使用基线中给出的RL代码的语法代码总是这样的-

代码语言:javascript
复制
1python -m baselines.run --alg=<name of the algorithm> --env=<environment_id> [additional arguments]

例如,如果我们想训练一个完全连接的网络,用PPO2控制mujoco类人,持续20分钟,我们将写如下-

代码语言:javascript
复制
1python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7

在这之后,确保你的gym-retro和atari-py已经成功。有关这些的更多信息,请参考RETRO和ATARI。

注意-如果要在行进的环境中直接使用基线代码运行Mario,请执行以下操作:

为了导入ROMS,您需要从Atari2600 VCS ROM集合中下载Roms.rar并提取.rar文件。完成后,请运行:

代码语言:javascript
复制
1python -m atari_py.import_roms <path to folder>

这应该在导入时打印出ROMs的名称。ROMs将被复制到您的atari_py安装目录中。

当您几乎完成安装时,突然出现一些错误。

现在开始训练,我们使用下面的命令-

代码语言:javascript
复制
1python3 -m baselines.run --alg=ppo2 --env=SuperMarioBros-Nes
2--gamestate=Level3-1.state --num_timesteps=1e7

为了在训练过程中保存模型,在训练结束时添加以下参数,训练结束后加载模型也是如此

代码语言:javascript
复制
1--save_path=./PATH_TO_MODEL
2--load_path=./PATH_TO_MODEL

OK,你可以开始训练你的马里奥去救公主了。

庆祝代码完成!!恭喜

参考文章:

https://medium.com/analytics-vidhya/understanding-proximal-policy-optimization-ppo-and-its-implementation-on-mario-game-environment-31ab4ee024ab

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档