強化学習環境まとめ


Abstract

  • 強化学習環境について紹介
    • なんだかんだいろんな環境で遊んできたので紹介

とりあえず強化学習(Reinforcement Learning: RL)の概要



強化学習の要素

  • エージェント (agent)
  • 環境 (environment)
  • 行動 (action)
  • 報酬 (reward)
  • 状態 (status)

強化学習についてつづきはこちら

趣味の強化学習


全ての基本OpenAI Gym

import gym
env = gym.make("Taxi-v1") # <- 環境を作成
observation = env.reset() # <- リセット。初期の状態sを受け取る
for _ in range(1000):
  env.render() # <- 描画する。学習時には無くても良い
  action = env.action_space.sample() # <- これは推論・探索に置き換え
  observation, reward, done, info = env.step(action)
           # ↑ ステップをまわす。状態s、報酬r、終了フラグ等が返られる

OpenAI Gymにあるもの

  • Atariのゲーム
  • Box2D: 古典力学的な2D物理演算エンジン
  • Classic control: 典型的な強化学習タスク
  • MuJoCo: 商用3D物理演算エンジン
  • Roboschool: フリーのMuJoCo互換
  • Algoriths, ToyText: 単純なタスク

Atariのゲーム

AtariショックのAtari。単純なゲームが多い。


Atariのゲームの例

ブロック崩し
パックマン
その他


Atariには無理ゲーが多い

以下、DQN論文より引用。下の方は、人間でも無理ゲー。


無理ゲーの例

MontezumaRevenge-v0
PrivateEye-v0

※ Montezumaは集中的に研究され、最近は解けたと主張する論文がある


Breakoutを見てみる

test-breakout-v0.py
import gym
env = gym.make("Breakout-v0")
timestep_limit = env.spec.tags.get(
  'wrapper_config.TimeLimit.max_episode_steps')
obs_space = env.observation_space
obs_size = obs_space.low.size
action_space = env.action_space
observation = env.reset() # <- リセット。初期の状態sを受け取る
for _ in range(1000):
  env.render() # <- 描画する。学習時には無くても良い
  action = env.action_space.sample() # <- これは推論・探索に置き換え
  observation, reward, done, info = env.step(action)

Box2Dの例:BipedalWalker-v2


MuJoCo: Ant-v2


Robotics: FetchPickAndPlace-v1



RoboSchool: RoboschoolAnt-v1


Roboschool

  • Bulletエンジンで、MuJoCo互換の環境を実装。
    • MuJoCoのライセンス費は高い
    • Dockerで使うにはさらに高いライセンス費が必要(今時の学習環境に合わない)
  • なんか全体的にコード品質が低く、未完成感
  • READMEには、Roboschool2を作っていると書いてある(がどこで?)

Roboschoolを読んでみる


PyBullet

  • 去年ぐらいにPyBullet自身がGymに対応
  • よく見ると、Roboschoolのコードが入っている
  • 今後、これが本流となる見込み

PyBullet(余談)

  • 最近のRLの潮流として、Domain Adaptationがある
  • 現実世界とシミュレーションのギャップをいろいろな方法で埋める手法
    • Sim2Realという
  • そのためには、シミュレーター自体のパラメーターを色々いじくれる必要がある
    • Roboshcool は、BulletエンジンをC++でラップしてPythonから使っていたので、エンジン自体をいじくりにくかった
    • PyBulletはエンジン自体をPythonでラップしているのでパラメーターを変更しやすい

gym-gazebo

  • Gazebo は、ROS(Robot operating system)のシミュレーター
  • Gazebo を Gym化したのが、gym-gazebo
    • 導入が大変で試していない

deep racer (virtual league)

  • AWSが作ったハードウェア
  • それのシミュレーター。Robomaker がベース。つまり、Gazebo

https://github.com/aws-robotics/aws-robomaker-sample-application-deepracer
https://aws.amazon.com/jp/deepracer/schedule-and-standings/leaderboard-virtual-london-loop-2019/?p=drl&exp=btn&loc=2


Unity ML-Agent

  • UnityをRLAgentにつかうもの
  • Unityを使って環境をビルドして一つのアプリにする
    • Pythonを使って環境を構築できるフレームワークでは無い
    • 環境がポータブルなアプリになるので単に利用するだけの人は環境構築が楽

Animal AI-Olympics


lis

  • Unityを使ってAnimal AI-Olympicsのような事をする環境

    • 相当古い実装で最近更新が無い。Unity ML-Agentはつかわれていない
    • Unity開発環境をそのまま使うので、ポータブルなアプリではない
  • LIS (Life in Silico) のソースを読んでみる


PyLIS

  • lisをPyBulletで書き直したもの
  • ユーザーは少なそう