经常使用加强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等) (转载)

原文连接:http://blog.csdn.net/jinzhuojun/article/details/78508203html

 

 

前段时间Nature上发表的升级版Alpha Go - AlphaGo Zero再一次成为热点话题。做为其核心技术之一的Deep reinforcement learning(深度加强学习,或深度强化学习)也再一次引起关注。Alpha Zero最有意义的地方之一是它去除了从人类经验(棋谱)中学习的过程,而是彻底经过“左右互博”式的学习击败了本身的“前辈”。这也很能体现强化学习的特色,就是在弱监督信息下经过”Trial and error”来自我学习。

这两年DRL随着深度学习的大热也是火得不行。因而各类新的强化学习研究平台如雨后春芛冒出来,并且趋势也是从简单的toy场景慢慢扩展到3D迷宫,第一人称射击游戏,即时策略类游戏和复杂机器人控制场景等。以前曾写文介绍了一些流行的强化学习实验环境(经常使用强化学习实验环境 I (MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2))。本文是第二弹。 ps: 真羡慕如今研究强化学习的孩子,各类五花八门的实验环境,算法参考实现也能够随便挑。。。python

 

 

在第一篇中介绍过的本文就不重复累述了,这里把本文涉及的项目大体分为两类:
1. 实验场景类: 像OpenAI Gym,MuJoCo这些。linux

 

名称 github连接 类型 语言 平台 官方介绍
ViZDoom 代码 FPS C++, Lua, Java, Python Linux,Windows,Mac OS

官网 论文 教程git

 

Roboschool 代码 Physical simulation Python Linux, Mac OS

博客github

 

Multi-Agent Particle Environment 代码 Multi-agent Python Linux

论文 论文算法

 

 

 

 

 

2. 研究框架类: 通常会整合多个实验场景并提供方便统一的接口,方便其它场景的接入,并提供一些高级功能(如并行化),同时可能附带一些算法参考实现。docker

 

名称 github连接 场景 语言 实现算法 相关机构

官方介绍编程

 

TensorFlow Models 代码

OpenAI Gym,ubuntu

MuJoCo后端

Python

Actor Critic,TRPO,

PCL,Unified PCL,

Trust-PCL,

PCL + Constraint Trust Region,

REINFORCE,UREX

Community

N/A

TensorFlow Agents 代码  OpenAI Gym  Python BatchPPO   Google  论文

Universe/

universe-starter-agent

代码1

代码2

Atari, CarPole,

Flashgames,

Browser task, etc. 

Python  A3C   OpenAI  博客

ELF

代码

MiniRTS, Atari,

Go 

 Python PG, AC  Facebook 

论文

 

教程 

Coach

代码

OpenAI Gym,

ViZDoom,

Roboschool,

GymExtensions,

PyBullet

Python

DQN, DDQN,

Dueling Q Network,

MMC, PAL,

Distributional DQN,

Bootstrapped DQN,

 

NEC Distributed:

N-Step Q Learning,

 

NAF, PG, A3C,

DDPG, PPO,

Clipped PPO, DFP 
可参见算法总览图

Intel

文档

 

博客

Unity Machine

Learning Agents

代码

3D Balance Ball,

GridWorld

Python

PPO

Unity

文档

 

博客

 

下面介绍下它们的环境搭建。基础环境Ubuntu 16.04,Cuda 8.0(cuDNN 6.0),TensorFlow 1.2.1,Anaconda 4.4.0, Python 2.7/3.5。

 

 

 

ViZDoom

提供了用AI玩毁灭战士游戏的环境。主要用于机器学习研究,尤为是DRL算法研究。环境搭建能够参见官方文档:https://github.com/mwydmuch/ViZDoom/blob/master/doc/Building.md

依赖中其它还好,比较麻烦的是须要Torch 7 。安装方法参考Getting started with Torch

安装过程当中会下载freedoom-0.11.3.zip,但我这网速渣下载很是慢,能够先从http://freedoom.github.io/download.html上下好放在项目的根目录 。若是你网速快请忽略。
安装完成后运行examples/python/basic.py,会起一个图形界面,其中智能体(agent)采起的动做是随机的。

 

它还用多种语言实现了DQN算法,位于examples目录下。

 

 

 

 


Roboschool

