コンピュータ将棋では局面の形勢を「評価値」という数値で表現します。将棋ソフトの指し手は評価値に基づいて決定され、また、検討や解析における形勢も評価値の“点数”として表示されます。今や評価値は、将棋ソフトの利用者にとって、とても身近な量になっていると言えるでしょう。
もし将棋が完全解析できたとするならば、局面は勝ち・負け・引き分けの3つの値(ゲーム値)に分類できるはずです。しかしながら、現実には完全解析は不可能なため、局面を評価するのにゲーム値の推測値が用いられることになります。これが評価値です。先を全て見通すことができないということが前提となっているため、評価値には未確定な未来への展望が織り込まれています。
評価値がゲーム値の近似値であるのならば、一見すると、ゲーム値に近い極端な値の評価関数が優れているように思えます。極論的には、ゲーム値と同じく評価値も-1、0、+1の3種類でいいのではないかと考えられるわけです。ところが、そのような評価関数では、探索を深くしても弱くなるという問題(探索の病理)が発生し、うまくいかないということが知られています。評価値はゲーム値の近似値というよりは、何らかの期待値の推測値であるわけです。
多くの将棋ソフトでは、一歩の価値を100点程度(歩を取る場合には、相手-100点、自分+100点で200点差)として、評価値は-32768から+32767の間の整数で表されます。これは16ビットの符号付き整数の範囲であり、探索の病理を避けるのに十分なだけの値の細やかさを確保しつつ、なるべく記憶容量を節約したいという実装になっています。
さて、この評価値ですが、尺度として見ると、かなり“奇妙”な量になっています。特に「一歩100点」という表現は、評価値の説明の常套句でありながら、よく考えてみると“奇妙”な表現であることに気付きます。今回は、この評価値という数値の“奇妙さ”について、少し考えてみたいと思います。
一般的に定量的な尺度には、順序尺度、間隔尺度、比率尺度があります。順序尺度は数値で大小の比較ができる量で、例えば、地震の震度です。震度は数値が大きいほど、揺れの強さが大きくなります。間隔尺度は、順序尺度に加えて、数値の間の間隔が等しく、単位(物差し)で測れる量です。例えば、長さや重さは間隔尺度ですが、震度は単位で測るものではないので、間隔尺度ではありません。比率尺度は、間隔尺度に加えて、原点の零が定まっており、数値の比にも意味のある量です。
本来、将棋の形勢を表す量は、順序尺度であって、間隔尺度や比率尺度ではないはずです。人間でもコンピュータでも複数の局面を比較して(人間の場合には局面以外の情報も加味することがありますが)優劣の順序を付けることが形勢判断の肝であり、実際、探索で指し手を決めるのは順序尺度で事足ります。もちろん、順序尺度の性質を有しているという点では間隔尺度や比率尺度でも構わないですし、また、その方が枝刈り等が効率的になるというような利点があるかもしれませんが、間隔尺度や比率尺度である必要はないわけです。
一方で、「一歩100点」という表現は、歩1枚を単位とするということを意味していますから、評価値が間隔尺度であることを暗に示唆しています。また、本来なら初期局面を評価値の原点に選んでも問題ないはずですが、実際にはそうなっておらず、評価値の原点は、その評価関数が互角と考える局面になっており、これは評価値が比率尺度であることを示唆していると考えられます。
つまり、本来は順序尺度で十分な量が、評価値では比率尺度に拡張されているわけです。
この“奇妙”な飛躍が人々に違和感を感じさせます。例えば、「歩1枚で100点なので、500点の局面は歩5枚分です」というような比率尺度に基づいた説明は、内容的には正しくても、人々を納得させることは困難でしょう。通常、人間は比率尺度で形勢を判断しないからです。
それでは、コンピュータ将棋の評価値(大元を辿れば、コンピュータチェスの評価値)はなぜ歩兵(ポーン)を単位とした比率尺度になっているのでしょうか?
理由は大きく2つあると考えられます。1つはチェスや将棋のゲームの特性に基づくものであり、もう1つは評価関数の設計に基づくものです。
チェスや将棋は「駒得/駒損」が基本となるゲームです。そのため、最も価値が低い歩兵を1点として他の駒の価値を点数化することは、コンピュータが発達する以前から、自然と行われてきました。実際に、「駒得/駒損」の評価だけでもかなり強いソフトを作ることができますし、子供に将棋を教える際にも最初に駒の機能と価値を教えることになります。
この「駒得/駒損」という考え方がチェスや将棋の評価値の背景になっています。実際、このゲームの特性から、コンピュータチェスでは歩兵を1点とし、さらに細かい表現ができるように100倍した単位(センチポーン)が標準となりました。それが将棋に輸入されて「一歩100点」となったわけです。
さらに、チェスや将棋の評価関数は、評価項目ごとの点数の足し算(線形和)が基本になっています。例えば、歩(100点)3枚と銀(400点)1枚なら合計は700点になるというわけです(駒の位置関係等も同様)。習甦などの一部のソフトは非線形な評価関数(つまり線形和ではない一般の関数)を採用していますが、ボナンザ系や激指(実現確率探索)系など、ほとんどのソフトは線形和を採用しています。これは取り扱いが簡単であることに加えて、実際にそれで上手く行っているという経験的な理由に依っています。
評価関数が線形和であるのならば、評価値が比率尺度になるのは自然なことになります。「500点の局面は歩5枚分」という説明も内部の仕組みとして実は正しかったということになるわけです。
しかしながら、これら「ゲームの特性」や「評価関数の設計」に依存する表現は、あまり美しくないと感じられる方もいるかもしれません。実際に、現在でも非線形な評価関数のソフトは存在しますし、将来、それが主流になる時代が来ないとも限りません。また、大体「一歩100点」と言っても、ソフト毎に微妙に異なりますし、一歩の価値をどう見るかも高度な棋力になってくるとばらついてきて、評価関数の規格化がソフトやバージョンで大きく変わるということも発生しています。去年のPonanzaは評価値が高めに出ていたが、今年の評価値は何故か低めに出るなんてことも起こるわけです。
いずれにしても、「評価値は本来は比率尺度ではない」というのは注意が必要なことですし、比率尺度としての評価値に対しても、できるだけ「ゲームの特性」や「評価関数の設計」に依存しないようにするのには意味があります。例えば、評価関数の規格化は「多数の標準局面を標準的な手法で評価して、その統計平均を標準値に合わせるようにする」というような形で統一すれば、ソフトやバージョン毎のばらつきを減らせるかもしれません。また、標準規格化への換算係数をGUI側で設定できるようにして、評価値の出力の際にGUI側で換算することにすれば、ソフト開発側の負担も軽減できるかと思われます。
コンピュータ将棋においては、評価値は暗黙に比率尺度として取り扱われています。本ブログの記事でも同様です。評価値を比率尺度として取り扱う以上は、“標準化”が課題になるのは避けられないことでしょう。
以上、今回は、評価値という数値の“奇妙さ”について考えました。「評価値は本来は比率尺度ではない」ということを鑑みると、何らかの変数変換を行えば、別の評価値表現が可能になります。例えば、囲碁では評価値を“勝率”として表現していますが、これは将棋でもできることです。次回は、その辺の話を書きたいと思います。
- 次の記事:「評価値という数値 2:勝率と酔歩模型」
-------------------
追記:USIプロトコルにおける評価値情報について(2017年1月3日)
「うさぴょんの育ての親」様のコメントで気付いたのですが、評価値の話を書いているのにUSI(Universal Shogi Interface)のことに触れなかったのは手抜かりでした。追記します。
GUIソフト(将棋所やShogiGUI等)と思考エンジンとの通信に標準的に使われているのが、USIプロトコルです。ソフトによっては元のプロトコルを一部拡張して用いていることもあります。将棋所のサイトに詳細な説明があります。
USIでは、評価値の通信は「info score」で行います。上記のサイトでは、以下のように説明されています。
エンジンによる現在の評価値を返します。score cpで評価値を返す場合、歩1枚の価値を100とした値を返すことになります。(cpというのは、centi pawnの略です。)この値は、エンジンの側から見た値となり、エンジンが有利ならプラス、エンジンが不利ならマイナスの値になります。エンジンが50点有利と判断しているならscore cp 50となります。
つまり、「info score cp 50」と送ると、「1歩100点の単位で50点有利」という意味になるということです。これは、元のUCI(Universal Chess Interface)の仕様をそのまま引き継いでいます。
通常、GUIソフトはこの点数をそのまま表示しますので、USIの仕様通りであれば、1歩100点の単位で表示されるはずです。ただし、非USIソフトやUSIであっても仕様通りの実装になっていないソフトの場合には必ずしもその限りではありません。
さらに、「info score mate」というものもあります(通称mate)。これは詰みに関するもので、以下のように説明されています。
エンジンが詰みを発見した場合は、score mateによって詰み手数を返すことができます。詰み手数に入れる数字は、エンジンの勝ちならプラス、エンジンの負けならマイナスになります。エンジンが6手後に詰まされて負けると判断した場合はscore mate -6となります。
つまり、勝ち/負けが確定した時、評価値は最大値/最小値になるわけですが、それでは「詰み手数」の情報が入らないため、別の通信手段を用意しているというわけです。ちなみに、この場合の「詰み手数」というのは、王手だけに限らず、片方の合法手がなくなるまでの手数であり、また、思考エンジンによっては必ずしも最短手数とは限りません。元のUCIでは先後の応手のセット数(move = 2手)で数えますが、USIでは手数で数えます。この辺はチェスと将棋の慣習的な違いに依ります。
この勝敗確定時の場合分けは、理論的には明解なものですが、実装的には手間がかかるものであるため、思考エンジンによっては採用していない場合があります。3万点程度の十分に大きい最大値を決めておいて、そこから「詰み手数」分を引いた値を評価値とするというのもよく行われることです。この場合の評価値は、比率尺度ではなく、順序尺度になります。