マイロ将棋(25)教師データの改善

教師データの改善に取り組んでいます。教師データを用いての学習を繰り返した結果、誤差が縮まることはわかったのですが、あまり強くならないという問題に悩まされてきました。王手されたら負けを回避し、それ以外はでたらめに指すというマイロ将棋1.0との対局では、多く学習したものほど勝率が低くなるようでした。

この問題を解決するため、王手している局面を除外した教師データで学習させるということもしてみましたが、一定の効果は確認できたものの、これはこれで、あまり王手をしなくなってしまうという問題がありました。

以前から教師データを改善すれば解決するだろうとは思っていたのですが、実施を躊躇していました。実施するには、それなりの強さを持った思考ルーチン同士で対局させる必要があり、データ作成に膨大な時間が掛かるからです。これまで作成した教師データは、でたらめに指すだけのマイロ将棋0.1同士での対局結果です。でたらめに指すだけなのでほぼ思考時間は掛からず、だいたい8時間で400万局くらい対局できていました。1局面あたり40局対局させて勝率を求めていたので、400万局の結果で10万局面分の教師データができます。計算すると1局あたりの実行時間は0.0072秒です。学習したモデル同士の対局だと1局あたり数秒から数十秒程度掛かり、とても現実的な時間では教師データを作れそうにないと思っていました。

しかし、学習しても強くならない問題を解決するためには教師データを改善すべきという思いが強くなり、改善に着手しています。処理を速くするために今回Python/C APIというものを使って、主要な処理をCの関数にする変更を加えました。複数の値をやり取りする方法がわからず苦労しましたが、何とかPython/C APIを用いて実行できるようにはなっています。現在は1時間で1万局対局できるくらいで、1局あたりだと約0.36秒です。マイロ将棋0.1と比べると約50倍掛かりますが、かろうじて現実的な時間で教師データを作成できるようになったかなと思います。