将棋ソフト開発作業メモ2

122)

121)どこまで強く出来るかわからないけど、しばらく振り飛車評価関数を作ってみる

120)任意の戦法を学習することに成功

119)振り飛車の学習は難しい
やったことは学習部の改変で
・定跡手を学習するようにした
・評価値がすでに居飛車有利なのでシグモイド関数を変更
・シグモイド関数の補正項の書き換え(elmo絞りのとこ)
・同一局面チェックの回避
これで1000万局面1回学習で振り飛車を指すようになった(とりあえず後手番)

118)学習済は振り飛車の評価値がすでに悪いからシグモイド関数いじったり、振り飛車定跡使って負け手を大きく減算したりしないと無理っぽい。

117)一旦居飛車で学習してしまった評価関数を振り飛車評価関数にするの不可能に近い。
△1四歩、△1三角、△2二飛
違う、そうじゃない

116)とりあえず学習部の改変効果を調べるのに「振り飛車評価関数」を作成してみる。

115)学習部も改変してみた。openmp有効clang版で作成したけどバイナリサイズが16MB。同じclang版の「dolphin」はたしか25MBだったはず。なんでこんなにバイナリサイズに違いが?OSで違うみたいなことは聞いたことがあるけどそんな違うのかな?

114)かなり強くなってるので教師局面生成専用探索部も作ってみた。

113)探索部のソースコードまとめ終了。

112)探索部はGPL-3.0ライセンスなので、ソースコードもまとめないとダメなのか。ぼちぼちやっていこう。

111)とりあえず探索部の改変は終了。
ロタさんとかに協力してもらって「orqha」で800局程度計測。
オリジナルの「やねうら王v4.82」から見てR66程度の改善が出来た。

110)将棋指しの視点から見ると、オーダリング部分でものすごい気持ちの悪い実装部分が複数ある。
これ単体で修正しても勝率は変わらないから雑に実装してるんだろうか?
一応全部直すと読み筋が改善された。
読み筋の改善なので同じ評価関数同士だとレートは上がったけど、別ソフト相手だと意味があるか不明。

109)特定の駒関係を集中的に読ませるコードを追加すると、NPSが3%遅くなったがR20程度上がった。
しかし、1500万ノード→3000万ノードといった、まだまだレートが上がっている(読みが不足している)場合に効率分散している結果なので、ある程度読むと意味無い。むしろNPSが下がっている分デメリット?家庭用PCで使う分にはあったほうが良いか。

108)PROBCUT
だいたいコイツのせい。このコードを全部削除した。
私が見た限りだと、同じような静止局面での計算を他のコードでもやっていて意味があるように思えない。
統計的に?確率的に?みたいな感じで浅い探索で枝を刈ってしまうコードだと思うけど、
序盤の評価値が大きく動く所(横歩取り青野流とか)でこれをやられると中途半端に探索を切られると思う。
いまの探索部はこのコードありきで学習してるから少し違和感出るけど、他のパラメータで調整可能範囲。
2回くらい学習すればパラメータで調整しなくても問題ないかも。

107)特定の駒に対するオーダリング効果調べ

飛・・・相掛かり、横歩取りなどの浮き飛車時に勝率アップ効果
角・・・角換わりのときに特定の局面でハマり回避で勝率アップ効果
金・・・NNUEは玉周りが薄いので金を狙われる読み筋強化で勝率アップ効果
銀・・・先手で勝率アップだが後手で勝率ダウン。手番と密接に関係があるようだ
桂・・・先手で勝率アップだが後手で勝率ダウン。手番と密接に関係があるようだ
香・・・後手で勝率アップだが先手で勝率ダウン。端攻めに関係があるようだ
歩・・・勝率が落ちるようだ(価値が低く枚数が多いので探索負担がペイ出来ないみたい)

106)6コア8秒で見ていたら、角換わりで妙にハマることを確認。特定の駒のオーダリングを調整してみた結果このハマりを回避出来た。勝率は上がったが指し手が斬新すぎる。

