Tetrisのml-agents実装をやってみるが上手くいかず
TetrisのUnity ML-Agents実装をするもうまく動かず
Unity ML-Agentsを組み込んでテトリスの機械学習をやってみました。
ml-agentsの機能自体は上手く動いているのに学習が全然収束しない。
テトリスの機械学習は色々論文が出ているので読んだところ、盤面の評価値を算出し、最適化問題として解いているようでした。
単純に1個テトリミノを出す度に0.001fの報酬を与え、1行消えたら0.1fの報酬を与えるということをしていたのですが、ランダムで実行した場合にはそもそも1行消えること自体がレアケースであり、どの盤面でどれを置いたら1行消えたという判断-報酬体系では盤面の評価ができるほどの数が集まりません。なので、Brainは自分の行動のどれが正しかったのかさっぱりわからないままとなります。
https://hal.inria.fr/inria-00418954/document
2009年の古い論文ですが、上記のようにそれなりに複雑な盤面の評価関数を使っています。
これを組み込んで、出た評価値の差分を報酬とすればいいはずですが、それだったら別にml-agentsとか使う必要なくて、単に上記の評価関数で最も高かった候補を選ぶようなアルゴリズムを組め、という話になります。
ディープラーニングを使っているのだから、勝手に特徴量を捉えて学んでいって欲しいのですが……
今回は学習にUnity ML-Agentsの標準であるProximal Policy Optimization(PPO)を使っています。
DeepLearningではあるので理想的には自動で特徴量を探して評価関数を作成して欲しいのですが、そう簡単には行かないなあ。