經常使用加強學習實驗環境 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這些,要是整些這個項目裏的幾個場景上去,或者自定義個場景,應該也挺讓人新鮮的。

相關文章
相關標籤/搜索