Stable Baselines Zoo - パックマンを攻略 ACER(Actor-Critic with Experience Relay)編

パックマンを各学習アルゴリズムで攻略します。

今回使用する学習アルゴリズムは ACER です。

ACERActor-Critic with Experience Relay の略で、「方策」と「価値関数」の両方を利用した学習法 A3C をオフポリシーに書き換えて「Experience Replay」を利用できるようにした学習法です。

(Ubuntu 19.10で動作確認しています。)

ACERでパックマンを攻略

次の条件で、学習アルゴリズム ACER の学習済みモデル使ってパックマンを実行し、その様子を動画ファイルに出力します。

  • 環境
    MsPacmanNoFrameskip-v4
  • 学習アルゴリズム
    ACER
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo acer --env MsPacmanNoFrameskip-v4 -n 1000

実行結果は次の通りです。


実行結果


DQNよりはましですが、PPO2とあまり変わらないくらいの成績だと感じます。。。

Stable Baselines Zoo - PPO2でパックマンを攻略する

以前パックマンを学習アルゴリズムDQNで攻略してみましたが、結果がいまいちだったので学習アルゴリズムを変えて実行してみます。

今回使用する学習アルゴリズムは PPO2 です。

このアルゴリズムを簡単に説明しますと、

  1. 高い報酬が得られる行動を優先し、低い報酬しか得られれない行動を避けるように方策を最適化する学習法 VPG を、
  2. 安定化するように改良した学習法 TRPO を、
  3. さらに計算量を削減するように改良した学習法 PPO1 で、
  4. GPUに対応している学習法 PPO2 です。

(Ubuntu 19.10で動作確認しています。)

PPO2でパックマンを攻略

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    MsPacmanNoFrameskip-v4
  • 学習アルゴリズム
    PPO2
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo ppo2 --env MsPacmanNoFrameskip-v4 -n 1000

実行結果は次の通りです。


実行結果


以前ためしたDQNよりは、だいぶ上手にプレイできているようです。

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(SpaceInvadersNoFrameskip-v4)

Stable Baselines Zoo の動画ファイル出力機能を使って SpaceInvadersNoFrameskip-v4環境 を実行する様子を動画ファイルにしてみます。

SpaceInvadersNoFrameskip-v4環境 は、有名なインベーダーゲームです。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(SpaceInvadersNoFrameskip-v4)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    SpaceInvadersNoFrameskip-v4
  • 学習アルゴリズム
    A2C
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo a2c --env SpaceInvadersNoFrameskip-v4 -n 10000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


なかなかちゃんとプレイできているようです。

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(SeaquestNoFrameskip-v4)

Stable Baselines Zoo の動画ファイル出力機能を使って SeaquestNoFrameskip-v4環境 を実行する様子を動画ファイルにしてみます。

SeaquestNoFrameskip-v4環境 は、水中で敵を倒し救出するゲームで、シューティングの要素も含んでいます。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(SeaquestNoFrameskip-v4)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    SeaquestNoFrameskip-v4
  • 学習アルゴリズム
    DQN
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo dqn --env SeaquestNoFrameskip-v4 -n 1000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


敵を倒しに行っているような気はしますが、人を助けようとする雰囲気はありません。
人の色と海の色が似ていて認識できていないんでしょうか・・・。

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(PongNoFrameskip-v4)

Stable Baselines Zoo の動画ファイル出力機能を使って PongNoFrameskip-v4環境 を実行する様子を動画ファイルにしてみます。

PongNoFrameskip-v4環境 は、対戦型のピンポンゲームです。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(PongNoFrameskip-v4)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    PongNoFrameskip-v4
  • 学習アルゴリズム
    DQN
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo dqn --env PongNoFrameskip-v4 -n 1000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


無駄な動きが多く、ほとんど得点できません。学習済みデータを使わずにハイパーパラメータを調整して学習しなおす必要がありますね。

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(sPacmanNoFrameskip-v4)

Stable Baselines Zoo の動画ファイル出力機能を使って sPacmanNoFrameskip-v4環境 を実行する様子を動画ファイルにしてみます。

sPacmanNoFrameskip-v4環境 は、あの有名なパックマンです。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(sPacmanNoFrameskip-v4)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    sPacmanNoFrameskip-v4
  • 学習アルゴリズム
    DQN
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo dqn --env sPacmanNoFrameskip-v4 -n 1000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


