次世代の将棋思考エンジン、NNUE関数を学ぼう(その1.ネットワーク構造編)

update 18/06/03 12:00

NNUE評価関数とは将棋ソフトの思考エンジン(もとい、局面の良し悪しを評価するための関数)です。NNUE関数は今流行りのニューラルネットディープラーニングの小さいやつ)を盤面評価に取り入れており第28回コンピュータ将棋選手権で多くの既存評価関数ユーザをぶちのめしてきた新機軸評価関数です。

2018年6月時点で多くの開発者、有志がNNUE関数をイジって遊んでいます。公開されてから未だ日が浅いため、もしNNUE関数の学習で大当たりを引けば、次の電王の座を手に入れられるかも知れません。

というわけで、このゴールデンカムイに乗っかろうとする皆様のために、NNUE関数の成り立ちについて解説していきます。今回はネットワークの構造と、学習のルーチンの仕様について紹介していきます。

開発者による解説文書(正直結構難しい)
tnk-のgithub (現在NNUE評価関数はやねうら王にマージされており、ファイル名がtnk-とは異なるなどの違いがあるようです。本稿ではファイル名は暫定的にtnk-を基準としています)
やねうら王のgithub (NNUEが既にマージされています。)

【1ページで解るNNUE関数】
NNUEのネットワーク構造は以下のような浅いニューラルネットワークになっています。ニューラルネットディープラーニングについては此方の本などを参照してください。

f:id:qhapaq:20180603123332p:plain

この辺の実装はeval/nn/architectures/halfkp_256x2-32-32.h などに書かれています。
NNUEの強さの秘訣は点線で囲んだ最初の層の計算をCPUベースで高速に行なえるようにした(SIMD計算と差分計算を使えるようにした)ことです。また、NNUEのコードはテンプレートを上手く使いこなし、高速且つ拡張性が高い形になっています。

【NNUE関数を自前で作る】
NNUE関数はCPUベースで動くように作られているため、基本的にやねうら王の学習方法を使い回すことが出来ます。例えば以下のようなコマンドで学習が出来ます。
(NNUE開発チームの一人であるnodchipさんの呟きからインプットの例を復元しました)

# 学習前の評価関数を決める
setoption name EvalDir value nn_20180519
# 学習させる
learn teacherdata.bin lambda 0.5 eta 0.1 newbob_decay 0.5 batchsize 1000000 nn_batch_size 1000 eval_save_interval 100000000 validation_set_file_name varidationfile.bin

これをやると例えば以下のような出力が得られます。
各インプットの意味は#以下に書き記しておきます(実際の出力ファイルにはでてきません)

# gensfenで作った教師データ
learn from teacherdata.bin,
# 過学習回避のためのバリデーションデータ
# 各iteration毎にvalidationの中身は全て読むので巨大なファイルにしないこと!
validation set  :  varidationfile.bin
# 学習ファイルを何らかのフォルダにまとめて入れる場合
base dir        :
target dir      :
# 学習のループ回数
loop              : 1
# 学習データとして用いる評価値の上限
eval_limit        : 32000
# 保存を一度だけするか
save_only_once    : false
# 学習時に棋譜のシャッフルを飛ばすか
# 教師データをデフォでシャッフルしてるなら多分意味はない
no_shuffle        : false
# 使う目的関数。elmo型を使う
Loss Function     : ELMO_METHOD(WCSC27)
# lossを表示し評価関数を更新するinterval
# 実効的にこいつはミニバッチサイズではないことに注意
mini-batch size   : 1000000
# 真のミニバッチサイズに相当。
nn_batch_size     : 1000
# ニューラルネットに特殊なオプションを送る
nn_options        :
# 学習率
learning rate     : 0.1 , 0 , 0
# 学習率をiteration毎に変える場合の係数。詳しくはやねうら王のドキュメント参照
eta_epoch         : 0 , 0
# lossを見張り学習率を動的に動かすためのパラメタ newbob = 1.0で無効化される
scheduling        : newbob with decay = 0.5, 2 trials
discount rate     : 0
reduction_gameply : 1
# elmo学習のlambda
LAMBDA            : 0.5
LAMBDA2           : 0.33
LAMBDA_LIMIT      : 32000
# 盤面の鏡像化の頻度
mirror_percentage : 0
# 保存する頻度を指定
eval_save_interval  :  100000000 sfens
# mini-batch-sizeと同値
loss_output_interval: 1000000 sfens

