Training an nnue は、NNUE型の評価関数を学習する工程である。 ネットワーク構造だけでなく、教師データ、出力スケール、量子化、探索器との整合が強さに大きく影響する。
NNUE の学習では、典型的に
という流れを取る。
教師値としては、
などが使われる。
将棋AIでは、教師データをどの探索器から作るかで学習結果の性質がかなり変わる。 やねうら王公式サイトでも、NNUE 系教師データの性質やノイズについて議論されている。
概念的には次のようになる。
for batch in loader:
inputs, targets = batch
preds = model(inputs)
loss = criterion(preds, targets)
optimizer.zero_grad()
loss.backward()
optimizer.step()
実際には、
などが加わる。
NNUE は最終的にエンジン内で高速に使える形へ変換される必要がある。 そのため、
の橋渡しとして量子化が重要になる。
この部分が崩れると、 学習時には良いのに実機で弱い、ということが起こりうる。
将棋AIでは NNUE が強力だが、 強い学習済みネットワークを作るには
が必要である。
つまり、NNUE 記事が「何か」を説明するのに対し、
Training an nnue は「どう作るか」を説明する記事になる。