ニューラルネットワークは、多数の重み付きユニットを層状に接続し、局面特徴から評価値や方策を学習するモデルである。 将棋AIでは、近年は特にNNUEや深層学習系の評価器・方策器として重要である。
古典的な評価関数は、 人手で選んだ特徴量を重み付き和で足し合わせることが多かった。 これに対してニューラルネットワークでは、
を学習でまとめて最適化する。
将棋AIでは大きく分けて、
の二方向で使われてきた。
もっとも単純な全結合ネットワークでは、
の各層で線形変換と活性化関数を繰り返す。
for (int j = 0; j < hiddenSize; ++j) {
hidden[j] = bias1[j];
for (int i = 0; i < inputSize; ++i) {
hidden[j] += input[i] * w1[i][j];
}
hidden[j] = relu(hidden[j]);
}
これは概念説明用の最小例で、実際には SIMD、量子化、バッチ処理などの最適化が入る。
将棋AIでは、
といった流れがある。
特に NNUE は、 「CPU 上で大量のノード評価を行う必要がある alpha-beta 探索」 に適した形へ落とし込まれている点が重要である。
将棋AIでは両者が完全に置き換わるというより、 時代ごとに重点が移ってきたと見るのが自然である。
NNUEは、ニューラルネットワークの中でも 「差分更新可能で CPU 向け」という実装上の制約に強く最適化された形である。 そのため、ニューラルネットワーク一般の記事では、 NNUE を特殊で実用的な派生形として捉えると分かりやすい。