AlphaZeroの牙城は崩れた!?

最近の将棋ソフトは死ぬほど強い

久々に将棋ネタを投稿します。

佐藤天彦名人がPonanzaに破れたのは記憶に新しいですが、それも名人に全くいいところがなく(思い出王手すらできない)コンピュータ側の圧勝でした。

そのPonanzaに勝った新生elmo、そのelmoに90%近く勝てるというAlphaZero…

日本のコンピュータ将棋の歴史を終わらせに来たとまで言われたDeepMindのAlphaZeroの到来に「日本のコンピュータ将棋終わったんじゃね?」とまで思ったぼくですが、そんな事はありませんでした。

NNUE評価関数の登場

NNUE関数というのは簡単に言えばニューラルネットを使った盤面評価のための関数です。

Bonanza以降、自玉と自分の駒二つの三駒関係から盤面を評価するいわゆるKPP(King Piece Piece)関数というものが広く使われていました。

これはたった三枚の駒の関係性しか考慮しないのですが、高精度に盤面を評価する点で非常に優れていました。また、機械学習によって今まで人間が手作業で駒の評価値を設定していたときよりも遥かに強くなることができました。

これがBonanzaメソッドと呼ばれるもので、それに手番を加えたKPPTで評価するNineDayFeverなどの拡張を経てプロに迫る棋力にまで成長しました。

ところが、このKPP評価関数は潜在的な問題をいくつか抱えていました。

  • 拡張が難しい
  • 線形評価関数である

拡張が難しい、というのはKPPの概念を拡張してKPPPのような評価関数を作りにくいことにあります。

何故難しいかというと、将棋盤は9×9の大きさであるので四つの駒の関係の評価値のテーブルを作ろうとするとサイズが大きくなりすぎてコンピュータのメモリにのらなくなってしまうためです。

三駒関係の現在ですら2GB近いファイルサイズになるので四駒関係だとこのおよそ81倍の大きさになり、160GBを超えてしまいます。

こうなると一般家庭のコンピュータではとてもメモリサイズが足りません。

メモリに乗らなくなるということはHDDやSSD上のデータにアクセスする必要がありますが、これらにアクセスするのはCPUの処理速度から考えると致命的に遅いのです。

つまり、盤面評価は正確になる一方で、盤面を読むのが非常に遅くなってしまい現実問題として弱くなってしまうのです。

また、線形評価関数であることはN手目からN+1手目を計算する差分計算がしやすくなるという点では有利でしたが、駒の位置がある状況では有利に働くが、別の状況では不利になるといった非線形な評価を線形モデルであるKPPでは直接的に表現することができませんでした。

AlphaZeroのようにニューラルネットを用いた将棋ソフトはあるものの、トップクラスの将棋ソフトの棋力には及んでいません。

そもそも、ニューラルネットはTPUとよばれるベクトル演算に特化した特殊なハードウェアが必要な点も開発のハードルを上げている要因ではあるのですが…

新たに開発されたNNUE評価関数は、本来TPUで計算させるべきところをCPUでも高速に計算するように構築したニューラルネットワークを使う評価関数なのです。

クリックしてnnue.pdfにアクセス

技術的な内容はアピール文章に書いてありますが、正直内容は結構難しいです。

また、駒の関係にはKPPではなくKPを使用し、実際にはそれを改良したHalfKPと呼ばれる特徴量を用いているようです。

この辺はまだえむいーさんの理解が及んでいないのでKPを採用することがKPPよりもどのような利点があるのかわかっていません。勉強しないといけませんね。

orqha

現在(2018年10月)最強と言われているのがorqhaと呼ばれる将棋ソフトで、件のNNUE関数を使用しています。

現在最強と言ってもレーティング的には100くらいの差しかないのですが(もちろんこの100上げるのがメチャクチャ大変で、開発者が一番頭をつかうところ)で、人間からしてみればレーティングが4200だろうが4300だろうが神のような強さを誇っているのでまあぶっちゃけこの辺りのトップクラスのソフトはどれを使っても人間からみれば似たり寄ったりです。どれも勝てません(笑)

導入

世界最強の(AlphaZeroを超えていると言われる)ソフトが無料で使えるとなれば使ってみるしかありませんね!

dolphin/illqha

ShogiGUIは導入済みとして話を進めます。

ダウンロードして解凍するとこんな感じになります。解凍ソフトはwinrarがオススメです。

ここでillqha1.1というフォルダをevalという名前に変えてしまいましょう。

更に、中にあるnn.binファイル(これが評価値テーブルになります)を削除します。

すると上の画像のようになります。

orqha

同様にダウンロードして解凍するとこのような感じになります。

このnn.binをevalフォルダの中にコピーします。

するとこのような感じになります。

ShogiGUI

最後に将棋エンジンを登録します。

まず、エンジン設定を開きます。

エンジン設定から追加をクリックします。

先程ダウンロードしたdolphin+illqha1.1のフォルダを指定します。

avx2.exeとsse42.exeの二つがありますが、最新のパソコンを使っている方であればAVX2版(avx2.exe)が使用できます。なんのことかわからない人はSSE4.2版(sse42.exe)を使用しましょう。

設定がひらきますが、よくわからない人はそのままOKを押してしまいましょう。

これで、エンジンの登録が完了しました!

将棋局面ジェネレータ

https://shogi.mydns.jp/

広瀬八段と羽生竜王の竜王戦第一局の投了図を上記の将棋局面ジェネレータで局面図を作成してみました。

評価エンジンはorqhaを使用し、思考時間は60秒です。CPUはi7 6700Kと少し型落ちモデルになるのですがこの時点で2億ノードくらい読めています。

で、この局面図見やすくないですか???

見やすいですよね?????

絶対便利だと思うのにあんまり使ってくれない!何故だー(泣)

ご要望があればコメントでください、実装するかも知れません。

詳しい解説は以下。

コメント

タイトルとURLをコピーしました