原文鏈接: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 | 論文 | |
Universe/universe-starter-agent | 代碼1 代碼2 | 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。
提供了用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目錄下。
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可以看到訓練過程數據的圖形化顯示:
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算法的實現。
其特點如其名字,可擴展(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
由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這些,要是整些這個項目里的幾個場景上去,或者自定義個場景,應該也挺讓人新鮮的。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。