技巧2の学習部にも興味ある人が増えているようで・・・
技巧の学習にも手を出してみたいのだけど「棋譜データベースファイル」の作り方がそもそもわからなくて、そこで止まっている。kifファイルは手元にたくさんあるのですが、そこから作れるのでしょうか。
— uuunuuun (@uuunuuun1) 2017年7月26日
ゆるゆる進行中の私的な技巧2調べですが,
私用メモ程度でも誰かの役に立てばと思って公開しておきます。
技巧2
注意)技巧2以前のものはほとんど触っていないので比較などはしていません。
まず,公開されている実行ファイルでは学習ルーチンは無効化されているので自分で学習させるにはビルドする必要があります。Linux環境が必要になりますが,Windows10であればBash on Windowsでも対応可能です。
うちではBash on Windows(Ubuntu 16.04)環境下でmakeとg++をインストールすれば問題なく実行ファイルを作成できました。
棋譜ファイル
学習には 棋譜ファイルが必要です。ドキュメント上にはkifu.txtと書かれていますが,ソースを少し読めば分かるようにkifu_db.txtの誤りです。
また,このファイルのデータ形式はコメントにもあるのですが実際は何かのファイルから自動生成するのが適当ですので,うちではfloodgateのCSAファイル二年弱分から変換しました。変換ソフトはオープンソースのものを数バイト程度改造しましたのでgithubに置いておきます。
以下は,技巧の学習オプションについて
--learn-progress
kifu_db.txtから51000データ読み込み,progress.binを学習する。(約3時間)
読み込む棋譜のうち1000データは検証用。
これは棋譜から局面の進行度を評価する際に使用する。
--learn
kifu_db.txtから31000データを読み込み,params.binを作成する。
ただし,title_matches_onlyとなっており順位戦とタイトル戦のみを扱うように厳しく選定されている。うちではこの行を削除してfloodgate棋譜で学習した。
4コアのマシンで40時間程度要した。
--learn-probability
kifu_db.txtから31000データを読み込み,probability.binを作成する。
何故かメモリ消費量が半端でなく多く,最大で90GB程度使用した模様。
うちでは最大64GBのメモリしかないためスワップしながら3日ほど要した。
メモリ消費量が少ない段階での進行見込みでは3時間程度とあったので,メモリが充分なマシンでは3時間程度で終わるのかもしれない。
--create-book
kifu_db.txtからtitle_matches_onlyの手を確認しながら定跡化する。
出力されるファイルはbook.bin。
ただし,技巧2のデフォルトはこれで作成されたものではなく「まふ定跡」
--generate-positions
教師局面を作成する。
出力ファイル名はteacher_positions.bin。局面数30M。(30,000,000)
一局面のデータは40byteで局面と指し手と評価値。
4コアのマシンで一週間強必要。
--generate-games
ロジスティック回帰学習用の教師局面を作成する。
出力ファイル名はteacher_games.bin。
ソースを読んだ感じで,3M試合をして10%局面サンプルをする模様。
実行時間は4コアのマシンで20000分(二週間強)との予測値
これはうちで完走してない。(できない)
--learn-with-rootstrap
--learn-with-regression
これらにおいてもkifu_db.txtを読み込んでいる様子。
teacher_positions.binやteacher_games.binは追加で必要となる。
params.binのみを更新する。
現状雑感
progress.binおよびprobability.binの学習は上記の一回だけ。
params.binは初期の絞りのみ実行。
progressファイルのみオリジナルから変更したものは特に強いとも弱いともない。
probabilityファイルのみ変更したものは当初オリジナルを上回る戦いを見せたが,有意差と言えるほど強くはなっていない。
params.binを変更したものはオリジナルから相当劣化した。オリジナル同等までもっていくためには恐らくルートストラップやロジスティック回帰を用いた追加絞りが相当必要なのではないかと思われる。
また,ソースを読む限り学習部は試行錯誤の跡があり,現状で完成されたものと言うイメージは皆無。効率化や高速化など手を加える余地が多い印象。
たとえば学習局面データのkifu_db.txtおよびteacher_positions.binやteacher_games.binは統一的に扱う方が望ましいように思う。また,より効率的な生成も可能ではと見込む。