# SFNNwoP
SFNNwoP は、近年のコンピュータ将棋で使われている [NNUE](/shogi/shogiwiki/evaluation-function/nnue/) 系の評価アーキテクチャの一種である。
公開情報では `SFNNwoP1536` や `NNUE_SFNNwoP1536` のような形で言及されることが多い。
少なくとも公開されている実験記事や配布案内では、[水匠](wiki:/softs/suisho) や `tanuki-` 系の評価関数として使われていることが確認できる。
一方で、`SFNNwoP` という略称の正式な展開は、公開資料からは確認できていない。そのため本ページでは、略称の意味を断定せず、公開されている実装・運用上の情報を中心に整理する。
## 概要
SFNNwoP は、[評価関数](/shogi/shogiwiki/evaluation-function/) の実装方式として使われるニューラルネットワーク系アーキテクチャである。
探索アルゴリズムではなく、局面を数値化する評価器の側に属する。
公開されている記述では、単に `SFNNwoP` と書かれる場合よりも、`SFNNwoP1536` と書かれる場合が多い。
`1536` はネットワーク内部の幅や次元数に関係する命名である可能性が高いが、公開資料だけでは正確な定義までは確認できない。
## 将棋AIにおける位置づけ
将棋 AI の文脈では、SFNNwoP は [NNUE](/shogi/shogiwiki/evaluation-function/nnue/) の流れに属する評価アーキテクチャとして見るのが自然である。
実際に、`水匠11β` では評価関数タイプが `NNUE_SFNNwoP1536` に変更されており、対応した実行ファイルを選ぶ必要があると案内されている。
このことから、少なくとも実験段階の名称にとどまらず、実用配布物のレベルでも採用されているアーキテクチャであることが分かる。
## SFNNwoP1536
公開資料では、SFNNwoP に関する議論の多くが `SFNNwoP1536` を中心に行われている。
`tanuki-` の 2025 年末から 2026 年にかけての実験記録では、ネットワークアーキテクチャとして SFNNwoP1536 を採用し、さまざまな条件で比較が行われている。
比較対象になっている主な項目は次のとおりである。
- 入力特徴量
- [進行度](/shogi/shogiwiki/evaluation-function/game-phase/) によるバケット選択
- 勝率モデル
- 最適化手法
- 学習局面数
- 推論コードの最適化
このため、SFNNwoP1536 は単なる名前だけでなく、学習・推論の両面で継続的に調整されている実験系列として理解すると分かりやすい。
## 進行度によるバケット選択との関係
公開された実験では、SFNNwoP1536 に対して [進行度](/shogi/shogiwiki/evaluation-function/game-phase/) を使ったバケット選択が試されている。
この方式では、進行度 `0.0` から `1.0` を複数のバケットに割り当て、局面の段階に応じて異なる重みを使い分ける。
公開記事では、玉の位置を直接使ってバケットを選ぶ方式よりも、進行度によるバケット選択の方が自己対局レーティングで有利だったと報告されている。
また、進行度の推定には、激指・技巧などでも使われたロジスティック回帰を用いると説明されている。
## 学習と最適化
`tanuki-` の実験記事からは、SFNNwoP1536 を用いた学習・最適化について次の話題が確認できる。
- `HalfKA_hm` 特徴量の利用
- [nnue-pytorch](/shogi/shogiwiki/evaluation-function/nnue-pytorch/) を用いた学習
- [知識蒸留](/shogi/shogiwiki/evaluation-function/knowledge-distillation/) の有無による比較
- SGD + Momentum や Ranger21 など最適化手法の比較
- 960 億局面規模の学習
- バケット選択コードの最適化
このため、SFNNwoP は単独のアーキテクチャ名としてだけでなく、学習データ生成や最適化、推論高速化とセットで語られることが多い。
## 実装例
評価関数側で進行度バケットを選ぶ処理の概念的な例は、たとえば次のように書ける。
```cpp
int SelectBucket(float progress) {
progress = std::max(0.0f, std::min(1.0f, progress));
return std::min(7, static_cast<int>(progress * 8.0f));
}
```
実際の実装はこれより複雑だが、局面の進み具合に応じて使用する重み集合を切り替える、という考え方の雰囲気はこのようなものである。
## 注意点
- `SFNNwoP` の略称の正式な展開は、公開資料から確認できていない
- `SFNNwoP` と `SFNNwoP1536` は区別して書かれていることが多く、同一視しすぎない方がよい
- 現時点で確認できる説明は、主に実験記事や配布案内に基づくものであり、定義を与える学術論文はまだ見つかっていない
## 関連項目
- [評価関数](/shogi/shogiwiki/evaluation-function/)
- [NNUE](/shogi/shogiwiki/evaluation-function/nnue/)
- [nnue-pytorch](/shogi/shogiwiki/evaluation-function/nnue-pytorch/)
- [進行度](/shogi/shogiwiki/evaluation-function/game-phase/)
- [知識蒸留](/shogi/shogiwiki/evaluation-function/knowledge-distillation/)
## 参考にしたホームページ
- [やねうら王公式サイト: やねうら王インストール関連質問箱](https://yaneuraou.yaneu.com/2024/06/10/yaneuraou-install-qa/)
- [松本博文: 水匠11β + やねうら王V9.20開発版インストール](https://note.com/mtmt81/n/n7b7fc1181be1)
- [nodchipのコンピューター将棋ブログ](https://nodchip.hatenablog.com/)