D4RL
D4RLとは、Datasets for Deep Data-Driven Reinforcement Learningの頭文字をとったもので、オフライン強化学習のオープンソースのベンチマークです。
強化学習のベンチマークというとAtariゲームが有名ですが、これはオンライン強化学習向けです。
D4RLの論文、リポジトリ、公式ウェブサイトは以下の通りです。
論文 | https://arxiv.org/abs/2004.07219 |
コード | https://github.com/Farama-Foundation/D4RL |
公式ウェブサイト | https://sites.google.com/view/d4rl/home |
D4RLのインストール方法
今回は、Colab上でMuJoCo環境でD4RLを使う方法を示します。
前準備
D4RLやMuJoCoのインストールの前に、必要なライブラリ群をインストールします。
%%bash
sudo apt update
sudo apt install gcc
sudo apt build-dep mesa
sudo apt install llvm-dev
sudo apt install freeglut3 freeglut3-dev
sudo apt install build-essential python3-dev
sudo apt install libgl1-mesa-dev libgl1-mesa-glx libglew-dev libglfw3-dev libosmesa6-dev patchelf
D4RLのインストール
%%bash
git clone https://github.com/rail-berkeley/d4rl.git
cd d4rl
pip install -e .
MuJoCoのインストール
%%bash
wget https://mujoco.org/download/mujoco210-linux-x86_64.tar.gz
mkdir /root/.mujoco
tar -xf mujoco210-linux-x86_64.tar.gz -C /root/.mujoco/
ls -alh /root/.mujoco/mujoco210
pip install 'mujoco-py<2.2,>=2.1'
ランタイムの再起動
ダウンロードしたらランタイムを再起動してください。
# ダウンロードしたらランタイムを再起動
exit()
クラッシュしましたという表示が出るかもしれませんが問題ありません。
環境変数へパスの追加
ランタイムを再起動したら環境変数を追加します。
%env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/.mujoco/mujoco210/bin:/usr/lib/nvidia
MuJoCoと言えば、数年前まではライセンス料を払わなければ使用できませんでしたが、DeepMindが買収したことで無料(Apache licence 2.0)で使用できるようになりました。
以下のツイートが流れてきたときは革命がおきたと思いました。
We’ve acquired the MuJoCo physics simulator (https://t.co/knwXLZMr4L) and are making it free for all, to support research everywhere. MuJoCo is a fast, powerful, easy-to-use, and soon to be open-source simulation tool, designed for robotics research: https://t.co/Of3Q1W2GIR pic.twitter.com/M9mTaKDqtn
— DeepMind (@DeepMind) October 18, 2021
利用可能な環境
D4RLを使用することができる環境は以下のページに示されている通りです。
https://github.com/Farama-Foundation/D4RL/wiki/Tasks
Maze2D |
AntMaze |
MiniGrid-FourRooms |
Adroit |
Gym |
Flow |
FrankaKitchen |
CARLA |
その他、Atariのゲーム環境でオフライン強化学習を試すためのd4rl-atari
や、PyBulletでオフライン強化学習を試すためのd4rl-pybullet
などがあるようです。
データ形式
d4rlを使って取得されたオフラインデータセットに含まれる情報は以下の通りです。
※Nはデータの数です。
observations | 「N×観測次元」の配列 |
actions | 「N×行動次元」の配列 |
rewards | N次元配列 |
terminals | N次元配列 ・ブール値配列 ・落下など終了条件によるエピソード終了を記録 |
timeouts | N次元配列 ・ブール値配列 ・最大長に達したことによるエピソード終了を記録 |
infos | 学習タスクごとのデバック情報 |
※terminalsとtimeoutsは別物で包含関係はありません
※後で説明しますがデータセットの取得方法によってはnext_observationsも得られます
オフラインデータの取得方法
d4rlはOpenAIのgymのAPIを用いて設計されています。d4rlが対応した任意の環境からオフラインデータを得るには、事前にgym環境をインスタンス化しておく必要があります。
import gym
import d4rl
env = gym.make("kitchen-mixed")
方法1:get_datasetメソッド
オフラインデータを取得する1つ目の方法として、get_dataset
メソッドがあります。get_datasetで得られる情報は、
- observations
- actions
- rewards
- terminals
- timeouts
- infos
です。使い方は以下の通りです。
dataset1 = env.get_dataset()
方法2:d4rl.qlearning_dataset
qlearning_datasetメソッドを用いた手法では、強化学習アルゴリズムの入出力データのセットの形式でデータを取得することができます。得られるデータは以下の通りです。
- observations
- actions
- next_observations
- rewards
- terminals
OpenAI Gymで強化学習を行ったことがある方なら馴染みがある情報でしょう。これは、以下のようにして得ることができます。
dataset2 = d4rl.qlearning_dataset(env)
オリジナルの環境をD4RLに対応する方法
現時点では、オリジナルの環境をD4RLに対応させる方法はないようです。
とはいえ、オリジナル環境をD4RLに対応する方法は割と簡単で、学習時に、各情報をすべて収集し、get_dataset()
形式でデータをリターンするメソッドをGym形式のWrapperを作成するだけです。
多分、d4rl.qlearning_dataset()
に対応するのは難しいと思いますが。。。
さいごに
今回は、D4RLについて簡単に紹介しました。私自身、まだ勉強中なので、新たに調べたり分かったことがあれば情報を追加していく予定です。