【重要な注意点】
NNUE型を回す際に特に以下の点に注意する必要があります。

・validation_set_file_name をちゃんと作る。かつ大きくし過ぎない
validationファイルは過学習をしていないか確かめるためのデータで、教師データとは異なる(教師データにはない局面を使う)必要があります。
また、validationファイルは各iteration毎に全て読み込まれるようなので、これを大きくし過ぎると学習時間が伸びます。

・実効的なミニバッチサイズはnn_batch_sizeである
パラメタにbatch_sizeとnn_batch_sizeがありますが、実効的なbatchsizeはnn_batch_sizeです。
どういう原理で動いているかを時系列で表すと

1.読ませた局面数がbatch_sizeになったら評価関数の更新を行う
2.評価関数の更新ではbatch_size個の教師をnn_batch_size個毎の教師グループ
(即ち、グループ数はbatch_size / nn_batch_size個になる)に分ける
3.教師グループ0を用いて、評価関数の勾配を求める
4.勾配を用いて評価関数を更新する
5.教師グループ1,2,について同様の処理を行う

という設計になっています。(eval/nn/evaluate_nn_learner.cpp、および、eval/nn/trainer/trainer_affine_transform.h を参照)
本家やねうら王のbatch_sizeがbatch_sizeとして機能していないことに注意しましょう。

KPPTと比べるとかなりbatchsizeが小さいですが、開発者曰く、ニューラルネットワーク的にはnn_batch_sizeの1000は大きめの値だそうです。そして、大きくしすぎると学習が上手く行かなくなるそうです。

なお、NNUEでは学習時はblasを使い複数の局面の評価値を並列的に求めて高速化しているため、nn_batch_sizeは大きくしたほうが学習が早くなるようです。ただし、nn_batch_sizeを大きくした分だけメモリも消費することにはご注意ください。


・学習率の調整オプションがKPPTと異なる

NNUEには現時点ではadagradなどのadaptiveな学習ルーチンは実装されていません。学習が進むに連れてネットワークの変化量が少なくさせるためにnewbob_decayというパラメタを使います。
これは評価関数を保存する(eval_save_interval)毎にvalidation用のデータに対するlossを観察し、lossが大きくなった場合は学習率を下げる(newbob_decay倍する)と同時に、評価関数を最もlossが少なかったものに戻す機能を持っています。

ただ、newbob_decayの効果がどのぐらいあるかは不明です。tttakさんが作ったNNUE関数ではoffにされているようです。
(リストアを一時的にoffにするというのがコレに相当すると予想。本人に聞いたわけではないので定かではありません)

newbob_decayではvalidation用のデータのlossを参照するので、validation用のデータはちゃんと用意する必要があります。
データの数を大きくしすぎると評価に時間がかかりますが、小さくしすぎても学習に悪影響をもたらします。
newbob_decayは1.0にすることで無効化出来ます。

ただし、newbob_decayを1にしてetaを一定とした場合、ネットワークの変化量が少なくなるということはありません。
newbob_decayを無効化し、かつ動的に学習率を下げたい場合は、iteration毎に学習率を変える必要があります。
これは、やねうら王に実装されている動的学習率変化を用いて実現可能です。

・nn_optionsという魔境
learn nn_options hoge とすることで、各ニューロンに命令を送ることが出来ます。
ただし、nn_optionsの用法については謎が多く(今公開されている評価関数群で使われた形跡がない)、
その効果も定かではないので現在調査中です。

# 高度な構文解析機能を用いて様々な命令を遅れるようにしてるみたいですが、c++の文字列制御コード読むの怠いんよ

【ここまでの纏め】
NNUEは良くも悪くも新しい関数であり、その学習のさせ方についても不明な点が多いです。
本稿ではネットワークの構造と新しく増えたパラメタ、その使い方や注意点について解説しました。

具体的にどの程度の深さの棋譜がどのぐらい必要か、エントロピーの減少を見る以外に
学習の進度を見る方法があるか、学習パラメタは何を選べばいいのか、などは今後検討していかねばならない
内容であり、私自身は最終的には数の力で全部試すことになるのだろうと思っています。

ただ、各パラメタの意味を知っておくことで、同じガチャでも無駄な引きを避けられるのではと期待しています。

