# パターン認識
パターン認識は、局面中の駒の配置や関係から意味のある形を捉え、評価や判断に使う考え方である。
将棋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/)