zawazawa雑記

Unity ML-Agentsを一通り動かすまでのメモ

あくまで個人のメモです。基本的には以下の記事が詳しく書かれています。

qiita.com

Colaboratory – Google

メモ

SHELL切り替え

Anaconda上で学習をしようとすると、zshでは起動しなかったのでbashに変えました。原因は調べてないです。

//起動シェルを確認
$ echo $SHELL
//シェル一覧
$ cat /etc/shells
//起動シェルの変更
$ chsh -s /bin/bash

v0.4とv0.5でディレクトリ構成がガラッと変わる

Pythonディレクトリがなくなり代替としてml-agentsというものができる

build場所

ml-agent直下

学習実行

mlagents-learn config/trainer_config.yaml --env=3DBall --run-id=firstRun --train

※../config/trainer_config.yamlだとfile not foundになった

tensorboardで可視化

/Users/****/projects/Unity-ML-Agents/ml-agents/ml-agents で

tensorboard --logdir=summaries

を叩いてlocalhost:6006にアクセス

詰まったとこ

  • conda install tensorflowとconda install tensorboardをしないといけない
  • localhost6006にアクセスしても"No dashboards are active for the current data set."って言われる。よくわからなかったので未解決。

学習結果ファイルの取り込み

ターミナルかFinderで学習結果を以下フォルダにコピーします。

学習結果ファイル: ml-agents/models/firstRun-0/3DBall_firstRun-0.bytes 保存先: UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/

Google Colabでの実行

ターミナルで以下を実行

pip install jupyter_http_over_ws
jupyter serverextension enable --py jupyter_http_over_ws
jupyter notebook \
  --NotebookApp.allow_origin='https://colab.research.google.com' \
  --port=8888 \
  --NotebookApp.port_retries=0

Google colabで以下を実行

cd /Users/****/projects/Unity-ML-Agents/ml-agents
!/anaconda3/envs/mlagents/bin/mlagents-learn /Users/****/projects/Unity-ML-Agents/ml-agents/config/trainer_config.yaml --env=/Users/****/projects/Unity-ML-Agents/ml-agents/ball3DMove --run-id=onColab --train

自分で問題を設定してみる

3DBallの問題に、前方のゴールを目指して移動しながらボールを保持する、というタスクも追加する。

  • 1試行目
Vector Action Continuous(3)
・0:z回転
・1:x回転
・2:z移動
Reward ステップ毎:+0.1(に変更)
ボール落下:-1.0(エピソード完)
ゴール到達:+1.0(エピソード完)
ステップ毎のアクション z方向への移動を追加
  • 結果

    • 最初の報酬設計だとボールの維持による報酬が大きすぎてゴールへ到達しない。報酬を以下のように変えてみる。
  • 2試行目

Reward ボール落下:-1.0(エピソード完)
ゴール到達:+1.0(エピソード完)
変更方針 ボールの維持による報酬が大きすぎたため、維持しているだけでは報酬を与えないことに
  • 結果

    • ゴールが遠すぎたのか、反対側へ行くものが多くなった。ゴールの距離を半分にしてみる。
  • 3試行目

ゴールまでに進まないといけない距離を半分にしてみる。

  • 結果

    • Goalまで運べるようになった!
  • おまけ 同じ条件でGoogle colab上でも動かしてみる

  • 結果
    • 同じ条件なのに反対側に進むという収束結果に。報酬の平均もマイナス値で、反対方向への探索がうまく行ってないみたい。goal方向に向かうことによる何かしらの小報酬が必要なのかな。やはり強化学習は報酬設計が大事という実感が得られた。

おしまい