WCSC29
Apery アピール文書

平岡 拓也

2019-05-13

Apery の歴史

  • 第22回世界コンピュータ将棋選手権から参加
  • 第24回世界コンピュータ将棋選手権 優勝
  • 第2回将棋電王トーナメント5位にて電王戦FINALに出場
  • 電王戦FINALにて斎藤慎太郎五段に負ける
  • Aperyをオープンソース化 https://hiraokatakuya.github.io/apery/
  • 主要な大会には初参加から連続出場中
  • 古参ながらもコンピュータ将棋の技術の進歩になんとか追いていっている

今大会に向けての開発のモチベーション

  • 最近Rust楽しい!
  • C++より気に入った!
  • なぜAperyはC++で書かれているのか…
  • Rustで作らなければやる気が出ない!

Rustで作り直す意味とは

  • RustはC++と同等の実行速度を出せる言語
  • だからC++で書かれたソフトをRustで書き直しても、別に速くはならない!
  • 安全に書ける言語なので、新規に作る際には効果が高いが、C++で十分動作実績のあるソフトを書き直す効果は少なそう
  • でも趣味なので、そういう事は気にせずに作るのみ

Rust版のAperyの進捗

  • 十分に強くするには、まだまだ沢山の改良が必要そう
  • 何とか頑張る!!!

評価関数

  • tanuki-チームが開発したNNUE評価関数を取り入れるのが上位に入る為の近道!
  • どうせみんなNNUEを使うのだから自分は別の手法で何か出来ないか?
  • 今回は真面目にKKPPの学習でもしてみるか!
  • (とりあえず学習はC++版のAperyに簡単な改造を施して実験してみた)

KKPP とは

  • Kは玉、Pは玉以外の駒を表す
  • 玉2つと、玉以外の駒2つの位置関係を点数化し、線形に足し合わせる評価関数
  • ここ10年近く、KPP、KKPの3駒関係が非常に強い評価関数だった!
  • KKPPは、速度をそれほど落とさずに、表現力を高める手法!

KKPP の実行速度

  • 先手、後手の評価をまとめて取得する為、メモリアクセス回数は従来の3駒関係より少なくなる!
  • 予想としては高速化すると思っていた!
  • しかし、実際はほとんど変わらず…!
  • 3駒関係は800MB程度の評価関数だったが、KKPPは81倍の64GB程度必要な為、キャッシュヒット率の低下が原因と思われる

KKPP の学習

  • まず、3駒関係の学習で使っていた教師局面より非常に多くの教師局面が必要になる!
  • 可能な限り棋譜を生成してみる事に!
  • depth8で数千億局面を生成した…!(キツイ)
  • 学習してみてもR20程度しか強くならない!
    そんなバカなっ…!
  • 評価関数や機械学習の教師データの保存とか、何TBも必要だしやっていられない
  • 公開しても誰が使うのか…

3駒関係を改良

  • という訳でKKPPは非常に面倒なので残念ながら断念
  • 代わりに3駒関係をいろいろ改良してたらWCSC28のAperyより強くなった!
  • 3駒、お前まだ成長するのか…!
  • しかしここに1年半前に到達したかった!
  • 3駒関係の拡張や、学習、局面生成の方法など、思いつくアイデアを色々と試している
    もうちょっと強くしたい!

 みんな、選手権を楽しもうね!

(5月13日追記)3駒関係の改良方法

  • KKPPの学習用に用意した棋譜1000億局面以上を全て3駒関係の学習に使います
  • 1バッチの局面数を3000万局面くらいに増やします
  • あとは学習するだけです
  • 1回でR50程度伸びました
  • バッチサイズが大きくなった事で勝敗が正確になり、
    間違った方向に評価関数を学習する確率が減ったのが原因?

(5月13日追記)3駒関係の改良方法

  • KPPですら棋譜が全然足りなかった事が分かり、
    KKPPは棋譜が圧倒的に足りなくてまともに学習出来なそうでした
  • リソースが大量に必要な為、限界はまだ少し先にありそうですが、
    現実的にNNUEに勝つのは難しそうに思いました