社内の発表で、Unity ML-Agents Toolkit
を使ってブロック崩しをするAgentを書いてみました。最近v0.8がリリースされましたが、使用したバージョンはv0.7になります。
左が10,000ステップのトレーニングで、右が800,000ステップになります。
Source Code
https://github.com/fullcorder/BlockGame
実装自体はできたものの、なかなか期待したとうり動いてくれずに苦労しました。
試行錯誤をメモとして残します。
Agent実装クラスのDecision Interval
Decision Interval
を1でトレーニングを行っていたのですが、一向に動く気配がなく、試行錯誤したところこの値を10にした途端、期待するように動くようになりました。
Decision Interval
はドキュメントによると
Decision Interval - The number of steps between decision requests. Not used if On Demand Decision, is true.
なかなか理解が難しいですが、何回単位で方策を評価するといったところでしょうか。
トレーニング中のログからも、1ゲームプレイして判断ではなく、10ゲームプレイした結果で評価しているといったように見受けられました。
失敗時AddReward(-1)をする
ブロック崩しで言うところの、ボールを空振りしてしまったときマイナスの報酬を与えると、同じステップのトレーニングでよりよい結果になりました。これをしばらく忘れていました。
感想
Unityのドキュメントが充実しているので、非常に助かりました。(ただし英語)
ただ学習がうまくいかないと割と途方にくれます。Qiitaの記事が非常に参考になりました。
Unity ML-Agentsは想像よりも簡単に強化学習を体験できるので、是非おすすめです。