ステータス:メンテナンス (バグ修正とマイナーアップデートを予定)
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
Virtualenv は基本的に、Python 実行可能ファイルとすべての Python パッケージのコピーを含むフォルダーです。 Python3 で venv という仮想環境を作成するには、次のコマンドを実行します。
virtualenv /path/to/venv --python=python3
virtualenv をアクティブにするには:
. /path/to/venv/bin/activate
virtualenvs とオプションに関するさらに詳しいチュートリアルはここにあります。
master ブランチは、バージョン 1.4 から 1.14 までの Tensorflow をサポートします。 Tensorflow 2.0 のサポートについては、tf2 ブランチを使用してください。
リポジトリのクローンを作成し、それに 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 (接触多関節ダイナミクス) 物理シミュレータを使用しています。これは独自仕様であり、バイナリとライセンスが必要です (30 日間の一時ライセンスは www.mujoco.org から取得できます)。 MuJoCo のセットアップ手順はこちらをご覧ください。
ベースラインのすべての単体テストは、pytest ランナーを使用して実行できます。
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 に設定し、それぞれに 32 個の隠れユニットを持つ 3 層の完全接続ネットワークを構築し、値関数推定用に別のネットワークを作成します (そのため、パラメーターはポリシー ネットワークと共有されませんが、構造は同じです) )
モデルの各タイプのネットワーク パラメーターの説明については common/models.py の docstring を参照してください。ppo2 ハイパーパラメーターの説明については、baselines/ppo2/ppo2.py/learn() の docstring を参照してください。
Atari を使用した DQN は、現時点ではベンチマークの古典です。 Atari Pong で DQN のベースライン実装を実行するには:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
アルゴリズムのシリアル化 API はまだ適切に統合されていません。ただし、トレーニング済みモデルを保存/復元する簡単な方法があります。 --save_path
および--load_path
コマンドライン オプションは、それぞれトレーニング前に指定されたパスから tensorflow 状態をロードし、トレーニング後にそれを保存します。 Atari Pong で ppo2 をトレーニングし、モデルを保存して、後で何を学習したかを視覚化したいと想像してみましょう。
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
これにより、エピソードあたりの平均報酬は約 20 に達するはずです。モデルをロードして視覚化するには、次の手順を実行します。モデルをロードし、0 ステップでトレーニングしてから視覚化します。
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
注: Mujoco 環境が正しく動作するには正規化が必要なため、VecNormalize ラッパーでラップします。現在、モデルが正規化されて保存されていることを確認するために (トレーニングされたモデルをさらにトレーニングせずに復元して実行できるように)、正規化係数はテンソルフロー変数として保存されています。これによりパフォーマンスが多少低下する可能性があるため、Mujoco で高スループットのステップが必要で、モデルの保存/復元が必要ない場合は、代わりに numpy 正規化を使用するのが合理的かもしれません。これを行うには、baselines/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/
注:ロガーは既存のディレクトリ内の同じ名前のファイルを上書きすることに注意してください。そのため、ログの上書きを防ぐためにフォルダー名に一意のタイムスタンプを付けることをお勧めします。
一時ディレクトリを変更できるもう 1 つの方法は、 $OPENAI_LOGDIR
環境変数を使用することです。
トレーニング データをロードして表示する方法の例については、ここを参照してください。
Mujoco (100 万タイムステップ) と Atari (1000 万タイムステップ) のベンチマークの結果は、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}},
}