ニューラルネットワーク

ニューラルネットワークは、多数の重み付きユニットを層状に接続し、局面特徴から評価値や方策を学習するモデルである。 将棋AIでは、近年は特にNNUEや深層学習系の評価器・方策器として重要である。

概要

古典的な評価関数は、 人手で選んだ特徴量を重み付き和で足し合わせることが多かった。 これに対してニューラルネットワークでは、

  • 入力特徴
  • 中間表現
  • 出力

を学習でまとめて最適化する。

将棋AIでは大きく分けて、

  • alpha-beta 探索と組み合わせる評価器
  • policy / value network を中核に置く探索器

の二方向で使われてきた。

基本形

もっとも単純な全結合ネットワークでは、

  • 入力層
  • 隠れ層
  • 出力層

の各層で線形変換と活性化関数を繰り返す。

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での使われ方

将棋AIでは、

  • Bonanza 系の特徴量学習
  • NNUE
  • policy / value network を使う深層学習型

といった流れがある。

特に NNUE は、 「CPU 上で大量のノード評価を行う必要がある alpha-beta 探索」 に適した形へ落とし込まれている点が重要である。

手作り評価との違い

  • 手作り評価 特徴量と重みの意味が比較的分かりやすい
  • ニューラルネットワーク 表現力が高いが、内部表現は解釈しにくい

将棋AIでは両者が完全に置き換わるというより、 時代ごとに重点が移ってきたと見るのが自然である。

NNUE との関係

NNUEは、ニューラルネットワークの中でも 「差分更新可能で CPU 向け」という実装上の制約に強く最適化された形である。 そのため、ニューラルネットワーク一般の記事では、 NNUE を特殊で実用的な派生形として捉えると分かりやすい。

注意点

  • 学習データと損失関数に強く依存する
  • 推論コストが高いと探索ノード数が大きく落ちる
  • alpha-beta 系探索と組み合わせるなら、推論の軽さが特に重要になる

関連項目

参考にしたホームページ