UE5.3で搭載された機械学習プラグインであるLearning Agentsのチュートリアルを試してみました。
初学者として大変だったのは、機械学習が進んでいるのか見てもよくわからないことです。
チュートリアル通りに作ったはずがうまくいかず、フォーラムのやりとりを参考にチューニングする必要がありました。
その過程を紹介します。
学習過程の観察
学習過程はリアルタイムでレンダリングされるため目で確認できます。
Learning Agentsは以下の段階を踏んで運転を覚えていきました。
- 直進
- コースアウトしそうになったら減速
- ハンドル操作
それぞれの段階をLearning Agentsが覚えると目に見えて車の動きが良くなりました。しかし、大部分の学習過程は見た目の変化はほとんどなく、本当に学習が行われているのか良くわかりません。
そこでログに出力される学習過程を確認すべく、Output Logを"avg"という文字列でフィルタリングします。
学習の過程を数字で確認できます。
Avg Reward、Avg Return、Avg Valueという3つの数値があり、これらが上昇することで学習が進んでいるとされます。
観察していると、これら数値が漸進的に上昇する傾向が確認できますが、逆に数値が大きく下降する場面もありました。数値が下がり始めたからといって間違った学習をしているということではないようで、後にちゃんと上昇に転じました。
ハマりどころ
いくつかつまずきやすいと感じる点がありました。
タイムアウト
Python側でタイムアウトが生じてしまうと、Unreal側でエラーが出力され、学習が停止してしまいます。
https://forums.unrealengine.com/t/learning-agents-fails/1281737/5
タイムアウトが生じさせないためには、Python側のタイムアウト値を上げるか、UnrealからPythonに頻繁にデータを送りこむ必要があります。
Unreal側で行えること
- 車の台数(Agent)を増やす
- MaxStepNumを減らす
- MaxEpisodeNumを調整
学習にとにかく時間を要する
数時間放置しても、アクセルを踏むことすらままならないことがありました。
この段階では設定間違いなのか、学習が進んでないのか、区別が困難です。
何度も実装を見直したり、フォーラムの情報を探すはめになりました。
最終的な設定
いくつかの設定でタイムアウトを起こさず、学習のスピードも上がったように見えました。
これら設定を行って一晩置いてみたところ、翌朝には運転を覚えていました。
BP_RLTrainingManager の Tick を 0.01666とした
Agentを倍に増やした
レベルに配置するSportsCar_Pawnも倍に増やしておく必要があります。
Trainer Settings の調整
Max Step Num, Maximum Recorded Episodes Per Iteration, Maximum Recorded Steps Per Iterationを上のようにデフォルトより大きな値に設定しました。車が加速して走り出す前にイテレーションが打ち切られてしまっていたため、もっと走らせてあげようと思って設定しました。尚、コースアウトする車が多くでた場合はMax Step Numに達する前にイテレーションが打ち切られるようです。
まとめと課題
自動車のチュートリアルはLearning Agentsの可能性を見るには良い題材でした。
一方、Learning Agentsを使いこなすには、Learning Agentsをチューニングしながら癖を把握していく必要があるでしょう。その意味では、結果を見るまで時間を要する自動車のチュートリアルは初学にはハードルが高いようにも感じました。
より短時間で結果にたどり着ける題材を見つけ、自前で一通り組んでみるのが早道かもしれません。