- 1 名前:名前は開発中のものです。 [03/07/10 00:10 ID:6FQp6G+O.net]
- 比較的地味なボードゲーム専用のスレが欲しくて立ててみました。
私はc言語で作ったデータベースを使って人間と対戦できる将棋かチェス みたいなソフトを作りたいと思ってますが、グラフィックインターフェースの 作り方がわからなくてつっかえているレベルです。
- 638 名前:310 mailto:sage [2016/10/29(土) 21:13:21.87 ID:hyv6QOjp.net]
- 並列化してみました。
色々やり方ありますが、まあ順当なやり方という事で、ツリー単位の並列化です。 が、4コアに対して4並列でむしろ速度低下。排他で怪しいところを色々変えてみて ようやく若干(10〜20%程度)の速度アップにしかなりません。並列数を減らすと 速度低下していくので、排他待ちが原因ではなく、並列化オーバーヘッドの模様。 ノード&ツリーの構造で複雑な分、オーバーヘッドが大きくなっているのか、オセロの 時の効果には大きくおよびません。 ルート単位の並列化で、一定時間ごとにツリー統合(合算)というやり方もあるような ので、次はこちらを試してみます。 もしかしたら、一番効果が無さそうな、プレイアウトのみ並列化の方が効果出たりして。
- 639 名前:310 mailto:sage [2016/10/29(土) 21:14:51.22 ID:hyv6QOjp.net]
- MTCSは並列化と相性が良いとは思えないなぁ。
- 640 名前:535 mailto:sage [2016/10/30(日) 23:47:35.70 ID:11nwLD7b.net]
- return文忘れててめちゃくちゃな値返してた。
この不可解なバグ潰すのに3時間かかったorz. 関数の終わりでreturn文無かったら警告だしてよコンパイラ(泣 まあコンパイラオプション付けてない俺が悪いんだがwww
- 641 名前:310 mailto:sage [2016/10/30(日) 23:54:19.10 ID:vT6Vi1L+.net]
- 結局ツリー部の並列化はやめてプレイアウトだけを並列化しました。
ツリー統合も気になりますが、とりあえずこれで末端の評価が正確になります。 プレイアウト部分は処理時間が短いので、プレイアウト回数は大幅に増えます。 MCTSは面倒でも、モンテカルロは並列化向きです。 100回プレイアウトして、そのスコアでまとめて更新。 ところが、バグを発見してしまいました。 勝ち手順で進めていたのに、最後の最後に1手間違えて引分。 もうプレイアウトではなくツリーの勝敗が確定している状態で、間違えるはずがない。 勝敗確定時のフラグ設定がおかしいようです。 そこから色々見直しを始めたら、negaMax的な処理の扱いに完全に混乱して しまいまして…。これだと思って修正すると、おかしくなってしまいます。 どこか根本的に勘違いしているみたいなので、しばし長考に入りますorz
- 642 名前:535 mailto:sage [2016/10/31(月) 00:37:25.82 ID:KdjBytFw.net]
- なかなかいい感じのルーチンが書けた。
まだ結果に結びついてないけどこれはあと一捻りいれればかなりいい線行くんじゃないか?
- 643 名前:535 mailto:sage [2016/10/31(月) 21:35:59.05 ID:KdjBytFw.net]
- おかしいな。
石の流れは良くなってるのになかなか勝利に結びつかない。
- 644 名前:535 mailto:sage [2016/10/31(月) 22:47:38.80 ID:KdjBytFw.net]
- パラメータ微調整地獄w
機械学習に切り替えないと限界が…
- 645 名前:535 mailto:sage [2016/11/01(火) 21:33:50.00 ID:pQxzEPLf.net]
- あかん。
完全にバランスを失った。 一から出直しだな。orz
- 646 名前:名前は開発中のものです。 [2016/11/03(木) 03:15:09.64 ID:x7yDYWU2.net]
- ボードゲームのオリジナルオーダー制作
www.logygames.com/logy/ordermade.html 簡単に本格自作ボードゲームが作れる時代到来!! jellyjellycafe.com/3869 100円ショップでボードゲームを自作しよう https://sites.google.com/site/jun1sboardgames/blog/makeyourbg ノーアイデアでボードゲームを作ろう第1回「100円ショップで物を買う」 boardgamelove.com/archives/boardgame-make-1/ ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中 gigazine.net/news/20150820-board-game-crowdfunding/
- 647 名前:310 mailto:sage [2016/11/04(金) 15:36:30.74 ID:zGiY9OSz.net]
- 長考の結果、もう一度作り直し(笑)していたら、混乱の原因がわかりまして。
勝敗の持ち方を逆にしたらすっきりしました。 あと、終盤の手順の前後で、あと3手粘れるのに1手で負けるという現象を調べた 結果、ツリー部で負けと判定している以上、何手先に負けるか関係ないというプロ グラムになっていた事も判明。バグじゃありませんでした。とはいえ気持ちが悪いので、 なるべく長く粘るようにしてみました。 そこでわかったのは、Perfect Solverの数字は、42手21ターン目の引分から何ターン 前に勝負がつくのかを表していて、プラスは勝ち、マイナスは負けという事です。先手で +1と出たら最善を尽くせば41手目の自分の着手で勝つという事のようです。 つまりスコアを勝敗決定ターンにしたmin-Maxで、速度考えるとDB化してるんでしょう。 で、MCTSですが、まあやはりモンテカルロなので間違えます。試しに10手目程度 の間違えた局面から、シミュレーションを続行してみたところ、億単位の探索(プレイ アウトとしては10倍)で、間違えた手が本当は悪かった事に気づいた様子で、そこから 正しい答えに向かって行きました。なので、まあプログラムは間違っていない模様です(汗。 DAG対応とか、自殺手禁止プレイアウトとか、色々やった結果、選択手のばらつきが 減って、「たまたま正解手順を引く」事がなくなって、自信満々に間違えるようになっ た印象です。それでも、時間をかけて探索を続けると、いつかは正しい答えにたどり着くと。 今となってはあまり意味が無いですが、せっかくなので、ここまで積み上げて来た ノウハウで、今一度Solver作ってみようかなと。
- 648 名前:535 mailto:sage [2016/11/04(金) 23:52:18.01 ID:lKhN7bKh.net]
- 色々ぐちゃぐちゃやってたら計算時間がとてつもないことになってしまった。
- 649 名前:310 mailto:sage [2016/11/06(日) 13:49:29.22 ID:Z4kqE5wB.net]
- Solver作りました。
PerfectSolverにならって評価値を、42手目から何手手前で勝敗がついたかにしました。 お蔭さまで、null window searchが使えるようになり、mtd(f)で高速化しました。 あと、初段のみ単純な並列して、残り28手で6秒強となりました。 そろそろオセロに戻ります。
- 650 名前:535 mailto:sage [2016/11/06(日) 17:53:47.27 ID:B23WCzGo.net]
- 終盤28手読み6秒とか凄い
こっちはというとそろそろαβ刈りを習得しなければ…
- 651 名前:535 mailto:sage [2016/11/07(月) 00:12:13.27 ID:vL8wkeAF.net]
- αβできたっぽいです。
というかwikiの疑似コードを完コピしたらうごいたっぽい?という感じで 理解したとはいいがたいですが。
- 652 名前:535 mailto:sage [2016/11/07(月) 22:06:07.74 ID:vL8wkeAF.net]
- え、もしかしてminmaxに比べてαβめちゃめちゃ速い?
なんか間違ってんのかな…
- 653 名前:310 mailto:sage [2016/11/08(火) 00:02:22.02 ID:CUgV7Bvg.net]
- 安心してください。めちゃ早いですよw
後ろ向き枝刈系のアルゴリズムはほとんどがαβを前提にしています。 自分の最初は擬似コードコピペしました。 すぐ忘れちゃいますが、1回は真剣に動作を追っておくと良いですよ。
- 654 名前:535 mailto:sage [2016/11/08(火) 22:35:11.27 ID:BlAmLHY6.net]
- 評価関数が致命的に狂ってる気がする。
手動で直すのは限界があるから機械学習したいがさてどうするか。
- 655 名前:310 mailto:sage [2016/11/10(木) 20:55:19.87 ID:gpSCAC4W.net]
- オセロでUCTをしてます。コピペでちょいちょいと思っていたらパスの処理が面倒で、
思った以上に動作速度が落ちてしまいました。 その後、デバッグしてたらおかしな現象を発見。探索ツリーでプラスになるべき数字が マイナスに。しかも1か所だけ。発生条件を絞り込めず、なんだかんだと数日間。 原因は整数のオーバーフローでした。設定時間におけるプレイアウト回数でのスコア合計 がちょうど境目にきて、本当に微妙にオーバーフローしていたので、スコアの正負がひっく りかえったように見えていたのでした。 俺の時間を返せorz 終盤5手読みくらいならすぐにUCTのツリーが終局まで達して、完全読み同等の答えを 返してくれるのですが、10手だと結構時間がかかり、20手だと全く歯が立たない。 評価関数を使った中盤探索の置き換えに使えないかと想定しているのですが、やはり 簡単に精度は出ない感じです。 プレイアウトでありがちな手を優先的に着手するように、ヒューリスティックな評価関数を 用意して、プレイアウトの精度を高められるか試してみたいと思います。あと、スピード アップもしないと・・・。
- 656 名前:535 mailto:sage [2016/11/10(木) 23:14:15.10 ID:4tjjzH07.net]
- Zenは治勲と三番勝負か〜
Zen勝ちそうw
- 657 名前:535 mailto:sage [2016/11/13(日) 00:19:43.02 ID:otFLKKMJ.net]
- doubleの有効桁数が足りなくておかしくなってたorz
評価値に差をつけようとして極端にデカい数値を設定してたら 小さい数値が無視されてた
- 658 名前:310 mailto:sage [2016/11/13(日) 00:47:25.03 ID:Be0ooFvL.net]
- DeepZenGo楽しみですね。
ポストアルファ碁の今となってはZenが2勝できなかったらちょっと悲しいかな。 こちらはオセロのモンテカルロツリー探索がほぼできました。 当初かなり速度ダウンしていたのですが、何とか改良できました。vectorが遅かった。 数か所工夫して、テストデータで正解を早く導けるようにしてみましたが、調整が面倒そう。 とりあえずネタ切れなので、次は探索済ツリーを再利用できるようにして、対戦できるよう にする予定です。で、今一度終盤読み切りルーチンと、序盤の定石DBつけて完成としたい。 しかし、相変わらず評価値をどう計算したら良いのかわからない。 単純に、着手する手の平均スコアだと、探索の進み具合によってあなりブレてしまい 意味がある数字になりそうにない。アルファ碁はDCNNの評価値を使ってるのかなぁ。
- 659 名前:310 mailto:sage [2016/11/13(日) 20:49:23.63 ID:Be0ooFvL.net]
- ちょっと疑念が湧いてきたので数か所工夫したところを全てコメントアウトしてみたところ
やらない方が遥かにマシという結論に(汗。下手な考え休むに至りでした。 全部外してしまうと一旦最善手から外れてまた戻ってくるような事もなくなり、探索時間が 長い方が良いと単純に言えるようになります。 また、評価値ですが、モンテカルロならやはり点差を考慮しない「勝率」であるべきでは ないかと思い始めています。今は、「点差」を返しています。「勝率」で選ぶ手は、「もっと 良い手があった」となりますし、「点差」で選ぶ手は「欲張りすぎた」となりそうです。 探索済ツリーの再利用の仕組みができました。まだパスがらみのテストはしてませんが、 多分大丈夫でしょう。 ボード関連のクラスをかなり作り直してしまったので、終盤読み切りルーチンや序盤定石 処理を作り直さないといけません。というか、評価関数を持ってないので、終盤探索は オーダリングの仕方を変えないといけません。 あと、人間側入力待ちの間も探索を継続できるようにしてみたいと思っています。 モンテカルロだと、いつでも停止したり再開できるので、ぜひとも導入したいものです。
- 660 名前:310 mailto:sage [2016/11/16(水) 01:01:14.01 ID:2m1pjf8n.net]
- 人間の入力待ちの時のバックグラウンド探索を実装しました。
並列処理はPPLを使ってるので、思いのほか簡単にできましたが、入力待ちのまま 放置されると、数時間でメモリーを食いつぶしてしまう事に気づきました。 パンクしそうになったらツリーをルートに近い順に削除するようにしましたが、メモリー リークしてそうでちょっと怖いです。 コンピュータ同士で対戦させてみたところ、まあそれっぽくは打ちますが、序盤で定石 から外れてしまいます。終盤は結構正確に見えます。 評価値の件、独自ロジックを外したところ、それっぽい値を表示するようになりました。
- 661 名前:310 mailto:sage [2016/11/16(水) 09:03:26.60 ID:uZWbEwsE.net]
- 自分のつたないオセロ力では、モンテカルロが着手した手が良いのか悪いのか
わからないので、どうしようかと寝ながら考えました。 まず考えたのは、完全読み切りルーチンを作って、終盤に限っては正解着手も 探索してみる事。でも、最終的には終盤は完全読み切り使った方が、正確で早い ので、そちらを使用。中盤や序盤の具合がわからない以上、ほぼ意味なし。 続いて、WZebraにある「解析機能」を実現できないかと考えました。中身はわからない ので想像。使用して感動した経験あり。 「後ろから解析」なら、αβを後ろから回し、自分が着手した手より良い手が無ければ βカット、あればそれで生じたスコアの増減を記録という形で、中盤のある程度のところ までは、遡りつつ誤着手を検出できるんじゃないかなと。棋譜にある着手はこのロジック で評価が定まっているので、探索を省く事ができます。評価関数を持っていないので、 遡れても30〜35手目くらいまでかと思いますが、読み切りルーチンをいじれば作れ そうなので、トライしてみようと思います。 誤着手率がわかっても、簡単に直らないのがモンテカルロですが…。
- 662 名前:535 mailto:sage [2016/11/19(土) 18:30:11.32 ID:X8ZFdPyh.net]
- ん〜Zen負けちゃった。
期待してたんだが。
- 663 名前:310 mailto:sage [2016/11/19(土) 20:47:46.55 ID:F+e1LSRb.net]
- とりあえずWZebra相手に戦ってみたのですが、全滅しない程度に負けますw
評価値が全然違うというか、自分は有利なつもりで進んでいても、Zebra的には +50とかになってます。40〜50手目付近で末端までツリーを展開してようやく 気づくみたいな。そこまで行くと、ほぼ間違えなくなる(当たり前)のですが、序盤 中盤があまりに酷いので、定石ルーチンで助けられないレベルかなと。 そもそも評価値が間違いまくりで、自分のAIは少し有利くらいの勝率になっている のに、zebraは既に+30とか+50とか。形を見ても、素人目にも全く不利な形に。 ランダム着手で勝率や平均スコア求めても意味が無いかも、という本質的な 課題に突き当たってしまいました。 ツリー依存度を上げようと閾値を下げてツリー展開しやすくすると、あっという間に メモリが溢れてしまいますので非現実的。本来はucb1の計算が機能して、変な ツリーに手を回さないのですが、むしろ変な手にロックオンしてしまいがち。 囲碁みたいに、1手の価値や、最終的な形が同じなら着手する順番関係ないよう なゲームじゃないと厳しいのかなと思い始めています。 相手の入力待ちの時のバックグラウンド探索では、敢えて初手についてのみ全て の手に均等に割り振って、ツリー展開を進めさせてみたのですが、これもやりすぎ ると簡単にパンクしてしまうので、ほどほどにという感じです。 アンドゥ機能を消して、終わったツリーをバサバサ消す仕様に変更です。 というわけで、解析とか後回しして、強さを上げられないか検討です。 ヒューリスティックな手法で、プレイアウトをもう少し現実的に。同様にUCB1に多少 細工して、よさそうな手の割り当てを増やせないか検討してみます。といっても、 相手の着手可能位置の数を減らすような手を優先するくらいしか、アイデアはあり ませんが。
- 664 名前:310 mailto:sage [2016/11/20(日) 16:54:24.84 ID:4i7ILKOH.net]
- 「相手の打てる箇所が少ない手を確率的に増やす」程度では全くダメでした。むむむ。
脳内では、プレイアウトの次の1手を決めるのにDCNNでみたいな…本末転倒な対策が 渦巻いてきています(汗。手元にある囲碁のモンテカルロ本(彩の解説、技術的な種本) でも、自分の石の周辺のパターンを統計的に処理して着手確率を計算みたいな事をして いまして。オセロでいうと評価関数みたいな事をしていたりします。 オセロは、着手する石の価値が重すぎるので、モンテカルロが向かないって当たり前の 結論ではあるのですが。それにしても、あまりに弱い。 というわけで、ダメ元でプレイアウト時に開放度で着手確率を変える方法を試してみつつ、 技術的勉強で、もう一度、きちんとツリー並列で並列化を実装してみようかなと思ってます。
- 665 名前:535 mailto:sage [2016/11/20(日) 21:28:29.17 ID:gm8FgHLO.net]
- も〜インテルさん早く1ThzのCPU出してよ〜w
- 666 名前:535 mailto:sage [2016/11/23(水) 19:46:23.65 ID:/Z9U4oFa.net]
- Zen負けちゃったか〜
でも一勝しただけでもすごい。
- 667 名前:310 mailto:sage [2016/11/23(水) 23:37:07.28 ID:wq9OFZ+n.net]
- うむぅ。アルファ碁があるから期待高いけど、互先で1勝したのは凄いよね。
まだ伸びしろありそうだから、次回に期待ですね。 こちらは、モンテカルロがあまりにダメダメで悩み中です。 煮詰まってしまったので、ツリー並列をきちんと実装したり、終盤探索作ったりしてました。 終盤探索は、ようやく>>460さん指摘の偶数理論を実装しました。どうやるのかなかなか 思いつかなかったけど、手を動かしだしたらわかるものですね。Zebraとかのソース見て いないので、もっと良いやり方があるかも知れませんが。
- 668 名前:535 mailto:sage [2016/11/25(金) 20:21:12.84 ID:udjtSdAy.net]
- 終盤の打ち方はまあまあいいんだが序盤が致命的すぎる。
思考時間もめちゃめちゃ長いし。 あと強化学習やりたいけどアイディア湧いてこないなぁ。
- 669 名前:535 mailto:sage [2016/11/26(土) 14:07:56.90 ID:3TEfCPcy.net]
- LV2が思考速くて強いからってLV2の棋譜大量に集めたら学習が偏りそう?
- 670 名前:310 mailto:sage [2016/11/28(月) 13:44:46.30 ID:moEHPVOW.net]
- >>669
やってみないとわからないけど、棋譜は質が良くて偏らないってのが基本だからね。 間違えたら間違えたなりに、負けてくれる棋譜じゃないと、変な学習しちゃうかも。 この辺の兼ね合いが難しい。 ただ、スタートの棋譜をその辺にして、だんだん更新しつつ、強くしていくって方法も あるかと思う。 こちらは、終盤探索に手こずっています。 AVX2命令をオペレーターオーバーロードして使っているのですが、グローバルなのが 気持ち悪くて、クラスに変更。ついでに見直しをしていたら、過去にどうしてもわからなくて 別の方法で逃げてしまったバグをようやく解消。速度には大した影響ないですが。 一番の問題は、評価関数を持っていないので、MPCが使えない事。MPCのスレッショルド を広げながら置換表使って、moveorderを最適化していたので。他の方法で速度アップを 考えないといけない。逃げてを考えると、結局、NNなりなんなりで別の評価関数なり、次の 1手ヒューリスティックが欲しくなります。もともとNN方面に行ったのは、そこが目的だった 事を思い出しました(汗 モンテカルロは、プレイアウトを疑っているので、いずれきちっとやり直してみます。
- 671 名前:535 mailto:sage [2016/11/28(月) 22:46:28.36 ID:nf8GSvVi.net]
- NN興味ありますねぇ。
Zenチームの人とかがわかりやすい解説本書いてくれないかなぁ。
- 672 名前:535 mailto:sage [2016/12/02(金) 21:41:56.73 ID:Vv9WnV3F.net]
- モンテカルロはやはりプレイアウトの質がカギか?
軽くて良いヒューリスティックが欲しいところだ。
- 673 名前:535 mailto:sage [2016/12/02(金) 22:02:53.36 ID:Vv9WnV3F.net]
- モンテカルロは良い枝をカットしないこともかなり重要とみた。
- 674 名前:310 mailto:sage [2016/12/04(日) 20:20:17.67 ID:E6FCgpFL.net]
- うーん。モンテカルロはFFOなんかで残り20手くらいから戦うと、結構まともな着手を
するんだけど、10〜30手目付近がわざとじゃないかというくらい悪い手ばかり選択する。 残り10手くらいまで行けば完璧。 序盤は次の1手が多すぎるのと、プレイアウトで回す回数が単純に多いので、ツリー部が なかなか深くならないし、あまり簡単に深くするとすぐにメモリーオーバーフローしちゃうし で難しい。 >>673 UCTではカットはしません。単純にプレイアウトの割り当ての順番がなかなか回ってこなく なるだけです。良い手に優先的に割り当てさせるためには、やはりプレイアウトで良い手は 良いと、悪い手は悪いと評価できなきゃならんわけで。それが難しいからモンテカルロだと 言う矛盾。 まあ、オセロの場合は、伝家の宝刀評価関数があるので、プレイアウトを20手くらいで 打ち切って、評価値を返すとか…MPCみたいな事をして無駄な着手を回避させるか… と、本末転倒な妄想をしてます(汗。良くなる点は、時間管理が易しくなるくらいかな(涙。
- 675 名前:310 mailto:sage [2016/12/06(火) 00:37:18.95 ID:zUbz1knV.net]
- モンテカルロが弱い理由を探ってます。
WZebraと対戦させると、一番顕著なのは、モンテカルロは辺に着手したがり、その結果 WZebraに内側に潜りこまれて選択肢が減っているという事です。流石に×とかCには 簡単には打ちませんが、序盤からあっさり中辺に出て行き、更にあっさり辺に打ちます。 相手もランダムに着手したとすると、辺の石は1方向からしか返せない(内側は4方向) ので、プレイアウトでは残りやすくなると言う仮説を立ててみました。つまり全部で28石 ある辺の攻防が相対的に下手くそになるため、プレイアウトの結果が楽観的になりすぎ ているのではないかと言う事です。 残り20手切ってくると、ツリー展開できているので、min-Max的に攻防できるけど、それ より前の段階ではプレイアウトで、相手のミスを咎めるような手を打たないといけないと 言う事かなと思います。 これをどう次の1手の確率分布に表現するかですね。
- 676 名前:310 mailto:sage [2016/12/11(日) 01:06:32.29 ID:8cq3+Gjk.net]
- なんか袋小路に入ってます(汗
プレイアウトの改良は速度低下との戦いになり、効果が出ません。 結局、とにかく無駄をそぎ落とし、単純化してプレイアウト回数を稼いで、なおかつ ツリー展開の閾値を下げて、ツリーに頼る形になりました。 が、ここでメモリーパンクとの戦いが始まります(涙 中盤の分岐が多い局面だと、あっという間にツリー部で8ギガくらい使ってしまいます。 更に処理を単純化してメモリー使用量削減に走る事に。 結局、40手目以後なら使えるけど、それ以前ではあまり精度が期待できないという、 当初やりたかった、少しマシな序盤・中盤探索という目論見は崩れてしまいました。 評価関数があるんだったらαβの方がマシという当たり前の結論に傾きつつあります(汗
- 677 名前:310 mailto:sage [2016/12/11(日) 23:57:52.07 ID:8cq3+Gjk.net]
- たった一晩で楽観してきました。
今までsoftmaxで確率分布を変えていましたが、あまり大きな差はついていないようだった ので、この際、思いっきり割り切ってみました。1位に70%、2位に25%、残り5%で他の 手に均等割り。イメージとしては1σ、2σ、その他って感じです。ヒューリスティックは αβのmoveorderのものを使用。 もちろんzebraにはぼろ負けですが、今までと違うのは、相手を囲んで着手可能位置を 減らしてしまう事が無くなりました。ちょっとした手ごたえを感じています。これをスタート に、ヒューリスティックに終盤変化を組み込んだり、序盤は開放度にしてみたりして検証 しようかと思っています。プレイアウトの精度があがったら、無駄にツリー展開しなくて 済むので、メモリーにも優しくなれるかも。 また、敗勢での発狂モードや、勝勢での手抜きモードの原因は、勝敗が明らかになり、 手毎の勝率の差がなくなる事が原因です。プレイアウト回数が多いからか、評価値は かなりデジタルに変化するので、25%、75%などを境目に、石差評価に変更すると、 ある程度回避できるんじゃないかと思います。
- 678 名前:310 mailto:sage [2016/12/19(月) 00:57:35.60 ID:V27xPT8O.net]
- 地味に色々改良。素UCTに色々追加してます。
・uctの終盤にsolverを組み込んだ ・手の割り振りに全手均等な部分を作って読み抜けの可能性を減らした の2点が主な追加点です 当初想定していたより結構強くなったと思います。 AI黒番30秒探索。zebra思考中にもMAX30秒探索で、zebraに対しては20石強負け くらい。序盤1回間違えて、中盤ジワジワ差が広がって、40手前後で読み切りできず に間違う感じ。序盤は定石で回避できると思いますが、中盤の間違いは2番手の手を 選んでしまいます。修正は難しい感じ。終盤はチューニングか、探索時間延長で対応 できないか検討。 テストで作った20手目で黒+12(zebra評価値)程度の盤面からは、zebraが間違える のか、終盤に入るところまで、かなり押してまして、読み切りミスで22石差→16石差と ぬるい手を打ちましたが、勝ち切る事ができるようになりました。 ここから先は、レーティングが欲しいなぁ。 オセロでAI使用OKなところないですかね?
- 679 名前:310 mailto:sage [2016/12/22(木) 01:29:32.37 ID:4YVdXlZ1.net]
- 地味に色々改良した結果、あらかたボツにしてます(汗
発狂モード対策でスコア最大化を図ろうとしていましたが、極端なスコアが悪さしている ようなので、結局勝率のみに限定しました。この時点で終盤はsolver任せに方針転換。 で、勝敗のみにした事で、solverの探索範囲を+-1のシングルウィンドウにできて スピードアップしたのでプレイアウトのラスト7手くらいでも使用する事にしました。 プレイアウトでは、moveorder順の下位はバッサリカットしました。酷い手が混入する とスコアが散らかるので。 uctのif分ネストがスパゲッティ化したので、処理順を大幅に見直したら、時々落ちるように なってしまった。並列化が原因かそれともshared_ptrの使い方が悪いのか、散々調べた 結果、ちゃんと全体をリビルドすれば回避できる事が判明。俺の時間を返せorz テストで使用している引分手順30手目から開始すると、たいていは負けてしまうけど、 希にzebraが認識していない勝利手順を見つけて勝つようになった。乱数の具合なので 再現性は低いけど、zebraの評価値にも間違いがある事を実感した。 ここのところ30手目〜40手目をターゲットに改善していたけど、それなりに成果が出た。 40手目以後はsolverを使用し、対局開始は定石DBを20手分くらい用意したら、まあまあ なAIになるかなぁと思い始めました。ただ、1手30秒考えるのは長すぎるなぁ。 あと、正しい手順を見つけ勝率も上回って来ているのに、探索時間が足りずにプレイアウト 回数で負けて最善手が選ばれないケースが散見されます。ものの本だと、そういう時は 探索時間を延長するとか書かれていますので、対応してみようかと思っています。 というわけで、なんか行けそうな気がしてきた。
- 680 名前:310 mailto:sage [2016/12/27(火) 01:58:53.16 ID:lSRXuhfg.net]
- uctの探索部分がある程度できたので、とりあえずDOS窓ベースでゲームとして成り立つ
ようにしました。edax-pvbook_2009.wtbから作った40手分の定石DBをつけて、終盤探索 は40手目からsolverで。multi probe cutできないので、FFO#40で1.3秒程度の性能です。 その他諸々。探索時間延長とか。タイマーを作り直してプログレスバーつけたり。 WZebraの20手読み、定石DB変化大相手に、まれに勝ちます。直接対決はまだして ませんが、以前自分が作ったmin-Max版よりちょっと弱いくらいかなという感触です。 モンテカルロは乱数がらみで、ナチュラルに変化しちゃうので、5〜10手に1回程度は ミスをしちゃう感じです。 プレイアウトはもう少し詰められそうだけど、まあこの辺が潮時かなぁ。 次は何しようかな。
- 681 名前:名前は開発中のものです。 mailto:sage [2016/12/27(火) 06:12:54.86 ID:A0w16iJG.net]
- Vectorとかで配布しては?
- 682 名前:310 mailto:sage [2016/12/28(水) 10:02:51.11 ID:8e16q4EG.net]
- vectorは考えてないですが、どこかでソース晒しても良いかなと思っています。
しばし検討。 なおUCT探索の探索時間は30秒にしてます。微妙な時は10秒づつ探索延長します。 また、人間が長考すると、その分だけバックグラウンドで探索が進んで強くなります。 気が長い人におすすめです。
- 683 名前:名前は開発中のものです。 mailto:sage [2016/12/29(木) 00:29:19.19 ID:T+iok27x.net]
- GGSってまだあるんだっけか
トッププログラムの開発者はみんなあそこで対戦しつつ改良してる
- 684 名前:310 mailto:sage [2016/12/30(金) 02:11:45.43 ID:iZpfxqhq.net]
- >>683
GGS探したけど見つかりません。 オセロのAI自体、行き着くところまで行っちゃってるからなぁ。 コメントの整備をしていたら、細かいところが気になって、あちこち手を入れています。 手を入れながら、UCTの探索結果があるので、それでmoveorderすれば良い事に気が つきまして。SOLVERが少し早くなったので、終盤探索は38手に格上げ。 しかし、テストプレイしていたら、SOLVERのバグ発見。終局まで打ち続けると、50手目 近辺で間違えます。並列探索部分で、negaScout的に再探索かかったあたりにバグが ありそうという所まで絞り込みましたが、ちょっと厄介な感じ。 ソース晒す用に昔使ってたDTIのホームページを使えないか調べたら、サービスごと 終了してました(汗。 久々にオセロAIで検索したら、MLPでAIのテストをしている人がいました。評価関数では なく、次の1手で使っているようです。比較的軽い構成なので、気が向いたらもう一度、 トライしてみようかと思います。
- 685 名前:310 mailto:sage [2016/12/30(金) 20:08:38.43 ID:iZpfxqhq.net]
- バグ直りました。数日前に速度アップできると思いつきで直したところでした。
直ったは良いけど、何故バグるのか理解できないorz
- 686 名前:名前は開発中のものです。 mailto:sage [2017/01/01(日) 01:33:49.09 ID:AXNNcWXn.net]
- 個人的にはディープラーニングやって欲しい
- 687 名前:310 mailto:sage [2017/01/02(月) 09:01:41.61 ID:YMPtqKka.net]
- いま、Bloogerにサイトを作ってやっつけで解説文を作ってます。
あらかたできたら公開します。 が、解説していると細かいバグを見つけて、直して確認が必要になるという…。 やっぱ次はディープラーニングですよね。Eigen使ったMLPで次の1手をやってみます。 DCNNももう一度トライしたいと思っていますが、貧弱なパソコン環境ではどうにもならない かも知れない。
- 688 名前:535 mailto:sage [2017/01/06(金) 21:06:02.45 ID:/dmWmgCn.net]
- ネット碁でアルファ碁が無双してるみたいですね。
60連勝?とか凄すぎw
- 689 名前:310 mailto:sage [2017/01/09(月) 14:10:27.74 ID:kUxHCmxW.net]
- 60連勝の相手が、マジトップ棋士だってんだから、あきれるしかないですね(笑
解説書きながらソース見てたら、色々直したくなってしまい、泥沼化しています(汗 強くなったと思ったら弱くなっていたというのの繰り返しです。
- 690 名前:535 mailto:sage [2017/01/15(日) 01:15:01.84 ID:FqCBSr/V.net]
- TensorFlowで学ぶディープラーニング入門って本読んでます。
かなり易しく書こうとしてるのが伝わってくる本なんですがそれでも難しい。orz
- 691 名前:310 mailto:sage [2017/01/16(月) 13:21:19.22 ID:Cfoi8GBB.net]
- カーネルサイズとかチャンネルとかフィルターのあたりですか?
僕の方は・・・モンテカルロだから間違えると思って、思考時間を増やしたり、末端ノードで 1回づつじゃなくて、100回づつプレイアウトするようにしたりして、プレイアウト回数を稼い だところ、「同じところで同じように安定的に間違える」ようになってしまいまして(汗。 プレイアウトは適当でも、とにかくツリー展開させるか、それともプレイアウトである程度 正確な勝率を得るけど、ツリー展開は減らさないように努力するのか。その辺で、また 悩み始めてしまいまして。edaxの引き分けBOOKから何か情報が取れないかと頑張って ますが・・・。そろそろ飽きてきちゃったんだよなぁ。
- 692 名前:535 mailto:sage [2017/01/16(月) 21:00:44.96 ID:UThQer2a.net]
- 専門用語はよくわかりませんが、付属のサンプルコードをなんとなく動かしてます。
行列と誤差関数を定義してやればtensorflowが勝手に最適化してくれるとか。 成果でないとめげてきますよね。 ここらで一発アルファ碁級のブレークスルーが欲しいですねw
- 693 名前:310 mailto:sage [2017/01/16(月) 22:06:12.04 ID:cVXIBPCK.net]
- あれはやっぱマシンパワーが・・・
一旦計算できちゃってもそれなりの重さなんだけど、学習しようと思うと重さにめげます。 というか、やる気すら起きないレベルorz とりあえず、実際の最善手順が、ヒューリスティックの何番目かを統計的に処理して、 プレイアウト関数の手のバラつきを表現しようかと思って、プログラム作ってEXCELで 集計して、それなりに計算が簡素にできる形に変形してなんてやりましたが、やった 所で、何番目を選ぶかはランダムではなくて理由があっての事なんだよなぁと… ちっとマシなヒューリスティックとか言い出すと…できない事をしようとしている事に深く 思い至るわけで。
- 694 名前:310 mailto:sage [2017/01/17(火) 00:25:27.65 ID:SLwZ7IwS.net]
- 統計処理して作ったプレイアウト関数も結局ダメでしたorz
最後はやっぱりBOOK頼みになっちゃいます。 もう一回NNに行って次の1手計算させてみるべかな。
- 695 名前:535 mailto:sage [2017/01/17(火) 21:19:41.12 ID:wCDEMY6U.net]
- モンテカルロ木探索ってわざと悪い手打ってる?ていうぐらい期待外れの手を打ちますねw
プレイアウトの質改善が必須か…
- 696 名前:310 mailto:sage [2017/01/17(火) 22:04:13.23 ID:SLwZ7IwS.net]
- 例えば40手目くらいの盤面で、UCTの選択基準であるところの実行回数で次の1手を
並べると、トータルではzebraの完全読みの良い手から順に並んでくるんだけど、ところ どころ順位が入れ替わるんだよね。その入れ替わる場所が、1位と2位とかだと−2して しまうし、時々−10くらいの手を選んでしまったりする。 囲碁のプレイアウトをちょっと調べたら、やっぱり盤面のパターンを評価して、次の 1手の順位を決めて、点数に応じて着手確率を変えたり、あからさまに悪い手はカット するみたいな事をしている。そちらの知見では、良いプレイアウトなら回数は少なくて も何とかなるみたいな話になってる。 今の相手着手可能数ベースで、edaxのpvbook_2009の最善手順を評価すると、1位の手 が選ばれている確率は42%くらいで、2位で17%と、思いのほか手が散っているんです。 これ、同点1位は、ソート順で2位以下にするのではなく1位にまとめるようにしてあるから、 マッチング率が想像していたより悪いって事になります。 別の方法で次の1手ヒューリスティックを作って、一致率を例えば75%〜80%くらいに までできないかなぁと思いまして。結局、もうしばらくモンテカルロを継続する事にしました。 NNに行く前に、縦横斜めのパターンでベースとなる一致率を作ってみようかなと思います。
- 697 名前:535 mailto:sage [2017/01/21(土) 14:40:41.23 ID:7GkfgTKT.net]
- プログラム作るなら単体テストは必須ですね…
後から後からバグが溢れてくる…
- 698 名前:535 mailto:sage [2017/01/21(土) 15:30:15.75 ID:7GkfgTKT.net]
- 机上デバッグはいやだお…T△T
辛すぎる…
- 699 名前:310 mailto:sage [2017/01/22(日) 23:15:41.71 ID:7cgxubHE.net]
- 思いっきり同感だけど、結局サボるというorz
実はモンテカルロやってるから見なかった事にしているけど、Solverにバグがあります。 発生する条件も薄々わかっています。いつの間にバグを仕込んだのか。 さて、プレイアウトのヒューリスティックですが、縦横斜めのラインで、その形が現れた 回数、着手された回数のデータベースを作って、プレイアウトの次の1手の時に、それ ぞれの確率を縦横斜めで集計して、その高い順にsoftmaxで確率分布にして、着手を 選択させる形にしました。 結果は・・・。ヒューリスティックの次の1手としての精度はいまいちですが、それでも 上位3〜4位くらいには最善手が入ってる感じになります。でも、評価値が極端に出過ぎ ている感じで、ダメダメな感じになりました。確率のバラつきが小さいように感じたので、 ちょっと修正してみましたがダメなので、思い切って累積確率50%でカットしてみました。 この辺で大体3〜4位までの着手になります。少しマシになったけど、やはりダメ。 softmaxの計算が重いため、プレイアウト回数が1/7くらいに減ってしまうんだけど、それを 補う精度が出ていない感じです。楽ちんなのでunordered_map使ってますが、もっと速度を 出そうと思うんなら、他の方法を考えた方が良いかも。 簡潔なプレイアウトで秒間プレイアウト数を稼いで、枝を伸ばす方向に逃げたい気持ちを ぐっと抑えつつ、引き続いてニューラルネット系で次の1手を求めてみたいと思います。 更にスピード低下するので、いま以上に精度が出ないと・・・。
- 700 名前:535 mailto:sage [2017/01/23(月) 23:10:08.18 ID:ii9ofJgq.net]
- 黒番限定ですがLV2に勝ち越せる?というところまで来ました。
何をやっているかというとLV2とLV3を対戦させた棋譜を大量に集めて、 LV2に勝てる手順のDBを作ってナゾルということをやっていますw まあほとんどチートみたいなものですが、棋譜を集めれば集めるほど 勝てるようになるのでなかなか面白いです。 白番だとLV2が盤の中央からゲームを始めないのでうまくいかなかったりしますw
- 701 名前:名前は開発中のものです。 mailto:sage [2017/01/23(月) 23:46:45.10 ID:ii9ofJgq.net]
- 勝利手順のDBからディープラーニングで評価関数を抽出することを考えていますが
今のところ全くうまくいく気配がありませんT△T
- 702 名前:310 mailto:sage [2017/01/26(木) 21:23:21.53 ID:foYEIc8+.net]
- >>700
Buroさんは逐次的にBOOK学習やってました。 僕は論文が理解しきれなかったのと、それやると特定AI相手だけに強いAIが作れて しまうので禁じ手にしちゃいましたが、オセロというゲームの底の浅さからすると、 それが正解かも知れない(汗 デバッグ兼ねてZebraと対戦していたら、ZebraのBOOKが強化されていくのが実感 できてしまいました。
- 703 名前:310 mailto:sage [2017/01/26(木) 21:32:27.07 ID:foYEIc8+.net]
- さて、本日は非常にショックな事が判明しました。
次の1手を求めるNNを作って、大体できたのでAIに組み込んでました。 NNは以前にEigenで作ったものの流用改造。とりあえず学習結果が確認できる ところまでやったら、コンパイルが通らない。C2059というエラー。前にも何回か 出ていて、ライブラリの順番いじると直るので放置していた奴。何かの名前が 組み込んだライブラリ間で衝突していると起きるらしい。それが途中からどうにも 直らなくなってしまった。 で、ようやく重い腰をあげて何が衝突しているのか調べたら、A1とかC1とかの 着手位置を表す#defineの定義が、Eigenの内部の型か何かの定義と被ってる。 こちらは#defineなのでnamespaceで回避できない。 楽に回避できる方法を色々考えたあげく、結局、C++良く知らなくてCとしてプログラム 書いていた頃から引きずって#defineを使っているのが悪いのだと気が付いて、 クラスとenumで対処するという、全面作り替えにする事にしてしまいました。 というわけで、修正に3日くらいかかりそうですorz
- 704 名前:名前は開発中のものです。 mailto:sage [2017/01/26(木) 21:36:49.48 ID:NsrLS1+v.net]
- 乙
- 705 名前:535 mailto:sage [2017/01/26(木) 21:43:44.99 ID:NsrLS1+v.net]
- >特定AI相手だけに強いAIが作れて
ディープラーニングが成功すれば汎用度もちっとは違うのかもですが。
- 706 名前:535 mailto:sage [2017/01/26(木) 21:54:02.30 ID:NsrLS1+v.net]
- 強い詰みルーチンが欲しいですねぇ。
DBでほぼ勝ちという局面にもっていってもポロッと落とすことが結構ある。
- 707 名前:310 mailto:sage [2017/01/26(木) 21:56:01.75 ID:foYEIc8+.net]
- あ、もしかしてenumってunsigned __int64が使えないのか・・・
- 708 名前:535 mailto:sage [2017/01/26(木) 23:23:42.26 ID:NsrLS1+v.net]
- DBは勝率で手を選ぶよりも累計勝利数で手を選んだほうが良いっぽい。
そのほうが勝利再現率が上がるっぽい。
- 709 名前:535 mailto:sage [2017/01/29(日) 01:07:10.63 ID:uZb/TXFd.net]
- 負けた手順に対して手動でDBを修正するという汎用性がみじんもない作業を始めましたw
なにかドカンと強くなる方法ないかなぁ
- 710 名前:310 mailto:sage [2017/01/29(日) 13:11:46.36 ID:rGbRSmBn.net]
- enumで__int64使えますね。というか、どこかのバージョンから使えるようになってましたね。
何か裏ワザ的な使い方考え付かないかと思って試しましたが結局ダメで、前から気になって いた箇所をクラス化しだしたら大規模改造になってしまいました。 オブジェクト指向を忠実に実行しようとすると、結局何度もライブラリ作り直す羽目になると いう本末転倒な状態(汗 色々ドタバタしていたので、オセロ共通のクラスのみ修正完了。ロジック部分はこれから。
- 711 名前:535 mailto:sage [2017/01/30(月) 23:07:35.87 ID:nIJrclSx.net]
- ファイル出力が思いのほか重い。
知識では知ってたけど今回、実感しました。 DB作るときは棋譜をまとめて読み込んで書きこみは1回だけとか工夫しないとだめですな。
- 712 名前:310 mailto:sage [2017/01/31(火) 01:06:15.90 ID:tF0OU/RM.net]
- >>709
ドカンとは強くならないけど、やっている事から推測すると遺伝的アルゴリズムが 合ってそうな気がします。茨の道ですが(汗 >>711 いまどきはメモリが大きいので、全部読み込んで一括処理とか、思いのほか可能ですね。
- 713 名前:310 mailto:sage [2017/01/31(火) 01:17:50.59 ID:tF0OU/RM.net]
- 困った。3層MLPで次の1手を、
qiita.com/kanlkan/items/6bff417519ed7d5ce4da を参考にして求めている(若干やり方が違う)のだけど、思ったように学習してくれない。 NNの計算どっかおかしい気がしてきたorz
- 714 名前:310 mailto:sage [2017/02/01(水) 15:57:52.90 ID:DrzIg7bz.net]
- ひょんな事から学習できました。デバッグ用に学習データを減らしてテストをしようとしたら
学習できてしまいまして。件数を増やすとダメになる模様。 これは仮説ですが、多種多様な棋譜を学習させると、ネットワークの自由度が不足して、 ウェイト更新が相互に打ち消し合った結果、ウエイトがゼロ(勾配消失)に陥ってしまうと。 学習に失敗した時は、大半のテストの結果が、全て同じ確率(softmaxのため)となってい ます。中身は見ていませんが、softmax関数を通す前はオールゼロとなっている事が十分 に想像できます。 今から思うと、NNで評価関数を作ろうとして失敗していた時も、同じ状態だったのかなと。 学習データを減らすと精度が落ちますので、ネットワークをより複雑かつ大規模にしない といけないのかなぁと。結局、同じ問題(ネットワークを大規模化しなきゃいけないけど、 自前のパソコンでは計算が厳しい上に、結果を使用する方もタイムクリティカルなので あまりややこしくしたくない)の周りをグルグルしはじめてしまいました(汗
- 715 名前:535 mailto:sage [2017/02/02(木) 23:55:47.04 ID:JZtX1mUx.net]
- まとめて読むようにしたら3日かかったDB作成が数分で終了しましたw
しかしDBがかなり肥大化してしまいました。 読み込みに5秒くらいかかる。 しかもこの手法だとLV2には勝てるけどLV3には勝てないし。 LV2はパターン少ないからDBで勝利手順なぞれるけどLV3はパターンが多くてカバーできない(多分)。 そろそろ別の手を考えなければ。
- 716 名前:535 mailto:sage [2017/02/03(金) 20:14:00.97 ID:jkxdJ711.net]
- DBを使ってモンテカルロ木探索の探索結果を永続的に蓄積するというのをちょっと思案中。
計算すればするほどDBが洗練されていく感じで。
- 717 名前:310 mailto:sage [2017/02/03(金) 20:39:47.64 ID:dv6j41bl.net]
- >>716
同じ事妄想したけど、それなら後方枝刈付のmin-Maxの探索結果をひたすら ため込んでいく方が容量的にも速度的にも有利で、それができないからモンテ カルロだって事に思いいたりました(汗 min-Maxなら、いらない枝カットできるかと思いきや、相手がそこに打っちゃった 時の事を考えたら捨てられない事にも気づきました(汗汗 で、適当なところだけ保存して、残りは別途探索・・・って、これ定石DBやん! というオチでした。
- 718 名前:名前は開発中のものです。 mailto:sage [2017/02/03(金) 20:45:51.93 ID:jkxdJ711.net]
- ボツ案でしたか。
でもまあ、とりあえずDBを充実させる方向でやってみます。 他に案がないので。 ディープラーニングがうまくいけばなぁ。
- 719 名前:535 mailto:sage [2017/02/03(金) 20:49:10.94 ID:jkxdJ711.net]
- 今のところ黒番対LV2は2勝一敗ペースてな感じです。
もっと勝てるかと思ったけどそうでもないですね。
- 720 名前:310 mailto:sage [2017/02/03(金) 20:58:39.46 ID:dv6j41bl.net]
- こちとらディープラーニングで完全にドツボってますorz
- 721 名前:535 mailto:sage [2017/02/04(土) 19:33:24.33 ID:neMma6zi.net]
- ディープラーニングは盤面情報だけじゃなくてこちらでなにがしかの特徴量を計算してやって
その数値も食わせたほうがすこしはましになるんだろうか。
- 722 名前:310 mailto:sage [2017/02/04(土) 20:57:26.78 ID:ycMSfQXf.net]
- オセロではBuroさんの評価関数と同じ特徴を入力にしたMLPで評価関数を作った
オセロプログラムがあります。vsOthaというソフトです。 今回はディープなので、できれば特徴量は自動抽出してもらいたいものではあります。 一応、黒白の盤面情報の他、着手可能位置は与えています。 と、ここまで書いて、着手可能位置を求めるように学習させられるのか、ふと気になった。 何らかの事前学習に使えそうな気がする。 やらずに悶々としているだけなのですが、DCNNの四角い窓ではオセロの特徴はうまく 抽出できないのではないかと思っていますが、他に方法が思いつかないのが悲しい。
- 723 名前:名前は開発中のものです。 [2017/02/05(日) 08:03:16.57 ID:36jlTAsU.net]
- そうかそうか
- 724 名前:535 mailto:sage [2017/02/07(火) 20:48:43.68 ID:qiXxRrUf.net]
- 機械学習じゃだめだ、手書き評価関数しかない…
しばらくするといや、手書き評価関数じゃやっぱりだめだ、機械学習だ… の無限ループw
- 725 名前:310 mailto:sage [2017/02/08(水) 21:46:39.89 ID:GrcF81sn.net]
- 昔mnistでオートエンコーダのテストした時のように、学習内容(ウェイト)をBMPにして
可視化してました。テストに時間がかかるので、色々すったもんだバグとりに時間が かかってましたが、ようやくなんとか表示できるようになりました。で、とりあえず想定より 少な目の隠れ層4096個でテスト開始。 勾配ノイズ(焼きなまし)の設定値もでかすぎたので、設定値を自動計算するようにしたり。 NN復活当初うまく動かなかった原因がこれでした。 で、まだ学習途中なのですが、ウェイトデータ見ると192個(=64×3)毎に1ビットづつ ずれるパターンに収れんしていっています。192といえば入力データのサイズで、 横に64個づつ並べたビットマップ画像に、まるで光子の回析実験のような縦じまが(汗 そんな周期性が生まれるはずがないので、どこかにバグがあるんじゃないかと。 表示するプログラムのバグかも知れないけど、1エポックに3時間かかるので、止めて デバッグに入るか、それとも続行するかで悶々中…。 どっちにしても時間がかかるので、裏でDCNNをもう一度コーディング開始。 あまりにネストが深いのでミニバッチは一旦放棄してSGDで。 GoogleのTensorFlowがテンソルな意味が良くわかった。 DCNNだと元データが2次元で、更にチャンネルがある行列では次元が足りないorz 今最大の懸案は、とりあえず隠れ層4096でオートエンコーダの事前 学習しているけど、 それが終わり全体の学習にいって上手く行かなかった時、中間層を増やして再トライ するか、それともDCNNに行ってしまうか。
- 726 名前:310 mailto:sage [2017/02/08(水) 21:47:47.17 ID:GrcF81sn.net]
- >>724
そこは…絶対的に機械学習である!という信念が必要だと思います(汗
- 727 名前:535 mailto:sage [2017/02/09(木) 22:03:30.31 ID:qkkjChao.net]
- >>726
そうですかw まあそんな気もしますが、でも終盤の積みルーチンだけなら手書きでイケそうな気もするんですよねぇ そこだけでもなんとかできれば…
- 728 名前:535 mailto:sage [2017/02/10(金) 19:40:14.89 ID:M6OFVkZO.net]
- 黒番だとDBのせいで対LV1よりも対LV2のほうが勝率いいみたいw
めちゃくちゃ歪んだAIになってしまったw。
- 729 名前:310 mailto:sage [2017/02/10(金) 23:52:07.84 ID:HUcinQI4.net]
- 3日かけて学習したオートエンコーダ型はやっぱりダメでした。
可能性すら見えなかった。 というわけで、開き直ってDCNN開始。 前回はオセロ専用で展開形を作ってましたが、それではmnistなどでテストできない ので、max_poolingも含めて、本格的にちゃんとしたものを作ってみました。 とはいえ、まだ畳み込み層の誤差逆伝播の解釈が正しいか、自信はありません。 また、テストで動かしたところ、なんかすごく重い印象です。 ちゃんと動くのかなぁ。
- 730 名前:名前は開発中のものです。 mailto:sage [2017/02/11(土) 10:06:04.43 ID:CnQo/DsP.net]
- GGSはmimosaというソフトを使うと入れますよ
- 731 名前:310 mailto:sage [2017/02/13(月) 22:45:03.11 ID:d/p+PbrG.net]
- >>730
そのmimosaのサイトがリンク切れで見つからないのです。
- 732 名前:310 mailto:sage [2017/02/14(火) 20:21:59.60 ID:lpq90WbI.net]
- 自作ライブラリにDCNNのレイヤーを書いたのですが、あまりの計算時間にデバッグ中に
めげて、試しにtiny_dnnというC++専用のNNライブラリを入れてみましたところ、自作の 10倍以上の速度で・・・こちらに乗り換えです。 で、tiny_dnnでmnistやって感度をつかんだところで、オセロの盤面を変換する処理を 書いて、小手調べに簡単なネットワークで動かそうとしてみたところ・・・盤面データの 変換の段階でメモリーが溢れて盛大にスワップ開始(^^; 5000,000盤面×100マス(Padding含む)×4チャンネル×4バイト(float)でデータだけで 8Gbytes。自分のパソコンのメモリーは8Gで、空いているメモリーは5Gちょいとメモリー 不足が判明しました。 いまどきのパソコンはメモリーでかいから一括でも大丈夫とか言って、このざまです(笑)。 tiny_dnnは全データ一括で渡して指定エポック回してくれる仕組みなのですが、仕方ない ので、入力データを分割して、自分でループ回します。 α碁のハード環境がうらやましいorz
- 733 名前:310 mailto:sage [2017/02/15(水) 23:06:48.81 ID:DozmM7Z3.net]
- 色々細かく改造。やっぱライブラリがあると気が楽です(汗
簡単なネットワークの初期の学習の具合では正答率50%くらいが上限な印象だったので、 ネットワークを複雑にしてみました。で、1エポック8時間以上かなぁ。 もっとハードを・・・って真剣に思いますorz
- 734 名前:名前は開発中のものです。 mailto:sage [2017/02/17(金) 23:21:12.85 ID:ZDoCs64T.net]
- AMDが今度発売するcpuが結構いいかもしれない
- 735 名前:310 mailto:sage [2017/02/19(日) 20:31:51.68 ID:PM1ZzNLK.net]
- DCNNで学習させてるのですが、あまりに時間がかかるので、裏でもう一度
アルファ碁の論文を。日本語解説ページがいくつかできていて助かります。 で、読んでいたら、ロールアウトポリシーなる線形Softmaxでプレイアウトの 手を選択していると・・・。つまりはオセロ評価関数のような特徴を渡して、線形 回帰の代わりに出力をSoftmaxで確率分布にしたものです。 ロールアウトポリシーは棋譜との一致率が25%程度だけど、計算が圧倒的 に速く、このばらけ具合がちょうど良いとの事。 むむむ。アルファ碁はプレイアウトの手の選択にDCNN使ってないのねorz 日本語解説のおかげで、MCTS部の構造もようやくわかった。 いくらマシンが早くても無理だろと思っていた計算も、これなら何とかなりそう レベルの構造に落とし込まれていて、納得しました。 でも、実はまだインプットに何を食わせているのかが、よくわからない(汗
- 736 名前:535 mailto:sage [2017/02/19(日) 22:19:16.15 ID:FX6EUVR+.net]
- ついにアルファ碁論文まで…
英語かつ有料記事ということで私は手を出せずにいましたが日本語サイトもあるんですか。 ちょっとググってみるか…
- 737 名前:310 mailto:sage [2017/02/20(月) 20:05:00.30 ID:L40mCRWI.net]
- 論文自体はだいぶ前にダウンロードしてたんですが(汗
MCTSやらない段階では、やはり理解は難しかったと思います。 DCNN部分の投入データあたりは囲碁の知識が必要だったりしますので、 まだよくわからない点が多いです。 で、MCTS的な視点から眺めると、巷の解説とは違うところにフォーカスが あたったりします。強化学習使ったRL PolicyはValue netの事前学習で 使っていますが、プレイアウトの手の選択では線形Softmax、ノードの分岐 では教師付学習のものを使用しているなど、工夫が見られまして。オセロ は既に評価関数があるので、無理やりDCNNしなくても応用が効くのでは ないかと思ったりします。 とはいえ、今学習中の奴は、学習終わるまで1ヶ月くらいかかりそうではあり ますが、どこまで手の一致率が高められるか、見てみたい気もしています。
- 738 名前:310 mailto:sage [2017/02/20(月) 20:09:54.18 ID:L40mCRWI.net]
- 追記。なんか格好良く書きすぎですね。
ちょうど今MCTSで悩んでいる箇所に見事な回答を与えている点に感動。 日本語で読めたので、そこに速攻で気づく事ができたという事で。 とはいえ、アルファ碁の線形SoftmaxによるRollout関数の入力データは、 囲碁の特性がわからない事から、意味不明な事もまだあり、いずれにして もそのままでは使え無さそうで、オセロに合わせて別途考えるしかなさそうです。
|

|