2021年8月2日月曜日

Lv8のマルスは強すぎたのか…?

学習率を下げて挑んだものの、その後ガオガエンがLv8のマルスを倒すことはなかった…。 正確には1%程度の確率で勝利することはあるものの、その状態がずっと続き、成長が見られなかった。 

いくつか気になる点があったので変更してみた。 まずは報酬の遅延。画像認識のアルゴリズムの関係上、ダメージを認識するまでに遅延が生じる。ダメージが入っている間、数字が動くアニメーションがあってダメージ部分を読みとれないのだ。通常のダメージのときはおそらく15フレーム(強化学習エージェントのフレームなので20Hzで1フレーム50ms)程度、撃墜の際は30フレーム程度の遅延があるものと思われる。エージェントとしては、この間に入力したどのコマンドに報酬を関連づけてよいのかわかりにくくなっているはずだ。これに加えて、コントローラの入力遅延(測定すると6フレーム程度であった)もあるので、問題は更に深刻である。

これを修正するために、ダメージ部分がどの時点で変わり始めたかを記録しておき、各試合が終わった後に記録を書き変えて報酬のタイミングをダメージが入る入力をした瞬間に近づけるという措置をとった。具体的にはダメージ変更アニメーションの開始部分から6フレーム前に報酬を入れることにした。これでエージェントが報酬と関連づけるコマンドの数をぐっと減らせるはずだ。

もう1つ気になったことは、エージェントが自分の過去の入力を認識していないことである。入力遅延や硬直がある都合上、コマンド入力は即座に画面に反映されない。エージェントは画面の情報しかアクセスできないため、自分がどのようにコマンドを入力したのかわからずに次のコマンドを入れることになる。これでは適切なコマンドが入れられるとは思えないので、入力情報に過去のコマンドも含めることにした。この変更はかなりプログラム面ではかなり大規模なものとなり、パフォーマンスも低下してしまったので、後に最適化の必要があるかもしれない。

パフォーマンスの低下にともなって試合中に直接学習するとフレーム落ちするようになってしまった。これを修正するため、学習時間を試合時間とは別に設けることにした。こうすることによって、報酬の遅延の書き換えが行われていないメモリ区間を学習に使用することもなくなった。他の利点は、試合中のリソース消費が大幅に削減されたことによって配信ソフトなどもフレームを落とすことなく同時に起動できるようになったこと、より大規模なネットワークが使えるようになったこと。欠点は、学習時間中に試合ができないためにデータ取得の効率が落ちることである。この欠点に関しては適切なスレッディングをしてバックグラウンドで学習をさせることで解決できる可能性がある。

より大規模なネットワークを使えるようになったので、 data-efficient の Rainbow から canonical の Rainbow に戻すことができた。大体のパラメータは canonical のものを用いるようにして、history-length と multi-step だけを長めに(10)とるようにした。これによって入力遅延の問題もある程度緩和されるのではないかと思われる。

様々な変更があったのでまたしばらくは様子見をしてどのようにふるまうかを確認する必要がある。またLv1マルスからやりなおしである。一晩かそこらのテストでは結果は出なさそうなので気長に考えていきたい。

0 件のコメント:

コメントを投稿