将棋ソフト開発作業メモ

64)

63)NNUEkaiの人もツイッターとか連絡先がわかれば、nn20180707(NNUEkai2の追加学習ver)をお渡しするのですが。私が知らないだけ?

62)棋譜と「NNUE-dolphin illqha1.1」が思ったよりレートが出ない原因を開発者「めきっと」さんにツイッターDMで送信。

61)「NNUE-dolphin illqha1.1」の計測、おもいっきりミスってた。新しい探索部(dolphin)の登録で持ち時間設定が多かった。測定やり直したら「NNUE-dolphin nn20180707」が31局時点で勝率70%でストップ。たぶん有意差が出た。有意差水準=0.05として有意差勝率>0.5+1.644*√(0.25/31)≒31局で勝率65%以上。

60)「NNUE-dolphin illqha1.1」で少し気になる点が2つあったので調べてみる。

59)nn20180707(NNUEkai2の追加学習ver)に対して「NNUE-dolphin illqha1.1」の勝率54%と勝ち越した。これから考えるとQQRよりR+100程度になると思う。何にせよNNUE学習を成功させていることは間違いないし、トップレートも更新している。十分すごい。

58)「NNUE-dolphin illqha1.1」の棋譜を少し見たけど、たぶん教師局面数と学習率の合計がちょっと大きすぎる。最序盤付近で評価値100超えがチラホラ。通常の定跡は良く学習出来てると思うけど、この大きな評価値にハマる感じであやしい局面を選択することが多い印象。(特にノード数が不足している場合)

57)NNUEkaiの人、illqha1.1相手に勝率46%だったから公開無し?探索パラメタを専用に合わせて無い状態でそのくらいの差なら同等だと思うけど。

56)引き分け手数を短くしたままやってた。やたら引き分けが多いのでやり直し。ロタ(Rota_JP)さんがすでに計測済みで参考値が分かったから、とりあえず6コア3.5秒のuuunuuunさん基準を先にやるか。

55)「NNUE-dolphin illqha1.1」を6コア、7.5秒でセット完了。相手は同条件でQQRにR+100程度出たnn20180707(NNUEkai2の追加学習ver)

54)『やねうら王』製品版、βテスターに参加した。やねさんが夏バテで24日辺りからのテストになりそう。しばらく「illqha1.1」を見れそうだ。

53)探索部をいじってた人が「illqha1.1」を出してきたので確認。結構ガッツリ探索部パラメタもいじってる。これやった人は分かるだろうけどすごい大変。軽く見たけど評価値もキレイで上手く合ってる。根気も必要だし、この辺は開発者の性格が出る。かなり強そうなので1手3000万~4000万ノードでやってみる。

52)ここ6日は1手3000万~4000万ノードの50局×6日=300局やってた。

51)昨日の結果と合わせると強くなってる?「NNUEkai2」をdepth8の4000万局面eta0.1で追加学習しただけ。教師はGodwhale5.0.5 Qzilla9。

50)20180710/Godwhale5.0.5 QQRと6コア3.5秒のuuunuuunさん基準100局の棋譜。勝率61%でR+82だった。

49)20180709/追加学習元のNNUEkai2と6コア3.5秒のuuunuuunさん基準100局の棋譜。勝率55%でR+37だった。depth8の4000万局面だからこんなもんか。弱くせずに棋風の変更は出来たと思う。NNUE同士だったからResignValue600はちと短かったか。今日はQQRと対局させてみる。

48)NNUEkai2の追加学習完了。2日でNNUEkai2とQQRを検証対局させてみよう。

47)NNUE型の非線形の新しい使い方がわかってきた。KPPT型の線形では出来なかった鞍点の最適化が出来る。R40~R80上がるので結構デカイ。1手6000万ノード程度まではこの傾向が確認出来たが長時間では未検証。レートの上昇よりもこの部分によって出てくる新手のほうが需要があると思う。

46)いまさら「Godwhale5.05」の探索パラメタのソースコードを確認。やべえ「Ditto」で添付してる参考値がデタラメだった。元々付いてた物を追加修正したはずだけど、ちゃんと自分で確認しとけば良かった。とりあえずこのtxtは削除して添付やり直し。

45)NNUEkai2を追加学習してみる。相掛かり+角換わり+雁木を学習させて横歩取りの採用率を下げる実験。

