学習率が小さいときは棋譜単位で十分ランダムならシャッフル無しでもいいかもとか考え中。しかし1億局あるうちの最初の1千万局の局面をシャッフルして学習したら10%くらい回した時点でオーバーフィッティングしていて残りの9千万局の損失は下がってなかったことが結構トラウマなので悩ましい。
— aki. (@ak11) 2015, 12月 29
という悩みが生まれたので、実験してみた結果の備忘録。
前提
- 進行度の学習で実験した。
- 特徴はKとP。教師は約5万棋譜(約500万局面)。AdaGradを使用したロジスティック回帰。
特徴に対して教師の数がとても過剰に多いので、教師が多ければ解決するものであれば差は出にくい事に注意が必要。
(教師が多くても解決しない問題の方に興味があるので)
やったこと
- 棋譜をシャッフルしたり、SFENのASCII順にしたり。
- 全局面(約500万局面)を均等にシャッフルしたり、棋譜の手順そのままにしたり、半端にシャッフル(1024分割してそれぞれをシャッフル)したり。
これらの組み合わせで16-fold cross-validationして、Mean absolute errorを算出。
実験結果
棋譜 | 局面 | MAE |
---|---|---|
- | シャッフル | 7.38% |
シャッフル | 棋譜の手順そのまま | 7.42% |
SFENのASCII順 | 棋譜の手順そのまま | 7.52% |
シャッフル | 半端シャッフル | 7.39% |
SFENのASCII順 | 半端シャッフル | 7.58% |
結論
- ちゃんとシャッフルしたのが最優秀。シャッフル無しはそれなりに悪い。
- しかしこの条件ではそれほど大きい差でもなかった。
- 半端なシャッフルは、棋譜がソートされているとシャッフルしないより悪い。(棋譜がランダムな場合はまだマシだけど…)
差がそれほど出なかった事はやや意外だったけど、順番的にはだいたい予想通りだったので一安心。