Skip to content

Releases: tttak/YaneuraOu

NNUE-HalfKPE9評価関数_20240313

13 Mar 11:59
Compare
Choose a tag to compare

NNUEのHalfKPE9型の評価関数ファイルです。(HalfKPE9_20240313.zip内のnn.bin)
やねうら王のgithubmizarさんのgithub等のHalfKPE9型の思考エンジンと組み合わせてご使用ください。

NNUE-HalfKPE9評価関数_20210124

29 Jan 11:08
Compare
Choose a tag to compare

NNUEのHalfKPE9型の評価関数ファイルです。(HalfKPE9_20210124.zip内のnn.bin)
やねうら王のgithubまたはmizarさんのgithubのHalfKPE9型の思考エンジンと組み合わせてご使用ください。

この評価関数ファイルは以下の手順で作成しました。

  1. Qhapaq from NeoSaitamaの評価関数にたややんさんの水匠2のDepth18の教師局面(Sui2-D18.rar)で追加学習
  2. 上記1と水匠3改を6:4でブレンド
  3. 上記2にfloodgateのR3500以上の棋譜の評価値と勝敗で追加学習(floodgateの棋譜からやねうら王教師局面形式への変換には、たややんさんのToSfenpackを使用させて頂きました)

追加学習の際に、AffineTransform/FeatureTransformerのbias/weightで学習率を変えてみたり、FeatureTransformerで出現率の低いfeatureの学習率を上げてみたりしてみましたが、効果は不明です。

NNUE-HalfKPE4

07 May 13:01
Compare
Choose a tag to compare

自玉または敵玉の位置、玉以外の駒の位置、利き数の組み合わせを特徴量とした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

06 Apr 14:18
Compare
Choose a tag to compare

「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
  • ネットワーク構造:190548->256x2-32-32

色々な特徴量を使用したNNUE評価関数

01 Apr 11:28
Compare
Choose a tag to compare

色々な特徴量を使用した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を追加リリースしました。
  • 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等の部分になかなか値が付かないかもしれません。
  • ソースコードからビルドされる際は、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

25 Mar 16:45
Compare
Choose a tag to compare

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評価関数

20 Mar 15:58
Compare
Choose a tag to compare

駒割りと初期局面からの手数を特徴量としたNNUE評価関数と実行ファイルです。

NNUE-Material2-GamePly

  • 特徴量:NNUE-Material2の特徴量(駒の種類と枚数。ただし、盤上の駒と持ち駒を区別)と初期局面からの手数(最大255手)
  • 特徴量のうち、同時に値が1となるインデックスの数の最大値:21(=20+1)
  • 特徴量の次元数:386(=130+256)
  • ネットワーク構造:386->256x2-32-32

駒得のみのNNUE評価関数

22 Feb 17:54
Compare
Choose a tag to compare

駒得のみの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枚)
  • ネットワーク構造:130->256x2-32-32

YaneuraOu-NNUE-KPPT-Mix

24 Jan 09:42
Compare
Choose a tag to compare

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%)
    

mateinfoコマンド対応(やねうら王Ver4.83)

04 Nov 15:20
Compare
Choose a tag to compare

合議将棋の「詰探索エンジンとの合議(読み筋の局面も詰探索)」で使用

  • YaneuraOu_V4.83_KPPT_MateInfo.exe
  • YaneuraOu_V4.83_NNUE_MateInfo.exe