SSブログ

やねうら王 v.2.21~ の日記 [コンピュータ将棋]

 もう更新ペースには追いつけて無いので日記。


■棋力
 今のclassic-tceでやねうら王2015とほぼ同等らしい

 電王戦のときの評価値の並びをちらっと見たところ
 やねさんが「公開処刑や」とぼやいているのを見たが

 技巧>大樹の枝>やねうら王=nozomi

 みたいな感じで評価値が出てて、H/Wも同一で探索した結果なので
 純粋に評価関数の質の差だと思われる

 効きの数>手番有りKPP(次元下げあり)>手番なしKPP(次元下げあり)

 みたいな感じだと思った。
 ここにさらにNDF強化学習メソッドのPonanzaが加わると

 NDF強化学習>?効きの数>手番有りKPP(次元下げ)>手番なしKPP(次元下げ)

 みたいな感じなのかなと思った。

 ここに序盤の定跡や探索性能も加わるが、探索はStockfishだとして、定跡まで完全に生成してるのはPonanzaぐらいしかしらない。序盤の定跡生成も結構マシンパワーを使わないといけないと思うのだが。既存の定跡を絞り込むやねうらメソッドの定跡ですら一ヶ月かけて精査したぐらいなので、終盤の強化学習だけでなく序盤にもマシンパワーかけてるものに追いつくのは相当難しい気はしている。

 あとPonanzaは評価関数を序盤と終盤に分けるというのもやってたような。


■技巧のアピール文章

 収束が22時間と聞いて、数年前にはてなブログに1日で収束させていた人がいたのを思い出した。その人はニューラルネットワークだかそれっぽいやり方をしていたので、てっきり習甦の人だと思ったが、アピール文章見てたら技巧の人だったのかなと思ったけど、どうなんだろう。
 KPP全盛で二週間とか一ヶ月かけて収束させるのが当たり前みたいなときに、ぜんぜん違う方法でやってたので覚えてたけど昔みたはてなBlogはことごとく消えてしまった。


■AkiさんのCV失敗の話

 PonanzaのAkiさんが、「進行度学習したときにうまくいかなかったのが、CVに学習データ使ってたから」というようなツイートしてて、あのAkiさんがそんな初歩的なミスをしたのかとツイート読んだ時は思ったが、翌々考えてみると5年ぐらい前だと棋譜=プロの4,5万局が全てみたいな時代で、CVやるのも難しい。どうやるんだろう。今だとPonanzaは強化学習用に大量のデータを蓄積してるので、変な心理的なハマり方をしないのだとふと思った。こういうところもまともにPonanzaに追いつこうとすると結構辛いところかなぁと思う。
超古い日記


■v2.21

 不具合修正が無事取り込まれた。一応自己対戦とかでチェックしてから入れた項目だけだったので、あまり不具合はなさそう。

http://yaneuraou.yaneu.com/2016/03/25/%E3%82%84%E3%81%AD%E3%81%86%E3%82%89%E7%8E%8Bmini%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%82%E3%82%8A%E3%81%8C%E3%8C%A7/

 tさん指摘のCounter Moveのバグが、かなり勝率に影響を与えていて、自分が試した範囲では(最終的に)60%ぐらい自己対戦で勝ち越す(R70上昇した)っぽいのは確認できた。

 勝率が上がった要因は、(目視と勘によると)Counter Moveが正常に機能することで、単純に読みが1,2手深くなって勝率が上がったように思われる。


■全敗という現象

 v2.17からv2.21では、最後のCounter Moveが一番効いていたため、もし全敗する相手(やねうら王2015)には全敗するだろうと思ってたが、やはり全敗らしい。

 読みが深いだとかいう理由で勝率が上がる場合は、レーティングはせいぜい100ぐらい上がる程度なので、全敗する相手にはその致命的なバグを取り除かないと勝てないはずである。もしこれで勝てるのだとすると、元々1割ぐらいは勝てて良かったはずというのが自分の考えだったが、全敗の原因は評価関数の読み込みに失敗していただけのようだ。

 読みが急におかしくなるとかいうのが目につくので置換表あたりかと思ったが、確率的にはかなり低いDropなどの落ちるバグが見つかった程度だった。(落ちるのは問題だが勝率には影響しないというのがコンピュータ将棋のめんどくさいところ)

 あと弱かったのは、やねうら王2015からのコンバートに失敗していたらしく、いきなり-1000の定跡が出てくる現象は報告するべきだった。

 こういうのは自己対戦フレームワークを使っているとわかりにくく、将棋所で将棋盤と評価値が出てると、歩と見た時に変な手や評価値が出てると目についてバグに気がつくのだが・・・