次回はNNUEの内部構造と改造に仕方について紹介する予定です。
コレ長編になるぞ..... orz

Qzilla-Qhapaq-Roll関数(Qzilla9比でレート+50前後)を公開します

表題の通り、今期もコラボ関数を公開します。

 

Release qhapaq学習機によるコラボ関数群 · qhapaq-49/qhapaq-bin · GitHub

 

qqr_rel.7z が今回の作品です。

 

関数の正式名称は「クジラのかっぱ巻き関数」です。アルファベット表記ではQzilla-Qhapaq-Roll(略してQQR)となります。クジラちゃんにかっぱ巻きを加えさせた(誤変換ではないぞ。念の為)のか、クジラちゃんをかっぱ巻きの具にしているのかはユーザの皆様の解釈に任せます。

 

【レーティング】

たぬき互角局面、8スレッド、探索部やねうら王、1手1秒、投了値3000の条件でQzilla9の関数に対して

310-34-217 (勝率58%。レート差 57)

 

レーティングサイト準拠のルールでの対局結果】

定跡on / off の依存性を加味し、レーティングサイト基準での測定も行いました(こちらはQzilla9の探索部はくじらちゃんのクライアントを利用しています)。本測定はロタさん(twitter,ブログ)にご協力いただきました。この場を借りてお礼申し上げます。

264-24-215(勝率55%。レート差34)

 

【作り方】

Qzilla9の関数にQhapaq WCSC28の学習をいれています。教師データを互角局面からの自己対局としているので、オールラウンダーな棋風であると期待しています。

 

【Qhapaqの今後】

Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できるという、Amazonアソシエイト・プログラムに参加してみました。上手く行けば今期はAWSが回せるはず......!

 

とはいえ、何を書けばいいのかわからないので、私が持ってるものをチマチマ紹介します。

コンピュータ発! 現代将棋新定跡 (マイナビ将棋BOOKS)  ...... コンピュータ将棋の棋譜や戦型解説サイトでお馴染みのsuimonさんによる将棋の戦型を纏めた書籍です。sdt6のQhapaqの定跡はこの本の知見をベースに作られる(かもしれません)。

金芽米(無洗米) 10kg【5kg×2袋】 ...... 最近の米は殆ど研がなくていいとは言いますが、10キロの米を研ぐのに使う時間を考えると無洗米は外せません。

3手詰ハンドブック ...... 詰将棋のおなじみ本です。WCSC28の打ち上げで行われた詰将棋カラオケで3手詰が解けたのもこの本のお陰かも知れません。

プログラミングコンテストチャレンジブック [第2版] ...... 競技プログラミングのバイブル的な本です。atcoderで青まで来られたのは大体この本のおかげです。

 

sdt6が行われるのか、割と不安ではありますが、開催されれば参加します。大会があること、それを見てくれる人が居ることは、将棋ソフトが強くなる上でとても大事なことです。Qzilla-Qhapaq-Roll関数が公開にこぎつけられたのも、コンピュータ将棋を見続けてくれている皆様のおかげです。今後ともよろしくお願い申し上げます。

妖怪惑星Qhapaqの定跡も公開しました

此方からダウンロードできます。今回は定跡は2種類あります

Release 定跡のページ · qhapaq-49/qhapaq-bin · GitHub

 

【Qhapaqが考えたWCSC28の定跡のメタゲーム】

WCSCは計算資源が無制限であるため、長い定跡を作るのはリスキーであると考えていました。序盤の局面についても長く読ませることで、ソフトは自身が勝ちやすい戦型に誘導することが出来ることがわかっていたからです。より具体的には、最初の30手だけ持ち時間を倍にした場合、30−60手目の持ち時間を倍にするのとほぼ同等のレート上昇が得られることを実験的に確認していました。

これを踏まえ、WCSC28の妖怪惑星Qhapaqでは初手10手程度だけを定跡として用意し、あとは当日のマシンパワーに任せる方針を取りました。

しかし、初手10手と言っても油断すると33金角換わりのような脆弱な戦型を選ぶ可能性があります。そこで、戦型毎に勝率を測定し(※)先手なら横歩か角換わり、後手なら相掛かりか角換わりを狙いに行くのを基本とすることにしました。

より具体的には相手の手によらず先手は76歩、26歩を、後手は84歩、85歩を指すようにすると同時に、角換わりや横歩の入り口でその他の手を指さないように定跡を調整しました。

