Releases: tttak/YaneuraOu
HalfKP-KSDG_512x2-8-96型の評価関数と実行ファイル_20240707
NNUEのHalfKP-KSDG_512x2-8-96型の評価関数ファイルと実行ファイルです。
- HalfKP-KSDG型(HalfKP-KingSafety Distinguish Golds型)については↓をご参照ください。
https://github.com/tttak/YaneuraOu/releases/tag/V4.89_NNUE-features_20200406 - 評価関数はnnue-pytorch(Stockfishのnnue-pytorchを元にnodchipさんが将棋用に改良され、それを元にHalfKP-KSDG型に対応させたもの)でゼロから学習しました。
https://github.com/official-stockfish/nnue-pytorch
https://github.com/nodchip/nnue-pytorch
https://github.com/tttak/nnue-pytorch/tree/shogi.halfkp_ksdg_512x2-8-96 - 学習にはnodchipさんが公開された学習データを使用させて頂きました。
- FV_SCALEの最適値については計測していませんが、おそらく16付近かと思われます。
なお、やねうら王のインストール手順、思考エンジンオプション、探索部の最新版等については
以下の「やねうら王 GitHub」「やねうら王 Wiki」をご参照ください。
- やねうら王 GitHub
https://github.com/yaneurao/YaneuraOu - やねうら王 GitHub Releases
https://github.com/yaneurao/YaneuraOu/releases - やねうら王 Wiki
https://github.com/yaneurao/YaneuraOu/wiki - やねうら王 Wiki やねうら王のインストール手順
https://github.com/yaneurao/YaneuraOu/wiki/%E3%82%84%E3%81%AD%E3%81%86%E3%82%89%E7%8E%8B%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86
NNUE-HalfKPE9評価関数_20240313
NNUEのHalfKPE9型の評価関数ファイルです。(HalfKPE9_20240313.zip内のnn.bin)
やねうら王のgithub、mizarさんのgithub等のHalfKPE9型の思考エンジンと組み合わせてご使用ください。
- 「NNUE-HalfKPE9評価関数_20210124」にnodchipさんが公開された学習データを追加学習して作成しました。
- HalfKPE9用の実行ファイル(現時点のやねうら王githubのソースコードを元に作成したもの)も同梱しました。(HalfKPE9_20240313.zip内のYaneuraOu-HalfKPE9-tournament-avx2_20240313.exe)
- FV_SCALEの最適値については計測していませんが、おそらく16付近かと思われます。
なお、やねうら王のインストール手順、思考エンジンオプション、探索部の最新版等については
以下の「やねうら王 GitHub」「やねうら王 Wiki」をご参照ください。
- やねうら王 GitHub
https://github.com/yaneurao/YaneuraOu - やねうら王 GitHub Releases
https://github.com/yaneurao/YaneuraOu/releases - やねうら王 Wiki
https://github.com/yaneurao/YaneuraOu/wiki - やねうら王 Wiki やねうら王のインストール手順
https://github.com/yaneurao/YaneuraOu/wiki/%E3%82%84%E3%81%AD%E3%81%86%E3%82%89%E7%8E%8B%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86
NNUE-HalfKPE9評価関数_20210124
NNUEのHalfKPE9型の評価関数ファイルです。(HalfKPE9_20210124.zip内のnn.bin)
やねうら王のgithubまたはmizarさんのgithubのHalfKPE9型の思考エンジンと組み合わせてご使用ください。
この評価関数ファイルは以下の手順で作成しました。
- Qhapaq from NeoSaitamaの評価関数にたややんさんの水匠2のDepth18の教師局面(Sui2-D18.rar)で追加学習
- 上記1と水匠3改を6:4でブレンド
- 上記2にfloodgateのR3500以上の棋譜の評価値と勝敗で追加学習(floodgateの棋譜からやねうら王教師局面形式への変換には、たややんさんのToSfenpackを使用させて頂きました)
追加学習の際に、AffineTransform/FeatureTransformerのbias/weightで学習率を変えてみたり、FeatureTransformerで出現率の低いfeatureの学習率を上げてみたりしてみましたが、効果は不明です。
NNUE-HalfKPE4
自玉または敵玉の位置、玉以外の駒の位置、利き数の組み合わせを特徴量としたNNUE評価関数と実行ファイルです。
- HalfKPE9では利き数を先後各々最大2までに制限していましたが、HalfKPE4は利き数を最大1まで(利きの有無のみ)に制限したものです。
- HalfKPE9と比べると、評価関数の表現力は小さくなりますが、NPSは大きくなると思います。
- 添付の評価関数ファイル(nn.bin)は、Qhapaq from NeoSaitamaのHalfKPE9型の評価関数ファイルをHalfKPE4型へ変換したものです。
NNUE-HalfKPE4
- 特徴量:自玉または敵玉の位置、玉以外の駒の位置、利き数
- HalfKP(自玉または敵玉の位置、玉以外の駒の位置)の特徴量に、P(玉以外の駒)のマスへの利き数を追加したものです。
- 利き数は先後各々最大1までに制限。0~1で2通り。先後で2*2=4通り。なお、持ち駒の場合は利き数0としています。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:38
- 特徴量の次元数:501552 = 81 * 1548 * 2 * 2 = 125388 * 4
- HalfKPの次元数の4倍です。
- 評価関数ファイル(nn.bin)のサイズもHalfKPの約4倍になります。
- ネットワーク構造:501552->256x2-32-32
HalfKP-KingSafety Distinguish Golds
「HalfKP Distinguish Golds」と「HalfKP-KingSafety」を合わせたようなNNUE評価関数と実行ファイルです。
HalfKP部分でも金と小駒の成り駒(と金、成香、成桂、成銀)を区別することにより、KingSafety部分を差分計算できるようにしたものです。
- KingSafety部分が差分計算できるようになったため、「HalfKP-KingSafety」よりは多少高速化されたと思います。(通常のHalfKPと比べるとかなり遅いことに変わりはありませんが)
- 「HalfKP-KingSafety」のKingSafety部分は通常の方法では差分計算できないため、常に全計算していました。
- 金と小駒の成り駒を区別することでBonaPieceからPieceを導出できるようになったので、差分計算可能になりました。
- 評価関数ファイル(nn.bin)はorqha1018を元に作成しました。orqha1018と全く同じ評価値を返します。
- HalfKP部分と256x2-32-32部分はorqha1018からコピーし、KingSafety部分は0埋めしてあります。
- HalfKP部分の小駒の成り駒(と金、成香、成桂、成銀)部分には金と同じ値を入れてあります。
- 通常のHalfKPよりNPSが低いはずですので、このままの評価関数を使用すると、通常のHalfKPに比べて棋力は下がるはずです。
- 評価関数に追加学習して頂くと評価の精度が上がり、棋力が向上するかもしれません。
- 「HalfKP-KingSafety Distinguish Golds」の追加学習では、すでにorqha1018のHalfKP部分の評価の精度が高いため、KingSafetyの部分になかなか値が付かないかもしれません。
HalfKP-KingSafety Distinguish Golds
- 特徴量:HalfKPの特徴量と、玉の安全度(玉の24近傍の駒と利き数)。ただし、HalfKPで金と小駒の成り駒(と金、成香、成桂、成銀)を区別する。
- KingSafety部分の「駒」は、通常の駒だけではなく、空きマスと盤外を含む。
- 利き数は先後各々最大3までに制限。0~3で4通り。先後で4*4=16通り。なお、盤外は利き数0として扱う。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:62 = 38(HalfKP)+ 24(KingSafety)
- 特徴量の次元数:190548 = 177876(HalfKP) + 12672(KingSafety)
- HalfKP:177876 = 81 * 2196
- 2196 = 1548 + 81 * 8
- KingSafety:12672 = 24 * 33 * 4 * 4
- HalfKP:177876 = 81 * 2196
- ネットワーク構造:190548->256x2-32-32
色々な特徴量を使用したNNUE評価関数
色々な特徴量を使用したNNUE評価関数
色々な特徴量を使用したNNUE評価関数と実行ファイルです。
- 「HalfKP-KK」、「HalfKP-PP」、「HalfKP-GSGS」、「HalfKP Distinguish Golds」、「HalfKP GamePly40x4」、「HalfKP-KingSafety」、「HalfKPKfile」の7種類
- 下記NNUE-features.zipには、上記「HalfKP-KingSafety」以外の6種類の評価関数ファイル(nn.bin)と実行ファイルが含まれています。
- 現時点(2020/4/1時点)では「HalfKP-KingSafety」にはバグがあるため除外しました。
→【2020/4/4追記】「HalfKP-KingSafety」のバグを修正し、下記HalfKP-KingSafety.zipを追加リリースしました。
- 現時点(2020/4/1時点)では「HalfKP-KingSafety」にはバグがあるため除外しました。
- 6種類の評価関数ファイル(nn.bin)はいずれもorqha1018を元に作成しました。orqha1018と全く同じ評価値を返します。
- 「HalfKP-KK」、「HalfKP-PP」、「HalfKP-GSGS」については、HalfKP部分と256x2-32-32部分はorqha1018からコピーし、KK等の部分は0埋めしてあります。
- 「HalfKP Distinguish Golds」については、基本的にはすべてorqha1018からコピーし、小駒の成り駒(と金、成香、成桂、成銀)部分には金と同じ値を入れてあります。
- 「HalfKP GamePly40x4」、「HalfKPKfile」については、orqha1018のHalfKP部分を4回または9回繰り返してコピーしてあります。
- 通常のHalfKPよりNPSが低いはずですので、このままの評価関数を使用すると、通常のHalfKPに比べて棋力は下がるはずです。
- 評価関数に追加学習して頂くと評価の精度が上がり、棋力が向上するかもしれません。
- 現時点では学習時の次元下げ用のFactorizerはPP用(とHalfKPE9用)しか作成していませんのでご注意ください。
→【2020/4/13追記】次元下げ用のFactorizerが無くても学習自体は可能です。 - 「HalfKP-KK」、「HalfKP-PP」、「HalfKP-GSGS」、「HalfKP-KingSafety」の追加学習では、すでにorqha1018のHalfKP部分の評価の精度が高いため、KK等の部分になかなか値が付かないかもしれません。
- 現時点では学習時の次元下げ用のFactorizerはPP用(とHalfKPE9用)しか作成していませんのでご注意ください。
- ソースコードからビルドされる際は、config.hの330行目付近の「// どれか一つをdefineする。」のところで特徴量を選択してください。
HalfKP-KK
- 特徴量:HalfKPの特徴量と、KKの2駒関係(自玉の位置と敵玉の位置)
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:39 = 38(HalfKP)+ 1(KK)
- 特徴量の次元数:131949 = 125388(HalfKP) + 6561(KK)
- HalfKP:125388 = 81 * 1548
- KK:6561 = 81 * 81
- ネットワーク構造:131949->256x2-32-32
HalfKP-PP
- 特徴量:HalfKPの特徴量と、PP(玉以外の駒)の2駒関係
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:741 = 38(HalfKP)+ 703(PP)
- PP:703 = 38 * (38 - 1) / 2
- 特徴量の次元数:1322766 = 125388(HalfKP) + 1197378(PP)
- HalfKP:125388 = 81 * 1548
- PP:1197378 = 1548 * (1548 - 1) / 2
- ネットワーク構造:1322766->256x2-32-32
- NPSが非常に低い(遅い)。おそらく「特徴量のうち、同時に値が1となるインデックスの数」が多いことが影響。
HalfKP-GSGS
- 特徴量:HalfKPの特徴量と、金と銀のみの2駒関係
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:66 = 38(HalfKP)+ 28(GSGS)
- GSGS:28 = 8 * (8 - 1) / 2
- 8は金と銀の枚数(8 = 4 + 4)
- 特徴量の次元数:184384 = 125388(HalfKP) + 58996(GSGS)
- HalfKP:125388 = 81 * 1548
- GSGS:58996 = 344 * (344 - 1) / 2
- 344:全BonaPieceの1548個の状態のうち、金と銀の部分。
- 344 = 20(持ち駒) + 81 * 4(盤上の駒)
- ネットワーク構造:184384->256x2-32-32
- 上記HalfKP-PPのNPSが非常に低いので、PPを金と銀のみに絞ってみたものです。
HalfKP Distinguish Golds
- 特徴量:HalfKPで金と小駒の成り駒(と金、成香、成桂、成銀)を区別したもの
- デフォルトのHalfKPでは金と小駒の成り駒は区別されていません。(NNUE以前の3駒関係(KPPT等)と同様)
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:38(HalfKPと同じ)
- 特徴量の次元数:177876 = 81 * 2196
- 2196 = 1548 + 81 * 8
- ネットワーク構造:177876->256x2-32-32
HalfKP GamePly40x4
- 特徴量:HalfKPを40手ごと(1~40手目、41~80手目、81~120手目、121手目以降)に細分化
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:38(HalfKPと同じ)
- 特徴量の次元数:501552 = 81 * 1548 * 4 = 125388 * 4
- HalfKPの次元数の4倍です。
- 評価関数ファイル(nn.bin)のサイズもHalfKPの約4倍になります。
- ネットワーク構造:501552->256x2-32-32
HalfKP-KingSafety
- 特徴量:HalfKPの特徴量と、玉の安全度(玉の24近傍の駒と利き数)
- 駒は通常の駒だけではなく、空きマスと盤外を含む。
- 利き数は先後各々最大3までに制限。0~3で4通り。先後で4*4=16通り。なお、盤外は利き数0として扱う。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:62 = 38(HalfKP)+ 24(KingSafety)
- 特徴量の次元数:138060 = 125388(HalfKP) + 12672(KingSafety)
- HalfKP:125388 = 81 * 1548
- KingSafety:12672 = 24 * 33 * 4 * 4
- ネットワーク構造:138060->256x2-32-32
HalfKPKfile
- 特徴量:HalfKPと他方の玉の位置の筋(File)の組合せ
- 普通にHalfKKPにすると評価関数ファイルのサイズがHalfKPの81倍と巨大になるので、他方の玉の位置を筋のみに絞る(段は使用しない)ことで9倍に抑えたもの。
- 通常、玉は下段にいることが多いと思うので、段ではなく筋で細分化しました。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:38(HalfKPと同じ)
- 特徴量の次元数:1128492 = 81 * 1548 * 3 * 3 = 125388 * 9
- HalfKPの次元数の9倍です。
- 評価関数ファイル(nn.bin)のサイズもHalfKPの約9倍になります。
- ネットワーク構造:1128492->256x2-32-32
【2020/4/4追記】
「HalfKP-KingSafety」のバグを修正し、下記HalfKP-KingSafety.zipを追加リリースしました。
修正後のソース:https://github.com/tttak/YaneuraOu/tree/fb03eab2a5e3a4c6e5f96f22009cadd99cc13610
【2020/4/5追記】
NNUE-features.zipとHalfKP-KingSafety.zipに含まれるexeファイルはclangでビルドしたものです。
【2020/4/19追記】
参考:いくつかの特徴量について、NNUE評価関数用のSILENT_MAJORITY1.25実行ファイルをリリースしました。
https://github.com/tttak/silent_majority/releases
NNUE-HalfKPE9
NNUE-HalfKPE9
自玉または敵玉の位置、玉以外の駒の位置、利き数の組み合わせを特徴量としたNNUE評価関数と実行ファイルです。
- 特徴量:自玉または敵玉の位置、玉以外の駒の位置、利き数
- HalfKP(自玉または敵玉の位置、玉以外の駒の位置)の特徴量に、P(玉以外の駒)のマスへの利き数を追加したものです。
- 利き数は先後各々最大2までに制限。0~2で3通り。先後で3*3=9通り。なお、持ち駒の場合は利き数0としています。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:38
- 特徴量の次元数:1128492 = 81 * 1548 * 3 * 3 = 125388 * 9
- HalfKPの次元数の9倍です。
- 評価関数ファイル(nn.bin)のサイズもHalfKPの約9倍になります。
- ネットワーク構造:1128492->256x2-32-32
【2020/3/27追記】
dolphin1をHalfKPE9化したファイルを追加しました。(dolphin1-HalfKPE9.zip)
【2020/3/29追記】
mizarさんが様々な環境用のやねうら王実行ファイルをビルドされている中にHalfKPE9版も含めて頂いたようです!!
https://github.com/mizar/YaneuraOu/releases/tag/v4.89-test20200328
下記NNUE-HalfKPE9.zipに含まれるYaneuraOuV489_NNUE-HalfKPE9.exeはAVX版です。
SSE版等をご所望の場合は上記mizarさんのgithubの方からダウンロード頂くことも可能かと思います。
なお、下記NNUE-HalfKPE9.zipに含まれるYaneuraOuV489_NNUE-HalfKPE9.exeはVisual Studio 2019でビルドしたものなのですが、
mizarさんがclangやg++でビルドされた実行ファイルの方がNPSが高いかもしれません。
(ちなみに、下記dolphin1-HalfKPE9.zipに含まれるdolphin1-HalfKPE9.exeはg++でビルドしたものです)
【2020/4/1追記】
参考:HalfKPE9以外にも色々な特徴量を使用したNNUE評価関数を追加しました。
https://github.com/tttak/YaneuraOu/releases/tag/V4.89_NNUE-features_20200401
駒割りと初期局面からの手数を特徴量としたNNUE評価関数
駒割りと初期局面からの手数を特徴量としたNNUE評価関数と実行ファイルです。
NNUE-Material2-GamePly
- 特徴量:NNUE-Material2の特徴量(駒の種類と枚数。ただし、盤上の駒と持ち駒を区別)と初期局面からの手数(最大255手)
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:21(=20+1)
- 特徴量の次元数:386(=130+256)
- ネットワーク構造:386->256x2-32-32
駒得のみのNNUE評価関数
駒得のみのNNUE評価関数と実行ファイルです。
NNUE-Material1
- 特徴量:駒の種類と枚数
- 盤上の駒と持ち駒を区別しない。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:13(歩、香、桂、銀、金、角、飛、と、成香、成桂、成銀、馬、龍)
- 特徴量の次元数:85
- 歩、と:19(0枚~18枚)
- 香、桂、銀、金、成香、成桂、成銀:5(0枚~4枚)
- 角、飛、馬、龍:3(0枚~2枚)
- ネットワーク構造:85->256x2-32-32
NNUE-Material2
- 特徴量:駒の種類と枚数
- 盤上の駒と持ち駒を区別する。
- 特徴量のうち、同時に値が1となるインデックスの数の最大値:20
- 盤上の駒:13(歩、香、桂、銀、金、角、飛、と、成香、成桂、成銀、馬、龍)
- 持ち駒:7(歩、香、桂、銀、金、角、飛)
- 特徴量の次元数:130
- 盤上の駒:85
- 歩、と:19(0枚~18枚)
- 香、桂、銀、金、成香、成桂、成銀:5(0枚~4枚)
- 角、飛、馬、龍:3(0枚~2枚)
- 持ち駒:45
- 歩:19(0枚~18枚)
- 香、桂、銀、金:5(0枚~4枚)
- 角、飛:3(0枚~2枚)
- 盤上の駒:85
- ネットワーク構造:130->256x2-32-32
YaneuraOu-NNUE-KPPT-Mix
NNUEとKPPTの評価関数ファイルを読込み、両方の評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラムです。
-
EvalDirには、NNUEの評価関数ファイル(nn.bin)とKPPTの評価関数ファイル(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)の両方を配置してください。
-
オプション「EvalKpptRatio」で、NNUEとKPPTの評価値を混ぜる際のKPPTの割合(0%~100%)を指定することができます。(デフォルト値は50%)
-
npsが大きく低下するため、おそらく棋力はあまり高くないと思います。
-
evalstatコマンドを実行すると、各々の評価値と最終的な評価値を確認することができます。
evalstatコマンドの実行例
evaldir C:\eval\orqha_QQR isready position startpos evalstat
実行結果
eval_NNUE = 40 eval_KPPT = 131 eval_MIX = 85 (NNUE:50%, KPPT:50%)