105)コード修正と一部「Stockfish」コードに変更して完成。評価関数の学習結果を素直に反映する仕様で気に入っている。しばらくは探索部の検証作業。

104)短時間で弱いって報告有ったのでいろいろ調べてみると、結局NPSが爆速だったのは改変したコードに巻き込まれて間違ったコメントアウトが主な原因だった。

103)探索部をいじったらNPSがバグった。
「dolphin」よりNPSが20%くらい上がった。勝ってるから指し手が異常では無さそうだけど。
NPS比較.png

102)「やねうら王v4.83」が出たので「やねうら王v4.82」をベースに最新をキャッチアップ。2日程度対局させて挙動の確認予定。

101)調子に乗っていじっているとビルドが通らなくなった。初心者あるあるを地で行くスタイル。原因コードの追求に半日かかった。

100)「やねうら王v4.82」のソースコードをいじってみた。コメントが分かりやすく、プログラムとか知らなくても何となくいじれてしまうのが凄かった。

99)Dittoを専用ビルドでNPSは2%~3%程度上がる模様。

98)tournament版はビルド出来るけど挙動が変。試しに「dolphin1」をビルドしたけど、同じソースでバイナリの容量も違うしよく分からない。MSYS2のバージョンとかで変わるのか不明。avx2版は普通にビルド出来たみたいなので1日連続対局で確認。

97)clang版でビルド(実行バイナリの実装)成功

96)特に問題なく「やねうら王v4.82」をコンパイル出来た

95)MSYS2を導入(Windowsでコンパイル環境の構築)

94)週末は探索部を専用ビルドに挑戦。NPSが上がった探索部と対局させてみる。

93)こちらも探索部の変更で有意差が出ました。あと予想通り「orqha」の指し手は手待ちが多い+平均して9%程度指し手が伸びていて、結果引き分けが多くなる。いままで見たこともない局面で先後対象になることがあったので、学習時のミラーパーセンテージの影響でしょうか。ミラー学習の有り無しについては今後の課題になりそう。とりあえず今のまま行くとWCSC29が256手で終わらない対局が続出すると思われる。

92)「orqha+探索部独自Ditto」対「orqha」6コア8秒
有効試合数: 169, 有効勝率: 56.80%, 有効ΔR: +47.58(有意差水準=0.05として有意差あり)
orqha 6c8s.png

91)次は「orqha+探索部独自Ditto」でやってみます。

90)気になったことは6コア8秒の1手3000万~4000万で「orqha」の指し手を見ると、特定の局面評価値が大きく、あきらかに他の評価関数より「三角法」や「ツークツワンク」を狙ってきます。下位のソフトに負けにくい感じでしょうか。

89)前回の「NNUEkai6」の結果も合わせると、「NNUEkai6」「orqha」「illqha1.1」の3者は評価関数自体は誤差の範囲内で同じ強さに見えます。探索部の適合率で指し手に相性が出ている感じでしょうか。

88)「illqha1.1+dolphin1」と「orqha」のレート差がR-27程度のようなので、探索部の変更でR+52となり「orqha」に勝ち越す結果になりました。

87)「illqha1.1+探索部独自Ditto」対「orqha」6コア8秒
有効試合数: 181, 有効勝率: 53.59%, 有効ΔR: +25.00
illqha1.1 6c8s.png

86)「illqha1.1」は「orqha」に対して相性悪いらしいので、探索部変更した場合の相性も見ることで、探索部の相性も分かるかもしれない。こっちの対局もやってみる。

85)6コア8秒、探索部独自Dittoで有意差出るくらい勝てたのはかなり驚いた。
Dittoは専用でclang版ビルドすればNPSは+5%程度らしいから、もう少しレートは出るかも。挑戦してみるけど誰かclang版の上手いビルド方法教えてほしい。

84)「NNUEkai6」の計測7日目+8日目を「orqha」にまわしてみた。
有効試合数: 173, 有効勝率: 56.65%, 有効ΔR: +46.47(有意差水準=0.05として有意差あり)
NNUEkai6 6c8s.png

