選手権の準備その2

しばらく囲碁にかまけてたのですが,そう言えば月末がアピール文の締切でした。

今回は以下の経緯で「二番絞り」でエントリーしましたので作文としてはそれなりに書くものがありますが,先日のゲーム情報学研究会で発表済みですのでズボラ人間にはコピペ(もしくはURL提示)で終わらせて良いかとの腹案も浮かんできます。

 

bleu48.hatenablog.com

 

以下,作文下書き。

 

二番絞りプロジェクト自体はそもそも電竜戦のサーバテスト用に多様性のあるエンジンでテスト対局をしたいとのネタで始めたものです。

その元ネタとなる深層学習部は山岡さんがdlshogiを始めたのとほぼ同時期に私も独自に始めたエンジンがスタート地点です。既に独自改造していたものに適当な教師データを食わせることで従来無い中途半端なものが生成できれば御の字との考えでした。終盤弱く頓死するとか,見たことのないような戦型が得意とか,考慮時間を使うのに弱いとか何か違えばテスト用には有用だろうとのことです。もちろんスコア付け,組み合わせ抽選などの工程で不具合が無いか実時間でどのくらいかとの計測が重要ですからね。

 

比較的小規模な学習モデルを既に作ってあった教師データで学習させたものが初期の二番絞りでしたが,そこそこ強くなることが確認できました。その後,よりよい教師データは無いかと考えて流用したのがAobaZeroの自己対戦棋譜でした。普通の教師データは大量に作るため生成コストを考え浅い探索を行うのですが,AobaZeroは複数年に渡り強化学習を進めており,また各モデルはfloodgateでのレートが出ているというお墨付きの棋譜データです。しかしながら,棋譜のみであり局面評価値が含まれていないのが欠点でした。そのため専用の学習機を用意しました。(GCTでは評価値0として教師データを混入させたらしいですがちょっと乱暴に思います。)

 

実のところAobaZeroのモデルをデータ変形するだけでPyTorchで使えるモデルを作ろうとも考えたのですが棋譜を学習させる方がコーディングコストが低いため先に学習から行ったというのが本音のところです。ですから,理想的にはAobaZeroと同等のモデルがPyTorch化されればOKというのが構想です。ということでここで,20ブロック256チャンネルのネットワークサイズが決定されました。

 

2週間程度かかったのですが,概ね似たようなものが完成したかなというのが電竜戦予行3回目だったかと思います。それでも対戦時人間の目にも若干甘い部分があるように見受けられました。

そこからはより良い教師データが存在しない域,つまり自己対戦による強化学習を加えることになります。予行4回目が強化学習1段階目,電竜戦本戦が強化学習2段階目です。AlphaZeroやAobaZeroでは教師データを作るたびに少量加えて過去のものを少量削って多くをオーバーラップさせて小さく強化学習をおこなうのですが,本件は強化学習初期段階で何もありません。AobaZero教師とはデータの互換性もありません。ということで,第1段階である程度の量を貯める工程に入りました。大凡1億局面程度できた段階で学習させました。(というより残り3日で教師生成を止めて学習に入ったというのが本音ですね)

 

電竜戦での結果は御存知の通りですが,以後学習を進めております。

とくに強化学習時に生成したデータを流用した実験を多数行い多くのデータ構造のモデルを生成しております。そういえばこれはNNUEのときも同じでした。ネットワーク構造を多くつくり最も適したものを見つける手作業です。

本件では15ブロック,20ブロック辺りが上手にできておりましたが,つい最近40ブロックでそこそこ良いものが出来るようになりました。

旧世代のGPUを用いてもfloodgateでそこそこの戦いが出来ております。具体的には以下の記事のような感じですね。

bleu48.hatenablog.com

 

5月の選手権では最も出来の良いものを投入予定ですが現時点ではどれと断定はできません。あしからずご了解下さい。