評価関数を自作してみる①
※注意!!この記事には非常に多くの筆者による間違った見解が含まれています。必ず以下の記事と併せてお読みください。
※タイトルには①とありますが、②以降に続くかどうかは分かりません。
タイトルの通り、自分で評価関数を作ってみた。筆者はプログラミングなどの知識は皆無で、ソースコードから実行ファイルをコンパイルすることすらままならないど素人であるが、そんな私でもわりと簡単につくることができた。
方法については以下のサイトが詳しいので、こちらをご覧いただきたい。
こちらはuuunuuun氏のサイト。
従来手法に基づくプロの棋譜を用いない評価関数の学習 | やねうら王 公式サイト
こちらはやねうら王の開発者のサイトである。
特に上のサイトの方が詳しい方法が解説されている。
これらを参考にして評価関数を生成してみる。上のサイトにのっとって一回目の雑巾を絞ってみた。条件はdepth2で5000万局面。推奨されている「depth3で1億局面」より深さ・局面数ともに少なく設定してあるが、条件はこちらの手元の環境が貧弱(2core 4thread)なのでひとまず手っ取り早く終わらせてみたかったためである。
四時間ほどで教師局面が作り終わり、さらに一時間半ほどで評価関数がはき出された。しかし、この評価関数を雑巾絞りする前のバージョンであるepoch0と対戦させてみると、どうも弱くなっているようなのである。1スレッド1秒でepoch0からみて28-1-21。まだ有意差が付いているわけではないのだが、強くなっているようには見えない。少なくとも上の二つのサイトの方が試してみたような分かりやすい棋力の向上がみられない。やはり、depth2で5000万局面とリソースをケチったのがまずかったのだろうか。
そこで、推奨条件のとおり「depth3で1億局面」でやりなおす。これだと上二つのサイトと全く同じ条件となってしまうので、定跡を与えてみることにした。uuunuuun氏が「雑巾絞りにおける定跡の影響は甚大で、棋風が大きく変わる」という旨のことをおっしゃっていたし、私も独自の定跡を与えてみたい。
そこで振り飛車用の定跡をあたえてみることにした。この定跡どうしを搭載したものどうしが対戦すると対抗型(か相振り飛車)ばかりが現れるようになるはずである。この条件だと、上手くすれば振り飛車党の評価関数が誕生するかもしれないという目論見である。
で、実際やってみた。教師局面の生成に12時間くらい、それを用い手の学習に2時間半ほどを要した。
こうしてできた評価関数をepoch0と対戦させてみる。1手1秒だとちょっと時間が掛るので、1手0.1秒で対戦させてみた。スレッド数は1。
結果はepoch0からみて153-9-138。
強くなっていない…?(むしろ弱くなっている?)おまけに別段振り飛車の採用率が増えたようにも感じない。
条件はやねうら氏やuuunuuun氏のとは変わっていないはず。唯一違うのは振り飛車定跡を噛ませてみたことだけ。
…やっぱり振り飛車は不利飛車なんですかそうですか。
一応この振り飛車絞りしてみた評価関数を公開します。需要があるとは思えませんが。
eval2.7z - Google ドライブ
※6/29注
このファイルは削除しました。学習時に振り飛車定跡が読み込まれていなかったことがわかったためです。
まあ、まだ学習が足りないから弱いだけなのかもしれない。私はもっと振り飛車用評価関数の夢をみてみたい。なので続く、かもしれない。(やる気失せてやめるかもしれない)