# パターン認識

パターン認識は、局面中の駒の配置や関係から意味のある形を捉え、評価や判断に使う考え方である。
将棋AIでは、手作り評価の特徴量設計から[NNUE](/shogi/shogiwiki/search/nnue/)の入力表現まで、広い形で関わっている。

## 概要

単純な駒得だけでは局面の良し悪しを十分に表せない。
たとえば、

- 玉頭の薄さ
- 桂馬の拠点
- 飛車先の通り
- 囲いの形

といった「形」は重要である。

こうした形を抽出して評価へ反映するのが、パターン認識的な発想である。

## 手作り評価との関係

古典的な将棋AIでは、

- 囲いパターン
- 玉の安全度パターン
- 駒の利きや連携

などを特徴量として定義し、重み付きで評価することが多かった。

これは広い意味でのパターン認識とみなせる。

## 学習評価との関係

学習評価では、人手で形を直接列挙する代わりに、
ネットワークが中間表現としてパターンを獲得することがある。

その意味で、

- 手作り評価は明示的なパターン認識
- ニューラルネットは暗黙的なパターン認識

と見ることもできる。

## 実装イメージ

単純化した例では、特定の形を検出してボーナスを与える。

```cpp
int patternScore(const Position& pos) {
    int score = 0;
    if (isMinoCastle(pos)) score += 120;
    if (hasOpenRookFile(pos)) score += 80;
    if (isWeakKingZone(pos)) score -= 150;
    return score;
}
```

実際には、個別の `if` よりも大量の特徴量テーブルや学習済み重みを使うことが多い。

## 将棋AIでの位置づけ

将棋は盤面構造が豊かで、

- 囲い
- 玉頭戦
- 持ち駒との連携
- 歩の位や拠点

など、形の認識が非常に重要である。
そのためパターン認識は、古典的手作り評価にも現代的学習評価にも共通するテーマである。

## 注意点

- 人手で作ると設計者の先入観が入りやすい
- 特徴量が増えすぎると管理しにくい
- 学習系では「何のパターンを見ているか」が見えにくい

## 関連項目

- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
- [ニューラルネットワーク](/shogi/shogiwiki/search/neural-networks/)
- [NNUE](/shogi/shogiwiki/search/nnue/)
- [Minimax Tree Optimization](/shogi/shogiwiki/search/minimax-tree-optimization/)

## 参考にしたホームページ

- [Chessprogramming Wiki: Pattern Recognition](https://www.chessprogramming.org/Pattern_Recognition)
- [Chessprogramming Wiki: Evaluation](https://www.chessprogramming.org/Evaluation)
- [やねうら王公式サイト: MAKE Evaluate Function](https://yaneuraou.yaneu.com/2020/11/17/make-evaluate-function/)