■再現性の無い悪手を指す

 自己対戦を繰り返していると、評価値が逆に振れることがある。その要因を分類するとおおまかに3種類ある

(A)再現性のある悪い指し手
(B)どこから湧いてきたかわからない悪い指し手
(C)読みが浅いゆえに出てしまった悪い指し手

 Aについては、一番デバッグが簡単な場合で、自分が見つけたのは大体これ。バグが出る局面が決まっているので、アサート入れたりとかすれば他のものよりはすぐ見つかる。
 Bについては、状態依存するバグと思われる挙動で、TransparentTable、History、Counter Moveあたりの対局中に累積する要素が絡んでいる可能性は高い。
 Cについては、同一局面で読みを深くすることで良い手が出てくる事が多い。それでも出てこない場合は、基本的には評価関数(KPPの値)が悪いということだと思うので、今回はあまり関係ない。

 自分が自己対戦で目についたもので、ここまで負け越す要因と思われるのは、Cはほとんどなくて、Aはどうしようもないとすると、Bしかないのだが、それも発生確率が100敗するほど高くない。

 >やねうら王との対戦時にファイルが読めていなかったらしい


■差分計算数

 これもtさんの指摘だが、差分計算の回数が少なすぎるというのである。そこで自分も検証してみた。

 計測方法「test autoplay 10」をプロファイラーで計測

・v2.21のままだと、calc_diff_kpp 176Kに対してcompute_eval 144K
・aperyのように「局面を評価値によって静的に評価」の後にevaluateを呼び出すようにすると、calc_diff_kpp 200Kに対して、compute_evalが86K

 全計算の回数が大幅に減るが、差分計算の回数が増えるのでプロファイラーの数値だけだとあまりよくわからない。
 本当はbenchコマンドで確認したいところだが、別のことやってるので未確認。
 読む深さが上がった気もしないのでほんのちょっとだけ良くなったレベルだと思われる。

 >元々差分計算の値が入ってるかどうかで全計算するかどうか判断できるので必要なら計算するようにすることでより効率的にevaluateを呼び出せている模様
 差分計算をしても4分の1はKPPの計算に使っている。


■自己対戦をやめる

 2.21ぐらいのときに、どうも自己対戦をやっていると、特定のハマりパターンに強くなる気がしているので、フリー界最強の大樹の枝と同条件で対局させてみたところ、15戦全敗した。15戦目は勝ち将棋を盛大にひっくり返されてつまされたのでこれはいかにもバグっぽい。さすがに全敗は無いと思ってせめて100戦するまで放置しようと思ったが、この負けっぷりを見てると勝てる気がしないので途中で止めた。が、原点は抑えておくべきだろうと改めてやってみたところ、19-3-179だった。勝率1割。

 このときは評価値がおかしかった時代なので、改めて対局させてみると勝率3割弱。

 で、たまたま評価値を見ていたら、どうもCounterMoveの値がでかすぎて悪手さしてるっぽいのを見かけた。

 怪しい箇所は、Counter Moveのbonus値で、途中の枝刈り時にDepthの3乗ボーナスがやり過ぎで、序盤はともかく中終盤で不利になりかけてると、ヌルい手にボーナスをつけすぎてしまって、本当にヌルい手を指して負けてるっぽい。

 一応自己対局だと5%ぐらい勝率が増えるっぽいし、大樹の枝にも5%ぐらい勝率があがるので、効果はありそうだが、数値的な解析を全くしてないのでたまたまではないかという疑いが拭えない。

 >もう検証ろくに出来ないので掲示板に書いてみた。


■v2.25 vs 大樹の枝

 評価関数の読み込みが正常になって勝率が妥当になった

 70-10-120


■mate1plyの不具合

 Dropは駒の型でないといけないが、色(手番)が入ってることを要求されそうな場所がいくつかあるので、PieceTypeを定義して片っ端から整合性をチェックしたら見つかった。

 打つ手の場合は駒に色入れたほうがチェックもCounterMove用のものもいらないし、最初に1回やれば違法手の大部分がカットされるので良いと思うのだがどうだろうか。(Promote入れるべきという話になっていた。これは完全に見落としていた)

 mate1plyの駒種間違ってた問題も、後手の香車の効きだけが問題に成るはずなので、ごくたまにしか影響が出ないと思ったが、一応R15ぐらいはあがったようだが、続きがあった。

 効きの方向を参照するテーブルが先後を分けた時に後手の値をシフトしてるせいで、後手の効きがちゃんと動かなくなっていた。長い効きの場合、飛車、角については、先後で何も変わらないので、常に先手として評価しても香車以外は問題なかった。それを先後ちゃんと直したことで逆にバグが増えた。最終的には効きの向きテーブルをちゃんと作って対応していた。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。