83)とりあえず「orqha」を軽く見たけどクソつえー。dolphin1との適合率がすさまじい。評価関数のほうを探索部に合わせる学習とか出来たのか。私は無理だった。

82)さらに「illqha2.1」も出てきて更新ラッシュやな。

81)Qhapaqさんから「orqha」という「illqha1.1」を追加学習したらしい評価関数が出てきた。ロタ氏によってすさまじい対局数の計測済で強いらしい。

80)「NNUEkai6」が出たので、独自探索パラメータで計測開始。(8日予定)

79)「電王トーナメント」終了のお知らせ。まあライブラリやアピール文書に関しての動きが無かったので予想通りと言えばそうだけど。いまやってる探索部最適化の6コア8秒は「電王トーナメント予選」の想定ノード数なのに、大会無くなって微妙なネタに。

78)ここまでの成果は添付画像
有効試合数: 91, 有効勝率: 62.64%, 有効ΔR: +89.76(有意差水準=0.05として有意差あり)
NNUE探索部最適化.png

77)どうもピッタリ合わせすぎると指し手が極端になって読み抜けが多くなる。歯車数をピッタリ合わせると一部に負荷がかかる現象に似ていたので、互いに素になるようなイメージで少しずらすと安定した指し手になり、レートが大きく上昇した。

76)特に強く連動するパラメータは公約数に合わせると計算ロスが減るのかNPSが上がったが、レートは下がった。

75)次は連動する探索パラメータを調べてグループ分けした。それらグループ中に最も勝率に影響するパラメータを固定し、そのパラメータに他のパラメータを合わせた。※ひとつずつ勝率を見ていく作業ではなく、グループ分けすることがポイント。

74)次は探索パラメータをいじると指し手がどう変わるのか調べた。例えば「やねうら王」はPARAM_REDUCTION_BY_HISTORY type spin default 4000であるが、これだと飛車を低い位置で受け将棋を好む。2000にすると浮き飛車を好むとか。これは定跡を作成したノウハウがとても活きてレートが大きく上昇した。

73)次はStockfishの最新の更新について調べた。WCSC28前の更新分だけあって既存の探索部ではまだ手を入れる余地を大きく感じた。

72)最初はひとつずつ勝率を見ていく作業をやった。(意味なかった=やねうら王+Godwhale5.0.5と同じことをやっても一周して戻るだけ)

71)6コア8秒で2ヶ月、探索パラメータ調整をやった。

70)Dittoを使って探索パラメータをいじるとあきらかに強くなったっぽいので、本格的に探索部をいじってみることに。

69)学習は手持ち教師を使って「illqha1.1」を追加学習してみた。横歩取りを拒否して相掛かり+角換わりを好む気持ち強いのが出来た。

68)6コア8秒の1手3000万~4000万だと「dolphin illqha1.1」が強く、勝ち越せる評価関数は1個となった。計測誤差も200局だとR20程度と計測がやりやすくなった。

67)下記問題より6コア8秒の1手3000万~4000万とした。6コア8秒は「電王トーナメント予選」の想定ノード数。

66)自作評価関数4個、NNUEkaiシリーズ、illqhaシリーズを計測していたが、6コア4秒の1手1500万~2000万だと計測誤差が大きく上手く測定出来なかった。
上手く出来ない=NNUE評価関数はレートが大きく上昇している途中のノード数では探索パラメータが大きく異なるようだ。

65)sse4.2のほうは「将棋神やねうら王」のβテスター用として使用。ノートPCは仕事用にチューニング。開発用PCはひたすらにNNUEの計測にまわしました。

64)「将棋神やねうら王」のβテスターとして参加しました。すさまじい豪華メンバーで最初はなんでも出来る気がしてましたが、バグのラッシュでソフトがまともに動くことがいかに大変か痛感しました。とりあえずプログラムのことなんて分からないので、一般ユーザーがやりそうな視点から指摘。

長くなったので分割しました。
1)~63)についてはコチラ。

この記事へのコメント

スポンサーリンク