【オセロ,将棋】ボードゲーム Part2【囲碁,War】
レス数が1000を超えています。これ以上書き込みはできません。
Geforceの発売が迫ってますね。
性能もいいけど値段もいい値段するとかって話で悩ましいですね。
しばらく様子見か。 新Geforce、とりあえずpytorchが対応するのかどうか、
対応したとしてどれくらい性能上がるかみきわめてからですかね?
仮に大金だして買うとしても。 ご無沙汰です。
地味に棋譜作成を続けていますが、そろそろ色々と重くなってきたので、
裏で新バージョンを作り始めています。探索に関係ないところは、色々
整理して結構軽くなった(と思う)のですが、探索部分の速度が大幅に
低下してしまって悩み中。
現バージョンとまったく同じ条件で比較したところ中盤探索で3倍弱は遅い。
比較してないけど終盤探索は下手すると10倍近く遅い感じ。
中身はほぼ一緒なので、何が原因で遅くなっているのか不明。
コンパイルオプションなんかは一緒。共通で使用しているclassのどこかに
原因が潜んでいそうなんだけど、違いが見当たらない… まさかまさかの__vectorcallが原因だった。
全部取っ払ったら中盤探索については逆に速度30%アップ。
変な事考えないでコンパイラに任せましょうというお話でした。 28コア56スレッド…
18コア36スレッドが安くなるかなぁ。
棋譜作成を新バージョンに乗り換えました。
全体的に速くなる修正については、10〜20%程度なので効果不明。
あと特定の条件で遅くなる原因を見つけて地味に潰しています。
後者については、一つ原因わかっていて直しようが無いものが。
並列処理にPPL使っているのですが、parallel_forではせっかく並び替えしても
ランダムに処理が走ってしまう事。ybwcなのでPVを最初に実行する事は保証され
ているのですが、PVが間違っていた時に、parallel_for内部で2番目の順位の
スレッドがいつキックされるのかわからないどころか、最悪一番最後の可能性も
ある点です。null window searchでβカットに強く依存しているので、ここは非常に
困ります。
解決策1)parallel_forの改良版を自分で書く
解決策2)スレッド数の多いPCに乗り換えて、この問題が起きる確率を下げる
どうしよう(汗 9900Kも結構面白いかも?
結局新PC購入に踏み切れてないけど、
来るべきその日のためにGithub漁るところから再スタートしようかなぁ 結局あきらめて解決策3)初段のみYBWCのお兄さんを2人にして様子を見てます。
forwardのロジック(最善手の手順で着手可能な手を展開)を全面改訂。
今まで降りていく手を、BitboardのLSBに近い方から1つだけ選択してましたが、
これによって局面の偏りが生じていたようなので、全て展開するようにしました。
棋譜の増殖が凄い事になっちゃうんだけど、仕方ありません。
同じ仕掛けでbackwardも書き直し。
Eigenの並列化、リソースモニタ見ても2コアしか使っていない感じ。4コア使う指定
しているのに。謎。
その他、並列化できるところは並列化を検討。
やっぱPC欲しい…12コアくらいでも良いかという気がしてきた。 局面の偏りが結構酷い事になっていました。
新しいforwardでは反復深化の評価値を表示するようにしたのですが、探索が進む
ほどに0になっていきます。そこで盤面のパターンが一回も出てこないケース(0値)
を調べたところ、後ろの方が大量に…。前回書いたLSB問題の影響がかなり大きい
という事です。
というわけで、棋譜作成の時には、少なくとも複数選択しあるときにはランダムに
選択するように変更し、既存の棋譜については、仕方がないので後ろの方をランダム
を導入した仕組みで再探索したものを追加していく事にしました。
1件1秒程度でできるので、折に触れてランダム化していこうと思います。
全部展開すると件数が大変な事になるので、様子を見ながらこの辺でお茶を濁して
みようと思います。 ずっと昔にオセロを作っていた者です。
久しぶりに再燃したので熱があるうちに…
50万棋譜計画のバグっている棋譜、被っている棋譜を消去して、22マス空きからの読み切り訂正をやってます
プログラムを3つほど立ち上げて一日9万局…めどは一ヶ月ぐらい
最近寒くなってきたのでちょうどいいかなとw
FFO45が32秒ぐらいで、まだまだトッププログラムには及びませんけど、
この棋譜訂正で大幅に縮まらないかと希望を持ちつつ進めてます zen2まで待つのはさすがに待ちすぎかなぁ?w
とりあえずAQのコードに結構詳細なコメントが付いてることにいまさらながら気づいて
もう一度チャレンジしてみるかどうか迷ってるところ。 >>475
はじめまして。新規参入嬉しいですね。
50万記譜計画の記譜は今はHPからダウンロードできないですね。懐かしい。
評価関数が正しくないと、探索時間かかりますからね。
自分は今は、自作の記譜を後ろから順番に訂正していってます。
が、やはりすごく時間がかかりまするorz 先日、局面の偏りで反復深化で評価値がゼロになっていく件を書きましたが、
もっと大きな問題な気がしてきました。
マイナスの評価値になるはずの局面から、中盤探索を反復深化で深くしていく時、
途中で評価関数的に未知の局面に入って、評価値0を返すようになる事があります。
もともと期待される評価値はマイナスなので、評価値0のルートに乗り換えてしまい
ます。どうもこの様な現象が起きる事で、探索を間違える事がありそうです。
これから、デバッグ用のプログラム書いて、現象を確認してみようと思います。
もしかしたら、評価関数の初期値をゼロから始めるのが、良くないのかもしれません。
初期値を−1にすると、未知の局面は−66点(パターンの種類)になるし、1つ2つ
混入したくらいでは、評価値への影響も小さいのかなと思っています。
評価関数のゼロデータを−1にして動かしてみる方が早いかなぁ? 一応、ゼロデータをすべて−1に置き換えてみたところ、それなりな感じで、
頻度はだいぶ減りました。が、まだ時々おかしな時があります。
デバッグ用のプログラムが案外簡単にできたので、評価値の計算を確認して
みたところ、反復深化の計算のどこかにバグがありそうだという結論に…。
ただ、ほとんどのケースでは正しそうなんだなぁ。 ソース見てたら、一瞬で判明(汗
ほぼtypoの類でしたorz
これで探索少し早くなるかな? ウェイトのゼロデータを−1にしてみましたが、関係なさそうなので0に戻しました。
原理的にはマイナス評価値の問題は起きそうなのですが、評価値ゼロはあまり
発生していない感じです。
残り27手読み切りあたりから今のやり方では追い付かなくなって来ていますので、
MPCモドキの導入を考えています。MPCのスレッショルドの計算を真面目に
やると、それだけで日が暮れてしまいそうなので、あくまでモドキですが(汗
置換表から作り直しになるし、記譜作り直しで、まだ27手まで時間がたっぷりある
ので、1週間くらいじっくり考えてから始めようかと思います。 うう、やっぱPCに30万はおいそれと出せないorz orz orz
しかし、何もしないままでただ時間が過ぎていくほうが怖いような気もする。 なんかRTXに不具合があるとか何とか
マジ?
もうしばらく様子見が正解か… MPCですが、完全読み切りをIterative Wideningで速度アップするためのProbCutを
作ってます。とりあえずスレッショルド計算のところまでできました。線形近似と誤差の
標準偏差の計算ですが、以前はループでゴリゴリ計算してました。今回はEigen使って
行列で計算するようにしたら超簡単でびっくりするほど早くなりました。
結局、計算時間の大半は浅い探索になります。
で、結果を見れば見るほど、無理に計算しなくてよいのではないかと思えてきます(汗
誤差は1σ=4〜5程度の固定値。線形近似は、1次係数は1.0で0次の定数(バイアス)
を、深さが偶数で+1〜+2、奇数−1〜−2くらい。探索の深さを変えると、誤差は
減っていきますが、あまり頑張るとオーバーヘッドになります。
そもそもIterative Wideningでは、探索精度ではなく、徐々に探索対象を広める事で、
置換表の精度を上げていく事で高速化をしますので、アドホックな値でも良いのかなと。
誤差やバイアスは今の自分の評価関数での値ですが、気が向いた時に再度チェック
するくらいで良いのかなと思う次第。
というわけで、大幅に簡素化・定数化して、読み切り処理の方に移る事にしました。 9900K発売ですか。
かなり入手困難みたいですね。 11/6にAMDからなにか発表があるとか
ZEN2くるかなー?
とりあえず今は待ちか。 結局zen2は春ごろなんですかね?
いまはRyzen 2700xを買っていつでも乗り換えられる体勢を取るのが正解かなぁ? ぬぬぬ。
ProbCutのバグ取りに時間がかかりました。というか、なかなか高速化できません。
むしろ倍以上時間がかかってしまいます。
もっとひどい事に、今までのやり方のうち、比較的単純なやつが最も早い可能性が
高いという事に気が付いてしまいました…。下手すると40%くらい早いかも。
ProbCut比では3〜4倍速いという事です。
もともとProbCu自体は中盤探索で前方枝刈するための仕組みです。
これを読み切りしながら順次探索範囲を広げる事でソート順を修正する方向で
活用しようとしているのですが、下位のところを何度も読むオーバーヘッドがあり、
そこを置換表で高速化と考えていましたが、どこかがおかしい…。
そうこうするうちに、評価関数の精度が上がって、反復深化で十分実用になる
ソート順がセットできる事になった模様です。
まだバグの可能性は捨てきれませんが、一旦諦めようかな。 ProbCutは一旦放置して、地道にSolverの速度アップを始めました。
作り直した時に、末端ノードの処理を結構簡素化しちゃったので、やり直しです。
で、Zebraの初期バージョンのオーダリングを日本語で解説した資料を見つけて
色々とノウハウを得まして、Fastest Fastの処理を見直したり、その他色々やった
ところ、速度が倍になりました。
が、見たくない現実としては、まだZebraの当時のFFOテストより若干遅い感じです。
以前はFFO#20限定で0.3秒くらいまで行っていたのですが、まだ1〜2秒前後。
ちなみに、似たスペックのPCでの計測値が公表されているマスターオセロは、
更に10倍程度高速です。ぬぬぬ。
棋譜作って学習していくと、探索時間が地味に短くなっていくし、時にはオーダリング
の間違いが直ってジャンプするように特定の盤面で高速化する事がありますので、
まだまだ辛抱かなぁ。 なんとか棋譜訂正が終わりました
それだけだと終盤探索にあまり効き目はなかったようです…
これで終わりたくなくて色々見直したところ、なんとかFFO55が6000秒から2500秒切るレベルまで高速化されました
ただ問題があって、空きマスリストを用意していない影響で、空きマスが2つになるまでビット演算で着手番号を取得してるので、NPSがかなり低くなっています
ここを改善するだけでも20%ぐらいは高速化するのではないかと…今週はそのへんやってみようかと思います テスト結果を載せます
ここから2倍ぐらいになれば、MasterReversiの背中が見えてくるレベル・・・まだまだです
YBWCとかやらないとなぁ
Microsoft Windows 10
Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
キャッシュサイズ256MB
FFO#40 ( Exact:(a2:+38) 1.19sec node: 12.33[Mn] nps:10323[Knps] )
FFO#41 ( Exact:(h4: +0) 2.99sec node: 35.31[Mn] nps:11825[Knps] )
FFO#42 ( Exact:(g2: +6) 2.86sec node: 39.98[Mn] nps:13961[Knps] )
FFO#43 ( Exact:(G3:-12) 2.49sec node: 25.47[Mn] nps:10236[Knps] )
FFO#44 ( Exact:(D2:-14) 4.08sec node: 40.86[Mn] nps:10006[Knps] )
FFO#45 ( Exact:(b2: +6) 29.92sec node: 449.45[Mn] nps:15022[Knps] )
FFO#46 ( Exact:(b3: -8) 7.48sec node: 87.43[Mn] nps:11687[Knps] )
FFO#47 ( Exact:(G2: +4) 3.71sec node: 49.65[Mn] nps:12851[Knps] )
FFO#48 ( Exact:(F6:+28) 18.78sec node: 216.42[Mn] nps:11523[Knps] )
FFO#49 ( Exact:(e1:+16) 53.12sec node: 655.97[Mn] nps:12350[Knps] )
FFO#50 ( Exact:(d8:+10) 141.11sec node: 1.39[Gn] nps: 9873[Knps] )
FFO#51 ( Exact:(E2:+6) 39.81sec node: 509.68[Mn] nps:12804[Knps] )
FFO#52 ( Exact:(a3:+0) 54.33sec node: 725.60[Mn] nps:13355[Knps] )
FFO#53 ( Exact:(d8:-2) 774.22sec node: 10.74[Gn] nps:13873[Knps] )
FFO#54 ( Exact:(c7:-2) 965.65sec node: 14.37[Gn] nps:14973[Knps] )
FFO#55 ( Exact:(G6:+0) 7124.95sec node: 105.41[Gn] nps:14794[Knps] )
FFO#56 ( Exact:(H5:+2) 244.72sec node: 3.22[Gn] nps:13475[Knps] )
FFO#57 ( Exact:(a6:-10) 926.60sec node: 11.06[Gn] nps:13352[Knps] )
FFO#58 ( Exact:(g1:+4) 551.11sec node: 8.16[Gn] nps:14803[Knps] )
FFO#59 ( Exact:(g8:+64) 0.94sec node: 5.28[Mn] nps: 5626[Knps] ) 間違えて前のバージョンを載せてしまいましたw
今回はこちらです。比較になってちょうどよかったかも
FFO#40 ( Exact:(a2:+38) 1.29sec node: 10.63[Mn] nps: 8244[Knps] )
FFO#41 ( Exact:(h4: +0) 2.97sec node: 25.54[Mn] nps: 8599[Knps] )
FFO#42 ( Exact:(g2: +6) 2.24sec node: 20.58[Mn] nps: 9189[Knps] )
FFO#43 ( Exact:(C7:-12) 2.54sec node: 19.23[Mn] nps: 7572[Knps] )
FFO#44 ( Exact:(B8:-14) 4.32sec node: 32.07[Mn] nps: 7418[Knps] )
FFO#45 ( Exact:(b2: +6) 27.68sec node: 294.61[Mn] nps:10644[Knps] )
FFO#46 ( Exact:(b3: -8) 7.56sec node: 68.56[Mn] nps: 9070[Knps] )
FFO#47 ( Exact:(G2: +4) 3.25sec node: 36.70[Mn] nps:11293[Knps] )
FFO#48 ( Exact:(F6:+28) 21.11sec node: 195.99[Mn] nps: 9286[Knps] )
FFO#49 ( Exact:(e1:+16) 34.84sec node: 346.90[Mn] nps: 9958[Knps] )
FFO#50 ( Exact:(d8:+10) 108.94sec node: 960.91[Mn] nps: 8820[Knps] )
FFO#51 ( Exact:(E2:+6) 36.21sec node: 378.54[Mn] nps:10453[Knps] )
FFO#52 ( Exact:(a3:+0) 63.95sec node: 730.82[Mn] nps:11429[Knps] )
FFO#53 ( Exact:(d8:-2) 545.77sec node: 6.17[Gn] nps:11304[Knps] )
FFO#54 ( Exact:(c7:-2) 626.09sec node: 7.42[Gn] nps:11848[Knps] )
FFO#55 ( Exact:(G6:+0) 2492.74sec node: 31.10[Gn] nps:12475[Knps] )
FFO#56 ( Exact:(H5:+2) 212.26sec node: 2.52[Gn] nps:11894[Knps] )
FFO#57 ( Exact:(a6:-10) 520.85sec node: 6.35[Gn] nps:12183[Knps] )
FFO#58 ( Exact:(g1:+4) 588.80sec node: 8.54[Gn] nps:14512[Knps] )
FFO#59 ( Exact:(g8:+64) 1.88sec node: 8.86[Mn] nps: 4722[Knps] ) なんか買っただけで満足してしまっている自分がいるwww 空きマスリストを作る方式でやってみたのですがビット演算のほうが5%速かったみたいです
こうなるとオーダリングのコストを下げるしか無くなってきました RYZENですか
自分もi5なので、新しいPCが欲しいところ >>496
せっかくなのでなにか͡コテ名乗ってくれませんか?
まあ無理強いはしませんが。 シネベンチマルチ1705CB
うーん、壊れる前のマシンの倍くらいにはなってるんですかね? さて本題のAI開発は何から始めようか?w
差しあたっての目標はAQをwindowsでビルドかな >>491
よくみたらキャッシュ256MBってどうゆうこっちゃw windowsでビルドするの結構難しそう。
気分転換にAQのあらかじめexeになってるものを落として動かしてみたら割とサクサク動く。
そして当たり前だけど強い。
これは期待が高まるw おお。大体僕の倍くらいの速度ですね。
なお、気が短いし、記譜訂正が26手目くらいまでしかできていないので、
今は#40-#44の5つしか計測していません。昔から#41がピンポイントで遅い。
空きマスのビット演算、ちょうどやったところです。
mobility使わずに、flip関数がゼロだと着手不能ってパターンです。
静的オーダリングを使っていますが、角優先×最後って事で。
パターン配列作ってループ回してAND版と、先に空きマスをpextで並び替えて、
テーブル引いて元に戻して着手する版と2種類トライしまいしたが、速度差は
誤差としか言いようが無いレベルでしたorz
元に戻す演算を思いついたらまたトライする予定。
本日はProbCutを再トライ。今度はちゃんと高速化しているようです。
スレッショルド1.0σで反復無しで、その結果を用いてアスピレーションウィンドウ
サーチして、少し高速化できたかなぁと言う感じ。
ただ、投機的に高速化しているので、FFOで比較しても、苦手盤面がありそうです。
棋譜が揃って来たら投機のヒット率が上がると信じて、しばらく使ってみます。 535さんニューマシンおめ!
自分はSurface3で、i7-4650Uの1.7GHz(2.29GHz)×4です。
キャッシュとかどこで見れるのかなぁ。 ちなみに、偶数理論は何度かトライしていますが、速度低下してしまうので
使えずにいます。
ZebraはUndo方式で空きマスリストを常時更新しているようです。
僕はCopy方式で、末端の該当ノードで空きマスリストを作ろうとしているので
すが、なかなかうまくできません。
過去にpaint処理みたいな方法で完全な空きマスリストを作成しましたが、
当然オーバーヘッドが大きくて使い物になりませんでした。
最近は「どうせ4隅でしょ?」という事で、盤面を4分割して空きマス計算して
いますが、それでも遅い。
「どうせ4隅」が良くないのか、偶数理論の理解が間違っているのか… 高負荷時のファンが意外とうるさいorz
熱風もなかなかorz
あんまり連続実行しないほうがいいのかもorz なんかクロームがメモリ1GBとか使ってるんだがこれで平常運転なのか?
メモリに余裕あるからってなめすぎじゃね? >>497
なるほど、では495ということで…
あとキッシュサイズは置換表のサイズです >>507
コテありがとうございます。よろしくお願いします。
CPUのキャッシュかと思ってビビりましたw。 AQのビルド、linuxだとBAZELで、windowsだとCMakeでって書いてあるんだけど、
CMake用の入力ファイルが見当たらないorz
windowsもBAZELでやるんだろうか?そこからわからんorz いかん、投資に見合った成果を挙げねばww
とは思うが腰が重いorz windowsは一旦保留にしてLinuxに走るのが正解だろうか? ネイティブリナックスをデュアルブートにするかVMWareでいくか。
なんかwindows10とlinuxのデュアルブートは罠があるらしくちょっと怖い。 うーん、やっぱAQ無理かもorz.
もっと簡単そうなのに逃げるべきだろうか?
とほほ 同一HDD 内で、Windows10・Linux のデュアルブートは、素人では元に戻せない。
だから、日経Linux では、仮想OS を使うように書いてある。
Virtual Box が多いかな
Ruby できるなら、Vagrant, Chef から使うのもよい
漏れは、WSL・Ubuntu16.04 を使っている。
ただし、WSL はGUI なし。コマンドのみ
開発用だから、本番では使えないし、Docker なども使えないけど、
WSLは単なるアプリだから、遊ぶには気楽 うーん、今後の方向性が定まらないorz.
最終的にはwindowsでやりたいからそこも悩みどころ。 Iterative Widening何とかできた。平均的に高速化できていると思う。
FFOについては相変わらず>>495さんと比較して速度は半分くらいかな。
一方で記譜作成的には倍速になったイメージ。細かく4σまでWideningして
いる事で、仮探索の誤答が減った事が効いています。
仮探索で増える時間
> 仮探索が正解した時に減る時間 + 誤答した時に増える時間
Iterative Wideningで、仮探索時間の削減と正答率の向上の両方が実現できた
感じです。この辺、課題盤面との相性がある話なので、統計的に計ろうとすると
かなり面倒です。というか、統計的に計るためには、前提となる評価関数をロック
しなきゃなりませんが、現在記譜作成しながら評価関数学習させてますので、
前提が常に動いてしまいます。
現在オーバーヘッドが嫌で、ノード数をとっていません。並列化するとロック
の待ち時間で数%〜10%くらい速度が落ちちゃうからです。ノード数をとれば
純粋な速度比較がしやすいのですが、悩みどころです。 なんも進展がないのでとりあえず昔作った19路囲連星AIをビルドする環境を新マシンに構築しました。
リハビリの意味でもしばらくこれいじってようかな。 オンラインボードゲームって作れば流行ると思うんだけど、誰もやらないってことはサーバの維持費の方が高くなるんかね? そう簡単に流行るかよ
囲碁のkgsとかだってかなり廃れてきてるのに 気持ちだけ焦るけど、何も進まないというorz
とりあえず、結果だけ求めるのは謹んで、
地道に愚直にディープラーニングの勉強するのが正解だろうか? 自分の場合、プログラムいじるネタが欲しくて、ヘウレーカ!って感じを味わいたくて、
続けているだけだからなぁ(汗
目標でかすぎるとか、期限切りすぎると、焦って嫌になるだけだよ。
オセロなんて、既にやってる人ほとんどいないから、ちょうど良いのだw
今の目標は、60歳になるまで続ける事w そうですね
結局自分のペースで一歩一歩進んでいくしかないですよね
ありがとうございます これからどうしようかなぁ。
以前、途中までうまくいきかけた9路囲連星を移植したalpha zero クローンのコードを読み解くのやってみようかなぁ。
それとももっと本とか読んで理論の基礎から固めていくべきだろうか。 loser_sのブログ読んだけど、重大発表やばすぎだろ VMWareのubuntuで9路囲連星のalphazeroクローン動かしてみたらなんかメモリリークする。
前のマシンではメモリリークなかったのに?
OSとかpython とかCUDAのバージョンが変わったせいだろうか?
うーん、解決する気力がいまいち湧いてこないorz やっぱ出来ればwindows & C++ で行きたいなぁ。
うーん。 悶々としつつ19路囲連星AIでLV3と対戦させたら素晴らしい勝ち方した。
(;SZ[19]
;B[jj];W[ji];B[ii];W[hi];B[ih];W[ik];B[ki];W[jl]
;B[hh];W[ij];B[jh];W[lh];B[gg];W[ff];B[fg];W[gi]
;B[kg];W[eg];B[lg];W[hg];B[hf];W[jg];B[jf];W[km]
;B[ig];W[hj];B[fh];W[ln];B[mo];W[lj];B[hg];W[mj]
;B[jg])
自然な流れからのダブル必勝形。
こういうのがたまにあるから止められないんだよなぁ。 ふーむ。ダブル必勝形で勝負ありかと思ったら白にも粘り筋があって意外と奥が深い。
でも正しく打てばたぶん黒の勝ち。 やっとこさ週末か。でもどうせ進まない予感orz
せめてなにかこれだという方針が定まらないと。
焦っちゃダメと頭では分かっていてもついww 理想を言えばwindows & C++ & reinforcement learning
その線で探ってみるか まだまだ方向が定まらないけど、来るべき時のために今のうちに棋譜集めを始めるべきだろうか?
無駄になるかもしれないけど、何もしないよりはいいよね? 16プロセス並列棋譜取り
なかなか圧巻ですな
ファンがうるさいけど 全コア使い切っちゃうとほかの作業がしづらいorz
開発用と計算ぶん回す用で2台欲しいwww
ありえないけど。 使用コア数制限するパラメータないの?
自分のは並列化処理に使用コア数カウンタ入れて、同時並列数を制限している。
もっとも常に4コアで4多重マックスで動かしているけどorz。16コアなら1つくらい
他のプロセスに空けても、あんま速度低下なさそうでうらやましい。
今現在は記譜作成がメインなので、気が向かない時もほっとけば棋譜を訂正しながら
勝手に学習して、少しづつ速度アップしてくれている。気が向かない時に焦らずに済む
のでお勧め(^^;
一時速度アップに燃えていたけど、1勝9敗以上の比率で速度アップに失敗して(まあ
そんなもんなんだけど)、今は停滞期間中w >>535
その手がありましたねww
作業中は12プロセス位にしとくか
なにはなくとも棋譜取りだけはコツコツつづけます。
一日で多分3〜4000局くらい取れるはず。
ちなみに今これ見てるけど速攻挫折しそうorz
https://github.com/HerveFrezza-Buet/RLlib 平日まとまった時間が取れなくてもちょっとづつでも進んでいかないとねぇ。
まあ、棋譜取りしてるだけでもいくらか気がまぎれるけど。
100万局目指すか。 RLlibやっとサンプルがコンパイルできた
ここまで長かった
つかリンクオプションで-lgslつけなきゃいけないとかずっぽり嵌ったわ まったりと記譜取りしてても仕方ないので、速度アップできないか色々あがいてました。
久々にプロファイラで確認したところflip関数が30%、mobility関数が8%ほどでした。
Edaxのソース見つけたので禁断の答え合わせ。flip関数は一つ昔のタイプなので、
恐らく自分の方が早い。mobilitiy関数は少し早そうなので、考え方を導入。でも誤差
範囲の効果しかなかった。
速度計測ルーチンを作って、並列単体速度比が1.2程度しか無い事が判明。
並列処理で排他待ちしそうなところに無駄がないかチェックしたところ、ほぼ全部無駄
だった事が判明(汗。無駄箇所を全て削除したけど、誤差範囲(汗
後方枝刈(ヒューリスティックスなオーダリング)が気になるので、ノード採取してみた。
やはり2割程度速度ダウンするので、プリプロセッサで普段は切り離す事に。
その他もろもろ誤差範囲の改良を積み上げた結果、なんとなく1〜2割は速度アップ
した気がしますが、並列処理の効率が悪いのと、後方枝刈の工夫が足りていないの
2か所が、これからの課題かなと思います。
あれ?なんか、ループしてmin-Max探索の高速化に目的が戻ってきている(笑) んあ?RLlibって強化学習のライブラリではあるけどalpha zeroとは直接関係ないのか?
全部無駄だった?
www g++ にfilesystemってヘッダがないorz
とりあえずいまVSインストールしてる なんか非合法手を選んでしまうみたいなんだが?
うーんなんだろ? 他人のコードに頼るのやめて自力実装に走るべきだろうか?
他人のコードってなによりいまいち情熱が湧いてこない。
でも他人のコードも読めるようにならないと先はないんだろうなぁ。
我流じゃすぐ限界迎えそう。
悩ましい。 まただよ(再起動)
windows10でも変わらずか… コーディングは進まないけど棋譜だけは溜まっていきます。
今、LV3 vs LV3の棋譜が61950局分溜まってます。
ファンがうるさいから夜中は回してないから日中だけなのにこのペース。
8コアはさすがといったところか。
アルファ碁Leeが16万局分の棋譜を使ったらしいからとりあえずその辺目指すか。 FFOテスト(#40−#49)、色々誤差範囲の改良を加えてじわじわスピードアップ
していたけど、ある日突然20%くらい悪化。元に戻せるところは戻したけど、
結局ダメで、裏で評価関数の学習し続けた結果、途中経過でたまたま探索が
悪化するところにはまってしまったと言う事かなぁと。
実際、悪化しているの#49だけで他は改善していたし、学習都度表示している
FFO問題の8手読みの次の一手の合否が、14/20から11/20に悪化している。
こういうのあると、速度アップで何を信じて良いのかわからなくなるよね… という問題もありながら、ノード数表示して、>>492さんの結果と比較すると、
ノード数に圧倒的な差が。NPSは速いけど、それ以上にノード数が多い。
枝刈の差というにはあまりに大きな差で、一桁近い差です。
これ、Iterativeな手法で生じる置換表探索の差じゃないかと思う。
自分のは置換表の動作が遅いので、あまり深い探索まで置換表を適用できず、
読切において後ろの方は置換表が無い(そもそも使用していない)事で、何度も
再探索しているからかなと。
concurrent_unordered_mapを使っているけど、自前でハッシュDB作った方が
良いかもと思い始めた。そこで速度アップすると、置換表適用深度を深くできる。
こういう時、自前で作る人はチェーンハッシュ使っているのかな? 昔自前でハッシュ作ったことありますが素朴な実装だとさほど性能出なかった記憶がありますね。
自分の場合STLでいいじゃんみたいな結果でした。
テーブルのサイズをでかくすると意外と巡回が遅くなるみたいな。 スマホでconnect4のパーフェクトソルバーをちょくちょく遊んでるのですが
パターンをかなり覚えて7割くらい勝てるようになりました
囲碁とかも真の棋理が明らかになった方が
逆に人間がコンピュータに勝てるようになるかもしれませんね ハッシュの構想し始めましたが、確かに自分が作って早くなる保証はないですね。
インターフェースを既存のstlに合わせようとか思って調べ始めたら面倒になりました。
で、色々見ていたら、そのまんま効率化できそうな使い方を見つけた。
有れば読み込んで更新、無ければ追加の方法です。
あとバケットサイズとか個数とか、その辺を調べていった方が早くなるかも。
並列処理だとtry_emplaceが使えないのね。これが使えたらきっと早くなるのに。 また再起動してる。。。
まあいいけど、もう諦めぎみ。
なんか仕事が急に忙しくなってますますコーディングから遠ざかってますが、
棋譜だけは地味に溜まってます。今82889局分溜まってます。
並列化ハッシュってどんななんですかね。そういえば知らない。 いや。まぁ。バケットか中のレコードか、どちらかの単位で排他かけるだけです。
Hash関数がきちんとばらけさせてくれたら、基本的にあんまり排他で捕まる事は
無いので、それほど気にしなくてもパフォーマンスに影響ないかなぁと。実際に
concurrent_unordered_mapの配列用意して、適当にハッシュでばらけさせて格納
してみたら(つまり、同じmapじゃなければ排他はおきない)、排他で遅くなっている
訳ではない事が確認できています。
と言いながら、iteratorとか考えだすと、何を並列セーフにして、何をアンセーフに
するかみたいな事で悩んじゃいます。
先日の続きでmax_load_factorとかbacketサイズとかいじってみましたが、
パフォーマンスにほとんど影響がないです。というか、どうせ後で逐次的に拡張する
くらいならと、backetサイズを増やしても性能は上がらないし、max_load_factorを
増やしても、性能が落ちるだけだったり…。
棋譜作成だけなら並列化レベルをもう1段上げて、4記譜同時作成とかすれば、
個々の読み切りはシングルスレッドに下げられて、ただのunordered_mapが使えるし
その方が棋譜作成的には速度アップしそうな気がしてきた(汗
FFO的には別処理になるけど。 採りためた棋譜をもとに序盤DBを更新してみましたが、
確かにうち筋は変わってる気がしますが強くなってるかはよくわからないというorz
まあ序盤DBは誤魔化しみたいなものだから期待しすぎもよくないか。 序盤DB更新で強くなってるか統計とってみたいけどモンテカルロが遅すぎてそれもままならないというorz
やはりモンテカルロに代わる何かを実装しなければ… 棋譜USBメモリにコピーしたらめっちゃ時間かかるorz
130MBくらいなのにUSBメモリってやっぱ遅いんだな。 4記譜並列作成実装してみました。ただいま本番状態でテスト中。
並列処理の基本は、なるべく上位の層で並列化すべしでした。
現状、並列探索の速度は、シングル探索の2倍程度です。
1つ1つの探索には時間が2倍かかるけど、4つ並列なので、トータルでは
半分の時間で処理できるので、実質2倍みたいな。
探索中のオーバーヘッドはほぼ無いはずで、待ち合わせロスくらいなので、
大量に一気に処理する分には、ほぼ無視できるかなと。
これやると、スレッドの数がモロに効いてくるんで…48並列くらいできたら… 310さんはintel派なんでしたっけ?
AMDでもzen2はかなりコスパいいものが来ると思いますが… 試しにSSDに棋譜コピーしてみたらかなり速いw
やっぱそうなのか。 あれれ。思ったほど速度が出ない…というか、単体の速度が半分どころか、
1/4くらいになっているイメージ…。深さが深いものほど遅いという事は、
置換表周りかなぁ。
棋譜作成する対象によって速度が結構変わるので、評価しづらい。
メモリー配置等の問題も考えないといかんような気がしてきた。
いかん。夜も更けていく…。
>>561
なんか、フラッシュメモリー自体は書き込みが遅くて、SSDだとその辺を並列
化とかキャッシュとかで回避しているらしいです。USBメモリーは、その辺真面目
にやっているもの(高価)と、そうじゃないもの(安価)で差があるけど、それでも
SSDには敵わないとか。 明日か明後日あたりで棋譜10万局分溜まりそう
深層学習のプログラム、組みたいなぁ
でも難しいんだよなぁ 悩ましい。
シングルmin-Maxの並列動作と、パラレルmin-Maxのシングル動作。
どうも速度的には大差ない感じ。
2倍くらい速度出ると思ったのに…。
スレッド数が増えたら差が出てくるのかなぁ。 多分俺が世界で一番囲連星LV3の計算を回した人だろうなw 色々あがいた挙句、そこそこ時間がかかる26手空きを、それぞれで解いてみた。
並列探索で6分。シングル単独動作で12分。シングル4並列動作で18分。
やはり、シングルも4並列する事でなにがしかのオーバーヘッドがあるようです。
単純計算だと並列探索6分を4個で24分に対して、シングル18分で4つ解ける
事から33%の速度アップが見込める事になるけど、体感そこまでの効果が感じ
られないというか、時間がかかる問題では更に差が大きくなっていて、そいつらに
足を引っ張られている印象。
そのうえで、裏でゴソゴソやりながら計算させる時に色々弊害があるので、
CPUの増強を決断するまで放置しようかと思います。
色々あがいた結果か、並列探索ですこーし速度アップした感じ。
10%行くかいかないか。 よくわからんがハイパースレッディングって単純に性能2倍になるわけではないということではなくて? もちろんそうなんだけど、排他待ちを要するデータも、待ち合わせロスも
無いので、もうちょっと性能出るんじゃないかと思っていたのです。
あと、うまく説明できないけど、ノード数が多い探索は、ノード数比以上に
時間がかかっている気がしています。まだ感覚の話ですが。 LV3は強いんだけど詰み状態から詰みを逃してる棋譜が散見される。
直せるもんなら直したほうがいいんだろうけどかなり大変だろうな んー。シングル並列動作で6時間かかっても解けずに諦めた盤面とを見つけて、
パラレルで解いたら1時間40分だった。空きマス26だと通常1分程度なんだけど、
時々こういう時間がかかる盤面がある。今までテストが面倒なので、10分以内に
終わりそうな奴でテストしていたけど、もしかしたら探索ノードが多い奴ほど、
シングル並列動作での速度低下が大きいのかも知れない。
時間がかかる奴ほど、シングル・パラレル比が悪化するなら、今考えている大体
3倍程度ってのは成り立たなくなって、もっと悪い事になる。それなら感覚的に
合致する。普通に流れている時には、シングル並列で高速化できそうな手ごたえ
があるんだけど、時間がかかる盤面が来ると急速に逼塞していって、なかなか
回復しないという感じ。
パフォーマンスモニタにらみながら、unordered_mapのメモリアロケーションの方法
を想像してみた。初期確保件数指定(倍々で自動追加される)してみたけど、溢れて
もいないのにダラダラとメモリー使用量が増えていく。もしかしたらOSにメモリーを
貰いに行く動作が排他待ちになっているのかも知れない。どうやって検証しよう。
やっぱ自前置換表作るしかないのかなぁ。 あけおめです。
ヒープをダラダラと確保するのが気になったので、色々いじりました。
ordering用のvectorを、配列にしてスタックに。ついでにクラス化してメンテ性アップ。
少しだけ速度アップした気がする。
自前ハッシュテーブル型の置換表を作ってみた。
最初に大きく領域確保して、溢れた時以外領域確保しないようにした。
基本、余計な機能は実装していないので、処理は軽いはずなんだけど…
極ほんの少しだけ速度ダウンした感じ…
記譜作成はunordered_map版で実行しながら、改良をしてみたいと思います。
とはいえ、ソース的にはあんまり改良の余地がないんだよなぁ。
速度がそん色ないところまで行けたら、シングル版の並列での速度低下が
メモリー確保が原因か検証できるかなぁ。 チェーン型でハッシュを組んでましたが、テーブルがあふれると結局ダラダラと
メモリー獲得し始めるので、オープンアドレス型に変更して、まとめて領域を追加
するようにしました。
この辺、もう趣味の世界ですね。
何をしても、速度は上がりも下がりもしない(汗
やっぱり探索ノードを減らす工夫が重要ですね。 自己対戦のみで強くなるアルファゼロは理想ですが実装が難しそうなので
せっかく棋譜も集めてるので教師あり学習をやってみようかと思案中。 とりあえず、棋譜データからmin-max探索して黒有利の局面か白有利の局面かの2択を学習させようかな。とか思ってます。
そろそろ寝るか。。。 寝るタイミングを逸してしまったw
プログラミングってこれがあるから怖いよねw なんか100兆局くらい棋譜を集めると序盤DBだけでもかなり押せるんじゃないかなぁ。
そんな感じ。
いかん、寝なければww 質の悪い棋譜ばかり100兆局集めてもあんまり強くならない気がするのですがどうなんでしょう
質のいい棋譜がそれだけ集まればいいですがそれはほぼ不可能ですし… そうはいってもLV3の棋力はかなり高い。
囲碁将棋でいえばアマチュア3段くらいには相当するはず。 波があるからアマチュア3段は言い過ぎだったかなw
でもまあ強い時はかなり強い。 置換表一時調子が良かったのですが、修正加えたら崩壊。
なんとなく読み取りが変な感じなんだけど、どこがおかしいのか全くわからず。
>>578
棋譜たくさん集めて序盤DB作ったら、その序盤DBのMax手順以外の手について
は、分岐した以後の盤面だけで学習させると序盤の穴が埋まるというか、間違った
盤面でぼやっとした学習するの避けられるかも。
今、序盤についてはそのやり方で学習させてます。 とりあえず、昔作ったTINY-DNNのプログラムを引っ張り出してきて学習プログラムを仮組したが絶望的に遅いorz
グラボ使えればちっとは違うんだろか?うーむ。 オープンアドレスうまく動くようになりました。
ここに愚痴ると、直後に原因がわかる罠w
この数日の葛藤は何だったんだ。 >>582
Tiny-DNNはGPU対応していないんじゃないかなぁ。
結局、DCNNはGPUで処理しないと無理っつー気がする。 >>584
あ〜やっぱそうなんですかねぇ。
GPUも結構いいの買ったのでぜひ活用したいところではあります。 明日は仕事なのでハマらないうちに切り上げようww
社会人として自制しなければwww 学習回しても損失が全く減らない。。。
そういやそんなのあったな。orz なんかネットワーク初期化忘れてたみたいw
初期化したら損失減ったw
ちょっと希望が出てきた。 損失減ることは減るんだけどホントにちょっとづつしか減っていかない。
ネットワークの形状が悪いんだろうか?学習率だろうか?
うーん、深みにはまりそうorz 学習の速度はオプティマイザに依存します。
普通のSGDだと、あちこちぐるぐる回ったり、平野トラップで立ち往生したり、
局所最適解から抜け出せなくなったり。また、SGDは学習率(α)を大きくすると、
簡単に発散しちゃったりしますので、学習率を低めにして1000回とか学習する
事になります。それでも上記の問題で、なかなか収束しなかったり、うまく学習
できなかったりします。
そういうものなのです。昔は、初期値(乱数設定しているはず)を変えてみたりして
トライ&エラーしてましたが、今なら別のオプティマイザ(RMSpropやADAM)を試す
べきかと思います。それでも数百回は学習を繰り返さないといけないと思います。
久々に検索したら結構種類が増えてた。
https://qiita.com/ZoneTsuyoshi/items/8ef6fa1e154d176e25b8
自分は線形回帰モデルですが、SMORMS3を使って効率化を図っています。
それでも、数百回学習しないと損失は落ち着いてきません。 置換表ですが、結局のところ、ハッシュのビット数を増やしてチェーン接続があまり
生じないようにし、メモリーをある程度のサイズでまとめて確保する、チェーン型
ハッシュに落ち着いています。
普段速度計測に使っているFFO#40-49ではconcurrent_unordered_map版より若干
遅いのです。が、どうも残り28手(現在はそのあたりをチェック中)では、自作チェーン
ハッシュの方が早いというか、ノード数が増えた時に速度低下が少ないように感じて
おり、現在は自作置換表を使っています。
とはいえ、29手や30手まで行った暁にはチェーン接続が多発し始めて速度低下が
始まると思われるので、対策を考えて行きたいと思います。28手が終わるまでまだ
一カ月くらいかかるので、幸か不幸か時間はたっぷりあります(--;
今のところチェーンの代わりに2分木を置いて、ハッシュが衝突したときの速度低下を
O(n)からO(log(2)n)にしてみようかと考えています。 ふーむ。要素が少ない時はリストやツリーは遅く、配列が圧倒的に早いという認識でしたが。 あれ、序盤DBに棋譜を追加したら全然おかしな手を打つようになっちゃった。
棋譜がまずいのかな? くそ〜強いAI(自我があるとかではないよ)作りてぇなぁ 三連休とはいえそろそろ寝なければな。
生活のリズム崩すのはいくない。 質にばらつきのある棋譜から良いデータを抽出する方法はあるのだろうか? うーんせっかく3連休なのに捗らないな。
これだというアイディアが湧くまでこねくり回すしかないか。 結局アルファゼロという正解がある限りその呪縛から逃れるのはかなり難しいorz
うーん。 やっぱグラボも活用したいなぁ。
でも難しいんだよなぁ。
とくにウィンドウズだと。 昨日一日学習回して損失が初期値の2/3位になった。
この辺が限界かなぁ
それともぞうきんを絞るようにまだまだ損失減るんだろうか? NN系は学習してるんだかわからない時があるよね。
とことんまで回すと今度は過学習も怖くなってくるし。
こちらは、自作concurrent_mapクラスができました。
ハッシュキーは二分木で、ハッシュ値は64bit。
配列ハッシュキー版と同様に、削除もiteratorも無し。
すこーし速度があがったかなぁ程度。
衝突時の処理はチェーン式。流石に64bitだとキーの衝突が無い。
棋譜訂正は時間がかかるので、暇つぶしが必要な状態。
二分木を赤黒木に変えてみようかと思い始めています(汗。
本当はヒューリスティックスの改良の方が効果あるんだろうなぁ。 赤黒木を検討してますが、これ並列処理だと木全体をロックしないと
いかんのではないかと…。置換表のように追加の頻度が高いケース
では、排他待ちでパフォーマンス出ないかも。
まあ、やってみるしかないけれど。 赤黒木とかめっちゃむずかしいやつですやん。
さすがですな。 ん、なんか学習したネットワークがすべてのデータに対して同じ結果を返してるっぽい? 学習開始時のネットワークの重みの初期化をミスってるんだろうか
うーん。 tiny-dnn以外のGPU使えるライブラリで重みだけ学習してアプリケーションからはtiny-dnnを使うというのもあるのだろうか 全く同じ結果ではなく微妙に違う結果を返してるのは確認できたけど。
単に学習量がたりてないのかなぁ。 やっぱり全く同じ結果返してる??
混乱してきたorz 層が多すぎたのが悪かったみたい?
層減らしたら違う値になった。 お、LV1に勝った!
まあDNNの学習の効果の勝利というよりも序盤DBと詰みルーチンの補助による勝ちなんだけどね。
でもとりあえず、それっぽく動くところまで来ました。 序盤DBが良すぎてDNNの真価がわからないから序盤DB外してみるか… やっぱ序盤DBに頼るか…
こんなにプログラムが楽しいの久しぶりやな たぶんだけどまだまだ棋譜増やしたほうがいい。
ていうかあればあるほどいいい。まだまだ良くなる。
可能なら100万局を目指したい。 赤黒木大体できたけど…ただの二分木よりほんの少し遅い…。
元々ハッシュでランダマイズしているから、二分木の末端ノードまでの深さは
綺麗な正規分布になっていて、赤黒木にしても木の最頻高さで3割程度しか
小さくならないという事で、ツリーを修正するオーバーヘッドが効いているのか、
それとも木全体でしか排他できないのが原因なのか。
もうちょっと調べてから諦めます。 要素が100個未満ならぶっちゃけvectorでいいと思いますが。。。 前も同じこと言ったような気がするけど、学習させるなら局面の勝率より次の一手のほうがいいのだろうか? いまきたんですがここはどんなゲームを開発してるんですか
じぶんで開発したとして対戦相手=プログラムありますか >>619
とりあえず、落ち着いて。
過去ログから読んでください。 置換表に使ってるので要素数は現在残り28手で100万超える事もあります(汗
まあ、βカットの具合でだいぶ変わるので、学習進むと減るんですが。
最低でも残り30手まで行くつもりなので、1000万くらいは想定したいです。
次の一手ソート用の配列は、Array型にしています。32個確保すれば足ります。
こちらも比較したところ、明確に速度差がありました。この辺から、領域をチマチマ
確保されるオーバーヘッドが気になりだした次第です。
で、赤黒木ですが、実装が悪いのだと思いますが、現時点で2分木と比較して
およそ3倍時間がかかります。シングル動作でも同じくらいの差になるので、
排他待ちではなく、木のつなぎ替え処理の重さが原因かなと。置換表は追加が
の比率が大きいので、ポインタたどるロスは優位ではない感じ。
というわけで、赤黒木はちょっと放置。
というか、二分木もシングル動作は10倍くらい速い感じなので、今一度シングル
探索の並列化を試そうと思っています。 >>618
min-Max前提だと、探索値を求める際には勝率(点数)が必須で、
次の1手評価関数はオーダリングや前方枝刈向きではないですか?
探索深さ1なら次の1手で行けますが。
初代アルファ碁も、両方組み合わせていますが、次の1手評価関数で
手の優先順位をつける事で読み深さを実現した変則mctsで、最終的には
評価値で判断していますよね。 ふーむ、勝率のほうが応用が利くってことですかね?
もうしばらく勝率で学習させてみます。 ついネットワークを大きくしたくなっちゃうけど。
本当は小さいネットワークでエポック数を稼いだほうがいいのかもしれない。 そういえば、対称局面も学習データとして使ったほうがいいんでしたっけ? 囲連星は初期配置ないんでしょ?
だったら対象局面ありの方が良いと思う。
オセロは悩み中。
初手をF5固定にした時に、本当に対称局面が出てくるのかわからない。
対称局面が同じ重要性で生じないのであれば、評価値を希釈しちゃうだけ。
学習の時間も単純に倍々で増えるので、今はやっていない。
強いて言うなら、F5F6E6の次がF4とD6で斜め対称になるので、ここだけは
記譜作成時にはF4固定にして、D6の対称局面を作っている。 置換表自作の件、目的を見失っている(汗
一旦リセットして、最初からやり直して、当初の目的に戻ろうと思うorz 私は教師データの数が8倍になるのは大きいと思って対称局面も入れて学習させてます
とくにDeep Learningさせてると(ネットワークの規模にもよりますが)だいぶ過学習しなくなります
もっとも、Deep Learningするんだったら対称性を考慮したネットワークにしたほうがいいのかもしれないですが・・・ 着手できる場所の自由度が高いゲームは回転させるべきだと思う。
オセロは着手可能場所が限られるので、現れない局面が結構ありそう。
ちなみに、オセロは8倍じゃなくて4倍。初期配置が4対称だから。
囲連星は初手天元固定なのかな? >オセロは8倍じゃなくて4倍
たしかに棋譜で考えると4対称しか無いですね
今のところ、学習させるときには現局面しか渡してないので、
90度回転で一致する局面が存在するかもしれないから8倍で良いはず… うーん。今のやり方だとLV0やLV1とはいい勝負になるけどLV3には一生勝てないかも?
出来れば自己対戦による強化学習とか取り入れたいな〜
対称局面もやってみますね。 なんか長時間計算回してると画面が真っ暗になってマウスやキーボード押しても復帰しないことがあるんだが?
スリープは解除してるはずなんだけどなんなんだろう? LV0ってやっぱ棋力低いな。
そんなLV0といい勝負の俺のAIもあれだけど。
やればやるほどLV3の完成度の高さが際立つ。 自作置換表ですが、大体のところがまとまりました。
結局のところ、unordered_mapを作っていた形になります(汗
当初は領域の追加について、データ部分をまとめて追加する方向で改造し、
ハッシュ配列については22ビット固定で、高速化をしました。で、ハッシュ配列が
22ビット固定は芸がないと、二分木・赤黒木などを試しましたが、速度大幅低下。
要するに、unordered_mapにmapを組み合わせて、ハッシュのメリットを相殺して
しまっていたという事で。
最終的に、ハッシュ配列の追加方法をようやく思いつき、組んでみたところ、それが
そのままunordered_mapのrehashだと気が付きました(汗。その後、max_load_factor
などを追加して、unordered_mapと条件を揃えて速度比較となりました。
iteratorと削除が無い分だと思いますが、unordered_map、concurrent_unordered_map
に対して、それぞれシングル版、concurrent版とも若干高速になりました。
新たな課題は…stlも自作版も、どちらも並列に動かしたconcurrent版の方が遅いと
言う事です。もともとそういうものなのか…テスト方法が並列向けじゃないのか。 8対称はメモリがやばいので4対称にします。
4対称で16GB位食ってる。 思い切っていいPC買ったけどまだ足りないとかorzorzorz
ケチらず64GB積むべきだったか? 1エポック4539秒
これは厳しいorzorzorz
GPUが使えれば… ん、1エポック目だけど損失がかなり少ない。。
対称局面を入力とすることで特徴量がよりはっきりしたということだろうか? 対称局面学習以前はどちらかというとランダムに近かったが
対称局面学習以後はどちらかというと知性があるっぽく見える。
まだわからんが。 これでエポックが進めばとんでもなく強くなる?
まだわからんが。 マシンパワーが欲しい!
Googleに匹敵するマシンパワーが! まだLV3には遠く及ばないな。
でも希望が出てきた。 学習用、棋譜採取用、対戦統計用、開発用で4台マシンほしいw やっぱ思考時間短いのはいいな。
モンテカルロは強いけど思考時間長すぎたからな。 棋力が低すぎてすさまじい泥仕合になるの切ないorz メモリがもっとあれば異なるネットワークを並列に学習とかもできたかもなぁ
まさか32GBで足りないとは… DNNの評価値とMM法の評価値の和で最終評価値を算出するようにしてみました。
多分DNNのみより強くなってます。 黒番で軽く動かしてみました。
10局目
黒(airandom.dll)の勝利回数: 8
白(ai-lv1.dll)の勝利回数: 2
まずまずの結果かな。
ちなみに白番はうまく動いてなくて1の1とか打っちゃうので途中で中断しました。 うお、猛烈に追い上げられてるorz
悪くない手ごたえがあったと思いましたが…
25局目
黒(airandom.dll)の勝利回数: 15
白(ai-lv1.dll)の勝利回数: 10 ちょっとヒューリスティックを入れました。
詰めろがあるときは詰めろを優先的に打つ。
当たりの点数を恣意的に上げる。 うおお、キター
DNNでLV3に初勝利!
(;SZ[19]
;B[jj];W[kj];B[ji];W[jk];B[kk];W[kl];B[lk];W[ih]
;B[li];W[mj];B[lj];W[kh];B[ki];W[mi];B[lh];W[ll]
;B[lg];W[lf];B[kf];W[ik];B[le];W[mf];B[jh];W[mk]
;B[ke];W[ml];B[kj];W[kg];B[jg];W[mh];B[mg];W[mm]
;B[mn];W[kd];B[kh];W[ld];B[kg])
対LV1も流しなおしててこんな感じ
24局目
黒(airandom.dll)の勝利回数: 18
白(ai-lv1.dll)の勝利回数: 6 ついDNNの学習に計算リソースを使いたくなっちゃうけど
ぐっとこらえてすべての源泉である棋譜取りにリソースを回すのが正解かも? いやーこんなに充実してるの久しぶりだな。
長いトンネルを抜けたようだ。 うお、またLV3に勝った!
まだまだ負け越すだろうけど、偶然の勝利じゃないってことか。
(;SZ[19]
;B[jj];W[ik];B[ii];W[jk];B[kk];W[lk];B[ll];W[kj]
;B[kl];W[hh];B[mm];W[ji];B[ij];W[ih];B[nn];W[oo]
;B[jm];W[ml];B[hg];W[hk];B[om];W[lm];B[ln];W[nl]
;B[nm];W[im];B[pm];W[km];B[kn];W[pp];B[km];W[qp]
;B[lm]) 明日は仕事だから夜更かしは社会人として自制しなければwwwww
そろそろ切り上げるかwwww そういえば赤黒木って深さキャッシュして置くんですか?オーダーlogで深さを求める方法が思いつかない 長連判定入れなかったのが意外と響いてるな。
ちょくちょく長連に引っかかる ん、DNN学習の裏で棋譜取りしたら計算速度落ちてるな。
コア数は足りてるはずだがメモリ帯域が足を引っ張ったのだろうか? こちらの棋力が上がるのに呼応するようにLV3も素晴らしい手を返してくる。
奥が深いすな。 LV3との対戦統計とってみたいけどまだ時期尚早かな。
まずは大量の棋譜を手に入れる。
量が質に転換する地点が必ずあるはず。 将来的には自己対戦による強化学習は絶対取り入れたい。 今一手読みで打ってるから、3手読みとかモンテカルロか入れたらもちっと改善するかな?
でも計算量がどうなるかだなぁ。
遅いのはコリゴリ。 とりあえず2手読みにしてみたけど2手読みが限界かなぁ
3手は計算量的に相当厳しそう。 2手読み、なかなかいい感じ。
1手読みから明らかにうち筋が良くなっている。
もし3手読みにしたら… 3手読みを仮組してみました。
計算時間がやばいので前方枝刈で思いっきり枝刈してます。 あああ、惜しいなぁ!
今すごくいい勝ち方しそうだったのに!
(;GM[1]FF[4]AP[Zenith:7.0]SZ[19]HA[0]KM[6.5]CA[UTF-8]PB[]BR[]PW[]WR[]
ZT[60]DT[]RE[];B[jj];W[ik];B[kk];W[hj];B[ii];W[jk];B[ll];W[hh];B[mm];
W[nn];B[hi];W[gi];B[jl];W[hl];B[ki];W[km];B[lh];W[mi];B[kg];W[kl];B[ke];
W[kf];B[jf];W[lf];B[jd];W[ie];B[je];W[ig](;B[jg];W[jh];B[ih];W[ji];B[kh];
W[jh];B[ji];W[gg];B[jh])(;B[kh];W[jg];B[ih];W[gg];B[nm];W[gk];B[fh];W[gh];
B[gj];W[fj];B[gl];W[ek];B[fk];W[fl];B[mk];W[gm];B[mh];W[gl];B[jh];W[gj]))
もしこの勝ち方ができてたら瞬間最大棋力は名人に届く、ってくらいすごかった。 実装もひと段落ついた感じがあるので対戦統計とってみます。 やはりLV3は強いですね。
正直、もっと勝てるかと思ってました。
まだまだ精進せねば。
41局目
黒(airandom.dll)の勝利回数: 33
白(ai-lv1.dll)の勝利回数: 8
58局目
黒(airandom.dll)の勝利回数: 48
白(ai-lv2.dll)の勝利回数: 10
32局目
黒(airandom.dll)の勝利回数: 6
白(ai-lv3.dll)の勝利回数: 26 序盤DBがlv3 vs lv3の生の勝率データだからちょっと加工したらもっと有益なデータにならないかな (;SZ[19]
;B[jj];W[ij];B[ik];W[hk];B[hj];W[ii];B[hl];W[gk]
;B[gm];W[ki];B[jl];W[fl];B[km];W[gi];B[ji];W[jh]
;B[lm];W[im];B[il];W[in];B[ml];W[ll];B[lk];W[gl]
;B[nl];W[kl];B[kk];W[ol];B[ll];W[pl];B[kl]) (;SZ[19]
;B[jj];W[ij];B[ik];W[hk];B[hj];W[ii];B[hl];W[jk]
;B[gk];W[hi];B[jl];W[kk];B[gi];W[km];B[kl];W[im]
;B[il];W[gl];B[gm];W[fl];B[ki];W[fn];B[lk];W[mk]
;B[fk];W[lh];B[kj];W[jn];B[kk];W[mg];B[hk];W[ng]
;B[jk]) コア数が足りていたとしても性能が落ちるのは
ターボブーストが利かなくなる分クロックが落ちるということだろうか? 単独で学習流すと1エポック5000秒強くらいだが棋譜取りと並列にすると1エポック8000秒弱かかる。
結構違いますね。 自分からすぐ取られる手を打たない、必敗の手順をちゃんと読む、などの地味な改良をした結果だいぶ改善したようです。
38局目
黒(airandom.dll)の勝利回数: 37
白(ai-lv1.dll)の勝利回数: 1
28局目
黒(airandom.dll)の勝利回数: 28
白(ai-lv2.dll)の勝利回数: 0
30局目
黒(airandom.dll)の勝利回数: 12
白(ai-lv3.dll)の勝利回数: 18 白番が動かないことには自己対局による強化学習も不可能… >>676の棋譜を見ていますが自分からすぐ取られる手を打たなくしたはずなのですが打ってますね。。。
バグか。 すげぇぇぇええええぇえ!
ゲタ打った!!!
(;SZ[19]
;B[jj];W[ji];B[ki];W[ii];B[ik];W[kh];B[jh];W[kj]
;B[li];W[hi];B[lh];W[mg];B[kk];W[lj];B[mi];W[mj]
;B[ni];W[ij];B[jk];W[hk];B[nk];W[gl];B[kg];W[fm]
;B[en];W[hm];B[gj];W[il];B[mh];W[hh];B[hj];W[gi]
;B[oh];W[fi];B[ih];W[ei];B[di];W[jg];B[nh];W[ig]
;B[kh]) ゲタなんか一切教えてないのにゲタ打った。
この衝撃がみんなに伝わるかなぁ。 あれ、ネットワークのファイル更新したらLV2に負けるようになっちゃった。
なぜ? ネットワークじゃなくて序盤DBがおかしいのかなぁ。 久々です。
置換表は、だいぶ前にリハッシュ対応して、この辺にしとこうか状態になってます。
多分unordered_mapの仕組みはそこそこ理解できたと思います。
deleteとガベージコレクション、iteratorを除いてですが。
Edaxのソースを解析しようと、VC++で読み込んでみましたが、Edaxは裸のCで…
_s地獄とコンパイラの違いで、動かすところまで持ち込むのが相当大変な感じ。
一番の地獄は、探索部のソースを見ても何がなんだかわからない事。
せめて偶数理論のところは見つけたいんだけど。滅茶諦めモード。
というわけで、記譜作成を動かし続けるしかなくなってしまいましたorz
WZebraのソースが見たい…。 >>675
メモリバスの帯域とか、L2キャッシュ溢れとか…
わかっているけど、エビデンスが取れないので、認められないorz ゲタっぽい手また打った。
パッと見成立しないんだけど、なんとなく味が悪いことわかってるんだな。
すごい!
(;SZ[19]
;B[jj];W[ji];B[ki];W[ij];B[ii];W[jk];B[jh];W[li]
;B[kk];W[kg];B[ik];W[jl];B[hj];W[lj];B[lh];W[hl]
;B[jg];W[if];B[mk];W[lk];B[ll];W[kl];B[kj];W[lm]
;B[ml];W[mm];B[mi];W[il];B[mj];W[gj];B[nj];W[lj]
;B[li];W[jm];B[lk];W[oi];B[ij];W[pi];B[lj])
>>685
マルチ性能も大事だけどシングル性能も結構大事で
並列計算するか結構悩みどころですね。
学習結果が早くほしい時は棋譜取りしないというのもありっちゃあり。 ん、なんかいままでは序盤DBの力で勝ってきたようなものだけど、
むしろ中盤力のほうが勝り始めてる気がする。
序盤DBが物足りなく感じる。。。 いろいろ試してみたくなるけど、やっぱ棋譜取りがすべての源泉な気がする。
日中は棋譜取りに専念するのが吉か? どうやっても勝ちってかんじではあるけど
17手目が面白い手でうまく必勝形につなげた。
正直この手は俺にも見えてなかった。
(;SZ[19]
;B[jj];W[ij];B[ii];W[hi];B[ik];W[ih];B[hj];W[gh]
;B[gi];W[fj];B[hh];W[hg];B[fh];W[jl];B[gg];W[kk]
;B[kh];W[ig];B[li];W[fi];B[mi];W[ji];B[jh];W[km]
;B[ki];W[ln];B[hi];W[mn];B[ji]) 偶数理論なかなか良い実装を思いつきました。
オーバーヘッドが極小なのは、オーダリングへ影響する値だけゼロにして、
ほぼ速度低下が無い事で確認済です。が…何をどうしても速度がダウンします。
というわけで、またしても偶数理論挫折。
次ネタ考え中。
ネタを一つ見つけたけど、結構全面改訂になりそう。 なんかひと段落ついちゃったら次何すればいいかわかんなくなっちゃったな。
とりあえず、棋譜取りだけは地味に続けるけど。 次ネタ結構大変だと思ったら、意外と簡単にできた。
FFO40-49のタイムは30%強短縮した。
FFO40が悪化して、49はだいぶ短縮しているので、探索深さが深い方が
効果が出る傾向に見える。という事は、残り28か所空きをやっている棋譜
作成では、もっと改善する可能性あるかも。
思い込みって怖い。正直、何故今まで思い付かなかったのだろうというレベルorz 白番動くようになったみたいです。
白番でLV2に勝ちました!
(;SZ[19]
;B[ef];W[eg];B[fg];W[fh];B[eh];W[dg];B[gh];W[fi]
;B[gf];W[di];B[df];W[fe];B[cg];W[dh];B[gi];W[ff]
;B[gg];W[ge];B[hi];W[ej];B[ij];W[de];B[hd];W[hj]
;B[he];W[if];B[hf];W[ih];B[hh];W[ig];B[hc];W[hg]
;B[gj];W[hk];B[gl];W[gk];B[fj];W[ei];B[cd];W[cf]
;B[jk];W[kl];B[ed];W[ee];B[ek];W[dj];B[jh];W[dk]
;B[il];W[df]) パラメータの調整というか、使い方変えたら、更に5%くらい改善。
残り28手空きの記譜作成は、トータル倍弱まで速度アップした模様。
とはいえl、記譜作成の方は、解く問題によってばらつきが大きすぎる
ので、もう少し様子を見ないと、どれくらい早くなったかはなんとも
言えない。早くなったのは確実。
さて、またネタが無くなった(汗 分かってたつもりだったけどLV2の黒番のうち筋が思ったより良くて、
序盤DBに取り込んでもいいかなってちょっと思うようになった。 lv2 vs lv3で棋譜取りしてlv2のいいところを抽出しようとしたら
lv3が強すぎてlv2のいいところが取れないっぽいんだがwwww
これは計算外 lv2 vs lv3はlv2の勝率が3割3分くらい。
思ったよりはlv2が善戦してるかな? lv2の棋譜を取り込んで対戦統計とり始めました。
15局目
黒(airandom.dll)の勝利回数: 13
白(ai-lv1.dll)の勝利回数: 2
14局目
黒(airandom.dll)の勝利回数: 14
白(ai-lv2.dll)の勝利回数: 0
7局目
黒(airandom.dll)の勝利回数: 0
白(ai-lv3.dll)の勝利回数: 7
10局目
黒(ai-lv1.dll)の勝利回数: 1
白(airandom.dll)の勝利回数: 9
6局目
黒(ai-lv2.dll)の勝利回数: 3
白(airandom.dll)の勝利回数: 3
6局目
黒(ai-lv3.dll)の勝利回数: 3
白(airandom.dll)の勝利回数: 3
lv1には文句なく勝ってますね。
lv2もトータル勝ち越せるかも。
lv3は白番でいい勝負なのはすごいですが、
黒番で勝ててないのが気になりますね。 黒番対lv2は勝率100% w
序盤DBが完全に筋に入ってる感じですかね。
対lv3の戦績もlv2 vs lv3の戦績と比較して決して悪くないです。
40局目
黒(airandom.dll)の勝利回数: 36
白(ai-lv1.dll)の勝利回数: 4
42局目
黒(airandom.dll)の勝利回数: 42
白(ai-lv2.dll)の勝利回数: 0
25局目
黒(airandom.dll)の勝利回数: 9
白(ai-lv3.dll)の勝利回数: 16
50局目
黒(ai-lv1.dll)の勝利回数: 7
白(airandom.dll)の勝利回数: 43
30局目
黒(ai-lv2.dll)の勝利回数: 22
白(airandom.dll)の勝利回数: 8
33局目
黒(ai-lv3.dll)の勝利回数: 24
白(airandom.dll)の勝利回数: 9 でも悲しいことに俺のAIには怖さがないんだよなぁ。
ちょっと気を抜くと負かされてしまうような怖さが。
lv2とlv3にはそれがある。 こんな感じです。
50局目
黒(airandom.dll)の勝利回数: 45
白(ai-lv1.dll)の勝利回数: 5
50局目
黒(airandom.dll)の勝利回数: 50
白(ai-lv2.dll)の勝利回数: 0
40局目
黒(airandom.dll)の勝利回数: 14
白(ai-lv3.dll)の勝利回数: 26
50局目
黒(ai-lv1.dll)の勝利回数: 7
白(airandom.dll)の勝利回数: 43
48局目
黒(ai-lv2.dll)の勝利回数: 39
白(airandom.dll)の勝利回数: 9
46局目
黒(ai-lv3.dll)の勝利回数: 32
白(airandom.dll)の勝利回数: 14
ホントは全部50局打ちたかったんだけど時間がかかるので打ち切りました。 DNNの教師データを棋譜からの生勝率ではなく、少し探索した結果にしてみようかと思ってます。 なんか変な手打つorz
結局、生勝率が一番いいのかな… >>684
https://github.com/okuhara/edax-reversi-AVX
は VC でもコマンドラインならビルド可能です。(NMakefile)
(本家の Edax も NMakefile は付いているが、多少変更が必要)
Edax の偶数は基本的に Zebra と同じ。QUADRANT_ID あたりを追ってみては? >>706
情報ありがとうございます。そのソースなのですが、コマンドラインなのですね。
ビルドしたかった理由はデバッグモードを使いたかったからです。
QUADRANT_IDのあたりは追っかけたのですが、もともとの探索の構造が
読めなくて、デバッグモードに頼ろうとした次第です。
で、処理内容を予想して自分で組んでみたのですが、FFOテストでは速度が
若干ですが、落ちてしまうのです。
あと、実はVC++しか使った事ないというか、オセロ開発でC++使い始めたので、
makefileが何やってるのかわからないです(汗
というわけで、ちと調べてみます。
動くだけでも、自動対戦の相手になってもらえる可能性ありますから。 310さんってC++のエキスパートなのかと思ってたっす。
ちょっと意外。 ネタがなくなってちょっと熱も冷めた感じ。
とりあえず、自己対局による強化学習をぼちぼち何とかしたい。 俺のAI vs 俺のAIの棋譜
(;SZ[19]
;B[jj];W[kj];B[kk];W[ji];B[lj];W[ki];B[ij];W[lk]
;B[ll];W[mk];B[ii];W[ml];B[mm];W[nn];B[hh];W[gg]
;B[oo];W[on];B[ih];W[nm];B[po];W[mj];B[nk];W[ok]
;B[ol];W[ni];B[nl];W[mo];B[ln];W[mn];B[lm];W[li]
;B[hk];W[oj];B[oi];W[pi];B[oh];W[qj];B[pk];W[nj]
;B[pj];W[pl];B[il];W[qk];B[in];W[pj];B[im];W[lj])
両当たりかけられるところを放置したり抜かなくていい石を抜いたりいろいろ危なっかしいところはあるが
現状、こんな感じです。 いまよりもっと人工知能技術が普及して働き口が増えたら人工知能系の職に転職したいwww 次のアイディアが出るまで
対LV3の棋譜をとる→序盤DBを更新する→DNNを更新する→対LV3の棋譜をとる
のサイクルを繰り返すことにします。 珍しい負け方した。
白必勝形のダブルリーチ
この形は非常に珍しいと思う。
(;SZ[19]
;B[jj];W[kk];B[ki];W[ik];B[ii];W[hi];B[ij];W[jk]
;B[hk];W[hl];B[gj];W[hj];B[gk];W[gl];B[jl];W[gi]
;B[fi];W[jm];B[kl];W[km];B[ll];W[im];B[fm];W[lm]
;B[hh];W[mm];B[hm];W[lk];B[gh];W[hn];B[gm];W[mk]
;B[li];W[nl];B[om];W[ok];B[nj];W[nk]) 日に日にじわじわ強くなってる気がする。
どこかのタイミングで爆発的に強くなったりしないかな? ようやく評価関数が安定してきたのか、遡り記譜作成の速度が上がってきた気がする。
暇なので、mctsでも組んどこうかと考え始めたら、置換表の新アイデアが。
今までは、unordered_mapにとらわれていましたが、もともと探索木は文字通り
ツリー構造なので、その形のまんま置換表にして、探索しながら木を同時並行
でたどっていけば、置換表内で「探す」必要が無い上に、着手リストがそのまま
ノードとして存在しているので、反復系の探索の時に何度もmobility関数を呼ぶ
必要が無い。
結構大掛かりな修正になりましたが、とりあえず基礎的な探索まではできるように
なりました。速度計測はこれから。
あと、shared_ptr使った事で、不要な置換表データを自動削除できるので、minMaxで
AIを組んだ時に、置換表を縮小しながら再利用できるかなと。
あ、mctsはどこに行ってしまったんだろう(汗 10並列でLV3と対戦しました。
29局目 黒(airandom.dll)の勝利回数: 15 白(ai-lv3.dll)の勝利回数: 14
32局目 黒(airandom.dll)の勝利回数: 15 白(ai-lv3.dll)の勝利回数: 17
32局目 黒(airandom.dll)の勝利回数: 20 白(ai-lv3.dll)の勝利回数: 12
34局目 黒(airandom.dll)の勝利回数: 16 白(ai-lv3.dll)の勝利回数: 18
30局目 黒(airandom.dll)の勝利回数: 12 白(ai-lv3.dll)の勝利回数: 18
32局目 黒(airandom.dll)の勝利回数: 6 白(ai-lv3.dll)の勝利回数: 26
30局目 黒(airandom.dll)の勝利回数: 12 白(ai-lv3.dll)の勝利回数: 18
33局目 黒(airandom.dll)の勝利回数: 18 白(ai-lv3.dll)の勝利回数: 15
37局目 黒(airandom.dll)の勝利回数: 17 白(ai-lv3.dll)の勝利回数: 20
32局目 黒(airandom.dll)の勝利回数: 13 白(ai-lv3.dll)の勝利回数: 19
トータル 144勝 177敗
勝率 44.9%
これはLV2 vs LV3 と比べてかなりいい数字です! >>715の続き
良く考えたら、ツリー構造で自分の値を残しておくという意味で、mtd(f)や
反復深化の系統には効果あるけど、同じ局面を見つける事ができないので
そもそも置換表ではありませんねorz
その代り、並列探索でも排他制御をしなくて良い事になります。
メモリー使用量も少なくて済みます。
速度については、今のところ微妙。
棋譜作成が一段落したらPCリセットしてクリーンな状態で再計測の予定。 対戦統計って10000局くらいやらないと±10%くらいの誤差は簡単に出てしまうのかもしれない。
何局くらいやれば信頼できるんだろ?あんま統計詳しくないんだよな〜 そういえば「コンピュータ囲碁 ―モンテカルロ法の理論と実践」になんか書いてあったような気もする。 なんか弱くなってる気がするorz
LV0とかLV1にも序盤不利になったりするorz
最終的に逆転できることもあるんだけど、そのまま押し切られることもあるorz
まずいでしょうこれはorz んごー。めっちゃスピードダウンorz
ダメ筋だったかも。
途中速度アップしてる気がしていたけど、単にバグっていただけだった。
置換表機能が消えて、余計な筋を読んでいるのか。
それとも、パラパラとmake_sharedしているからなのか。
どうせやる事ないので、しばし検討。 もっとマシンパワーが欲しい!
モアパワー、モアトルクだ! 大学で統計の単位とっとくんだったorz
独学は厳しいorz あの伝説の手筋が実現しかけたが、残念ながら実現しなかった。
あとちょっとだったのに、悔しい!!
(;SZ[19]
;B[jj];W[jk];B[ki];W[ij];B[ik];W[hk];B[il];W[kj]
;B[ji];W[ih];B[hl];W[gm];B[ii];W[hi];B[gl];W[li]
;B[hh];W[ig];B[kk];W[ll];B[km];W[jl];B[jn];W[kl]
;B[lh];W[mg];B[lj];W[hj];B[gk];W[gh];B[lm];W[hf]
;B[he];W[kh];B[gi];W[hg];B[gj];W[jg];B[gg];W[lg]
;B[kf];W[fg];B[ef];W[kg];B[ng];W[gf];B[fe];W[gg]) 負けたけど、7連までの手数が絡んだ微妙な駆け引きが素晴らしい名局だった。
勝つチャンスはあったと思うけどな〜惜しいな〜
(;SZ[19]
;B[jj];W[kj];B[jk];W[ki];B[kk];W[kh];B[il];W[lk]
;B[ll];W[ml];B[in];W[ji];B[im];W[ih];B[nm];W[hi]
;B[jo];W[gi];B[li];W[fh];B[ij];W[ii];B[io];W[ei]
;B[ip];W[fi]) モンテカルロ木探索とDNNと組み合わせてみようかなぁ
そのほうがランダム性も出せるし
でも遅くなったらやだな。うーん なんか取れないシチョウを追いかけたw
シチョウルーチンにバグがあるのか、DNNの評価値でシチョウを追いかけてしまったのかイマイチ判断がつかないな。 ん、なんかLV2にコロコロ負けるようになった。
自分のAI vs lv 3 の棋譜を取り入れたせいで序盤DBが狂っちゃったかな。 なんか新しいアイディアが欲しいな。
>>712のサイクルはちょっと手詰まり感。 ここ数日さぼりっぱなし。
棋譜取りも逆に弱くなりそうでさぼってます。 やっぱ序盤の大局観で優位に立ちたいんだよなぁ。
中盤、終盤はある程度読みでカバーできるけど序盤はマジ謎が多いからな。 バグでドツボ中。
再現性がなさすぎて、よーわからん。
頻度の低さと、再現性の無さから、置換表の二重更新だと思うんだけど…
それっぽい箇所も見当たらない。 完全にさぼり状態。
アイディアも枯渇したし。
どこかにネタ落ちてないかな。 禁断の人間(俺)vs lv3の棋譜取りをやろうかと思ってます。
これは手間が半端ないw 早くもギブアップwwwww
なかなかいい棋譜が取れない
基本的に無理筋orz. 自分のAI vs lv3 で 手筋炸裂!!
うって返しでました!
(;SZ[19]
;B[jj];W[ki];B[ii];W[kj];B[kk];W[ih];B[hh];W[gg]
;B[ll];W[mm];B[mk];W[jk];B[jl];W[ik];B[il];W[hk]
;B[hl];W[gl];B[gk];W[ji];B[hj];W[ij];B[jj];W[hi]
;B[jk];W[gi];B[ik];W[nk];B[lk];W[ok];B[hk]) 棋譜取り再開しました。
弱くなる可能性は潰せてないのですが、何もしないよりはましだと思って。 10並列 対戦結果
30局目 黒(airandom.dll)の勝利回数: 16 白(ai-lv3.dll)の勝利回数: 14
21局目 黒(airandom.dll)の勝利回数: 10 白(ai-lv3.dll)の勝利回数: 11
29局目 黒(airandom.dll)の勝利回数: 12 白(ai-lv3.dll)の勝利回数: 17
22局目 黒(airandom.dll)の勝利回数: 6 白(ai-lv3.dll)の勝利回数: 16
24局目 黒(airandom.dll)の勝利回数: 14 白(ai-lv3.dll)の勝利回数: 10
27局目 黒(airandom.dll)の勝利回数: 14 白(ai-lv3.dll)の勝利回数: 13
27局目 黒(airandom.dll)の勝利回数: 14 白(ai-lv3.dll)の勝利回数: 13
30局目 黒(airandom.dll)の勝利回数: 15 白(ai-lv3.dll)の勝利回数: 15
23局目 黒(airandom.dll)の勝利回数: 10 白(ai-lv3.dll)の勝利回数: 13
28局目 黒(airandom.dll)の勝利回数: 13 白(ai-lv3.dll)の勝利回数: 15
トータル 124勝137敗 勝率 47.5%
悪くない LV3に勝利。
途中負けかけたけど相手がミスした。
終盤の数手が素晴らしい一局だった。
(;SZ[19]
;B[jj];W[ki];B[ji];W[jh];B[ih];W[ig];B[kh];W[jg]
;B[kj];W[hf];B[li];W[kg];B[lg];W[gf];B[lk];W[mj]
;B[hi];W[fg];B[eg];W[mi];B[lf];W[lj];B[fi];W[gi]
;B[gj];W[gh];B[ej];W[fk];B[fj];W[ij];B[ik];W[ge]
;B[ii];W[hj];B[hk];W[fd];B[ki];W[me];B[ij];W[ne]
;B[hj]) それにしてもディープラーニングの学習がメモリ20GB食ってるんだがw
奮発してメモリ32GBにしといてよかった。
やっぱハードウェア性能は正義だな。
Zen2のスリッパ出たらうっかり買いそうで自分が怖いw 12並列対戦
29局目 黒(airandom.dll)の勝利回数: 12 白(ai-lv3.dll)の勝利回数: 17
30局目 黒(airandom.dll)の勝利回数: 17 白(ai-lv3.dll)の勝利回数: 13
28局目 黒(airandom.dll)の勝利回数: 11 白(ai-lv3.dll)の勝利回数: 17
28局目 黒(airandom.dll)の勝利回数: 10 白(ai-lv3.dll)の勝利回数: 18
36局目 黒(airandom.dll)の勝利回数: 13 白(ai-lv3.dll)の勝利回数: 23
25局目 黒(airandom.dll)の勝利回数: 11 白(ai-lv3.dll)の勝利回数: 14
31局目 黒(airandom.dll)の勝利回数: 14 白(ai-lv3.dll)の勝利回数: 17
28局目 黒(airandom.dll)の勝利回数: 13 白(ai-lv3.dll)の勝利回数: 15
32局目 黒(airandom.dll)の勝利回数: 13 白(ai-lv3.dll)の勝利回数: 19
33局目 黒(airandom.dll)の勝利回数: 17 白(ai-lv3.dll)の勝利回数: 16
31局目 黒(airandom.dll)の勝利回数: 17 白(ai-lv3.dll)の勝利回数: 14
25局目 黒(airandom.dll)の勝利回数: 8 白(ai-lv3.dll)の勝利回数: 17
156勝200敗 勝率 43.8%
弱くなったのか誤差の範囲なのか、うーん。 >>742の棋譜を序盤DBに取り込んで、その序盤DBをもとにDNNの学習をやり足しました。
DNNは序盤DB拡張と学習のサイクルを繰り返し行っているので秘伝のタレみたいになってますw
これで今夜からもう一度対LV3対戦やってみます。 7局目 黒(airandom.dll)の勝利回数: 3 白(ai-lv3.dll)の勝利回数: 4
7局目 黒(airandom.dll)の勝利回数: 4 白(ai-lv3.dll)の勝利回数: 3
7局目 黒(airandom.dll)の勝利回数: 3 白(ai-lv3.dll)の勝利回数: 4
5局目 黒(airandom.dll)の勝利回数: 4 白(ai-lv3.dll)の勝利回数: 1
7局目 黒(airandom.dll)の勝利回数: 4 白(ai-lv3.dll)の勝利回数: 3
5局目 黒(airandom.dll)の勝利回数: 3 白(ai-lv3.dll)の勝利回数: 2
4局目 黒(airandom.dll)の勝利回数: 1 白(ai-lv3.dll)の勝利回数: 3
5局目 黒(airandom.dll)の勝利回数: 3 白(ai-lv3.dll)の勝利回数: 2
9局目 黒(airandom.dll)の勝利回数: 7 白(ai-lv3.dll)の勝利回数: 2
6局目 黒(airandom.dll)の勝利回数: 4 白(ai-lv3.dll)の勝利回数: 2
6局目 黒(airandom.dll)の勝利回数: 2 白(ai-lv3.dll)の勝利回数: 4
7局目 黒(airandom.dll)の勝利回数: 4 白(ai-lv3.dll)の勝利回数: 3
42勝33敗 勝率56%
出だしは好調!
明日一日回してどうなるか… 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) ありゃなんかRock54ついとる。
文章の繰り返しが駄目なんか? 残念ながら駄目でしたorz
155勝 209敗 勝率 42.6%
やっぱ対局回数増やすとこの辺に落ち着くのか、うーん >>746から対戦を止めずに継続していましたが
211勝289敗 勝率42.2%
となりました。
やっぱこの辺が真の値なのかな。 まじでZen2スリッパでたら買ってしまいたい衝動に駆られる 8勝2敗だと95%の確率で強いといえるらしいが、12並列もしてると1つは8勝2敗ぐらいになったりするw。
まあ確率的にはそうなのかも。
結局1000局くらいやらないと駄目ってことかな? やっぱ弱くなってるかもT△T
143勝 220敗 勝率 39.4%
このままこの学習サイクルを進めていいか迷うorz 禁断のモンテカルロ木探索の封印を解くか?
しかしあれは計算時間が半端ないからな。
出来れば避けたい。 プロのタイトル戦が7番勝負とかだけど7番ぽっちじゃ真の強者はわからんってことやなw モンテカルロ実装したけど、なんか素朴な手を選ぶようになってしまった。
うーん、コレジャナイ感がorz なんかおかしい。
LV3が強すぎる気がするw
もしかしてLV3には学習機能がついていて計算回せば回すほど強くなるとか?w
んなわけないか。 祝日だって油断してたらこんな時間w
弱くなってもいいから計算量削る方向で調整しています。 対戦統計とってます。
66勝 70敗 勝率48.5%
今のところむしろ勝率上がってます!
速度も若干だけど速くなったはず…
勝率50%が欲しい! 久々です。
新型版はテストのためにいちいち学習を止めるのが面倒で、放置しています。
一晩耐久テストやらないとわからないので。
で、未だずーっと棋譜作成&学習を続けています。
もともと800件強の記譜をベースに間違い訂正をしたり、確定しているところ以降
の全分岐を作成したりして学習データにしていたのですが、昔作った記譜なので
序盤で結構間違いが多く、効率よく学習できないのではないかと考えました。
で、最近は序盤の定石6〜20手からスタートして記譜を作成したりしていました。
そこそこ序盤の間違いが訂正されてきたのですが、まだところどころおかしい
ところがあって、Zebraで並べてみながら、多分間違えたであろう箇所を特定して
それ以後の記譜を作らせる事で、強制的に正しい手順に戻すなんていう、禁断の
ドーピング技を始めてしまいました。
現在は1200記譜くらいまで増えていますが、まだまだ間違いも散見されますし、
パブリックドローの変化っぽいのに、記譜が無いものもあり、まだまだ記譜が足り
ていない感じです。
あと、ドーピング作業やりながらZebraの評価値見ていると、20〜30手目あたりは
進行の種類によってはZebraの評価値もあまりあてにならないなぁと言う事に気付い
てしまいました。ここら辺の精度を上げると、もっと強くできるのではないかと思います。
自動対戦してくれる序盤DB付きのオセロプログラムがあると、ドーピング作業が更に
楽になるんだけど(汗
現在残り20手目以後の学習に使う盤面は70万件くらいになっています。それでも
残り20手以後の初見の盤面の評価値では結構な誤差があります。本当にBuroさん
の線形評価関数で良いのかというのも相変わらず悩ましいところです。 197勝 233敗 勝率 45.8%
悪くない。
一旦対局中断します。 やっぱ1手1秒くらいで打ちたいなぁ。
そうすれば対戦統計も棋譜も全然もっと取れるのに LV2と対戦してみました。
50局目 黒(airandom.dll)の勝利回数: 48 白(ai-lv2.dll)の勝利回数: 2
勝率 96% LV1ともやってみました。
50局目 黒(airandom.dll)の勝利回数: 45 白(ai-lv1.dll)の勝利回数: 5
勝率 90% ふーむ、損失が減らない地点まで学習が進んでしまったようです。
一回止めるか。 うーん、やっぱ現状を打破する画期的なアイディアが必要かな。
ちなみにいまは強さよりも速度が欲しいかも。 対戦してます。
黒番 対 LV3 107勝 102敗 勝率 51.2%
200戦以上して勝率50%超えはすごい!
今日一日回してみます。 結局負け越しでした
165勝 174敗 勝率48.7%
でも決して悪い結果ではない! まだ回してました
239勝 237敗 勝率 50.2%
キター!
まあ、今だと50%行くかどうかはホント運しだいなんだろな。 うお、棋譜が多すぎてls */*.sgfがコアダンプするようになったw
分割しないと駄目か〜 そろそろ人間(俺)相手に勝利が欲しいところだがまだむずかしいかな。
素人相手なら勝てるんだろうか? 既知のパブリックドローのリストが見つかったというか、
今年になってブログでまとめて発表してくれている人がいた。
ちょうど良いタイミングすぎる(汗
2種類あるのと、自分がZebraから拾った奴を合体して、32手目まででカット。
ソートして重複削除したら450件程度に。多分既存の記譜と多少重複してると思う。
全部やるとかなり記譜が偏る気がするけど、やっちゃうかな。 序盤DBを劇的に改善する方法ないかな?
不利なオープニングを避けるだけで勝率めちゃくちゃ上がりそうな予感がするんだが。 作ってるですがそれでも不利な局面になったりしますorz 棋譜から序盤DB作る時に、その盤面からの勝率入れて、勝率が高い手を指す
ようにするとか。まあ、ぶっちゃけ記譜単位でmctsやってるような事になるの。 いや、それに近いイメージのものはすでに実装してあるんですが、たまに変な手を打つのです。 普通DB化すると同じ手順だと毎回同じに間違えるはず。
だとするなら、DBの棋譜をテキストに吐き出すなどして、チェックしたら?
間違いっぽい分岐見つけたら、正解着手させてその後を対戦させて記譜を
強制的に正しい分岐を学習させるの。そのあとでも間違えて、なかなか治らない
事もあるけど。
これが>>760で書いたドーピング。 >>774のリスト。パブリックドローはFJT分だけだった。
2種類あって、もう一つは代表的な序盤定石から適度に着手した後で、
残り30手を読み切ったリストで、ドローとは限らなかった。
遡りチェックの時にあり得ない奴があったので、気が付いた。
試しにZebraで並べて評価値見てみたら、中盤で結構変な手順になっていたりする。
まあ記譜の足しにはなるかなぁという感じ。 手動でDB書き換えるのは工数的に地獄の苦しみなのですw
まあ、負けた棋譜だけ水増ししてDBに登録するのはあるかも? 自動対局プログラムに手を入れて棋譜のファイル名に黒が勝ったか白が勝ったか入れるようにしました。 やっぱ手動で棋譜を訂正するのはムリゲーだなぁ。
棋譜訂正も自動化すべきかな。
うーん そうか。オセロだとある程度定石はあるし、ZebraやEdaxで並べれば
終局スコアの予想はできて、間違いが見つけやすいけど、囲連星では
そうはいかないですね。
途中で変な手を打つのは、恐らく記譜が足りていないからではないかと
思います。オセロでもドーピングやらないで純粋に自己対局学習だけで
やった場合、1万〜10万対局くらいは必要かなと思っています。 勝った棋譜水増しするのと負けた棋譜水増しするのどっちがいいんだろ?
おんなじ割合で水増ししたら意味ないかもw
とりあえず負けたほう増やすか とりえあず、負けた棋譜を100倍にして序盤DBに注入してます。
定型パターンにはまりやすいLV2にはかなり効果あるのですが
変幻自在なLV3には今一つみたいです。 負けた棋譜だけ増やすとバランス崩れるかも?と思い始めました。
うーん。 やはり大量、多種類の棋譜が欲しい。
棋力が下がっても計算量を抑えて、速度を稼ぐ方向で行くべきか? 2手読みだったところを1手読みにしたら大分早くなったけど、やっぱ棋力は落ちるな。
これはちょっと採用するか迷う。 ん、なんか白番が絶望的に負けてる。
なんか評価値の計算まちがえたか? それとも棋譜水増しで入れた序盤DBが狂ったのかな? 白番で、相手が初手端のほうに打ってきたときに、盤が狭くなって序盤DBどおりに打つのが悪くなるみたい?
とりあえず、白番持った時に相手が初手天元付近に打たなかったときは、中央寄りの斜めに打つように変えた。
これで少しでも緩和されるといいな。 水増しした分の棋譜はいったん削りました。
確率の理論を根底から壊してしまうみたいなので。
やっぱ遅いようでもじっくり行くのが確実っぽい。 今、極端な水増しはやめてほどほどの水増しにしてます。
新しい棋譜が古い棋譜の1〜2%程度になるくらいに水増ししてます。 どんより…
バグを見つけてしまった。
今ある記譜50万件の数%くらいに間違いがありそう。
直管的には、全データに対して読み切り処理を噛まさないと間違いの有無すら確認できない。
多分、逆順探索処理を簡素化した時にバグが入り込んだのだと思う。
暇なのでログ書き出しの処理を作ってたら見つかった。
うぐぐ。
もうしばらく様子を確認して、他にもバグが無いか見た上で…どうしよう。
一旦記譜をリセットして作り直すべか。 と、書いた直後に気が付いた。
ログの側のバグだった事に…
お騒がせ様でした。 いままで8対称中4対称で学習してましたが、のこりの4対称も学習させてみることにしました。
8対称すべてはメモリに収まらないので半分づつ学習させます。 178勝192敗 勝率 48.1%
8対称、勝率あんまり上がらないですね。
うーん、うち筋は悪くないと思うんだけど。
なにかブレークスルーが欲しいですね。 154勝178敗 勝率46.4%
2手読みに戻したらかえって勝率さがりましたね。
誤差の範囲かもわかんないですが。 お、素晴らしい勝ち方した。
必勝形のダブルリーチ
これほど少ない石数でこの形を作れるとは…
(;SZ[19]
;B[jj];W[kj];B[jk];W[li];B[ji];W[lh];B[kl];W[jm]
;B[ih];W[lk];B[ig];W[jf];B[il];W[ik];B[hk];W[if]
;B[im];W[ij];B[hj];W[lg];B[ii];W[in];B[ik];W[jn]
;B[ij]) ふーむ、いままで勝率のいい手かつ沢山選ばれた手を優先的に選択するように序盤DB周りを組んでいたのだけど、
それだと手が固定されてしまうかなと思って勝率のいい手かつあまり選ばれてない手を優先的に選ぶようにしたら
147勝 220敗 勝率40.1%
これは誤差とは言えないほどの差ですねぇ。 205勝 246敗 勝率45.5%
棋譜取り&序盤DBへの取り込みを継続したら少し勝率戻りました。
50%付近まで頑張ろう。 なかなかの快勝だった
こういう風に毎回打てるといいんだけど
(;SZ[19]
;B[jj];W[ij];B[ki];W[ii];B[ik];W[ih];B[jh];W[ji]
;B[kj];W[jg];B[kh];W[if];B[hj];W[ig];B[lk];W[jk]
;B[jl];W[hk];B[kk];W[km];B[hl];W[gk];B[gm];W[fn]
;B[kg];W[kf];B[lf];W[mg];B[lg];W[gi];B[le];W[lh]
;B[mh];W[mi];B[li];W[ie];B[id];W[md];B[lh];W[nd]
;B[lj]) 192勝 212敗 勝率 47.5%
棋譜取り、序盤DB更新、DNN更新だけでは50%の壁は突破できないかもな。 130勝 195敗 勝率40.0%
ん、勝率かなり落ちた。
何が起きた? どもです。
ひたすら記譜作成中に、やっぱり暇なので、記譜管理周りをリニューアルしていたら、
結局記譜ファイルの形式を大きくいじってしまい、かなり全面的なリニューアルに。
そしたら、あちこちバグが出て、結局記譜作成より新作デバッグ優先に(汗
>>809-810
序盤DBは、記譜溜めていくと途中で弱くなるけど、いずれ直ってくるものだと思う。
正しい手順があるとして、1回間違えると、間違えた側が負ける記譜ができる。
負ける事で、その手は選ばれない事が記譜に登録される。
しかし、探索の精度が低い状態で記譜作ると、2回間違える記譜ができて、本来
負けのルートで勝ってしまう。これが記譜に登録されると、この2回目の間違いが
訂正されるまでは勝率が下がる。
どのくらいで直るのかは、直接なのか評価関数経由の間接なのかなど、フィード
バックのかかり方で変わってくる。直接的なら割とすぐに直るはず。
自分のは間接なのでかなり時間がかかりそうで面倒なので、Zebraで2つ目の間違い
箇所を特定して、そこまで着手した後探索をする棋譜を作って、かなり強制的に直し
ちゃった。
序盤は大体良いのだけど、確定値で学習している箇所と、序盤DBで学習している
箇所の境目で、確定値が足りないまま過学習になっている評価値ステージがあって
そこらあたりで大抵間違える(汗 天頂の囲碁を使って9路を徹底的に調べたら面白いかも
ま、やらないけどね 新作の探索周りを、例のバグ付のやつにしたら、案の定バグ発生。
色々と入れ替えながらバグ発生箇所を特定に成功しました。
が、なぜそこでバグっているのかわかりませんorz
まともに動いたから良しとするしかない感じ。
あと2か所改良したいところがあります。
あと2日では無理だなぁ。 と思ったら、またいきなりバグ発生。
原因は複数ありそうですorz 原因判明。アホなミスでした。
やっぱり当初の置換表に変なデータが登録されているのが正解だった。
残した課題のうち1つもできた。 最後の課題は、学習の速度アップを目論みましたが、まったくダメでしたorz
さて、何をしよう。 序盤DBがおかしくなってたので、序盤DBの手の採用基準をもとに戻しました。
あと中盤終盤でDNNの値の比重を大きくしました。 59勝 62敗 勝率48.8%
なんとか勝率50%弱まで戻せました。 来たっ
262勝 248敗 勝率51.4%
誤差の範囲かもしれないけど嬉しいっ そろそろ白番も着手していくか、もうちょっと黒番を突き詰めるか。
悩ましいい。 ありゃ、わずかな棋譜を序盤DBに加えただけなのに勝率めっちゃさがった
149勝 202敗 勝率 42.5%
そんなに微妙なものではないと思ってたが?? 棋譜さらっと見てみたけど序盤DBが壊れたって感じでもないなぁ
実は微妙なものだったのか、誤差の範囲なのか? 163勝 202敗 勝率44.7%
±5%くらいは誤差ででるのかもしれないなぁ こんな時統計の知識があれば真の勝率は○○%〜××%の間とか論じられるんだろうなぁ うお、すげぇ
179勝 149敗 勝率54.6%
この数字をどう解釈すればいいのか… まだ勝ってる。
222勝 194敗 勝率53.4%
そろそろ棋譜反映させるか。 長連対策、完全じゃないけど簡単な判定入れてみた。
さてどうかな? かなりいい
対LV2 白番はもうちょっと勝ちたいかな
対LV1
黒番 61勝 9敗 勝率87.1%
白番 49勝 4敗 勝率92.5%
対LV2
黒番 57勝 0敗 勝率100.0%
白番 10勝 28敗 勝率26.3%
対LV3
黒番 25勝 16敗 勝率61.0%
白番 13勝 28敗 勝率31.7% ふむ。かなりいい。
一回止めるか。
対LV1
黒番 90勝 10敗 勝率90.0%
白番 64勝 6 敗 勝率91.4%
対LV2
黒番 78勝 0敗 勝率100.0%
白番 14勝 33敗 勝率29.8%
対LV3
黒番 39勝 23敗 勝率62.9%
白番 19勝 40敗 勝率32.2% LV3 vs LV3の黒番の勝率が65%くらいだったはずだから、黒番で勝率70%位いけばLV3越えといえるかも 地味な学習も必要だとは思うけどアイディア一発でドカンと強くなるのも諦めきれない。 ん、なんかDNN学習させたらうち筋はそんなに悪くなってないと思うんだけど勝てなくなったな。
なんだろう? 173勝 176敗 勝率 49.6%
対戦してみたけど思ったほど負けてないな? 初期アルファ碁のようにポリシーネットとバリューネットに分けてみるか? そこそこの精度でも軽い評価関数は結構ほしいかも。
モンテカルロで役に立つし。 というわけで、今使ってるDNNより大幅に簡素化したネットワークで学習させてみる。
データは同じ。 あれ、大幅に簡素化したのに学習時間が思ったより短くならないな。
10倍速くらい早くなると思ってたのに3倍速くらいだ。 更に簡素化して10倍速くらいにしました。
ちょっと簡素化しすぎかも? 新バージョンで色々プログラム見直し。
探索部は全く改善していませんが、その他の部分が大幅にスピードアップ。
自動記譜作成時のオーバーヘッド(探索以外の時間)がかなり減った。
あとは学習の時間を減らしたい。 大きい方のネットワークの損失が3500位なのに対して小さい方のネットワークの損失が5300位。
さて、使い物になるかな? うおお,遅え!
モンテカルロに使おうと思ったらプレイアウト回数かなり減らさなきゃだめだな。 一回打ってみたけど打ち筋は決して悪くない。
だが激遅。
だかが300プレイアウトでここまで遅いとは… すごいな、こちらの打ち筋は相当改善されたのにLV3がその上を行ってくる。
奥が深い。 ん、まだ学習飽和してないみたい。
ジリジリ損失減ってる。 LV1と対戦させ始めてみたけど、かえって勝率落ちてるな?
まだ対戦回数少なすぎて結論出すのは早いけど、もっと50連勝くらいするかと思った。
対LV1
黒番 17勝 3敗 勝率85.0%
白番 13勝 3敗 勝率81.3% 勝率上がってるみたいです。やった!
対LV1
黒番 156勝 15敗 勝率91.2%
白番 109勝 8敗 勝率93.2% 小さいネットワークの損失も5180くらいまで減ってます!
次は本丸、LV3と決戦や! 対LV3 黒番
47勝 34敗 勝率58.0%
ふーむ、まあ悪くないけど、正直もっと期待していたw
400〜500戦くらいはしないとまだ結論は早いけど。 ほほう、6割行った。
120勝 80敗 勝率60.0% 291勝 231敗 勝率55.7%
ふーむ、まあ悪くないけど。
最終的には対LV3黒番勝率 70% を目指したい。 そういえば、勝率ばかり気にして肝心の棋譜をあまり見てなかったな。
どんな負け方してるのかちゃんと把握せねば。 GPU使いたいなぁ。
せっかくいいの買ったんだから。 ライフゲーム囲碁も平行で開発しようかなぁ。
アルファゼロアルゴリズムが心のどこかで捨てきれない。 ライフゲーム囲碁 コード書き始めました。
ルール実装が結構効率的な奴思い付いて、1000万プレイアウト/s位出ました。
並行でやるっつっても計算資源が問題だなぁ。
囲連星はアイディアないしちょっとお休みかなぁ。 うお、ついに人間(俺)に勝った!
内容的にも文句ない勝ち方だ!
(;SZ[19]
;B[jj];W[ji];B[ii];W[ih];B[ki];W[jh];B[kk];W[kh]
;B[lj];W[ij];B[hi];W[hk];B[hh];W[lg];B[gl];W[mg]
;B[gg];W[ff];B[gk];W[gj];B[ll];W[mm];B[fj];W[fi]
;B[gi];W[hj];B[hl];W[jk];B[ik];W[hj];B[gj];W[gf]
;B[gm];W[gh];B[fn];W[fh];B[lh]) ここまでくると囲連星はいったん公開してもいいかもな。
本当は白黒総合勝率でLV3に勝ってからが理想なんだけど。
あとDBのファイルサイズでかいんだよなぁ。 反応がなくて寂しい。。。
まあもともと過疎スレだからしかたないか。 すんまそん。
ダウンロードしたけど、記譜作成中なので、CPU食いたくなくて(汗 囲碁ディープラーニングプログラミングという本があったので買ってみた C#からC++を呼び出すの結構難しい。
マネージドコードとアンマネージドコードがどうたらとか、、、 囲碁ディープラーニングプログラム読んでるけどすっごい目が滑る
でも12章のactor critics法というのが面白そうで頑張って読みたい 俺のマザーボードRyzen3000シリーズに対応しないらしいorz
ショック うお、betago(>>868の本のプログラム)動いた。
そして意外と強い。 ん、終局の仕方がわからん。
終局は実装されてないのかな? 強化学習本興味あります。
棋譜作成がいまいち上手く行っていないので。 くそう、時間が欲しい。
金さえあればニートになるのにww これから仕事が忙しくなりそうな予感。
まあさすがに土日は休めるだろうけど。 うおお、目が滑りまくりorz
一日無駄になったorz 囲碁は完全に人工知能に負け人間が追いつくことはないとおもうが。
これや将棋は微妙な線で、人間に勝ち目あるかもしれん。
囲碁より勝ち方、有利のさせ方が分かりやすい差。
人工知能なしの人間技で、人工知能に勝てる方法あるんじゃないかと。 「来た!」「16コア来た!」「メイン16コア来た!」「これで勝つる!」 囲碁ディープラーニングプログラミング相変わらず目が滑ってるんだけど、
しつこく食らいついてたらすこしずつ目が滑らなくなってきてる。
何とかものにしたい。 githubのリポジトリbetagoとは別に囲碁ディープラーニングプログラミング用のやつがあんのか!
気が付かなかったぜ!
これで勝つる! 囲碁ディープラーニングプログラミングのgithubのコードいいかも。
マルチスレッドにも対応してるっぽいし。
これはかなり期待できる。 GPUが使えてないみたいだな。
tensorflow-gpuうまく入ってないみたいだ。 それにしてもZen2 スリッパが欲しい。
16C32Tじゃ足りない。
64C128Tが欲しいww ん、27000回学習を回した時点から過去のAIに対する勝率が10%〜30%位しか行かなくなったみたい。
なぜ?
こんなことってあるのか? ん、学習したネットワークと対戦する方法がわからんなぁ。
web_demo.pyあたりで行けそうな気もするが… human_v_bot.pyというのでランダムAIと対戦できるようなので、これをちょっといじれば自作AIと対戦できそう。 ヤバイ、待ってる時間がじれったい。
やはり zen2 スレッドリッパー買うしか… LifeGameGoのルールを早く移植したいけど、もうちょっとgithubコードの感触つかんでからかな。 ふーむ、まじで>>891の状態から抜け出せないな。
ネットワークが小さすぎるんだろうか? あかんな、遅すぎる。
うーん。アルファゼロに幻想持ちすぎかも知れんな。 囲碁よりもシンプルなLifeGameGoならもっと速く学習できるという可能背もありますが…
とりあえず、GPUを使えるように頑張るのが先かなぁ? Surface Pro2の液晶が割れたorz
仕事で使うPCなので慌ててPro6の発注をかけました。
一応コア数2倍の4コア8スレッド、メモリーも16Gになる予定。
そろそろスピードの限界を感じていたので、痛しかゆしなところ。
ようやくIntelの呪縛から解放されるAVX2対応のCPUがAMDから出るというのに、
専用新型PCが遠のきました。
どのくらいスピードアップするかなぁ…。 なんかちょっとモチベが落ちてます。
せっかく週末なのになぁ。 あああああ、だめだ完全に気持ちがしぼんでしまった。 つかやっぱpythonはちょっと厳しいんだよなぁ… あ、会社のPCです。流石に性能2倍なので、買うモチベーションが下がったのです。
現在液晶の表面パネルバキバキで、タブレット機能止めて、
セロテープで補強してだましだまし使ってますが、発熱によって
内部が歪んじゃっているみたいで、通常状態でも液晶が湾曲してます。
で、将棋の探索の深さが意味不明だったので、色々考えていましたが、
なんとなく想像がついてきました。多腕バンディット使って、反復深化と
絞り込みを行っているのではないかと思います。
現状中盤探索の速度がいまいち遅く、シングルプローブカットすると
何故かさらに遅くなるという状態。棋譜作成メインだったので、あまり
気にしていなかったのですが、新しいPC来たらちょっとトライしてみよう
かなと思っています。 新PCセットアップ中。
前回思いついた中盤探索ロジック。具体的に実装を考え始めたら、
MCTSでいいじゃんということに(汗
これからVisual Studioのダウンロードです。 セットアップ完了して、開発環境の移行も終わりました。
VS2017→VS2019でエラーチェックが厳格化したものがあったようで、ソース修正。
Win8→Win10でコマンドプロンプトがなんか変わって、CTRL-Sの動作がよくわからない。
などなど、細かい点はいくつかありますが、速度的には思いのほか効果が出ていて、
ほぼ倍速くらいな感じです。並列のオーバーヘッド増加分を、クロック他CPU単体の
パフォーマンスアップで吸収していると思われます。 倍速はなかなかいいですね。おめでとうございます。
俺も頑張らねば。。。 逃げちゃだめだ、逃げちゃだめだ、逃げちゃだめだ(pythonから) VMWareだとどうにもtensorflow-gpuが使えないのでネイティブubuntuを入れるか迷い中
SSD丸ごと1個あけて別ドライブにインストールすればwin10とも干渉しないはず… 一応ubuntu入ったっぽい。
でも環境構築する根性が湧いてこない。
あしたにするか。。。 あかん、ubuntuすっごい固まるorz
今日だけで4回フリーズしたorz ここまで固まられるとネイティブubuntuは正直、撤退かなぁ
うーん。惜しいなぁ。 VMWareのubuntuは固まらないんだよなぁ
バージョンが違うからかなぁ 50万局学習させても知性とは程遠い打ち筋orz
絶望した! AQZという囲碁AIが50万局の学習でプロに勝ったそうな。
なんで俺が試したプログラムとそんなに違うんだ? 徹夜してしまった
反省(反省するとは言っていない) 地味に改良&棋譜作成継続中。
評価値で黒番+2、白番−1くらいの差が生じているので、
評価関数にバイアス項を導入しました。
他、若干の高速化ネタ。
中盤探索でProbcutすると遅くなる問題を回避。本格修正するか悩み中。
というか、そもそもZebraより圧倒的に遅い原因がわからん。 ようやっと>>920のプログラムにライフゲーム囲碁のルールを実装しました。
python 超つらい… 計算がある程度進むと必ずOSごとフリーズするorz
きょうびOSごと落ちるってどういうことだよ? これはもうアルファゼロには手を出すなという神のお告げかもorz orz orz そもそも、気温が高すぎて留守にしてる最中計算回しっぱなしにするの怖いってのもあるんだよなぁ 中盤探索を改良。
一つは、普通に無駄な処理を見つけて修正。
もう一つは、評価値の計算に差分計算を取り入れました。
今まで並列処理で差分ってどうやるんだろうと思っていましたが、
単にDepth=1のところ(次がLeaf)で、順次評価値計算するのを
差分すればよかったのね。
この2つで、中盤探索で2手ほど深く読めるようになりました。 今、実家に帰省してるんですが>>865のAIを動かしてみようとしたけどdllが認識されませんね?
何が悪いんだろう? 小人閑居して不善をなす…。
思い切って、不要そうに思える棋譜をバッサリ削除してみました。
削除しすぎたかも。
いろいろ細かく修正と、デバッグ用表示の改良。
とかやっていたら、丸1日近く動かしたところで、なぜか急激にパフォーマンス低下。
もともと空きが少なかったSDDが一杯になっている…。とはいえ30Gはあったはず。
再起動していたらもとに戻った。原因不明。
対症療法で不要プログラムアンインストールしていたら、使っているOfficeを間違えて
アンインストールしてしまった。
HDD一杯が原因なのか、評価値のファイルが壊れていた。
ギリギリ間に合ってバックアップから復旧できた…と思う。 SDD一杯の犯人判明。
セキュリティー対策ソフトの監視対象管理DBのファイルが合計で400G越え(汗
ところが、管理者権限ないと停止できず、ファイル掴んでいるため削除できない。
今日は管理者休暇中。
logファイルを頻繁に追記しすぎて、ファイルサイズ変化する都度DBファイルが
作られているのではないかと想像。棋譜バッサリ削除して、一気に遡り探索やり直し
していて、これまでと比較にならないペースと数で追記処理が起きているので、
その影響の可能性が。
Officeは再インストールしてもらったけど、何故かセキュリティ解除キーの入力ができない。
来週月曜日は出張なので、来週火曜日までだましだまし行きます。
古い方のPCがまだ生きているので、Excel作業はそちらでやる事にしました。 囲碁は現在のコミで白番有利説もあるようですがどうなのか 棋譜の作り方全面改訂。
分岐のチェックで、以前は全ての分岐を棋譜化していたけど、今度のは軽い探索で
怪しい評価値(同一評価値〜−4程度まで)のものだけ棋譜化するようにして、
棋譜数を大幅節約。学習が楽になるという算段です。
棋譜づくりが順調になり暇ができると、細かく気になっていた、どーでもよいところを
改良し始めて、バグとりで棋譜づくりが滞るという悪循環orz
よくよく考えたら、PCのパワーアップしたので、またDCNNトライとかしてみようかな
とか思い始めた。tiny-dnnしか選択肢無いんだけど。 googleがminigoというオープンソースやってるらしいですね。
最近さぼりっぱなしだったけど、ちょっと見てみるか。 相変わらずしこしこ棋譜作って学習繰り返してます。
もう無いだろうと思いつつ、ちょこっとした事に気づいて修正を繰り返してます。
置換表のハッシュ関数を改良。
格納効率が結構良くなったので、衝突が減ったはず。
終盤探索の時にBOOK(確定)も参照して余計な探索を減らしました。
基本遡りで確定させているので、運が良い時に滅茶苦茶早くなりました。
無い時は今まで通り(汗
学習データが不足しているのではないかと、置換表内に残っているスコアが確定
した局面FIFOで貯めて、折々に学習に回してみました。1回探索で100〜500件
程度。これをFIFOで500万件。棋譜に残っていない局面で学習する事で、過学習
が防止できるかなと思っていますが…。
現在、27手確定局面で大体14000件の棋譜とその分岐で合計23万件ほどですが、
まだ棋譜が足りていない感じです。が、件数が増えすぎて手に負えません。
BOOKの確認ができるWindowsアプリ作ろうかと思い始めています。 このまま失踪しそうな感じです。
やっぱアルファゼロは手を出してはいけないかったんや。 DCNNになってから、一般人のPCでは手が出せなくなってるからね。
計算プロセス自体は、NNを極端に単純化したものが線形回帰だと思えば、
NNで生まれた計算ノウハウが流用できますよ。
というか、今の時代、ただのLRでDCNNとほぼ同じ強さ、とかの方がオシャレ
ではないかと思う、ひねくれものの僕。 所詮趣味なので、あまり無理せず、やる気になるときにやればよいかと思います。 うーむ、やりたい気持ちはあるのですが、いかんせん難しすぎて…
githubにもっと易しそうなのでてくるまで待つか?うーん。 気温が徐々に下がってますね。
そろそろ計算回しっぱなしにしてもいいかな。
つっても回せるプログラムがないけど。 3日くらい計算回したけど全く強くなる気配がないなorz
もしかしたら微妙に強くなってるのかもしれないけどあまりに成長速度が遅すぎる
やっぱアルファゼロは計算時間が半端ないのかも? やっぱアルファゼロはいったん諦めて、囲連星でやったようにモンテカルロAIの棋譜取り&勝率DB作り&教師ありDNNでライフゲーム囲碁やるべきか?
うーむ DCNN強化学習はマシンパワーが恐ろしいほど必要だからね。
満足できる教師データがそろってから評価関数に使ってみる程度にしないと…。
自由度が高すぎるので、まともな評価関数に収束するまでに、相当な試行回数が
必要なんじゃないかと思う。
自分は棋譜作成をずーっとやっていますが、現在は棋譜作りの目的がBook充実
になりつつあります。なんというか、現在の形はいつの間にかQ学習+ε-Greedy
っぽくなってきています。
アルファ様のお陰で、目標を見失いましたので、手段のためなら目的を選ばない感じ
で、プログラム作る楽しみという方向になっています(^^; ライフゲーム囲碁、モンテカルロAIの棋譜取り始めました。
ヒューリスティックなしのモンテカルロで1手10000プレイアウトで1局に約1分かかります。
それを16並列で1分当たり約16局採取できる予定。
棋譜の質があまりよくないのが難点ですがとりあえず、これでやってみます。 18257局分棋譜が取れたようです。大体13.2局/分くらい取れるっぽい。
全コア動かすとシングルよりやっぱ少し遅くなるみたいですね。 DB作成まで来ました。
ライフゲーム囲碁は囲連星と比べてもっと沢山の棋譜が必要になるかもしれません。
オープニングのバリエーション的に。 評価関数を変えたくなってきた。
偶数手番と奇数手番の癖が顕著になってきたので、スムージングをしたく
なったのだけど、キーを手番優先にしているので、1手進むと盤面がひっくり
返ってしまい、連続性が無くなってしまう。
キーを黒番優先にして、評価値も黒番サイド(白番の場合は−1を掛ける)に
統一するとスムージングしやすくなる。
ただし、評価関数からBookから、あちこち影響が出る。
そろそろソースの整理がしたくなってきていたので、バッサリやっちゃおうかな。
台風で暇だし。 一晩考えてやっぱ辞めました(^^;
単純じゃない。 あ〜なんか情熱が湧いてこないな。
プログラム書くのがすごい億劫。 とりあえず、囲連星のコード流用してDNN学習回せるところまで来ました。
あとはAIプレイヤーのコードを移植すればひと段落かな。 モンテカルロAIとDNNAIで対戦できるところまで来ました。
DNNAIの動きはまあ第一弾にしては悪くない感じ。 パッと見DNNAIには知性の芽生えのようなものを感じる。
勝率に結びつくかは微妙だけど。 勝率に結びついてませんね…。
残念過ぎる…。
寝るか。。。 うーん、ハッキリと弱くなってますね。
ライフゲーム囲碁って昔勝率DB使った時も勝率落ちたし何でだろう? モンテカルロAIにトリプルスコアで負けてますね〜
かなc ここからどうしていけばいいのかわからんなぁ。
負けるDNNAIで棋譜取りして勝てるようになるのかといえばかなり期待薄。
でもやれることもないし一応やってみるか。 DNNの評価値を得点差から勝率と得点差/81の平均にしたところ
トリプルスコアで負けてたのがダブルスコアになったようです。
まだ負けてるけど。
囲碁では得点差で評価値を付けるのはほぼタブーで勝率を評価値にするのがセオリーなのですが、試してみたかった。 うーむ相手から攻撃されたときに反撃しない癖があるようだ。
反撃さえすれば楽に勝てるはずなんだが…。 DNNの入力にに盤面の情報だけじゃなくて、石がぶつかってるところの情報も与えてみるか。
かなり肝になる情報のはずだから。 うお、メモリがパンクしたorz
もー新スレッドリッパーにメモリ1TB載せたいorz データベースがでかすぎるのかなぁ。
500万局面を4対称で2000万局面分くらいあるんだが、初期アルファ碁でも3000万局面くらいだったっていうし減らそういかなぁ。
うーん。 前も言ったかもしれないけどいたずらにネットワークを巨大化するよりコンパクトにしてエポック数を稼いだほうがいいかもしれないな。 学習するほどに弱くなる理由がさっぱりわからんorz
ちょっと休憩 またgithubでアルファゼロ探ししようかなぁ(懲りてない) スレッドリッパー 32コア ベース3.7GHz ターボ4.5GHz 1999$
素晴らしい
金がないけど せっかく良さそうなの見つけたのに、イマイチモチベーション上がんないな〜
なんでだろ。ホントよさそうなのに。 コツコツpythonやってます。
リストの使い方がわかってくると書く速度あがりそう。 >>972にライフゲーム碁のロジックを実装しました。
ランダムプレーヤーと対戦できるところまで確認しました。
意外と拡張しやすい作りになってるっぽい。 インターフェースの作りがうまいプログラムは心が躍りますね。
見習いたい。 うおおお、遅えええええええ
6x6オセロだと結構速いけど9x9ライフゲーム囲碁だとめちゃ遅いorz
なにか高速化策を考えねば… 今日一日、強化学習回してたんですが途中でOS固まってたorz
でも一応、3回ベストポリシー更新されたみたい。
ランダムボットと対戦させてみます。 ランダムボットと黒白25戦づつやってディープラーニングAIの39勝11敗
でだしとしてはまあまあかな。
純モンテカルロAIともやってみよう。 うーむOS固まるなぁ。
今日も固まった。
グラボの熱が悪いのだろうか? パソコンの調子が悪いのならいっそAWSとか検討するという手も…
でも金が… 固まったけど少し更新されてたようです
ランダムボットと対戦したら48勝2敗
結構ハッキリ強くなってるな。 今日も当たり前のように固まってるorz
どうすりゃいいんだ? そろそろ次スレの季節ですね。
順番的に私の番か。
995くらいで立てたらいいですかね。 どもです。そろそろ次スレですね。
相変わらず、色々小改造しながら相変わらず棋譜作り続けています。
Book確認のデバッグ用プログラム作って、棋譜の間違い特定が飛躍的に早くなり、
その分、訂正用の棋譜が膨れて遡り探索がおろそかになっています。
評価関数の学習は進めていますが、どちらかというと評価関数が怪しくて間違えて
いそうなところで、わざと分岐させてBookで正解手順(に近い)の分岐を登録していく
事で、棋譜の精度を上げようとしています。BookをQ値と考えると、選択的なε-Greedy
でQ学習しているような感じになりつつあります。
もちろん、最終的には評価関数に反映しますが、今はBook構築が先みたいな。
VC++のバージョンアップ通知が来たので更新したら、あちこちワーニングや
エラーが出て来まして、ソースの整理をしながら、ワーニングにならないソース
に書き換え中です。急いでも仕方がないので、裏で棋譜作り動かしながら、
ちんたらやってます。
久々にMCTS部分を見たら、バグだらけだったので、直したところ、マシンパワーが
上がったことからか、残り30手程度ならすぐに終局まで枝が伸びて比較的正確に
最善手順が生成できそうかなと思っています。全てのプログラムの書き換えが
終わったところで、テストしてみたいと思っています。 昨日の晩からいままで連続で動いてます。
なかなかベストポリシーが更新されなくて焦れる ランダムボットに白黒25戦づつやって50勝0敗来ました!
このゲームはほかのゲームと比べてランダムボットが比較的強いから素晴らしいですね。 AWSでいいマシンを使うというのも憧れるが、
買うのとどっちが安いかは微妙かな。 スレッドリッパー11月30日発売。
コア数はいわずもがなベースクロックもかなり高い。 pythonの文法は結局何がいいのかよくわからんな。
ライブラリが充実してるってのはそうなんだろうけど。 1000 !
お疲れさまでした。
次スレでまたお会いしましょう。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 769日 3時間 30分 53秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。