44)NNUEkai2が出てきたので確認。中盤があきらかに強くなっている。投了値600の評価なので終盤は未確認。序盤はあやしく、ノード数100万程度の差で勝率10%程度変わることもある。人によって計測誤差が大きそう。適当に良さそうな所で計測。トータルでR20~R40程度上がっていると思う。

43)学習率を下げて慎重に追加学習をすればR20程度なら簡単にまだ上がる。が、この辺のレート差の評価は難しい。R40程度の差であればわかりやすい。やっぱ学習率は大きいほうにギリギリのラインを攻めるほうが評価がやりやすい。

42)強くなったNNUE型はいままでの指し手と読み筋の違いが多い。この状態で千日手を読ませるのは2%程度勝率を落としているように見える。(余計な読み筋で探索負担増みたいな?)千日手設定の「Contempt」=引き分け時スコア(歩を100とする)・・・2→9999とかで千日手は読ませない。

41)現在3つの評価関数を残していてそれの評価終了。掲載していたKPPT型に対して高い勝率が出ていたものがNNUE型同士の対局で一番勝率が悪かった。逆に3つの中でKPPT型に対して一番低い勝率のものが、NNUE型同士の対局で一番勝率が良かった。KPPT型に対して一番低い勝率が悪いといってもQQRに70%程度。これから先を考えるとNNUE型に強い評価関数を成長させて行く。

40)7月に入ったし昼間にPCをフルで動かすのは厳しい。しばらくは夜~朝の間に100局だけ検証対局でもさせとこう。

39)一般の人?で探索部にまで手を出す人が現れたので教師生成の詳細をUPしてみた。教師局面のdepth10でdepth12の強さがあれば評価関数が強くなるかと言えば微妙。ただし幅があればとれる選択肢は増える可能性はある。個人的なイメージだと「Godwhale5.0.5は中距離」「やねうら王v4.80は中距離」「やねうら王v4.82は長距離」「whale3とか6は短距離」

38)1筋はそれなりに学習出来ているが9筋の学習は微妙。相雁木で後手に負けるのはだいたい9筋絡み。しかし端攻めの学習はすさまじく教師局面が必要なので難しい。「k_ohgaさん」がKPPT型で作った指定駒の評価値合成みたいなのがあれば簡単に解決するかもしれないが現状保留。「mirror_percentage」を使えば良いんだろうか?でも未使用で強くなってるしこのまま行く。定跡学習でそのうちやってみる。

37)高い勝率が出ている原因がわかったのでNNUE型の学習は一応の成功で良いかも。他の未学習部をいろいろな評価関数と対局して見つける。

36)Qhapaq_WCSC28は教師向きの性質が強い。独自評価関数を用意していない人が学習するのであれば「QQR」「Qzilla9」「Qhapaq_WCSC28」の3つから教師を生成すれば良いような気がする。

35)Qhapaq_WCSC28は通常の定跡型を良く学習しており力戦志向。このためNNUE型が苦手な序盤が互角になってしまい、NNUE型が得意な中盤+終盤で負けていることが勝率を大きく落としている原因。KPPT型同士なら安定して勝率が出ると思うが、序盤が強くなったNNUE型との相性が最悪。

34)1手深く読める=KPPT型的には片方をノード数2倍の条件で計測すればわかるがレーティング100~180程度となる。よって、序盤を互角に出来ればNNUE型はKPPT型よりレーティング100(勝率64%)は上に出る。

33)ひとつはNNUE型の評価パラメタ数の違い。技巧とかもそうだけど、終盤なんかの探索負担が大きくなってくる局面ではNPSの減少率が違う。例えばuuunuuunさん基準だとKPPT型は初期配置2000万ノード程度に対して、寄せの局面は1300万ノード台にまで落ち込む。NNUE型は初期配置1800万ノード程度に対して、寄せの局面は1500万程度に落ち込むがKPPT型に比べるとフラット。終盤はノード数的にも有利で下手したら2手深く読んでいる。