※:なお、この研究成果は将棋本で再利用しています

 

この調整だけでもresivn value 200の試合で book offのQhapaqに対して55%弱勝てることを確認しています。

 

2次予選でのQhapaqは角換わりありの定跡(kusokora3.db)を使っています

 

【決勝での心変わり】

決勝リーグでも同じ定跡を使う予定でいましたが、他の対局者も似たようなことに気付いた結果か角換わりが大会全体で多かったこと、定跡巧者の開発者が多く、角換わりで長い定跡に持ち込まれることが多かったことを加味し、角換わりの局面で角道を塞ぐ定跡を新たに用意しました(あまりに突貫すぎて角道閉じる先の手がないという糞仕様)。

決勝リーグで使った定跡( kusokora6.db )はあまりよい成績を残すことが出来なかったので其の是非は微妙だと思います(一番対策したかったPALにはガッツリ対策されてたし)。ただ、大会全体の戦型のバリエーションの増加には貢献できたと思います。

 

【定跡の今後】

WCSC28の決勝リーグソフトの多くが評価関数で似たようなレートになっていることを加味すると、評価関数を今以上に強くするのは楽ではない(KPPTにせよ、NNUEにせよ)と思います。

私自身はKPPTがレートの上限を迎えたとは思っていませんが、限られた資源でソフトを強くする上で、評価関数に投資するのがベストであるという状況は今後必ずしも続かないだろうと考えています。

より具体的に言えば、評価関数はライブラリや有志開発に頼り、其の資源を定跡に回すほうが大会的に勝てるソフトが作れる可能性が有ると思っています。特に将棋が強い人がソフトを使って定跡を監修すれば、まふ定跡がsdt5で大暴れしたような現象が起こりうると考えています。

定跡は評価関数に比べると検討用途で使いにくいなどのユーザ視点では美味しくない点はありますが、コンピュータ将棋の大会が今まで以上に人間臭い大会になる事自体は、それはそれで面白いのではないでしょうか。

 

私も定跡本を買って勉強しなければ...!

 

 

妖怪惑星Qhapaqの評価関数を公開しました

長らくおまたせ(?)しましたが、WCSC28で7位入賞を果たした妖怪惑星Qhapaqの評価関数を公開しました。

 

DLは此方からどうぞ

Release qhapaqの評価関数群 · qhapaq-49/qhapaq-bin · GitHub

 qhwcsc28.7zが妖怪惑星Qhapaqの評価関数です。

 

【レート測定結果】

手元では1手1秒12スレッド、狸互角局面集で8手目を初期局面にレート測定を行っています。

 vs aperypaq

243 - 8 - 179(57.58% R53.1)

 

vs くじらちゃん

178 - 8 - 204(46.6% R-23.68)

 

aperypaqには有意に勝ち越せていそうです。クジラちゃんは微妙に負け越してる気がしなくもないです。

 

Qhapaqの評価関数は上記環境でのレートを最大化するように最適化しています。検討用ソフトとしての利用に耐えられるよう、オールラウンダーな棋風を目指していますが、スレッド数が極めて多い場合や定跡offでの挙動は怪しいかも知れません。

 

# レートの下馬評的にしては大会で勝てなかったのを根に持ってるだけという説も

# くじらちゃんも大会で苦戦してましたし。

 

 

第28回コンピュータ将棋選手権の感想戦(雑談編)

2018.05.08に修正

第28回世界コンピュータ将棋選手権に妖怪惑星Qhapaqとして参加しました。悲願の決勝リーグ進出を達成し、最終的な順位は7位入賞となりました。応援してくれた方、大会を支えてくれた方、大会を楽しんでくれた方全てにお礼申し上げます。

 

本稿では御礼に変えて実況などでは出てきにくい、Qhapaqから見た舞台裏のうち技術と関係ない話(技術的な話はもう少し検証が必要なので)をしていきます。

 

Crazy shogi、マジでCrazy:

本大会の注目株の一つであったCrazy shogi。海外勢としては2人目なのですが、日本語を話せない参加者が来るのは本当に久々で英語対応に苦慮しました。基本的にYSSの山下さんが対応をしていましたが、山下さんが大会運営に出ているときは代わりに私が説明をしたりもしました(中継ブログの画像でやたらRémiさんと一緒に写ってるのはそれだ)。

