好奇心をもったエージェントは、学習することで高速でぐるぐるまわることができるようになりました。
コードはこちら。
好奇心とは?
好奇心(curiosity)とはどういう定義だという話ですが、ここでは未知の状態に訪れた報酬のことを言います。
定義してしまうと、好奇心も一つのパラメーターですね。
そして、結果的に好奇心ありとなしでは、圧倒的に学習スピードが異なります。
残念ながら今回のテストでは好奇心のないエージェントはほぼ学習することがありませんでした。
やったこと
- エージェントがぐるぐる半時計周りに1周するごとに報酬を与える
- エージェントが偶然一周するのはなかなか難しい(言い換えると偶然周ることもある)
結果
学習曲線
好奇心ありだと途中からの学びが全然違いますね。
学習なしでも周ることがあるので、ものすごい時間をかければ学習できる可能性はあります。
好奇心による平均累積報酬グラフ
今回はぐるぐる回るだけの単純な環境なため、あるポイントから好奇心による報酬が減っていることがわかります。
その他
最初は進める方向を3軸に方向に設定していたのですが、学習が全然進まずうまくいきませんでした。
結局XZの平面に固定することでうまく学習するようになりました。
3軸から2軸に変更したのは、私自身が操作してぐるっと回そうとしたときに、難しすぎると感じたからです。
エージェントが機械的に操作する場合も同じで、難しすぎるといかに好奇心があっても学習が難しいらしく、
ある程度操作できる状態にすることで解決できました。