32)ひとつはNNUE型とKPPT型の特性の違い。ハイパースレッディングはCPUの空きを使って複数のCPUとしてるみたいな感じだけど、KPPT型は物理コア数で実質使用率63%程度なので、ハイパースレッディングONの論理コア数でノード数が160%程度に伸びる。NNUE型は高度な計算をPCに要求してくるので同じ物理コア数で実質使用率82%程度とほぼフルに使用してくる。(NNUE型が発熱が多いとか、ファンがうるさいとかはこれが原因)KPPT型を物理コア数×1.3倍にすれば公平なのか?誰がそれを決めるの?結局自分で納得するように評価するしか現状無いだろう。

31)相性検証でYO4.82/Qhapaq_WCSC28(R4204)相手にuuunuuunさん基準で勝率89%とかマジか。ここまで差があると明確な理由があるはず。詳しく調べる。

30)やっぱり勝率77%とかになった。もう少し詳しい補足付きでブログに書いた。いよいよ見たこともない新手が出てきた。こりゃ棋譜も出せんな。

29)今度は振り飛車でやってみたけどあんまり強くない。てか学習しているかどうかがハッキリ見て取れる内容だった。3セット目で残った3個のうち一番振り飛車が強かったもので学習すればワンチャンあるか?とりあえずエンジン設定をもう一回確認して普通に追試100局。

28)結果は大成功。Godwhale5.0.5/QQRとuuunuuunさん基準で100局やったけど勝率80%はヤバイ。エンジン設定ミスったんじゃないかとGodwhale5.0.5/QQR 相手に角落ちでやったら勝ってもうた。

27)「nn20180608mafu」を作ったときの感触から言えば同じ条件でも10個くらい比較が必要?とりあえず4000万局面ずつ1回の学習で8個の評価関数を作成し、
トーナメント方式で競わせてみる。

26)考えられるアプローチはたくさんある。nn_batch_size を大きくとる。互角局面等を使って教師生成する。ランダムムーブを使う。生成した教師局面を全部使わずに運にまかせる。そもそもたくさん出てくる重複局面は将棋の特徴でもあるわけだし全部弾くのは学習的におかしい。が、絶妙なバランスもわからない。だいたい教師をシャッフルしている時点で運の要素が強い。ってことで30%程度に重複局面があるから生成した40%程度ずつ学習してみる。

25)調べると理屈はわからないが重複局面を弾いてないっぽい。今回は1つの評価関数からしか教師生成しなかったこと+depth 10で指し手が狭くなってくる+random_move_count 0といった要因から約30%程度重複局面が生成されていた。従来のKPPT型の「やねうら王学習部」ではこういった重複局面は出来るだけ学習時に弾くみたいな実装してたと思う。(実際にこの教師局面をKPPT型で学習すると弾く)NNUE型も同じと思い込んでいたが、こっちは重複局面をほぼそのまま学習対象としてしまっているように見える。たぶんこの差が過学習による学習失敗の大きな原因。

24)学習してみると指し手のムラっけがすごい。いろいろetaを変えてみると「強いんだけど一部の指し手がおかしい」ものが出来た。ディープラーニング方式だからかな?とか考えて、従来のKPPT型で学習してみると重複局面がおかしいっぽい。

23)短時間対局で強い独自評価関数のdepth10で1億局面生成終わった。(自前PCだと生成に12日とツライ。depth12の1億とかだと2ヶ月程度だから、個人だとdepth10までしか無理だな)

22)「NNUEkai」という 「nn20180608」をDepth8の1億局面で追加学習した評価関数が出てきたので確認。 横歩取りの変な所が大幅に改良されて 探索部「nnue-whale3-avx2」との相性も良く「nps」も出て強い。たぶん教師はデフォルト設定で16手は学習対象じゃないはずなので「write_minply 9」は杞憂だったか?

21)小さいほうの捨てる局面はデフォルト設定の16手でも良いと思うが、レーティング計測は定跡OFFであることとQQRがレーティング計測の1手1500万局面程度(uuunuuunさん基準)の場合に、先手で「横歩取り青野流」を多用して勝率を稼いでくるので思ったより勝率が出ない。「write_minply 9」として横歩取りの戦型が入ってくる9手目から学習対象としてみる。

20)そもそも外れ値が問題なので、どの程度学習対象から外すか考える。端々を捨てるとして、デフォルト設定で16手は学習対象じゃないから小さいほうは良い。大きいほうをどうするか?depth10同士の投了値3000対局だと普通のワンサイドゲームは120手台が多い印象。拮抗したり1手ミスだと160手以内で全局の90%程度。大きいほうを10%捨てるとしてwrite_maxply 160(160手目で引き分け)でどうか?

