ブログ 学習 強化学習

D4RLとは…オフライン強化学習のベンチマーク!?

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)で使用できるようになりました。

以下のツイートが流れてきたときは革命がおきたと思いました。

利用可能な環境

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×行動次元」の配列
rewardsN次元配列
terminalsN次元配列
・ブール値配列
・落下など終了条件によるエピソード終了を記録
timeoutsN次元配列
・ブール値配列
・最大長に達したことによるエピソード終了を記録
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について簡単に紹介しました。私自身、まだ勉強中なので、新たに調べたり分かったことがあれば情報を追加していく予定です。

  • この記事を書いた人
管理人

管理人

このサイトの管理人です。 人工知能や脳科学、ロボットなど幅広い領域に興味をもっています。 将来の目標は、人間のような高度な身体と知能をもったパーソナルロボットを開発することです。 最近は、ロボット開発と強化学習の勉強に力を入れています(NOW)。

-ブログ, 学習, 強化学習

PAGE TOP