【オセロ,将棋】ボードゲーム Part2【囲碁,War】
■ このスレッドは過去ログ倉庫に格納されています
比較的地味なボードゲーム専用のスレが欲しくて立ててみました。
前スレ
【オセロ,将棋】ボードゲーム【囲碁,War】
http://mevius.2ch.net/test/read.cgi/gamedev/1057763418/ ここって書きこみないと落ちちゃうとかあるんでしたっけ?
とりあえず、スレたて乙です。 どこかにtiny-dnnのまとまったドキュメントないですかね〜
とりあえずvec_tというのが何者かわからないorz. どもです。
強化学習ですが、まだまだ時間がかかりそうで、業を煮やして学習率あげたら、
バリューが発散してやり直し(汗
ちょっと工夫を加えて、強化学習を数回したら、MCTSで自己対戦して記譜作成。
記譜を見て学習の進捗を計りながら、過去に採取した記譜で軽く教師付き学習
させて、学習の方向性を補正しつつう、後半部分の精度を少しづつ上げて、強化
学習がはかどるようにしようとしてます。
というわけで、純粋な強化学習ではなくなってしまった。 名前はどうしましょうかね〜
新スレだし310,535を名乗るのもなんですね… 気が散ってほかのことをしてしまうorz.
先延ばし先延ばしにしてしまうorz. アルファ碁ZEROだそうな。
自己対局の強化学習のみだそうな。
レート5000越えだそうな。
囲碁AIやらなくてよかった・・・ 旧アルファ碁に100戦100勝て
宇宙やばいってレベルじゃねーぞ? 掲示板情報を総合するとMCTSなんだけどRolloutを使っていないという事らしい。
現在出張中なので、論文ダウンロードを躊躇しているけど、読みたいなぁ。
自分のオセロでは、スピードを稼ぐためにRolloutにヒューリスティックスな次の1手
を使用しているけど、自己対戦見ていると序盤良い感じで来ていると、Rolloutが間違
えて、負け手順に入る事が多い。それで、Rolloutせずに(したふり)Valueの遡りだけ
でQ値を計算したらどうかと思っていたんだけど、そういう事なのかなぁ。Rolloutを
省略しちゃうと、ものすごいスピードアップするので、探索が深くなるんだよなぁ。
先にやっちゃえばよかった(汗 すいません、310じゃなくてもいいのでなんかコテつけてくれませんか?
どうせ2人しかいないからわかるっちゃわかるけどw あ、つけ忘れ失礼。
Rollout無し版を試してますが、何故か最近静まっていた終盤読み切りのエラーが(汗
撲滅していたはずなんですが・・・ Rollout無しのMCTSは圧倒的な探索深さを実現できるかわりに、今までRolloutで
修正かけていた評価値の誤りがダイレクトに出て、読み間違いは相変わらずです。
強化学習が進めば治るはずですが、SGDでは遅々として学習が進まないので、
optimizerをSMORMS3に戻して、一旦記譜学習を増やしてみました。やはり学習速度
が圧倒的に違います。そして、このやり方でも大丈夫っぽいです。
どうも遠回りしていたようです(汗 なんだろう、このtiny-dnnの得体のしれぬハードルの高さは…
パッと見、すごくよさげに見えるのに全然前に進めない。
なんだろう…なんだろう… とりあえず、mnistのやつは正解をlabel_tで渡すみたいだけど
局面の勝率を正解にしたい場合はどうすればいいんだろう?
ラベルと勝率じゃデータ構造違うよね多分?
それとも同じなんだろうか… 内積とると考えれば勝率を一次元のベクタと見なせばつじつまが合うのか? >>17
mnistは、分類器(他クラス分類)なので、活性化関数はsoftmaxになり、教師データ
はlabel_tで与えます。別にvec_tでも良いですが、例えば3という答えに対して、
label_tは{3}なのに対し、vec_tは{0,0,0,1,0,0,0,0,0,0}などとなって冗長なので、label_tが
用意されているわけです。他にも、誤差の計算方法が違うなんてのもあります。
一方、ゲームの勝敗予想は2値分類問題なので、活性化関数はsigmoidで、教師
データはvec_tとして、勝利を{1}、敗北を{0}として与えて学習させます。
オセロには引き分けがあるので、引き分けは{0.5}としてみましたが、勝率50%と引き
分けでは意味がまったく違うのが悩みの種です。2人ゼロ和完全情報ゲームでは
勝率50%というのは理論上存在しないのですが、強化学習の途中などでは生じます
からね。
なお、tiny_dnnでは2値分類や回帰の学習には入力データも教師データもともにvec_t
で与えてfitを用い学習します。mnistのような他クラス分類でlabel_tで教師データを与え、
学習をする時はtrainを使用します。 × 他クラス分類
○ 多クラス分類
ですね。IMEのアホたれ(汗 おおーありがとうございます。
trainの代わりfitってのがあるんですね。
ドキュメント読もうとしても英語ということを差し引いても
気が散っちゃって目が滑っちゃってどうにも駄目です。
試してみます。 CNNの例題は大抵が多クラス分類問題ですからね。
説明がfit中心になりがちです。
つか、僕もかなり目が滑りました(汗 うお、コンパイル通ったけど不正終了するorz
ネットワークの形が不整合起こしてるのかなぁ cross_entropyだと動くのにmseだと落ちる
完全に意味不明 cross_entropyでも動かなくなったw
なんなのwww
もう寝る rollout無しにして探索速度がかなり上がったのですが、10手目近辺には
ツリーの深さが50手まで達してしまいまして、今度はスワップとの闘いに
なりつつあります。探索幅をケチればスワップは回避できるのですが、
そうすると読み漏れが・・・。
8ギガ程度じゃこの速度を活かせません(汗 あれれ。また名前が消えていた(汗
お分かりの通り、今のところ名無しは310です。 なんかキャッチできたみたいです。
bad allocation
だそうです。
いまはmain全体をtryでくくっているのでどこで例外が出ているのかよくわからないですね。
まずはそこの絞り込みですかね。 盤面のデータをvectorに突っ込んで返す関数があるのですが、
盤面のデータがでかすぎるってことみたいですね。どうやら >>27
解決したみたいです。
ありがとうございました。
助かりました。 スタックオーバーフローじゃなくて32bitだとメモリが足りないってことみたい。
64bitでコンパイルしたら正常に動いたみたいです。 動いてるように見えるけどエポックが進んでも損失が変わらない。。。
何を間違えてるんだろう? ネットワーク少し複雑にしたら激遅になったorz.
も〜ムカつく。 ん、これシングルスレッドで動いてるん?
マルチスレッドに出来るのかな…
もう今日は寝ます。 ネットワーク1段増やすだけで信じられないくらい遅くなりますよね。
最初に十分に深くして学習させて、だんだん減らしながら適切な深さを
求めたいんだけど、この速度低下を考えると、本当に学習できるのか
わからないままだんだん深くしていくしか無いというのが萎える点です。
スレッドについては、リソースモニターで確認するとわかりますね。
ヘッダのどこかに並列化の設定があったはずです。
コンパイラがVSならOpenMPのオプションを設定します。
コンパイラのオプションの方もOpenMPの設定をお忘れなく。 一応マルチスレッドで動いてるみたいですけど、CPUが50%位しか行かないですね。
あと、エポックが進んでも損失が変わらない原因がさっぱりわからないorz. 畳み込み層の設定がおかしいみたい。
畳み込み層外したら損失減った。 CPU使用率はそんなもんかも。
ヘッダの話、Eigenとごっちゃになってるかも。
強化学習ですが、徐々に進んでいます。もっと早くSMORMS3にしとけば良かった。
終盤読み切りのソート順に評価値を使用しているのですが、目に見えて速度が
上がってきています。また自己対局の精度も上がってきたようで、遡りチェックで
30手まで何度か行きました。逆に記譜収集の方は、スコアのばらつきが無くなって
きて、記譜的に良い事なのか不安。
というわけで、手ごたえを感じつつ、現状に合わせて若干設定変更。 なんか畳み込みにこだわらなくても全結合でも結構いい線いきそうな?
まあ試しに全結合で進めてみるか。 AIに組み込んでみましたが全く強くなってないですw
そういえば、ライフゲーム囲碁はDBつかっても強くならないんだったww
囲連星に転進するか… 囲連星のDB全部vec_tに変換したらメモリパンクした^^
学習しないな俺w
マジでスレッドリッパーに128GB積みたい気分 データ減らしたら動き始めました。
でも遅いな〜こりゃそう簡単には終わらんぞorz.
まあ今晩一晩流してみますが… バラして部分づつ学習する手もあるかも。
あ、元データはランダムに並び替えた方が良いですよ。
わかってると思いますが。
こちらは、しばらく強化学習していたら、それなりに学習が進んだ結果、
対戦相手側の手のばらつきが足りなくなって、局所解に陥ってた感じ。
急きょばらつきを広げて学習再開させたところです。
バリューの方は地道に損失が減っているんだけど、ポリシーの損失が
増えてきた。ポリシーはsigmoidがあるので、ウェイトが絶対値でとてつも
なく大きくなって、なかなか修正しきれない状況になってるかもしれない。
一旦リセットすべきか悩み中。 1エポック5000秒、しかも損失があんまり減っていかないorz
これはかなり厳しい ネットワークの大幅な簡素化が必要か?
でも今のネットワークでも損失が減っていかないところを見るとそれも望み薄かなぁ たぶん、損失の減り方は最初はゆっくりだと思います。
「特徴抽出しながら」誤差修正していってますから。
僕と同じ悩みですね。
ネットワークの大幅簡素化の結果、最終的に線形回帰まで戻ってしまいました(汗
もっとも、オセロはBuroさんの特徴抽出があったから線形回帰まで戻れたのですが。
スリッパとGPUが呼んでます(笑)
でも、もしかしたらAMDよりINTELの方が良いかもしれない。
高いけど。 簡素化してみました。
1エポック650秒位。
損失はあんまり減っていかない。
うーん。 60エポック回したけど損失減らずorz
くそ〜どうすりゃいいのさ ライフゲーム囲碁は結構損失減ったのになぜ囲連星はあんまり損失が減らないんだろう?
入力のサイズがでかいのは確かにあるけど。 石を中央寄せにして19x19の盤面を9x9くらいに削ってみるか… ミニバッチサイズも何気に速度に影響ありですねぇ
ここでもパラメータいじりの沼か。。。 あかん、まったく使い物にならないっぽい。orz
学習が足りないだけなのか根本的に無理筋なのか。。。 勝率予想だからダメなのか?
次の一手予想のほうがいいんだろか?
うーん。 あとは畳み込み試してないか…
畳み込みに賭けるか… お、畳み込み動いた。
後はどれだけ損失が減ってくれるかだな… 同じ道をたどってますね(汗
こちらは、MCTSで構築したツリーを使って、完全読み切りが速くならないか
試していますが、謎のバグのオンパレードでかなり戦線縮小。一応、それなり
に動作するレベルまで撤退してテストしていますが、なんとなく速度アップは
している模様。
ただ、バグの過程で置換表データに変なものが混じったらしく、学習させると
異常終了になります。記譜は1700件くらい集まっているので、一旦全消去して
しまいました。 ツリー探査がおかしくなる状態を確認。
けど、カーっとなって即座に終了してしまったので、詳細判明せず。
なんとなく症状は見えたので、しばらく目視デバッグします。
というか、これにより直近に遡りチェックやった記譜の正確さに不安が生じてます。
やけに遡りチェックが簡単に通るなぁと思っていたけど、これが原因かもしれない。
というわけでタイムアウトまで行った記譜を50件ほど再チェックしなきゃならん。
全部で54時間くらいかかる予想。今週はまるまるパーになりそうです。
その分、良質な置換表データが補えるんだけど。 畳み込み駄目でしたorz
くそ〜ディープラーニングからは一時撤退するか… ぬがーーーーーーーーーーーー!
バグって、記譜データがすべて上書きされて消えてしまったorz
ツリー利用探索のデバッグ用にput処理にエラートラップ仕掛けた時に
やっちゃいました。
学習済のデータが残っているのだけが救いだ・・・。
ここから記譜作ると、そこそこ精度が良い記譜になるはずなのが救いだ…。 バックアップ取れしw
一回コード全飛ばししてるでしょうに。 アルファ碁Zeroの手法まねできないかなぁ
でも論文読んでもわかんねぇだろうなぁ
ていうかGoogleがライブラリとして公開してくんねかなぁw(他力本願) >>68
おっしゃる通りですorz
評価関数の方は要所要所でコピー残していたのに、記譜はなめてました。
>>69
ライブラリ公開されても、実行できる環境構築の方がハードル高いかなと。
論文はいまだに読んでいませんが、rollout無し(バリューネットに100%依存)
はうまく機能しています。圧倒的にツリー探索性能がアップしているため、評価関数
の精度の低さを、力技でカバーしている感じですが。
とはいえまだ30手以前の評価値はでたらめに近い状態なので頻繁に間違えます。
強化学習でここまで治るのにどれくらいの時間がかかるのかは不明。後ろの方の
精度が上がらないと、前の方は間違った学習を繰り返すことになりますので。
後ろの方の評価関数がそこそこまともになったので、読み切り処理や遡りチェックの
時間はかなり早くなりました。タイムアウト1時間設定で時々空白31マスまで遡れる
ようになってきています。 とりあえず、ディープラーニングは一時中断します。
囲連星の序盤のDBは非常にうまく動いてるので、
終盤もDBを生かせないか検討中です。
それと同時にLV3 vs LV3の棋譜取も再開しました。
データは多いほどいいので。
あと310さんの遡りチェックというワードが気になってます。
例えば囲連星の終盤DB作るときにどこから勝負ありの状態になったか
チェック出来たらどうだろう。とか考えています。 天頂7買ってみました。
9段に5子置きで勝てましたが4子で勝つのは相当厳しそう。
天頂6より「あ〜そこ大きそうだよね」ってところを的確に打ってくるみたいです。 終盤DBの試作、作ってみましたがあんまり上手く動いてないみたい。
データが終局までの手数しかないのがまずいのかも。 将棋電王戦あったみたいですね。
ポナンザは優勝ならずみたいですね。 しばらく出張してました。
終盤DBといえばチェスですかね。
遡りチェックは詰みを回避できるかチェックになるのかなぁ。
オセロだと何にも考えずに終局の石差でやっちゃうので。
言われてみて気付いたけど、ゲームの種類によって結構違う考えが必要なんですね。
最近、藤井四段に触発された友人の影響で将棋を始めました。
負けたくないので、3手詰め問題解いていると、どうやってプログラムしようか
とか雑念が沸いてきてしまいます(汗 MCTSのツリーを使ったオーダリングは、たぶんバグが取れたと思います。
が、なんか別のところで意味不明の動作をして、速度が出せませんorz
また、テストの際に半日経っても終了しなかった盤面を使ってしまい、
何度もやり直しをしていたために、強化学習が滞ってしまいました。
これ曲者過ぎるので、今夜一晩解かせてパスしたい。
朝までにとけなかったらどうしよう。 試しにMCTSとか必至ルーチンとか重い処理全部取っ払ってみたけど思ったより弱くならなかった。
思ったよりってだけで弱いことは弱いけど。 LV1,LV2にも負け越すみたい。
やっぱ弱いわw
勝負が十数秒でつくのは面白いけど。 重い局面は6〜7時間くらいかけてクリアしました。
MCTSの速度が出ない問題は、解消というか、原因不明のまま別の方法で回避。
parallel_forの問題かと思っていたけど、shared_ptrの方の問題だったっぽい。
遡りチェックの時、PVは探索せずに、その他の手をチェックしていくので、他の手
にも探索を振り向けたかったのですが、単純に1手先の局面からUCTを実行すると
10万プレイアウトくらいで突然数十秒宇固まったようになって、それを何度も繰り
返す結果、まったくツリー探索が進まないという症状です。UCT探索の方に1回目
だけランダムに着手する関数を作って、そちらを呼び出したところ、固まらなくなり
ました。
ようやくまともにツリーをオーダリングに再利用できるようになったのですが、要所
要所で極端に探索が遅くなって、逆に時間がかかります。
今しばらく調査が必要な模様。 途中経過
70局目
黒(airandom.dll)の勝利回数: 29
白(ai-lv2.dll)の勝利回数: 41
61局目
黒(ai-lv2.dll)の勝利回数: 53
白(airandom.dll)の勝利回数: 8
58局目
黒(airandom.dll)の勝利回数: 18
白(ai-lv1.dll)の勝利回数: 40
46局目
黒(ai-lv1.dll)の勝利回数: 26
白(airandom.dll)の勝利回数: 20 途中経過
311局目
黒(airandom.dll)の勝利回数: 97
白(ai-lv2.dll)の勝利回数: 214
275局目
黒(ai-lv2.dll)の勝利回数: 237
白(airandom.dll)の勝利回数: 38
259局目
黒(airandom.dll)の勝利回数: 114
白(ai-lv1.dll)の勝利回数: 145
213局目
黒(ai-lv1.dll)の勝利回数: 144
白(airandom.dll)の勝利回数: 69 MCTSのツリーを使用する奴は、どうも挙動が変なのですが原因不明なので後回し。
アルファ碁Zeroでは、強化学習に軽い探索を取り入れたというのを見かけたので、
想像で真似してみる事にしました。
序盤はランダム着手。そこから5手読みの中盤探索を入れて、残り10手完全読み。
評価関数はValueを使用。たぶん、学習はマシになると思います。
もっと精度が上がったら、3手読みにしてスピードアップしたいです。
今はまだ結構ボロボロなので、これで我慢。 丸一日回してみました。
1000局くらい軽くいくだろうと思ってたけど意外と時間かかってますね。
これはこの辺にしておきます。
533局目
黒(airandom.dll)の勝利回数: 175
白(ai-lv2.dll)の勝利回数: 358
475局目
黒(ai-lv2.dll)の勝利回数: 407
白(airandom.dll)の勝利回数: 68
450局目
黒(airandom.dll)の勝利回数: 198
白(ai-lv1.dll)の勝利回数: 252
365局目
黒(ai-lv1.dll)の勝利回数: 252
白(airandom.dll)の勝利回数: 113 浅い探索付き強化学習は結構有効に機能しているようです。
学習の速度が明らかに上がったし、精度も良くなっているようで、テスト盤面の
誤差が結構減りました。ただ、そろそろ飽和したか、局所解に入ったような印象。
で、色々考えたあげく、線形回帰ではこの辺が限界かもしれないという事で、
評価関数をmlpにしてみました。valueの方がうまく学習しなかったので、回帰型
ではなくsigmoid出力にして0〜1の数字を石差に変換かけてます。
強化学習は、回帰版の評価関数の結果をそのまま利用してます。
そろそろそこそこ使えそうな誤差になってきたようだし、強化学習は自分に対して
行った方が良いはずなので、全面的にmlpに移行しちゃおうか悩み中。 やっぱ思考時間短いといろいろいいんだよなぁ。
モンテカルロは確かにある程度強さ出せるけど
遅いのどうやって克服していいかわからんし。
悩ましい。 やっぱスピードは万能ですよねぇ。
モンテカルロですが、評価関数ができたら、アルファ碁Zero方式で(汗
緩やかに読み筋を絞り込みながら、有望な手を深読みする形になります。
mlp版を試していますが、中間層を64にしたら、学習は良いのですが、
モンテカルロが劇遅になりました…。今、中間層8で強化学習していますが、
なんか早々と線形回帰と同様に飽和状態になってしまった模様。
速度的には8が限界な気がする。
途中まで線形回帰の強化学習記譜で学習させていて、同じような癖がついて
しまったのかもしれないので、今晩一晩まっさらから学習させてみようかな。 あちゃー。
学習がいまいち変に感じていたのは、これは恥ずかしくて言えないレベルの
仕様ミスでした。あれ?と思って、良く考えずに念のため追加したコードが
数か所。ことごとく悪さしていました。
数日損をしたなぁ。 ぎゃー。
評価関数に入れるデータの変換テーブルに間違い見つけた。
評価関数がいまいち収束しなかったのはこれが原因かも。
もともとの線形回帰版の時代から隠れていたものなので、
線形回帰版も計算し直しです。
というわけで、数日パーどころか1か月単位でパーですorz 申し遅れましたが、これにて評価関数は最初から計算しなおしです。
幸い、記譜が60件+遡り時の訂正前分100件ほどの合計160件と、
置換表から拾ったものが10万件単位でありますので、最近得ていた
感触だと、これをベースに強化学習で補えそうだというのが、
唯一の救いです。 やっぱアルファ碁ゼロは理想形なんだよなぁ。
全てが理想的すぎる。
まあ必要計算資源があれですが。。 アルファ碁ゼロには興味あるが詳細情報は意外とWebで探すの大変ですね。
かといってネイチャー買うのも金もかかるし読んでも多分理解できないからなぁ。
でも終盤DBとかやってても全然成果あがらなさそうだし生きてて辛い。 囲碁ソフトにLeela Zeroというオープンなフリーソフトがあるそうな。
何か参考になるだろうか? アルファ碁ゼロの論文はまだ読んでませんが、アルファ碁の正常進化ですよ。
自分はDeep Learningのところは「しかと」しているので、MCTSの進化形として
とらえてみると、まあ想像ですうが、当たり前の事を当たり前にやっただけかなぁ
と思っています。
それより大問題が…
また、評価関数の入力データ作るための変換に間違いを見つけてしまいました。
前回どころではない大きな間違いで、良くこの評価関数でそこそこ収束していたなぁ
というレベルの間違いでした。ソース喪失して書き直していたところから仕込まれて
いたんだと言う事で。
なんか入力いい加減でもそこそこな評価関数ができちゃう事にびっくり。
今度こそ大丈夫と信じて・・・ なんかleela zeroのreadme読んでみたけど、一般人が買えるハードウェアだと
アルファ碁zeroの強さを再現するのに1700年トレーニングしなきゃならんとかw
は〜絶望するわ。 結局、仮に大金つっこんでスレッドリッパーとか買ったとしても到底無理ってことじゃん。
まあ、まったくの無駄になるとは思わないけど。 もういっちょ間違い発見orz
ソース喪失後焦って数日でパーッと書いて、そのまま学習させて、そこそこ
収束していたから放置していたのを思い出してきた。今度は全部チェックした。
しかし、いい加減な評価関数でも、結構収束していたってのが凄いな。
そこはかとなく表現力不足を感じていたのはその辺が原因かなぁ。
記譜と置換表データで1から学習させるのに、一気に500回学習させたら、
思いっきり過学習になってしまった。現在、強化学習で解きほぐし中。
回帰の方はほぼほぐれたけど、MLPの方はまだ時間がかかりそう。 >>95
某スレをウォッチしていたら、前から気になっていた事を指摘していた人がいた。
スレッドリッパーはAVX2命令の中に遅いものがあって、一つ下のインテルの奴の
方が、この手の計算は速いらしい。
あと、GPUをどう使うかだね。
けど学習だけならTensor Flowにやらせちゃえばよいのだろうけど、学習データを
使うところまで行ったら、GPU使った非同期並列処理とか考えなきゃならないし。
CUDAだっけ?GPU専用にコード書かないといけないし。
なんか道筋というか、そこまでやってる自分の姿がイメージしきれない(汗
その前に詰将棋を解くプログラム開発してそう(笑) 某スレってどこですか?
GPGPUはもうちょっとハードル下がってほしいですねぇ
CPUよりも何十倍も速くなるケースもあるらしいし興味ありますね
CUDAをごりごり書くのは難しそうですがライブラリとかに期待。 コンピュータ囲碁か何かのスレです
この1か月くらいのカキこのどこかにありました(汗 ■ このスレッドは過去ログ倉庫に格納されています