前回の記事「評価値という数値 1:一歩百点?」では、評価値が本来は順序尺度であることを指摘し、なぜ将棋の評価値が比率尺度として取り扱われているのかを説明しました。今回は、将棋の評価値を別の形で表現する方法について考えてみたいと思います。

コンピュータ囲碁においては、評価値は0~100%までの“勝率”で表現されます。囲碁では「駒得/駒損」のような分かりやすい指標がなく、また、目数の期待値を用いた従来的な形勢判断もコンピュータ囲碁では有効ではなかったため、勝率の予測値がそのまま評価値となりました。“勝率”は「ゲームの特性」や「評価関数の設計」に依存しない表現であるため、評価値の普遍的な表現方法の一つだと言えます。

コンピュータ将棋においても、評価値を“勝率”に換算して表そうという考え方があります。形式的には、評価値をVとすると、値域が[0, 1]である単調増加関数fを用いて、

\[P = f(V)\]

と変換することで、“勝率”Pに換算することができます。

ここで、“勝率”とは何を意味しているのでしょうか? この定義がはっきりしないと、関数fを具体的に定めることができません。

“勝率”の定義については、おおよそ以下のような考え方があります。

  1. シミュレーションによる勝率。
  2. 棋譜集における勝率。
  3. 自己対局による勝率。
  4. ある関数fによる換算値を“勝率”と定義して、意味は後で検証する。

1つ目の考え方は、モンテカルロ囲碁などで採用されている考え方です。定義はシミュレーションの手法に依存しますので、シミュレーションを1つの評価関数とした時の評価値と考えるのが妥当かも知れません。形勢判断の精確性もシミュレーションの精確性に依存します。将棋では、現在はモンテカルロ法は有効ではないされているため、この考え方は非常に少数です。

2つ目の考え方は、棋譜集内の局面の評価値と勝敗結果を結び付けたものであり、最も一般的な手法です。例えば、「勝率に基づく評価関数の評価と最適化」の論文では、将棋倶楽部24の棋譜9万局を用いて(ただし、勝敗判定には対局者自身の投了の他に簡単な詰め判定も併用)、当時のGPS将棋の静的評価値と勝率との関係を算出しています。この手法は棋譜集に大きく依存し、精確性を追求するには高品質な棋譜が大量に必要となります。

3つ目の考え方は、2つ目の考え方の亜種であり、棋譜集の代わりに自己対局の棋譜を用いるというものです。評価値は基本的に自分自身で使うためのものであるため、短時間の自己対局の勝率を用いるのは合理的です。また、自己完結した手法であるため、きれいな結果も得られるようです(参照:Ponanzaによる結果)。この手法は探索局面数/深さに依存します。また、現実的な対局時間よりも遥かに少ない時間での自己対局の場合には、実質的には1つ目のシミュレーションによる勝率に近くなっていると考えられます。

以上の3つの考え方は、評価値が表している形勢判断について、検証的な視点が暗黙的に盛り込まれています。実際に、詳細な定義を行えば、関数fを統計的に推定することもできますし、評価値と勝率の整合性を確認することもできます(関数が単調にならなかったり、滑らかにならなかったりすると非整合的)。さらに発展させて、整合性がよくなるように強化学習を行ったり、学習時の教師局面の精査を行ったりすることも可能です。

一方で、4つ目の考え方は、評価値に完全に従属したものであり、自然科学でよく使われる手法です。定義と検証を分離することで理論の整備がしやすくなります。例えば、Ponanzaは、学習時に

\[P = f(V) = \frac{1}{1 + e^{- V / 600}}\]

という仮定をしているようです(参照)。この関数はシグモイド関数と呼ばれるもので、自然科学一般でよく使われます(これを見て「フェルミ分布」と言うのは物理学だけでしょう)。

さて、一般論として、関数f(V)はどのような形になるべきなのでしょうか?

例えば、酔歩模型ではどうなるのかを見てみましょう。酔歩模型については「将棋は酔歩ではない?:酔歩模型と手数分布」の記事をご参照ください。

棋士棋譜集(2015年11月版)とfloodgate棋譜集(2012~2015年版)で調整された変数を用いて、シミュレーションした結果を下図に示します。棋士棋譜集(黒点)とfloodgate棋譜集(青点)共に、各点1000万回の結果です。

random_walk_syouritu

結果を見ると、変数の詳細には関係なく、ほぼ比例関係になっています。変形評価値が±1のところで跳んでいるのは模型の問題です(ギリギリでも引き返して逆転する可能性があるため)。

つまり、細かいことに目をつむると、変形評価値

\[X = F(V)\]

と勝率Pとの間には、

\[P \approx \frac{1 + X}{2} = \frac{1 + F(V)}{2}\]

という近似関係式が成立していることになります。

変形評価値は、例えば、

\[X \approx \text{tanh}(\frac{V}{2 u})\]

というような関数でした。この場合、勝率は

\[P \approx \frac{1}{1 + e^{- V / u}}\]

となり、シグモイド関数になります。ここで、uは評価値のスケールを決める変数です。上記のPonanzaの例では600点(おそらくセンチポーンで)でした。

具体的に、シグモイド関数というのは下図のような関数です。

fig1

酔歩模型に依れば、評価値と勝率との関係はおおよそ上図のようになると考えられます。この結果は記事の最初に紹介した様々な結果とおおよそ整合的です。

シグモイド関数はイロレーティングでも使われています(参照:「イロレーティングにおけるレート差と勝率との関係」)。イロレーティングにおける勝率Pとレート差dRとの関係式は

\[P = \frac{1}{1 + 10^{- dR / 400}}\]

です。

上記の式をまとめると、評価値Vとレート差dRとの間には

\[dR \approx 173.7 \frac{V}{u}\]

という比例関係の近似式が導けます。例えば、u = 600の場合には、比例係数は0.29程度になります。

もし評価値とレート差との間の対応がつくと、棋力差、局面の形勢、持ち時間、平均誤差等が全てレートに統一的に換算できることになります。そうなると、勝敗以外の大量の情報を総括的に活用できるようになりますので、序盤、中盤、終盤、残り時間などの様々な状況ごとにレートを詳細に推定したり、評価値だけではなく全体のレート差を最適化するような指し回しをしたりするようなことも可能になるかもしれません。

以上、今回は、将棋の評価値を“勝率”やレート差で表現することを考えました。酔歩模型に依れば、評価値はレート差とおおよそ比例関係になることが示されます。レート差への換算係数は、“勝率”の定義やソフトの詳細に依存しますが、思いっきり大雑把には0.3程度になりそうです。この辺の詳細な研究は今後の課題だと言えるでしょう。