ResNetとViTの弱点局面比較

前書き

 ViT(sサイズモデル)の学習が進行中である。予定していた最大学習ステップ数の1/5程度をこなし、やや収束の気配が見えてきたので一度このタイミングでお試し評価を行ってみる。また今回は単に検証損失を全体で計測するだけでなく、個別の局面についても多少見てみる。

使用データと解析方法

 floodgate2015年の棋譜から先手後手いずれかの対局者のレートが3200を超えているものを抽出した。重複局面はPolicy, Value教師ラベルともに平均化した。得られた局面の数は399,483となった。

 C++の推論エンジンを用いて、上で抽出した各局面について

局面のSFEN 正解の指し手 正解のValueラベル Policy損失 Value損失

という感じでtsv(tab separated values)形式で出力する。それをPythonのpandasで開いて適当にガチャガチャいじる。

定量比較

検証損失の数値

 以下が、INT8でTensorRTエンジン化まで行ったモデルで計測した検証損失となる。実際の対局でまさにこの精度でPolicy,Valueが出る。

モデル Policy損失 Value損失
ResNet(20block, 256ch) 1.7833 0.4700
ViT(6block, 256ch) 1.7189 0.4802

 今までの学習で何度か見られてきたように、Policy損失はViTの方が良くなるが、Value損失はResNetの方が良い結果となる。

局面ごとの優劣数

 ViTから見て、ある局面を(Policy損失がResNetよりも良いかどうか、Value損失がResNetより良いかどうか)という2つの条件で4分類できる。399,483局面についてこの条件によって分類していったときの分類された数が以下の表になる。

Policy良い Policy悪い
Value良い 94,607 122,342
Value悪い 75,773 106,761

 予想に反してPolicyが悪い局面は多く、Valueが良い局面は多いという結果になった。条件を逆に取り違えていそうなので何度か確認したが合っている気がする。よくわからん。

手数による性質

 局面を10手ごとに区切って損失を集計した(64手目の局面→60 50手目の局面→50という感じで切り捨てで集計)

f:id:tokumini:20220122150643p:plainf:id:tokumini:20220122150646p:plain
左: Policy損失 右: Value損失

 Policy損失はViTが0~20手部分や、100手以降あたりで明確に良いことがわかる。一方で、中盤の大事そうな50手目付近ではResNetの方が良さそうであることは少し気になる。

 Value損失に関してはほぼ傾向に差はなく、常にViTがやや悪いという状態で一貫している。

定性評価

 損失が大きかった順に5局面をピックアップする。

ResNetのPolicy苦手局面

1位

1n6l/kgg1r4/1pppp1+Rpp/2n2p3/SG7/p1P1P4/1PBP4P/KS7/2G5L w B2SNL2Pnl3p 110

f:id:tokumini:20220122153808p:plain

正解 : △9七歩(96)

Policy損失 : 18.1821

コメント : 成ではなく不成? 結局後手負けの対局なのでやけくそ王手の一つだろうか、これはわからなくてもしょうがないのでは

2位

ln1g1gsnl/1r1s2kb1/pppp1p1pp/4p1p2/9/2PP4P/PP2PPPP1/1B1R1KS2/LNSG1G1NL w - 12

f:id:tokumini:20220122154340p:plain

正解 : △1二香(11)

Policy損失 : 18.14

コメント : このタイミングでの穴熊宣言は相当早いでしょう。

3位

lnkg1gsnl/2s2r3/1pppp1bpp/p4pp2/7P1/2P1P4/PP1PSPP1P/1BK4R1/LNSG1G1NL b - 17

f:id:tokumini:20220122155247p:plain

正解 : ▲9八香(99)

Policy損失 : 17.9975

コメント : だから穴熊宣言早いって。

4位

ln1g1k1nl/1r1s1sg2/p2p2bpp/2p1ppp2/1p5P1/2PP1P3/PPBSPSP1P/2G4R1/LN2KG1NL b - 23

f:id:tokumini:20220122155357p:plain

正解 : ▲4八玉(59)

Policy損失 : 17.5228

コメント : 右玉が意外だったか。

5位

+P4g3/9/pgpSp3p/9/4P1kP1/2P6/PGKPSP1pP/6r1L/LN3s3 b BL3Prbgs3nl2p 161

f:id:tokumini:20220122155635p:plain

正解 : ▲6五香打

Policy損失 : 17.1816

コメント : 後手圧勝局面でなにをやってもダメなので特にこれが当てられなきゃどうしようもないというわけではない。最終的に後手が勝っている局面だし、それはわかっているので特に問題はなさそう。

ResNetのValue苦手局面

1位

l5+bsl/2p6/p3+P1nkp/5p1p1/Sn1g2p1P/P1P1nPP2/1P1B2+p2/LKR+r5/1G6L w SN4P2gs 206

f:id:tokumini:20220122160120p:plain