19)教師生成風にdepth10同士で対局させて棋譜を確認。大駒の成駒が出来ているような局面は評価値1000付近。そこから3000までは30手程度でわりと一気。局面的には相手玉を寄せるような局面で良い感じに見えるからココに合わせてみる。

18)新しく教師を作るからdepth10でやってみる。

17)調べてわかった最大の原因は中盤+終盤は評価値が大きくなって外れ値になりやすく上手く勾配がとれてない。専門的に学習してみる必要がありそう。

16)さまざまな「既存将棋ソフト」を検討モードで調べたらわかった。中盤+終盤が全然学習出来てない。(特に大駒が相手陣へ突破する局面)でも100億局面とかで学習出来ないのはおかしい。何か原因があるはず。

15)学習率をおもいっきりミスったけど面白い評価関数「nn20180611」が出来た。従来のKPPT型では見たことのない読み筋がチラホラ。調べてみる。

14)depth8の4億局面でもう少し強くなることはすでにわかっているので、さらに追加学習をしてみる。

13)下記をいろいろ実験した結果「nn20180608mafu」が出来る。

12)さすがに最序盤の評価値(ほぼ手番の価値)が70以上は外れ値だろうから、1手1500万ノードでこの評価値を出したものは捨てる。※個人的に歩1枚の価値が100とした場合=手番の価値は120程度が持論。やねうら王の探索パラメタは手番価値20なので千日手0として(120-20)/2+20=70程度が最序盤の評価値だと考える。

11)一応のハイパーパラメータが決定したので教師生成。depth8でQQRから5000万局面生成した。予備調査で学習してみたがQzilla9を作ったときの教師より弱い。たぶん序盤が勝率の高い指し手に偏っていてばらつきが悪いから(特定の指し手評価値が大きすぎるから)だと思う。しかたがないのでQzilla9からも5000万局面生成して、合わせて1億局面。

10)「nn_batch_size」をとりあえず100局分相当の10000固定とし、その100倍の「batchsize」=100万、その100倍の「教師局面」=1億局面ででetaを調べる。結果eta0.1程度までなら許容範囲だとわかったが、同じ条件でも最序盤の評価値が70~150と変動幅がありすぎる。デフォルトで16手までは学習から弾いているはずなので、やっぱり学習安定度が低すぎる。

9)一番大きな原因は「nn_batch_size」が将棋的に小さすぎて学習安定度が低すぎることがわかった。

8)試しに本家T.N.K.wcsc28をtttak氏が追加学習した「nn20180519」をQzilla9を作ったときの4億局面で追加学習してみると勝率60%程度になった。depth8の4億だけど結構上がった。「elmo瀧澤さん」はdepth10の20億局面で数%上昇って言ってたので何が違うんだろう?思いつく違いを調べる。

7)入力層の教師局面数を手持ちの教師局面で調べると、10億局面では確実にサチってる。偶然4億局面程度でサチってるっぽいことも発見。NNUE型はKPPT型よりかなり教師局面が少なくて良い。

6)「nn_batch_size」をさらに上げていくと学習出来なくなった=自前PCだと物理メモリが足りない。しかたがないので10000で良さそうなハイパーパラメータを探す。

5)「nn_batch_size」をデフォルトの1000→10000にすると結構安定してきた。ダビスタで言えば安定Cレベル。

4)現状のままだと不安定すぎて「newbob_decay」は別に必要ない。loop回数とかが多ければ良いんだろうけど、KPPT型より学習時間が5倍程度必要なのでやってられない。「newbob_decay」は使わない方向で考える。ただし、機械学習の基本構造である学習進度による学習率の降下は必須なので手動で調整する。

3)とりあえずこの不安定を出来るだけ減らす。「nn_batch_size」と「newbob_decay」が問題っぽい。

2)いろんな学習率を試したが、同じ学習率でも結果が大きく違う。ダビスタで言えば安定Dレベル。

1)手持ちの教師局面でNNUE型を学習してみると、勝率は良いが評価値が大きすぎる。学習率がおかしいっぽい。

この記事へのコメント

スポンサーリンク