開発者のRémiさんは本当に将棋を知らないらしくCrazy shogiが矢倉を指したのを見て「Foooo,ゼロから学ばせたDNN将棋が矢倉指してるゥウ」と喜ぶ観戦者を尻目に「Hey,河童、未だ始まったばかりだが彼らは何を喜んでるんだ。もう決着ついたのか?」と呑気な様子でした。

Crazy shogiは対局毎に評価関数を差し替えていました。曰く「Alpha zeroの学習で強くし続けている」とのことです。

私「Rémiさんは強くなってるだろうと言ってますが、将棋強い民的にこの棋譜はどうです」

強い民(誰だかは忘れた)「序盤戦略は悪くないんだろうけど、人間的にはちょっと奇妙ですね」

私「あ、でもCrazy shogiってCGP(レート3500級のソフト)に勝ったみたいですよ」

強い民「それ、人間的には一番手に負えないやつですね」

 

将棋民怖い:

大会終了後に詰将棋カラオケをやろうと思っていたので、10分で解ければ2段の17手詰めなどが記載された書籍を持ち込みました。カラオケをやりながら倒すのであれば平常時で1分ちょいで解ける問題が適切だろうと考え、会場にいた将棋が強そうな人たちに解いてみてもらいました。

私「どうです?」

PALの山口さん(東大将棋部)「N分で解ければM段ってのは結構適当ですからね。あ、解けました(大体1分ぐらい)」

私「東大将棋部パねえですね。ちなみにこれをプロがやったらどうなります」

山口さん「一瞬じゃないですかね」

私「と、いうわけで千田先生どうです」

千田先生(指で駒を動かすモーションをする)

千田先生「解けました(大体30秒ぐらい)」

私「プロ棋士パねえっすね。あと、詰将棋解くときに指って動くものなんですね」

千田先生「いや、今回のは解けた後に手数確認するためにやっただけです」

私(アカン)

 

ライバルソフト強い:

今回のQhapaqはシード組。此方はaperypaqよりも強い評価関数を用意していた(そして、floodgateを観る限りaperypaqを大いに引き離す関数はないように見えた)ので、それなりに勝つ気でいましたが、ライバルソフトの強さに終始圧倒されていました。個人的に一番記憶に残ったのはPAL(二次予選で席が隣だったので色々話したのもありますが)です。

 

決勝リーグにて

私「昨日は後手角換わりで負けたので、今日は意表をついて角換わり拒否にしてみました。定跡巧者相手に角換わりは危なそうなので。」

山口さん「いいんですか、銀は78ですよ?」

私「Qhapaqの評価値的にはそこまで問題はないです。定跡外れてくれたようで何よりです」

山口さん「いや、これは先手が速攻を決めれば結構勝てるので定跡優先度が低いからそんなに作ってないってのが...」

私「ふぇ?」

(宣言通りQhapaqが一方的にボコられて爆死する)

 

ちっ

 

HER○Z大人気:

※:開発のデスマ故か記憶がパラレルワールドに飛んでいたので修正。

 

大会1日目の打ち上げでの話

私「評価関数ガチャに失敗しましたが、HEROZのIPO参加ガチャにも失敗しました」

打ち上げ参加者「あれ、めっちゃ株価上がったらしいですね」

私「でも平岡さん、今期もサンダル参加でしたよ」

打ち上げ参加者「そういえば平岡さんって何株持ってるんでしたっけ」

mtmtさん「8000株。ちなみに山本さんは...」

参加者(こ、この人全部覚えてやがる)

 

2次予選のQhapaq vs たぬき戦にて

たぬき「ちょっとたぬきが悪くなってきたかも」

私「Qhapaqの評価関数は良くなってきてます。このままHER○Zの株価並みに上昇してくれれば大成功です」

観戦者(名前失念)「30000超えたらMateですね」

平岡さん「それ安定してないやつやん」

(たぬきが唐突に河童玉の頓死を発見。その後Qhapaqも大反省)

私「hrokてめえええええええええええ」

 

修正前の間違った原稿も置いときます。

設営日から数えて大会2日目=一次予選ってのが何処かで飛びぬけ、

大会2日目=二次予選と勘違いした様子......

2次予選のQhapaq vs たぬき戦にて

たぬき「ちょっとたぬきが悪くなってきたかも」

