[過去ログ] 【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
887: 310 2017/07/06(木)23:41 ID:uY9At7Gi(1) AAS
終盤20手の盤面集めなので、ばらけた方がよいし、ランダム着手の方が速いかなと。

とはいえ、今はMCTS5秒読み+残り20マス完全読みで記譜集めしてます。
1譜3分弱で、今のところ重複記譜なしで、700譜くらい集まったところです。

さっきまで藤井四段のabemaTVにCPUを15%くらい持っていかれていました(汗

改良したいところはあちこちありますが、とりあえずニューラルネットのライブラリに専念。
optimizerをどうやって作ったか、まったく思い出せない(汗
888: 310 2017/07/08(土)20:32 ID:bOmPmg/w(1) AAS
ニューラルネットの計算でけました。たぶん。
頭が行列に切り替わるまでが憂鬱なんだよなぁ。

optimizerは計算式なぞるだけで楽勝でした。が、理解しないまま行列計算
に置き換えているので、何が何だかわからなくて、忘れちゃうんでしょうね。

続いて、tiny_dnnのstl的なインターフェースに憧れて、ミニバッチの処理
とかのインターフェースに凝りだしてしまった。

本当はレイヤー階層定義のところも凝りたかったのだけど、今のところ
MLPレベル(2層)までしかやらないと自分に言い聞かせて自粛中。

学習データは1200局くらい集まりましたが、全滅の時の完全読み切り
の手順取得処理にバグがあって、無限ループ入り。せっかくの全滅に
至る記譜が採れませんでした。無念。
889: 535 2017/07/09(日)21:54 ID:DDYaMcZG(1) AAS
>モンテカルロ木をDBに保存して無限に成長させる
これやってます。
5手目は正解できるようになったようですが、まだまだ完全ソルバには勝てません。
メモリはそんな簡単に爆発しないみたいだけど、木が大きくなるにつれ速度がかなり遅くなる。
UCBの計算が遅いのだろうか?
890
(1): 310 2017/07/10(月)00:58 ID:NRizRRec(1) AAS
自分のはロールアウト関数がボトルネックなので、木が深くなると速度が上がっていき
ます。MCTSの設定も、どんどん深く行く方向で調整してます。UCBの計算は普通に
cmathのlogとかsqrtとか使ってます。

結局、今日は一日、ニューラルネットのライブラリのインターフェースをしこしこと
作って直して、してました。template使いまくりです。
まだやりたい事があるのですが、今の状況では不要だし、泥沼に入りそうなので、
いったんこの辺で。

記譜は1500超えたので、明日から終盤の評価関数作ってみる予定。
できたようなら、MCTSの探索方法を変えて、更に良い記譜を集めるか、それとも
置換表付き完全読み切りのバグを探すか。
891: 535 2017/07/10(月)22:57 ID:Ioy9WIYD(1/4) AAS
きたああああああぁぁぁぁあああああ!!
完全ソルバに勝利!!!!

外部リンク:connect4.gamesolver.org

この勝利を引くために数十回リトライしましたw
892: 535 2017/07/10(月)23:09 ID:Ioy9WIYD(2/4) AAS
ちなみにDBは初期曲面のプレイアウト回数が約36万回になりました。
少なそうに見えるかもだけどDBつくるのに結構時間かかってる。

囲連星にも応用したいな〜
893: 535 2017/07/10(月)23:24 ID:Ioy9WIYD(3/4) AAS
DBの木の深さは一番深いところで37。
結構、深いところまで読んでるんじゃないでしょうか。
もちろん、途中で読んでない局面に分岐されると困ってしまうんですが…
894: 535 2017/07/10(月)23:38 ID:Ioy9WIYD(4/4) AAS
UCBの係数をいじれば木を浅く広くにもできそう?
完全ソルバに勝つにはそっちのほうがいいかもしれないですね。
895: 535 2017/07/11(火)00:01 ID:XEOuAfue(1/6) AAS
>>890
プロファイル取ってみました。
logとかsqrtとかはインライン展開されて?計算時間がよくわからなかったですけど多分ボトルネックじゃなさそう。
ちなみに局面と勝率を保持するクラスのコピーコンストラクタに全体の60%の時間がかかってるという
完全に意味不明のプロファイル結果が出ました。
どう解釈すればいいんですかね?
896: 535 2017/07/11(火)20:08 ID:XEOuAfue(2/6) AAS
んーもしかしてツリーを丸っとコピーしちゃってる?
問題の個所はどこだろう?
897: 535 2017/07/11(火)21:20 ID:XEOuAfue(3/6) AAS
え、めっちゃ早くなった?ww
我ながらこれはヒドスwwww
898: 535 2017/07/11(火)21:50 ID:XEOuAfue(4/6) AAS
うおっ一瞬でメモリパンクしたwwww
310さんの言ったとおりだったwwwww
899: 535 2017/07/11(火)22:02 ID:XEOuAfue(5/6) AAS
局面の合流を検知しないでベタに木を展開してんのがまずいのかなぁ。
まあモンテカルロ木DB化はこの辺が限界かなぁ。
900: 535 2017/07/11(火)22:31 ID:XEOuAfue(6/6) AAS
本線じゃない分岐の間違いを修正するには指数的な試行回数が必要になるなこれは。
まあしょうがないか。
901: 310 2017/07/12(水)20:10 ID:b5nvOjQF(1/2) AAS
直ったようで何より(^^/

自分は合流させてません。
合流させるメリットよりデメリットの方が大きそうだったので考える事をやめました。

モンテカルロ木DB化って、よくよく考えたらQ学習みたいなものではないかと思います。
Q学習だと全部のノードにQ値を持つので、結局全局面保持することになります。
現在Deep Q学習が主流になってるのは、Q値をディープラーニングで近似計算する
事で、全局面のQ値を保持しなくても良くするためという側面もあるかと思います。

で、Q学習だと考えるなら、時々変な手を混ぜて木をきちんと分岐させるってのが、
強化学習の肝ではないかと思います。

当方、完全読み切りのバグとり完了。
ニューラルネットのライブラリも大体できて、1900譜で40手目以後を学習してみました。
やっぱ、疎行列対応の行列パッケージでの計算は、tiny_dnnと比較して圧倒的に早い
です。

データが少ないのと、同一の記譜内からテストデータ取っているのもあるのですが、
テスト誤差は十分小さな値になるのですが、FFOの盤面を評価させると、いまいち
合っていない感じで、あまり汎化できていない感じす。もっと記譜増やします。

やっつけで作ったmcts部分をきちっとさせるのと、とりあえず持っている評価関数
で、puct化できるか、ロールアウトの後半の精度を上げられるか、検討開始です。
強化学習までまだ遠いなぁ。でも、少し背中が見えてきたかな。
902: 310 2017/07/12(水)20:27 ID:b5nvOjQF(2/2) AAS
記譜集めですが、8手までランダム着手していたら、
9手目で白全滅という記譜が取れました(汗
903: 535 2017/07/14(金)21:11 ID:TTQj/Kki(1) AAS
Connect4もひと段落ついたし囲連星もアイディア湧かないし
気分転換にライフゲーム囲碁のAIやろうかな。
904: 310 2017/07/15(土)02:17 ID:qcpUcaKf(1) AAS
再帰呼出は関数オブジェクトを使うと速いというのを見つけて、あちこち試してみました。
static constな再帰関数は速くなるみたい。
クラス内でthisを参照するような類は効果が無いようです。

が…、なんか数か所おかしいような。

やっぱり、どこかでバグを仕込んでしまった模様。むむむ。
続きは明日だなぁ。
905: 535 2017/07/15(土)02:40 ID:+mfEtycW(1) AAS
関数オブジェクトを使うと速いってのはどんな理屈なんですかね?
ちょっと想像つかない。
906: 310 2017/07/16(日)00:06 ID:z0mkcRg4(1) AAS
なんかもともと関数呼び出しの方が速いという事で数字で実証するサイトがありました。
まあ、コンパイルの最適化のかかり具合なのかなぁ。わからないです。
コンパイラのバージョンで違うのかも。

バグの原因はわかりました。関数呼び出しにするときに、同時にパスの扱いを変えた
のが原因だと思います。が、確かめる際にもとに戻したら、普通の関数の方が速かった
という結果に。バグってるときの実行時間なので、あてになりませんが。

というわけで、全部もとに戻して、少しだけ確認しましたが、あまり差はない模様orz

記譜の中に間違った読み切り手順が混じってしまったので、全部再計算。
こちらもパスの扱いを変えたのが原因で、別のバグが出ました(汗
二次災害大です。

再計算は2400記譜で1時間半くらいで、着手は最善手の中でのランダムなので、
1回実行してアペンドすると倍、2回で3倍というように、記譜の増殖が可能と思い
当たりました。これを使えば学習データを簡単に増やすことができます。
907: 310 2017/07/17(月)22:52 ID:GI+vwgP1(1) AAS
評価関数まわりを作ってデバッグ。
その中で致命的がバグが発覚しました。

学習用に溜めた記譜データにおかしなデータがいくつかあるというもの。
学習やり直しです。

記譜データ消した後で気が付きましたが、復旧できないわけではなかった。
後の祭りですorz
908: 535 2017/07/19(水)21:46 ID:oWNrCACG(1) AAS
うヴぉあー
プログラム組むのすっごいだるい。
心ときめくアイディアが欲しいところ。
909: 535 2017/07/20(木)20:57 ID:5PqobJjm(1/3) AAS
ライフゲーム囲碁、DB使ったほうが弱くなる?
どういうことだこれは…
910: 535 2017/07/20(木)21:13 ID:5PqobJjm(2/3) AAS
弱くなってるわけではなく互角のよう?
DBの情報量が少なすぎるだけだろうか?
よくわからん。
911: 535 2017/07/20(木)21:56 ID:5PqobJjm(3/3) AAS
攻め合いが全然めちゃくちゃだなぁ
5x5のパターンマッチ入れるか。
912: 310 2017/07/22(土)02:06 ID:6HI7Rmqm(1/2) AAS
結局40手までランダム+残り20手完全読みな記譜集めて、残り20手の評価関数と
Policyを作ってます。ランダム1000件に対して30件のMCTS自己対戦混ぜたもので
学習してます。ランダムだけで十分学習になるようで、悩むより数を集める方が大事な
感じです。40手以後の評価関数ですが、30手過ぎくらいから、そこそこ使えるみたい
です。

で、これを使ってPUCTな形にしてます。

完全読みが使えないので、20〜40手あたりで最善手(に近い手順)をどうやって
作ろうかという感じです。

まずは、後ろから探索で、何手までまともな手だったか遡るプログラムを作って、
残り25手くらいまで遡れたら良いかなぁと。

つか、強化学習に行っちゃおうかなぁ。
913: 310 2017/07/22(土)20:32 ID:6HI7Rmqm(2/2) AAS
逆順チェックのプログラムして、学習時に、正解手順で遡れる盤面も含むようにして
みました。仕組みとしては、最終盤面からヌルウィンドウサーチして、もっと良い評価に
なる手が無いことをチェックして、OKなら1手遡ります。置換表にてPVの評価は即求まる
のと、ヌルウィンドウサーチを使っているので、25手までなら楽勝です。

MCTSで対戦したデータには27手より前まで遡れるものもあるようですが、丸1日
チェックしても終わりそうにないので、25手で打ち切り処理を入れました。

記譜に正解手順で遡れる手数を持たせて、学習時には、その手番以後の盤面を使用
する事で、30手過ぎの評価の精度を上げられたら良いなぁと思います。
914: 535 2017/07/23(日)00:28 ID:IndxNOGW(1/2) AAS
5x5のパターン入れたらむしろ弱くなってるような…
え〜なんで〜?
絶対効果あると思ったのに。
915: 535 2017/07/23(日)20:45 ID:IndxNOGW(2/2) AAS
ライフゲーム囲碁も囲連星も完全に手詰まり。
それはそれとしてスレッドリッパーが欲しすぎる。
916: 310 2017/07/23(日)23:50 ID:DIga1NIH(1) AAS
遡りチェックしていたのですが、普通のUCT時代の方が精度が高い。
そこで気合入れてPUCTのチェックをしてみたら、案の定符号がひっくり返って
いる箇所があったり、パスの処理が抜けてたり。

たぶん、これで大丈夫だと思います…。

これでしばらくは、高速化しながら、記譜集めですね。
1-
あと 86 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.013s