MuJoCo在许多的DRL论文中被用于经典的控制场景实验。但它有个缺点是要钱(除了30天免费版及学生版)。而这个缺点对于咱们穷人来讲能够说是致命的。做为MuJoCo实现的替代品,OpenAI开发了基于Bullet物理引擎的Roboschool。它提供了OpenAI Gym形式的接口用于模拟机器人控制。目前包含了12个环境。其中除了传统的相似MuJoCo的场景,还有交互控制,及多智能体控制场景。

 

安装方法比较简单,基本按github上readme便可。好比运行下面例子:




后的效果: python $ROBOSCHOOL_PATH/agent_zoo/demo_race2.py


若是你不幸遇到下面的问题:

jzj@jlocal:~/source/roboschool$ python $ROBOSCHOOL_PATH/agent_zoo/RoboschoolHumanoidFlagrun_v0_2017may.py [2017-10-28 21:56:26,100] Making new env: RoboschoolHumanoidFlagrun-v1 QGLShaderProgram: could not create shader program bool QGLShaderPrivate::create(): Could not create shader of type 2. python3: render-simple.cpp:250: void SimpleRender::Context::initGL(): Assertion `r0' failed.
Aborted (core dumped)  

 

根据https://github.com/openai/roboschool/issues/15中描述是一个已知bug,有个WR是在脚本前面加上from OpenGL import GLU。

 

 

 

 

Multi-Agent Particle Environment

多智能体粒子世界。主要用于多智能体场景下的DRL相关研究。项目不大,依赖也比较简单,基本只要OpenAI gym。安装方法:

  pip3 install -e . --user

 

而后就能够运行了:




bin/interactive.py --scenario <env>

其中<env>在其readme中有列。好比:




bin/interactive.py --scenario simple_push.py

 

 


TensorFlow Models

这是TensorFlow models中提供的强化学习算法集。环境搭建比较简单,若是已经装了OpenAI Gym和MuJoCo,基本装完了TensorFlow就能够跑。建议拿python 2.7跑,拿3.x要改些东西,比较麻烦。

 

 

装完后跑个readme中的例子试下:

python trainer.py --logtostderr --batch_size=400 --env=DuplicatedInput-v0 \ --validation_frequency=25 --tau=0.1 --clip_norm=50 \ --num_samples=10 --objective=urex
 

 

看到下面这样的输出就是在训练了:

 

 

 

TensorFlow Agents

由Google两位研究员研发,用于在TensorFlow中构建并行强化学习算法。比较大的特色是容易开发并行强化学习算法。除了TensorFlow和OpenAI Gym,还须要安装ruamel.yaml:

pip install ruamel.yaml

 

按readme能够运行下例子:

$ python3 -m agents.scripts.train --logdir=./log --config=pendulum
$ tensorboard --logdir=./ --port=2222  

 

 

 

 

利用TensorFlow的tensorboard能够看到训练过程数据的图形化显示:

 

 

 

 

Universe

OpenAI出品,用于衡量和训练游戏中的AI的软件平台。特色之一是可让一个现有的程序变为OpenAI Gym环境,并且不用改动程序的内部代码和API。它将程序封装成docker容器,而后以人类的使用接口(键盘鼠标,屏幕输出)提供给AI学习模块。目前已经包含了1000+环境 。

 

该框架能够运行在Linux和OSX上,支持Python 2.7和3.5。官方readme里说内部用的3.5,因此python 3.5的支持应该会好些。注意它会用到docker(好比那些游戏会run在container中,而后经过VNC显示),因此须要先安装docker。docker安装可参见:

https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/

 

 

 

另外universe-starter-agent项目实现了一个用于universe环境中的agent,包含了A3C算法的实现。

 

 

 

 

 

ELF

其特色如其名字,可扩展(Extensive),轻量(Lightweight)和灵活(Flexible)。它特色之一是可让多个游戏实例并行执行。另外任何C++接口的游戏均可以经过wrapper接入到该框架中。目前支持MiniRTS(一个简化版即时策略游戏)及其扩展、Atari和围棋。引擎部分用C++部分实现,接口为python。

环境搭建只要运行readme中的install脚本便可。此外注意还须要用到tbb(Intel的并行编程库):

 

sudo apt-get install libtbb-dev 

 

 

 

比较特殊的是须要依赖PyTorch。可能因为个人网络很是之渣,用conda命令安装很是之慢:

conda install pytorch cuda80 -c soumith 

 

 

 

建议你也能够选择在http://pytorch.org/上选择你的环境和想要的安装方式,好比:

pip3 install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl pip3 install torchvision

 

 

安装完后,根据readme,能够运行下几个例子试下:

sh ./train_minirts.sh --gpu 0 # 训练MiniRTS

 

 

训练过程很吃资源,其它事就别干了,换台电脑或者去喝杯咖啡吧。训练过程产生的模型文件会存为save-xxx.bin的形式。假设为save-2245.bin。而后能够用下面的脚本作模型的evaluation:




sh eval_minirts.sh ./save-2245.bin 20

 

若是要进行self-play(机器人本身和本身玩)能够执行下面的脚本:

sh ./selfplay_minirts.sh ./save-2245.bin 

 

若是在运行eval或者self-play脚本时加上参数–save_replay_prefix replay,会生成一坨replayXXX-X.rep的重放文件。它们相似于之前玩的星际或者帝国中存档文件,能够用于重放。

下面是运行中可能碰到的问题及能够一试的解决方法:
Q: RuntimeError: cuda runtime error (10) : invalid device ordinal at torch/csrc/cuda/Module.cpp:87
A:这是由于selfplay_minirts.sh中默认整了多块GPU(–gpu 2)。我只有一块,改成–gpu 0便可。

Q: 在执行eval_minirts.sh时出错错误:
ValueError: Batch[actor1-5].copy_from: Reply[V] is not assigned
A: 在eval_minirts.sh中加参数–keys_in_reply V

 

 

 

 

 

 

 

 

Coach

由Intel收购的Nervana公司推出。该公司主要产品 是深度学习框架neon(不是arm上并行指令那个。。。)。Coach是一个基于Python语言的强化学习研究框架,而且包含了许多先进算法实现。该框架基于OpenAI Gym。其特点之一是能够方便地实现并行算法,充分利用CPU多核。另外有图形化工具能够方便地看训练过程当中各项指标的曲线。它支持双后端,一个是当前大热的TensorFlow,一个是Intel自家的neon。该项目结合了Intel优化版本的TensorFlow和自家的神经网络加速库mkl-dnn,相信高性能是它的一个目标。

该框架要求Python 3.5。首先运行自带安装脚本:

./install.sh

 

这个脚本会让输入一系列选项,其中若是选了要安装neon的话会去下mkl-dnn的库,我这下载巨慢。由于这是其中backend之一,不是必选的,所以若是网络和我同样渣的能够选择不装这个。

装完后能够运行几个例子:

python3 coach.py -p CartPole_DQN -r

 

 




python3 coach.py -r -p Pendulum_ClippedPPO -n 8

 

 

 

 

 



python3 coach.py -r -p MountainCar_A3C -n 8

 

 

 

 

 

而后能够经过下面的脚本将训练过程图形化:




python3 dashboard.py

 

若是过程当中发现少annoy模块,能够用下面命令安装下。
Q:ModuleNotFoundError: No module named ‘annoy’
A:pip3 install annoy

 

 

 

 

 

 

 

Unity Machine Learning Agents

大名鼎鼎的Unity公司出的。手机上的游戏不少就是基于Unity 3D引擎的。此次推出强化学习框架,它主打的是实验环境。亮点是能够结合Unity Editor来建立自定义的强化学习实验场景(详见

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Making-a-new-Unity-Environment.md)。可能也是看准了如今游戏中愈来愈多用到AI的趋势。它主要特色是能够支持多个观察输入,多智能体支持,并行环境计算等 。python 2和3都支持。目前支持的场景有3D Balance Ball,GridWorld

和Tennis(https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Example-Environments.md)。

算法部分就实现了PPO。由于主打是实验场景框架,算法意思一下就行。

 

 

由于个人工做环境基本都是Linux下的,而这个框架依赖的Unity SDK只支持Windows和Mac OS X。木有钱买水果,也实在打不起精神在Windows下搭环境,因此这个平台我没试过。你们有兴趣能够搭起来玩下。各类DRL的论文里都是Gym, MuJoCo,Torcs,DeepMind Lab这些,要是整些这个项目里的几个场景上去,或者自定义个场景,应该也挺让人新鲜的。

相关文章
相关标签/搜索