OpenAI Gymの仕様を掴む③(Atari_前編_Pong)|実装で理解する深層強化学習の研究トレンド #3

f:id:lib-arts:20190517200641p:plain
連載の経緯については#1に記しました。

#1ではCartPoleを題材に強化学習アルゴリズムの開発にあたってのToolkitであるOpenAI Gymの概要、#2ではCartPole問題に関する仕様の詳細やアルゴリズムの改善にあたっての試行錯誤について取り扱いました。

#1と#2でCartPoleについては一通り把握できたので、#3ではAtariのゲームについて取り扱えればと思います。
以下、目次になります。

1. Atariに関して&モジュールのインストールについて
2. Atariゲームの実行とenvironmentの仕様の確認
3. まとめ

 

1. Atariに関して&モジュールのインストールについて
まずはAtariについて軽く触れるにあたって、Wikipediaよりいくつか引用します。

アタリ(ATARINASDAQ: ATAR)は、アメリカ合衆国ビデオゲーム会社で、ビデオゲームを作ることを主眼に創立された会社としては世界初。ノーラン・ブッシュネルにより1972年に創業。

アタリ (企業) - Wikipedia

上記はAtariに関するWikipediaの記述です。

f:id:lib-arts:20190517200812p:plain
インベーダーゲームや卓球ゲームのPongなどを開発したゲーム会社だと考えておけば良いです。OpenAI GymにおいてはこのAtariのゲームを実際にエミュレータとして動かせるようにenvironmentsを提供してくれています。

上記でAtariの概要についてはつかめたかと思いますので、早速モジュールをインストールして実行してみましょう。1節でインストールまで行い、実際の動作確認は2節で行えればと思います。
Atariのインストールにあたっては、

・pip install gym[atari]

でインストールを行うことができます。こちらでインストールしたAtariのゲームに関して2節では色々と試していければと思います。


2. Atariゲームの実行とenvironmentの仕様の確認
ゲームを実行するにあたって、まずは大まかな仕様の把握をしましょう。

Table of environments · openai/gym Wiki · GitHub
CartPoleのような詳細の説明は見つからなかったのですが、上記は読み解くにあたっての参考になりそうなので、こちらを確認していければと思います。(一覧として様々なenvironmentsに対して見れるので、比較して見るなどの際にも便利だと思います)

f:id:lib-arts:20190517202412p:plain
上記はCartPoleの記述ですが、Observation、Actionに関してそれぞれ空間のサイズについてまとまっています。#2でまとめたCartPole-v0においては、Observation SpaceがBox(4,)、Action SpaceがDiscrete(2)という風に表記されています。Discreteが離散を表し、CartPole-v0のActionスペースが離散値だったことを考慮すると、Boxが連続値でDiscreteが離散値で一旦把握しておくと良さそうです。(要出典;概ね合っているはずですが、細かいところが違う可能性があります)

f:id:lib-arts:20190517211337p:plain
上記がPong-v0とPong-v4の記述になります。Box(210, 160, 3)とDiscrete(6)でPong-v0が表されているので、Observation Spaceが画像、Action Spaceが6つのボタン(おそらく上下左右とAB)にあたると推測できます。コードの実行に関しては下記を実行することで試すことができます。

import gym
env = gym.make('Pong-v0')
for i in range(1):
    observation = env.reset()
    for t in range(1000):
        env.render()
        observation, reward, done, info = env.step(env.action_space.sample())
env.close()

上記を実行するとアニメーションが立ち上がってPongのゲームの実行画面を確認することができます。
ゲームの実行ができたので、以下では中身を読み解いて行きます。Observation SpaceはBox(210, 160, 3)であり画像のため、先にAction Spaceに着目します。

gym/atari_env.py at master · openai/gym · GitHub
上記がAtariのenvの実装ですが、最下部にACTION_MEANINGという辞書が定義されています。

f:id:lib-arts:20190517211413p:plain

上記によると、2が"UP"、3が"RIGHT"、4が"LEFT"、5が"DOWN"なので、Pongでは主に2と5を選択して上下に動かせば良いことがわかります。ちなみに実験してみたところ、3を押すと下に、4を押すと上に動きました。また、0と1を選択した場合は動かずその場に留まっていました。
上記のACTION_MEANINGの捉え方としては、0のNOOPが何もしない、1のFIREは攻撃2~5は上記で触れた通り上下左右です。またそれ以外については斜め移動に4つと移動&攻撃で8つなので合計でコマンドが18個あると把握しておくと良さそうです。
基本的にOpenAI Gymはゲームにおけるエミュレータと考えておくと良いので、Actionは基本的にコントローラの入力に対応すると把握しておくと良いです。


3. まとめ
#3ではAtariのゲームの一例としてPong-v0の実行と中身の把握を行いました。
#4ではInvaderなどの他のAtariのゲームの実行について説明していければと思います。