Deep Learning系の将棋ソフト(ふかうら王)と、やねうら王(評価関数:水匠)とで、長時間にした時にどちらのほうが棋力の伸びが大きいかについて計測したので公開する。
単純には、Deep Learning系の将棋ソフトのほうが局面評価の精度が高いと考えられるので、長時間になればなるほど強くなるように思われる。ところが、探索部の性能の差があって、やねうら王はドメイン知識(将棋固有の知識)を活用して探索しているので、探索性能の差があると考えられる。
水匠 vs ふかうら王
水匠30万ノード(局面)、ふかうら王(評価関数:GCT) 3000ノードでの比較。
// 水匠300kn vs ふかうら王V6.02 3kn + root df-pn mate 30kn
// 双方、1スレッドでノード数の制限をして対局させた。
// やねうら王互角局面集の24手目の局面からの対局。
T1,b1000,508 – 14 – 478(51.52% R10.57[-7.63,28.77]) winrate black , white = 49.9% , 50.1%
強さはほぼ互角。水匠側が+R10.57強いように見えるが計測誤差だろう。
ふかうら王は、水匠の1/100の探索ノード数で互角の強さということがわかった。
ここから、探索ノード数を2倍ずつして行き、どちらが強くなるのか調べたいのだが、面倒なので双方8倍してみた。水匠240万ノード vs ふかうら王 2万4千ノードである。
※ 一般的に将棋ソフトは思考時間を2倍にすると+R200程度強くなると言われており、やねうら王を探索ノード数8倍にすると+R600ほど強くなっていると思われる。
// 水匠 2400kn vs ふかうら王 24kn + root dfpn 240kn
engine1 = YaneuraOuV601.exe , eval = suishou_wcso1
engine2 = YaneuraOu-Deep-TensorRT_V602.exe , eval = GCT2020
T1,b1000,500 – 19 – 481(50.97% R6.73[-11.51,24.97]) winrate black , white = 52.5% , 47.5%
ほぼ互角。1000局程度ではどちらがより強くなっているかは言えない感じである。
まとめ
AlphaZeroは、その論文では、elmoとの対局で時間を伸ばせばAlphaZero側のほうが強くなる感じであったが、上の条件では、どうもそれは確認できない。
GCTの評価関数は10ブロックのResNetで、AlphaZeroは20ブロックのResNetだから、局面の評価精度に差があり、20ブロックのResNetを用いた評価関数の場合、持ち時間を増やしていくとやねうら王との差は開くのかも知れない。
とりあえず、現状は「対局時間が長いほうが、Deep Learning系のソフトが有利」とは言えないようである。
初コメントです!
いつも読んでるわけではないですが、ツイタで流れてきたタイトルにつられてつい記事を読みました。
今回検証に利用されたDL系の「ふかうら王」と「やねうら王」のうち、やねうら王では探索部で将棋固有ドメイン知識つかっているとのことですが、実験では「ふかうら王」は使ってないとの解釈であってますしょうか。
もしそうなら、「やねうら王」で将棋固有の知識を利用しない探索を利用した時、実験結果はどのようになると思われるでしょうか?
> 実験では「ふかうら王」は使ってないとの解釈であってますしょうか。
ふかうら王は、普通のMCTSなので、ドメイン知識はゼロに近いです。
やねうら王のほうの探索は、ドメイン知識の塊なので(futility pruning , probCut , singular extension , LMR , …)、これらをすべて取り除くとそれは単なる(純粋な)αβ探索となってしまいます。
また、MCTSと純粋なαβ探索とで思考時間を2倍にした時にどちらが強くなるかという比較でしたら、当然前者です。ドメイン知識を大量に導入して、枝刈りをしまくってやっと思考時間2倍でR200になっているだけで、ドメイン知識なしでは、思考時間2倍で+R50すら上がるか怪しいので…。
ご返信ありがとうございます!
> やねうら王のほうの探索は、ドメイン知識の塊なので(futility pruning , probCut , singular extension , LMR , …)、これらをすべて取り除くとそれは単なる(純粋な)αβ探索となってしまいます。
ああ、上記提示されたものを将棋固有知識としていたのですね。失礼しました。
完全情報2人零和系なら使えること多いので。チェスは言うまでもなく、自分は囲碁でも使っていたので使える領域はかぎられるものの将棋固有ではないと認識してました。。
囲碁でいうと、シチョウで取られる手をある程度力ずくでだめと認識させるような。
将棋でいうと、末端で駒捨てる手を省略するようなのを本記事ではドメイン知識と言ってるのかと。。言葉は難しいですね。
それはともかく性質の違うものを比較するのも難しいけど、この記事面白かったです。
> 使える領域はかぎられるものの将棋固有ではないと認識してました。
futility pruningにしても、純粋なfutility pruning(枝刈りによって探索結果が変わらない)が使われることは稀で、実際はもっと大きなmargin値にするのが普通です。例えば、やねうら王では、以下のようなマージン値になっています。dは残り探索深さ、improvingは、前の局面から評価値が良くなっているかのフラグです。
> return Value(PARAM_FUTILITY_MARGIN_ALPHA1/*224*/ * (d – improving));
この時、224と言う係数は、empiricalに(実験上、経験上)良いとわかっている値で、これは将棋というゲームの性質に強く依存しているので、私はドメイン知識とみなしています。
このように、ゲーム木探索で一般的に使われているような枝刈りであっても、empiricalな値が出てくる場合、それはドメイン知識とみなすのが普通ではないかと思います。
水さんとふかさんで評価値差が大きいのはどういうケースですか?水さん『+400くらい』ふかさん『はあ?何言うてるの?ー400くらいでしょ』みたいな感。序盤?中盤?終盤?持駒が多い?少ない?穴熊?振り飛車?
評価値の差が大きくなるのは、もちろん終盤ですけどね。片側が +10000で、もう片側が+2000みたいなことは普通にあるので。(8000の差) ただ、この場合、どちらも先手勝ちと言っているわけなので、この8000の差にどのような意味があるのかという…。
「評価値の符号が正反対になる確率が高いのは、序盤か終盤か」みたいな問いかけだと、難しいですね。
なんというか、+10000は勝ち筋だけ見えててノリノリ感がある感じで、+2000は「勝ち筋はあるけど読みきれてない」「勝ち筋の他にヤバい筋が出てきた」の2極ありそうでアレな気がするけど、そうでもない?
複数手の評価値大小の方がいいのか。『ある局面でふかさん水さんがそれぞれ手A,Bを選択した。水さん「Aは+900, Bは+300。Aが良い」。ふかさん「はあ?何言うてるの?みたいな