# nnue-pytorch

`nnue-pytorch` は、Stockfish 系で使われている NNUE 評価関数の学習用リポジトリとしてよく知られる実装である。
PyTorch を用いて NNUE の学習、検証、変換を行うための基盤として広く参照される。

## 概要

`official-stockfish/nnue-pytorch` は、

- PyTorch ベースの学習器
- データローダ
- モデル定義
- 学習済み重みの取り扱い

を含む公開リポジトリである。

将棋向けにそのまま使うわけではないが、
[NNUE](/shogi/shogiwiki/search/nnue/)学習器の構成や運用を理解するうえで非常に参考になる。

## 何が学べるか

- バッチ学習の組み方
- データセットの前処理
- 量子化前提の学習
- 学習済みモデルをエンジンへ渡す流れ

これらは将棋向け NNUE 学習器を作るときにも共通する。

## 実装例

概念的な学習ループは次のようになる。

```python
for batch in loader:
    features, target = batch
    output = model(features)
    loss = criterion(output, target)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
```

リポジトリ本体では、これに加えて

- 分散学習
- mixed precision
- 検証
- 変換スクリプト

などが整備されている。

## 将棋AIとの関係

将棋の NNUE 学習も、

- 教師局面の設計
- ネットワーク形状
- 推論時の差分更新

といった点では共通の発想を持つ。

そのため、`nnue-pytorch` は
`将棋向け実装の直接の答え` というより、
`NNUE 学習器をどう構成するかの参照実装`
として読む価値が高い。

## 関連項目

- [NNUE](/shogi/shogiwiki/search/nnue/)
- [Training an nnue](/shogi/shogiwiki/search/training-an-nnue/)
- [知識蒸留](/shogi/shogiwiki/search/knowledge-distillation/)
- [elmo式学習](/shogi/shogiwiki/search/elmo-style-learning/)

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

- [GitHub: official-stockfish/nnue-pytorch](https://github.com/official-stockfish/nnue-pytorch)
- [やねうら王公式サイト: NNUE EVAL Function THE DAWN OF A NEW ERA](https://yaneuraou.yaneu.com/2022/06/09/nnue-eval-function-the-dawn-of-a-new-era/)
- [Chessprogramming Wiki: NNUE](https://www.chessprogramming.org/NNUE)