私「Qhapaqの評価関数は良くなってきてます。このままHER○Zの株価並みに上昇してくれれば大成功です」

観戦者(名前失念)「30000超えたらMateですね」

平岡さん「それ安定してないやつやん」

(たぬきが唐突に河童玉の頓死を発見。その後Qhapaqも大反省)

私「hrokてめえええええええええええ」

---その後、2次予選後の打ち上げ---

私「と、いう暴言を吐きましたが、敬愛する平岡さんの財産形成のためにもHEROZの株価は高みを極めて欲しいですね」

打ち上げ参加者「平岡さんって何株持ってるんでしたっけ」

mtmtさん「4000株、ちなみに山本さんは...」

参加者(こ、この人全部覚えてやがる)

 

入賞スピーチの焼き直し:

本大会では決勝リーグでクラスタの準備が間に合わなかったりしたことをお詫び申し上げます。同時に、便宜を図ってくれた運営および視聴者の皆様に感謝申し上げます。

今回のQhapaqはそれなりに強くできたと思っていました。特に4月なんて本当に地獄でした。桜前線を観る代わりに評価値推移の前線を眺め、5月の旅行先を悩む代わりに飛車の行き先を決めることを悩むのは本当にクソゲーで、私はこんなクソゲーは一日でも早く滅んで欲しいと思っています。

しかし、私はこのクソゲーが大好きです。指す人や観る人をドキドキさせる力が将棋にはあります。そして、その魅力の運び手は400年前の名人であり、今のプロでありココで私と凌ぎを削ったライバルたちです。だから、私はみなさんが大好きです。

ですが、Qhapaqを倒した者共を私は決して忘れません。次こそは報復します。そのために、二つのお約束をします。一つは、Qhapaqをもっと強くして持ってくること、そしてもうひとつは私自身が強い将棋指しになって帰ってくるということです。Qhapaqにはまだ大きな弱点があります。開発者の棋力が低いことです。次はこれを乗り越えてみせます。勿論、棋力の高い人を加えて解決するのではなく、Qhapaqの力を使って私を強くすることで解決してみせます。

次の大会、ぜひ、Qhapaqとだけでなく、私とも将棋を指してくれれば幸いです。これからもよろしくお願いします。

 

 

なお、実際はこんなにうまく喋れてはいない。

【締めきりました】技術書典で頒布した電子書籍のweb販売のお知らせ

技術書典4で頒布した「科学するコンピュータ将棋」のweb販売を行います。

締めきりました。注文された方の中で、DLコードが届いていない、

ダウンロードできないなどの不具合がありましたら、お手数ですが

f:id:qhapaq:20180424225620p:plain

までご連絡ください([atmark]は@に変換してください)。

中学生棋士(加藤九段、谷川九段、羽生竜王、渡辺棋王、藤井六段)の棋力をAIに分析させてみた

藤井四段と羽生三冠のどちらが強いか、流行の人工知能に聞いてみましたの拡張版として、中学生棋士5人の棋力をAIに分析してもらいました。

 

本稿は4月22日の技術書典4で頒布する「科学するコンピュータ将棋」の一部分となっております。興味がありましたら、是非イベントにお越しください(本書の宣伝ページは此方)。

中学生棋士の棋力解析の全文は此方のページから閲覧可能です(このデータに加え、対局相手との比較などのデータがあります)。

 

 

【人間の強さは良く解らない】

「藤井六段は羽生竜王より強いか」

「最盛期が最も強かった中学生棋士は誰か」

これらは観る将であれば一度は考えたことだと思われます。藤井六段と羽生竜王の成績は非公式戦で1-1、公式戦では1-0です。現時点では藤井六段が勝ち越していますが、勝率を測定する上では全然足りていません。プロ棋士が年間に戦う数は精々50前後であり、この程度の数だと勝率には10%以上の誤差が付随してしまいます。

しかし、対局数ではなく指した手の数に注目することができれば、データを大幅に増やすことが出来ます。年間にプロ棋士が指す手数は3000手を超えているので、指し手から強さを測定する方法さえ見つかれば、棋士の棋力を少ない誤差で測定することが出来そうです。

 

【そうだAIを使おう】

YSSの開発者である山下氏によって、将棋ソフトによって得られる悪手率(手を指す前の評価値と後の評価値の差から求められる悪い手を指す確率)によって、将棋倶楽部24のレートを悪くない精度で測定できることが報告されています。