下手な人がパックマンをやっているような感じがします。

強化学習を通してパックマンがさくさくクリアするくらいになるとかなり嬉しいというか実用的なのですが、私の知識ではまだまだそこまでいきません。m(_ _ )m

Stable Baselines - TensorBoardによる学習状況の監視

TensorBoardTensorFlow のデータを可視化するツールです。

これを使うことにより、学習状況をより詳細に確認することができます。

(Ubuntu 19.10で動作確認しています。)

TensofBoardのログを出力する

TensorBoard 用のログを出力するためには、モデルを作成する際の引数 tensorboard_log に出力先ディレクトリを指定します(15行目)。

[ソース]

tensorboard_watch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import gym
import os
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import PPO2

# ログ出力先のディレクトリを作成
log_dir = './logs/'
os.makedirs(log_dir, exist_ok=True)

# 環境を作成
env = gym.make('CartPole-v1')
env = DummyVecEnv([lambda: env])

# モデルを作成
model = PPO2('MlpPolicy', env, verbose=1, tensorboard_log=log_dir)

# モデルの学習
model.learn(total_timesteps=100000)

# モデルのテスト
state = env.reset()
for i in range(200):
# 環境の描画
env.render()
# モデルの推論
action, _ = model.predict(state)
# 1ステップ実行
state, rewards, done, info = env.step(action)
# エピソード完了
if done:
break
# 環境のクローズ
env.close()

上記コードを実行します。

[コマンド]

1
python3.7 tensorboard_watch.py

TensofBoardの実行

先ほど実行したログを TensorBoard で表示するために下記のコマンド実行します。

[コマンド]

1
tensorboard --logdir=./logs/.

正常に実行されると、コンソールにURLが表示されるのでそれをブラウザで開きます。

実行結果


学習による平均報酬のグラフやその他いろいろな情報を確認することができます。

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(EnduroNoFrameskip-v4)

Stable Baselines Zoo の動画ファイル出力機能を使って EnduroNoFrameskip-v4環境 を実行する様子を動画ファイルにしてみます。

EnduroNoFrameskip-v4環境 は、相手の車を抜いていく単純なカーレースゲームです。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(EnduroNoFrameskip-v4)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    EnduroNoFrameskip-v4
  • 学習アルゴリズム
    DQN
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo dqn --env EnduroNoFrameskip-v4 -n 1000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


相手の車を抜かすどころか抜かれまくってます。。。

後ろからくる車にぶつからないようにするゲームだと勘違いしてるんですかね。。。(;^_^A)

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(QbertNoFrameskip-v4)

Stable Baselines Zoo の動画ファイル出力機能を使って QbertNoFrameskip-v4環境 を実行する様子を動画ファイルにしてみます。

QbertNoFrameskip-v4環境 は、主人公の「Qバート」を操作し、敵を避けてブロックの山をジャンプして色を付けていき、全てのブロックに色をつければステージクリアとなる環境です。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(QbertNoFrameskip-v4)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    QbertNoFrameskip-v4
  • 学習アルゴリズム
    DQN
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo dqn --env QbertNoFrameskip-v4 -n 1000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


紫色の敵(?)でしょうか。この敵をうまくよけることができずクリアするところは一回も確認できませんでした・・・。

Stable Baselines Zoo - 学習済みモデルを動画ファイルに出力(BipedalWalker-v3)

Stable Baselines Zoo の動画ファイル出力機能を使って BipedalWalker-v3環境 を実行する様子を動画ファイルにしてみます。

BipedalWalker-v3環境 は、2足歩行の物体をうまく前に進むようにする環境です。

(Ubuntu 19.10で動作確認しています。)

学習済みモデルの動画ファイル出力(BipedalWalker-v3)

次の条件で、学習済みモデルを実行している様子を動画ファイルに出力します。

  • 環境
    BipedalWalker-v3
  • 学習アルゴリズム
    PPO2
  • ステップ数
    1000

[コマンド]

1
python3.7 -m utils.record_video --algo dqn --env BipedalWalker-v3 -n 1000

上記コマンドを実行すると、次のような動画ファイルが出力されます。


実行結果


人が走るような感じではないですが、前足と後ろ足を役割分担してつまずくことなく前に進む様子を確認できます。