狀態:維護(預計錯誤修復和小更新)
OpenAI Baselines 是一組強化學習演算法的高品質實作。
這些演算法將使研究界更容易複製、完善和識別新想法,並將創建良好的基線來建立研究。我們的 DQN 實現及其變體與已發表論文中的分數大致相當。我們期望它們將被用作添加新想法的基礎,並作為將新方法與現有方法進行比較的工具。
基線需要有開發標頭的 python3 (>=3.5)。您還需要係統包 CMake、OpenMPI 和 zlib。可以如下安裝
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
Mac 上安裝系統包需要 Homebrew。安裝 Homebrew 後,執行以下指令:
brew install cmake openmpi
從一般的 python 套件完整性角度來看,使用虛擬環境 (virtualenvs) 來確保來自不同專案的套件不會相互幹擾是一個好主意。您可以透過安裝 virtualenv (它本身就是一個 pip 套件)
pip install virtualenv
Virtualenvs 本質上是包含 python 可執行檔和所有 python 套件副本的資料夾。若要使用 python3 建立一個名為 venv 的虛擬環境,請執行
virtualenv /path/to/venv --python=python3
要啟動虛擬環境:
. /path/to/venv/bin/activate
有關 virtualenvs 和選項的更全面的教程可以在這裡找到
master分支支援Tensorflow版本1.4到1.14。如需 Tensorflow 2.0 支持,請使用 tf2 分支。
將 repo 和 cd 克隆到其中:
git clone https://github.com/openai/baselines.git
cd baselines
如果您尚未安裝 TensorFlow,請安裝您最喜歡的 TensorFlow 版本。大多數情況下,您可以使用
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
或者
pip install tensorflow==1.14
安裝Tensorflow 1.14,這是master分支支援的最新版本的Tensorflow。有關更多詳細信息,請參閱 TensorFlow 安裝指南。
安裝基線包
pip install -e .
一些基準範例使用 MuJoCo(接觸的多關節動力學)物理模擬器,該模擬器是專有的,需要二進位和許可證(可以從 www.mujoco.org 獲取臨時 30 天許可證)。有關設定 MuJoCo 的說明可在此處找到
基線中的所有單元測試都可以使用 pytest runner 來執行:
pip install pytest
pytest
基線儲存庫中的大多數演算法的使用方式如下:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
例如,使用 PPO2 訓練控制 MuJoCo 人形機器人的全連結網路 20M 時間步
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
請注意,對於 mujoco 環境,全連接網路是預設的,因此我們可以省略--network=mlp
網路和學習演算法的超參數都可以透過命令列控制,例如:
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 --ent_coef=0.1 --num_hidden=32 --num_layers=3 --value_network=copy
將熵係數設為0.1,建構3層全連接網絡,每層32個隱藏單元,並建立一個單獨的網絡用於價值函數估計(使其參數不與策略網絡共享,但結構相同)
有關每種模型類型的網路參數的描述,請參閱 common/models.py 中的文件字串,有關 ppo2 超參數的描述,請參閱基線/ppo2/ppo2.py/learn() 的文件字串。
目前,Atari 的 DQN 是基準測試的經典。要在 Atari Pong 上運行 DQN 的基線實作:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
演算法序列化API尚未統一;但是,有一個簡單的方法可以保存/恢復經過訓練的模型。 --save_path
和--load_path
命令列選項分別在訓練前從給定路徑載入張量流狀態,並在訓練後保存它。假設您想在 Atari Pong 上訓練 ppo2,儲存模型,然後將其學到的內容視覺化。
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
這應該達到每集的平均獎勵約為 20。
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
注意: Mujoco 環境需要標準化才能正常運作,因此我們用 VecNormalize 包裝器包裝它們。目前,為了確保模型透過歸一化保存(以便可以恢復並運行經過訓練的模型而無需進一步訓練),歸一化係數被保存為張量流變數。這可能會在一定程度上降低效能,因此如果您需要 Mujoco 的高吞吐量步驟並且不需要保存/復原模型,則使用 numpy 標準化可能是有意義的。為此,請在基線/run.py 中設定“use_tf=False”。
預設情況下,所有摘要資料(包括進度、標準輸出)都會儲存到臨時資料夾中的唯一目錄中,該目錄透過呼叫 Python 的 tempfile.gettempdir() 來指定。可以使用--log_path
命令列選項來變更該目錄。
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
注意:請注意,記錄器將覆蓋現有目錄中的同名文件,因此建議為資料夾名稱指定唯一的時間戳,以防止覆蓋日誌。
更改臨時目錄的另一種方法是使用$OPENAI_LOGDIR
環境變數。
有關如何載入和顯示訓練資料的範例,請參閱此處。
Mujoco(1M 時間步長)和 Atari(10M 時間步長)的基準測試結果分別可在此處(Mujoco)和此處(Atari)取得。請注意,這些結果可能不在最新版本的程式碼中,而獲得結果的特定提交雜湊在基準測試頁面上指定。
要在出版物中引用此存儲庫:
@misc{baselines,
author = {Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Wu, Yuhuai and Zhokhov, Peter},
title = {OpenAI Baselines},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/openai/baselines}},
}