常用增強學習實驗環境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等)


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

前段時間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: 真羡慕現在研究強化學習的孩子,各種五花八門的實驗環境,算法參考實現也可以隨便挑。。。

在第一篇中介紹過的本文就不重復累述了,這里把本文涉及的項目大致分為兩類:
1. 實驗場景類: 像OpenAI Gym,MuJoCo這些。

名稱 github鏈接 類型 語言 平台 官方介紹
ViZDoom 代碼 FPS C++, Lua, Java, Python Linux,Windows,Mac OS 官網 論文 教程
Roboschool 代碼 Physical simulation Python Linux, Mac OS 博客
Multi-Agent Particle Environment 代碼 Multi-agent Python Linux 論文 論文

2. 研究框架類: 一般會整合多個實驗場景並提供方便統一的接口,方便其它場景的接入,並提供一些高級功能(如並行化),同時可能附帶一些算法參考實現。

名稱 github鏈接 場景 語言 實現算法 相關機構 官方介紹
TensorFlow Models 代碼 OpenAI Gym, 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/

跑起readme中flashgames.DuskDrive-v0的例子后可以看到如下輸出:
這里寫圖片描述

另外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這些,要是整些這個項目里的幾個場景上去,或者自定義個場景,應該也挺讓人新鮮的。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com