原文連接: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 |
|
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 | 論文 | |
Universe/ universe-starter-agent |
Atari, CarPole, Flashgames, Browser task, etc. |
Python | A3C | OpenAI | 博客 | |
ELF |
MiniRTS, Atari, Go |
Python | PG, AC |
|
||
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。
多智能體粒子世界。主要用於多智能體場景下的DRL相關研究。項目不大,依賴也比較簡單,基本只要OpenAI gym。安裝方法:
pip3 install -e . --user
而後就能夠運行了:
bin/interactive.py --scenario <env>
其中<env>在其readme中有列。好比:
bin/interactive.py --scenario simple_push.py
這是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
看到下面這樣的輸出就是在訓練了:
由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公司出的。手機上的遊戲不少就是基於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這些,要是整些這個項目裏的幾個場景上去,或者自定義個場景,應該也挺讓人新鮮的。