正解指し手:△7七金打

Value正解ラベル : 0(手番側負け)

Policy損失 : 4.17053

Value損失 : 3.8439

コメント : 金打っていって後手勝ってそうじゃない? と思ったら、これが負けになったのか、それはわからないかもしれない。

2位以降

 多分1位と同じ対局なので割愛。今のところ1局から間引かず全局面をValidationデータに加えているが、ちょっと考えものかもしれない。

l5+bsl/2p6/p3+P1nkp/5p1p1/Sn1g2p1P/P1P1nPP2/1P1B2+p2/LK1G5/1G1+r4L w RSN4Pgs 204 正解指し手:△6八竜(69) 1.0 0 0.0115542 3.8439

l5+bsl/2p6/p3+P1nkp/5p1p1/Sn1g2p1P/P3nPP2/1PPB2+p2/LK1G5/1G1+r4L w RS4Pgsn 202 正解指し手:△7六桂打 1.0 0 2.49806 3.8437

l5+bsl/2p6/p3+P1nkp/5p1p1/Sn1g2p1P/P1P1nPP2/1PgB2+p2/LKR+r5/1G6L b SN4Pgs 207 正解指し手:▲9九玉(88) 1.0 50 0.00400479 3.8430

l5+bsl/2p6/p3+P1nkp/5p1p1/Sn1g2p1P/P1P1nPP2/1P1B2+p2/LK1+r5/1G6L b RSN4P2gs 205 正解指し手:▲7八飛打 1.0 50 2.6792 3.8427

ViTのPolicy苦手局面

1位

ln4knl/2+P6/p3+Pg1pp/6p2/3N3P1/1b4PB1/P2P1GN1P/3G5/L1K5L w RG3S4Prs3p 96

f:id:tokumini:20220122160924p:plain

正解指し手:△4二銀打

Policy損失 : 18.6047

コメント : 銀打って頑張ってもまぁ見込みはなさそう。これは別に当てる必要があまりないだろう。

2位

l3k2nl/1r5p1/2n+P2g1p/1Pp6/p4N1P1/2P3R1P/PGN2P3/4K4/L7L w B2G3S6Pbsp 122

f:id:tokumini:20220122161414p:plain

正解指し手:△6四銀打

Policy損失 : 17.9862

コメント : やはり局面が苦しくて手がないか。こういう局面はValidationデータから弾くことを考えた方がよいかもしれない。

3位

K1+B4nl/1+P3+R1s1/p5psk/1p3p1pp/6P2/9/P+p2+rP1+l+l/4p4/L1P5+s w B4GN2Ps2n3p 170

f:id:tokumini:20220122161746p:plain

正解指し手:△6五歩打

Policy損失 : 17.3822

コメント : △6五歩の意味がよくわからない。後手は入玉しても点が足りなさそうなので、まぁやっぱり局面自体がダメというものの一つだろうか。

4位

l6nl/2gks1g2/4pP1p1/prSpsS2p/1NP6/P1R2pp1P/1P1PP2PB/1K1g5/LN5NL w B3Pg 102

f:id:tokumini:20220122162140p:plain

正解指し手:△9八金打

Policy損失 : 16.6724

コメント : 今までよりは少し難しい局面かもしれないけど、やっぱり後手苦しいか。△9二金打かと思ってなにかを防いだ良い手なのか? と考えていたけど△9八金打なのでやけくそ王手か。

5位

5+R2l/1n7/p1Ns1+S2p/1ppN5/5bgP1/2P2k1s1/PPSP1+p2P/1KGG1+p3/LN5+r1 b BGP2l5p 129

f:id:tokumini:20220122162501p:plain

正解指し手:▲9八香(99)

Policy損失 : 16.6248

コメント : 後手の入玉を止められず敗勢。とはいえ、もうちょっとマシな手はあるんじゃないか?

ViTのValue苦手局面

1位

l5+bsl/2p6/p3+P1nkp/5p1p1/Sn1g2p1P/P1P1nPP2/1P1B2+p2/LKR+r5/1G6L w SN4P2gs 206

正解指し手:△7七金打 1.0 0 2.21714 3.8444

コメント : ResNetのValue損失大きい第1位と同じだった。このデータ自体がダメそう。

2位以降も同じ対局だったようなので割愛。そういうことがある。

所感

 結局Validationデータの質がどうなんだという問題があり、

  • floodgate2015年だけじゃなくてもっと多くの年度から取るようにする
  • 1局の対局から取る局面数を減らす
  • 手数の範囲を定める

などは少し対処案として考えれるかもしれない。ただ、環境の準備が大変になるのはデメリットとしても大きいので、上手く落とし所を探りつつ、結局は対局させてみるしかないのかもしれない。しかし対局も互角局面集を使うべきかどうかという話があったりして、簡単ではないなぁとも。どうしたものか。