すぐに忘れるのでわすれないうちに
こんにちわ、こんばんわ。かえるのクーの助手の弟子の「井戸中 瑠璃」(いとなか るり)です。
とうとう連休も最終日です。みなさまの連休は如何でしたでしょうか?
ほぼ半分は、Unity ML-Agents関連のYoutubeやブログ、説明を見ておりました。英語のサイトやヒアリング等、頭に詰め込みすぎたのか、3時間毎に猛烈な睡魔に襲われ、たいへんよく眠りました。おかげで連休のはじめの頃より聞き取れるようなった「気」がします。さらに、アニメ三昧でした。今シーズンの瑠璃のお勧めはなんといっても
「聖女の魔力は万能です」です。
ほかには、トウカイテイオーちゃんもメジロマックイーンちゃんも、もちろんスペシャルウィークちゃんもかわいいです。瑠璃のまわりではゲームのほうの「ウマ娘」がおおはやりです。何故かゴールドシップ様(ゴルシちゃん)に人気が集まっております。
さて、連休はUnityをがんばるつもりでしたが、ML-Agents一辺倒になってしまいました。
ML-Agentsのコードデバッグは「mlagents-learn」のタイムアウトと中断後の続行に注意すれば、それほど難しくはありませんでした。
とはいえ、すぐに忘れるので記録しておきます。今回はWindowsでやったのでWindowsでの情報です。
mlagents-learn編
やったことはあまりありませんが、ポイントは何点かあります。
・起動は学習の直前にすること
-- 時間が空いてしまうとタイムアウトしてそのIDはエラー状態になってしまいます。
・失敗したIDは上書きしてしまったほうがよい。
> mlagents-learn ./config/SpaceBall.yaml --run-id=SpaceBall-ppo-100 --force
--(あとからの確認に邪魔なため)次の実行で 同じIDで --force を指定すれば上書きできます。(操作ミスやタイミングなどで学習開始の失敗はかなりあります。)ただし、次の実験でIDを間違えないように注意が必要です。(同じコマンドで起動してしまうと前回の情報が消えます)
・Unity側デバッガの関係で停止させたが、続行したい場合は --resume を使用する
> mlagents-learn ./config/SpaceBall.yaml --run-id=SpaceBall-ppo-100 --resume
-- これはかなり重宝です。デバッガを使用したり、学習途中にプログラムを変更・調整して続行してみるような場合はありがたいです。
・学習のパラメータや報酬の与え方を調整したい場合はTensorBordでの確認がとっても便利です。
>tensorboard --logdir=summaries --port=6006
...
TensorBoard 2.5.0 at http://localhost:6006/ (Press CTRL+C to quit)
いろいろ確認できます。
-- はじめは使ってませんでしたが、途中から使用して重宝でした。
・学習の最大ステップ数などを変えたい場合は yamlファイルを調整します
最初は max_steps: 5.0e5 にしていましたが、 ゆっくり学習するパラメータのためかこれくらいではまだ学習が不十分なためmax_steps: 5.0e6にしてみました。(終わらなくなったので サンプルでは とりあえず4.0e5(400,000Stepにしています)
Unity C#編
操作は通常のデバックと変わりませんが、基本的に遠隔デバッグであることに注意が必要です。特に学習中はmlagents-learnと通信しているので、Unity側を1~2分止めただけでmlagents-learnがTimeout終了してしまいます。
基本手順
(1)AgentのプログラムコードをVisualStudioで起動する
(2)ブレークポイントを設定する
(3)メニューのデバッグからUnityデバッガのアタッチを選択し、起動しているUnityを選択する。
(4)Unity側にC# Debugger Attached ウインドウが表示されるので、[Enable debugging for this session]を選択する。([...all projects]の方でもよい)
(5)Unity のPlay▶ボタンを押す
(6)このとき学習中で、mlagents-learn が停止してしまっていた場合は、mlagents-learnを --resume モードで起動する。--resume でエラーになる場合はやむなく --force 指定で最初から学習を実行する。
(7) mlagents-learn でStart training by pressing the Play button in the Unity Editor.の票y時がでたら改めてUnity のPlay▶ボタンを押す
(このとき▶ボタンを複数回おさないと再開しないケースがあった)
(8)起動するとC#のブレークポイントで停止するので、いろいろ確認する。確認しているとmlagents-learn はそのうち TimeOutするが、デバッガで確認中(メソッド内)は気にしない
※TimeOut値の設定がないか調べましたが、ドキュメントやWebに情報がみあたりませんでした。
・強制的に停止したり、異常の場合ポートが使用中になってしまう場合がある
-- プロセスを見て完全に停止させるか、ポートの自動解放を待つか(OSの制限ですぐに再使用できない場合あり)、最悪の場合PCの再起動となります。
連休楽しかったです
連休中は寝てばかりでしたが、ML-Agentsで遊べたので「よし」としておきます。
特に報酬の与え方が異なれば、まったく違うタイプの挙動をみせるのが、たいへん興味深かったです。
それではみなさま、ごきげんよう。
(おまけ)
とりあえずどんな感じなのか学習中の画像を貼っておきます。(まったく未編集で音声なしです。ごめんなさい。)
学習のレベルがあがる様子がたいへん興味深いです。最後のほうではかなりいい感じになっているものの、初期段階での用心深さがとれていないので、まだ「伸びしろ」はある感じです。
タイムアウトか衝突できたのか、画面からわかりにくいのが反省点です。やっぱりその点が残念なところみたいで、衝突したときと失敗(タイムアウト)したときのエフェクトを調べてみます。