www.yss-aya.com/20141107gpw_meijin.ppt

本稿ではこの研究の拡張系として、評価値毎の悪手率を計算しています。粘り強さが重要となる劣勢局面での悪手率、研究の深さが重要となる互角局面での悪手率、詰めの腕が重要となる優勢局面での悪手率を比べることで、中学生棋士たちの棋力を調べてみます。

 

【比較と総評】

f:id:qhapaq:20180420010153p:plain

 

横軸が手を指す前の評価値、縦軸が悪手を指す確率(厳密には手を差した前後での評価値の減少分の平均)です。端的に言って低いほど強いです。以下、各中学生棋士たちの評価です。

 

【藤井六段】
藤井六段の最大の強みは有利になった局面での悪手率の低さです。中学生棋士全員の中でもずば抜けて低いです詰将棋で培った終盤力によって紛れを起こさせないことが上手であると言えましょう。また、-200〜200程度の互角の局面でも、中学生棋士達の中で最も良いスコアをあげています。21世紀の若手棋士よろしく、序盤戦略を相当練り込んでいると言えましょう。逆に不利な局面での粘りは意外なことにも中学生棋士の中で最も悪いスコアが出ています。紛れを求めた実戦的な指し回しを学ぶことが今後の課題となるかも知れません。

 

【渡辺棋王
渡辺棋王は勝勢の局面での指し回しが中学生棋士の中でも一番正確です。玉の固さに関する感覚が優れており紛れにくい終盤戦を展開するのが得意なのだと思われます。一方、自分が不利な局面での指し回しはソフト的にはミスが多いようです。「形勢が悪くなると顔に出てしまう」という本人評を反映した形になってしまっています。

 

【羽生竜王
羽生竜王は全体的にスキがなく流石はオールラウンダーといったところです。特に凄いのが不利な局面での悪手率の低さと対局相手の悪手率の高さです。悪い局面では意図的に変な手を指して紛れを求めなければならないとは言いますが、羽生竜王は自身の悪手率を上げることなく、紛れを求められているようです。羽生竜王の大逆転は羽生マジックと呼ばれますが、悪い局面で正確に指しながら、相手を複雑な局面へと追いやることについては、棋界のレジェンドである中学生棋士たちすらも寄せ付けません。羽生竜王自身はほとんどの棋戦でシードであり、対局相手の平均レートが最も高い棋士の一人であるにもかかわらず、このようなスコアを叩き出せるのは驚嘆の一言に付きます。

 

【谷川九段】
最近の谷川九段には自身が少し有利になった局面での指し回しに難があります。評価値+1500以上の勝勢の局面での指し回しは光速の寄せよろしく盤石ですが、そこに至るまでの構想に苦慮している様子が見て取れます。ただし、不利な局面での粘りは健在であるため、ここ暫くの成績の停滞は序盤中盤の研究の時間が取れなかったことが原因なのではと予測できます。

 

【加藤九段】
加藤九段は不利な局面(特に-400〜-600程度の形勢が傾き始めた局面)での指し回しは羽生竜王と並んで最も優れています。不利な局面でも折れずに戦えるのは歴戦の猛者の証左と言えます。また、勝勢の局面での指し回しも血気盛んな後輩たちと比べ遜色ないものとなっています。加藤九段の最大の弱点は有利な局面でのミス率の高さです。棒銀の名手として名を馳せすぎたゆえに、相手に研究をされてしまっているのかも知れません。

 

【総評】
これらのデータを踏まえ、私が予測する2018年時点の中学生棋士の強さの順位は 藤井六段=羽生竜王>渡辺棋王>谷川九段>加藤九段 です。数字の上では藤井六段の方が羽生竜王より強いのですが、対戦相手の平均レート差を加味すると、勝負はこれからであると予想しています。あくまでソフトの予想(しかも、一般的な下馬評と殆ど差がない)ではありますが、棋風を解析することで時代を作る彼らが今後どのように伸びていくかをこういった形式で解析するのも一興でしょう。

 

【改めて宣伝】

本稿は4月22日の技術書典4で頒布する「科学するコンピュータ将棋」の一部分となっております。興味がありましたら、是非イベントにお越しください(本書の宣伝ページは此方

 第五回将棋電王トーナメントのトロフィーも持っていきます。ガラス製の鈍器です。