-
Training an nnue training-an-nnue
training-an-nnue
-
-
添付ファイル
-
変更点
-
ソースを表示
-
表示
# Training an nnue
Training an nnue は、[NNUE](/shogi/shogiwiki/search/nnue/)型の評価関数を学習する工程である。
ネットワーク構造だけでなく、教師データ、出力スケール、量子化、探索器との整合が強さに大きく影響する。
## 概要
NNUE の学習では、典型的に
1. 大量の局面データを集める
2. 各局面に教師値を付ける
3. ネットワークを最適化する
4. 学習済み重みを評価器形式へ変換する
5. 実戦対局で検証する
という流れを取る。
## 教師データ
教師値としては、
- 強い探索器の評価値
- 実際の対局結果
- その混合
などが使われる。
将棋AIでは、教師データをどの探索器から作るかで学習結果の性質がかなり変わる。
やねうら王公式サイトでも、NNUE 系教師データの性質やノイズについて議論されている。
## 学習パイプライン
概念的には次のようになる。
```python
for batch in loader:
inputs, targets = batch
preds = model(inputs)
loss = criterion(preds, targets)
optimizer.zero_grad()
loss.backward()
optimizer.step()
```
実際には、
- halfkp などの入力形式
- 量子化前提の出力スケール
- checkpoint 管理
- 学習途中の self-play / match 検証
などが加わる。
## 変換と量子化
NNUE は最終的にエンジン内で高速に使える形へ変換される必要がある。
そのため、
- 学習時の浮動小数
- 実行時の整数演算
の橋渡しとして量子化が重要になる。
この部分が崩れると、
学習時には良いのに実機で弱い、ということが起こりうる。
## 将棋AIでの位置づけ
将棋AIでは NNUE が強力だが、
強い学習済みネットワークを作るには
- 良い局面データ
- 良い教師値
- 実行エンジンとの整合
が必要である。
つまり、`NNUE` 記事が「何か」を説明するのに対し、
`Training an nnue` は「どう作るか」を説明する記事になる。
## 注意点
- 教師データの偏りがそのままネットに出やすい
- 評価値のスケール設計を誤ると探索器と噛み合わない
- 学習損失が改善しても、実戦強度が上がるとは限らない
## 関連項目
- [NNUE](/shogi/shogiwiki/search/nnue/)
- [ニューラルネットワーク](/shogi/shogiwiki/search/neural-networks/)
- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
## 参考にしたホームページ
- [Chessprogramming Wiki: Training AN NNUE](https://www.chessprogramming.org/Training_an_nnue)
- [GitHub: official-stockfish/nnue-pytorch](https://github.com/official-stockfish/nnue-pytorch)
- [やねうら王公式サイト: NNUE Based Training DATA Generation](https://yaneuraou.yaneu.com/2025/12/01/nnue-based-training-data-generation/)