評価関数(ヒューリスティック評価関数または静的評価関数とも呼ばれる)は、ゲームプレイを行うコンピュータプログラムが、ゲームツリー内の局面(通常は葉ノードまたは末端ノード)の価値または良さを推定するために使用する関数です。[ 1 ]ほとんどの場合、値は実数または量子化された整数であり、囲碁の石やチェスのポーンなどの駒の値のn分の1であることが多く、 nは10分の1、100分の1、またはその他の都合の良い分数である可能性がありますが、場合によっては、値は単位区間の3つの値の配列であり、局面の勝率、引き分け率、および敗率を表します。
未解決ゲームの評価関数に関する分析モデルや理論モデルは存在せず、また、そのような関数が完全にアドホックなものでもない。評価関数の構成は、候補となる関数をオートマトンに挿入し、その後のパフォーマンスを評価することによって経験的に決定される。チェス、将棋、囲碁など、いくつかのゲームについては、評価関数の一般的な構成に関する相当量の証拠が現在存在する。
コンピュータプログラムが評価関数を使用するゲームには、チェス[ 2 ] 、囲碁[ 2 ] 、将棋[ 2 ] 、オセロ、ヘックス、バックギャモン[ 3 ]、チェッカー[ 4 ] [ 5 ]などがあります。さらに、 MuZeroなどのプログラムの登場により、コンピュータプログラムはAtari 2600などのビデオゲームをプレイするためにも評価関数を使用するようになりました[ 6 ]。三目並べのようなゲームは強力に解決されており、離散的な解木が利用可能であるため、探索や評価は必要ありません。
このような評価のツリーは通常、モンテカルロ木探索やアルファベータ探索のようなミニマックスアルゴリズムなどの探索アルゴリズムの一部です。この値は、そのノードからゲームの終了までゲームツリーを展開した場合の勝利の相対的な確率を表していると想定されます。この関数は現在の位置(つまり、駒がどのマスにあり、駒同士の関係があるか)のみを参照し、位置の履歴を考慮したり、ノードより先の可能な動きを探索したりしません(したがって静的です)。これは、戦術的な脅威が存在する動的な位置では、評価関数が位置の正確な評価にならないことを意味します。このような位置は非静止状態と呼ばれ、評価の前に脅威を解決するために、静止探索と呼ばれる少なくとも限定的な種類の探索拡張が必要です。ノードで勝利、敗北、または引き分けが発生した場合、評価関数によって返される値の中には、ヒューリスティックではなく絶対的なものがあります。
評価関数において、探索と知識の間には複雑な関係が存在する。より深い探索は、評価において短期的な戦術的要因よりも、より微妙な長期的な位置的モチーフを重視する傾向がある。また、符号化された知識の有効性と計算の複雑さの間にはトレードオフが存在する。詳細な知識の計算には時間がかかりすぎてパフォーマンスが低下する可能性があるため、正確な知識の近似の方が多くの場合優れている。評価関数は、探索の名目上の深さだけでなく、探索で使用される拡張と縮小にも依存するため、評価関数には汎用的または独立した定式化は存在しない。あるアプリケーションでうまく機能する評価関数は、通常、別のアプリケーションで効果的に機能させるためには、大幅な再調整または再学習が必要となる。
コンピュータチェスでは、評価値が大きいほど駒の不均衡や位置的な優位性、あるいは駒得が間近であることを示します。非常に大きな評価値は、チェックメイトが間近であることを示している場合もあります。評価関数には、駒を動かす権利の価値も暗黙のうちに符号化されており、その価値はポーンのごく一部から勝ち負けまで様々です。
手作業で作成された評価関数の出力は、通常、単位がポーンと呼ばれる整数です。「ポーン」という用語は、チェスの駒の相対的な価値で説明されているように、プレイヤーが相手よりもポーンを1つ多く持っている場合の値を指します。整数1は通常、ポーンの何分の1かを表し、コンピュータチェスでよく使われるのは、ポーンの100分の1であるセンチポーンです。
コンピュータチェスの歴史において、評価関数の項は、ニューラルネットワークのトレーニングによって発見されるのではなく、エンジン開発者によって構築(つまり手作業で作成)されてきました。手作業で作成された評価関数を構築する一般的なアプローチは、局面の価値に影響を与えると決定されたさまざまな重み付き項の線形結合として作成することです。ただし、手作業で作成された評価関数のすべての項が線形であるとは限りません。例えば、キングの安全性やポーン構造などが挙げられます。各項は、1次因子(空間とその上の駒のみに依存する因子)、2次因子(他の空間との関係における空間)、およびn次因子(局面の履歴への依存性)で構成されていると考えることができます。
手作業で作成された評価関数には、通常、評価を支配する駒の均衡項があります。駒の慣習的な値は、クイーン=9、ルーク=5、ナイトまたはビショップ=3、ポーン=1です。キングには任意に大きな値が割り当てられ、通常は他のすべての駒の合計値よりも大きくなります。[ 1 ]さらに、通常は位置項のセットがあり、通常は合計がポーンの値を超えませんが、チェックメイトが差し迫っている場合など、位置項がはるかに大きくなる場合もあります。手作業で作成された評価関数には、通常、数十から数百の個別の項が含まれます。
実際には、効果的な手作業による評価関数は、評価対象パラメータのリストを拡張することによって作成されるのではなく、上述のような少数のパラメータの重みを互いに慎重に調整または学習することによって作成されます。この目的のために、マスターゲーム、エンジンゲーム、Lichessゲーム、あるいは強化学習における自己対戦など、さまざまなデータベースからの局面が利用されます。
チェスにおける手作業で作成された評価関数の例は、次のようになるでしょう。
それぞれの項は、重みに差分係数を掛けたものです。差分係数とは、白の駒の駒の価値または位置的駒の価値から黒の駒の価値または位置的駒の価値を引いたものです。
少なくとも1990年代初頭から評価において重要な手法となっているのが、駒マス表(駒値表とも呼ばれる)である。[ 7 ] [ 8 ]各表は、チェス盤のマス目に対応する64個の値のセットである。駒マス表の最も基本的な実装は、プレイヤーごとに駒の種類ごとに個別の表を作成することであり、チェスでは合計12個の駒マス表となる。表の値は、各駒が各マス目にある場合のボーナス/ペナルティであり、分析的に定量化するのが困難な多くの微妙な要素の複合体を符号化している。手作業で作成された評価関数では、オープニング/ミドルゲーム用とエンドゲーム用の2つの表セットが存在する場合があり、ミドルゲームの局面は2つの表の間で補間される。[ 9 ]
ニューラルネットワークは1980年代後半からチェスエンジンの評価機能に使用されてきましたが、 [ 10 ] [ 11 ]当時はニューラルネットワークのトレーニングに必要なハードウェアが十分強力ではなく、高速トレーニングアルゴリズムやネットワークトポロジー、アーキテクチャがまだ開発されていなかったため、コンピュータチェスで普及したのは2010年代後半になってからです。ニューラルネットワークベースの評価機能は一般的に、強化学習または教師あり学習を使用してトレーニングされたニューラルネットワークで構成され、盤面の状態を入力として受け取り、実数値または整数値を出力します。
ディープニューラルネットワークは、 2015 年のMatthew Lai の Giraffe [ 12 ]と 2017 年のDeepmindのAlphaZeroによって評価関数におけるディープニューラルネットワークの実現可能性が実証されて以来、コンピュータチェスではあまり使われていないものの、使用されるようになった。分散コンピューティングプロジェクトLeela Chess Zero は、 Deepmind の AlphaZero 論文の結果を再現しようとして、その直後に開始された。ネットワークのサイズ以外にも、AlphaZero と Leela Chess Zero で使用されているニューラルネットワークは、従来のチェスエンジンで使用されているものとは異なり、評価 (値ヘッド) に加えて、後続の手にわたる分布 (ポリシーヘッド) を予測する。[ 13 ]ディープニューラルネットワークは非常に大きいため、評価関数にディープニューラルネットワークを使用するエンジンは、通常、評価関数を効率的に計算するためにグラフィックス処理ユニットを必要とする。
ほとんどのトップエンジンで使用されている評価関数は、効率的に更新可能なニューラルネットワーク(NNUE)であり、これはもともと2018 年に那須裕によってコンピュータ将棋用に提案された疎で浅いニューラルネットワークです。 [ 14 ] [ 15 ] [ 16 ]実際、最も基本的な NNUE アーキテクチャは、上記で説明した 12 個の駒の正方形のテーブルであり、活性化関数のない 1 つの層のみを持つニューラルネットワークです。効率的に更新可能なニューラルネットワーク アーキテクチャは、Stockfish NNUE と呼ばれる Stockfish 派生版で最初にチェスに移植され、2020 年 5 月 30 日に公開され、[ 17 ] 2020 年 8 月 6 日に公式の Stockfish エンジンに組み込まれました。[ 18 ] [ 19 ]
チェスエンジンは、終盤の局面を迅速かつ正確に評価するために、終盤の表を頻繁に利用する。
歴史的に、コンピュータ囲碁の評価関数は、支配している陣地、石の影響力、捕虜の数、盤上のグループの生死などを考慮していました。しかし、現代の囲碁コンピュータプログラム(AlphaGo、Leela Zero、Fine Art、KataGoなど)は、評価関数にディープニューラルネットワークを多用し、石の数ではなく、勝敗率を出力します。