[検証バージョン]
Unity 2017.2.0p4
Unity ML – Agents (Beta) 0.2
Unityが提供している機械学習の仕組みに関するお話です。
Unity ML – Agents (Beta)に含まれるBasicデモが、学習させても期待通りの結果が得られなかったので、学習に使用するstateを増やしたところ概ね期待する結果が得られるようになりました。
・デモの内容
エージェントが1マスずつ左右に動き、ゴールに到達したらリワードを獲得。
ゴールは2種類あり、片方は近いがリワードは小さい、もう片方は遠いがリワードは大きい。
・変更内容
Brainが判断をするために与えられている情報(state)がエージェントの左右の位置しか無かったので、各ゴールの位置も渡すように変更。
1.BrainのStateSpaceTypeをDiscrete→Continuousに変更し、StateSizeを元々の1→3に増やす。
2.BasicAgent.cs内のCollectState()にて収集する情報を追加する。
public override List<float> CollectState() { List<float> state = new List<float>(); state.Add(minPosition); // 追加 state.Add(maxPosition); // 追加 state.Add(position); // 元々ある行 return state; }
・補足
かなり単純なデモでありながら、8エージェント×10,000ステップの学習でもまだ無駄な動きがあるように見えるので、もっとパラメータや処理の調整が必要なのかもしれません。
・追記-改善案(未検証)
1.位置情報に関するstateはエージェントとの相対座標でコード化した方が良い。
Environment Design Best Practices
2.エージェントのObservationsにカメラを設定することで、視覚情報を与え学習の効率化ができるかもしれない。
Learning Environments Overviewの最後の項Additional FeaturesのComplex Visual Observations