【オセロ,将棋】ボードゲーム【囲碁,War】

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
03/07/10 00:10ID:6FQp6G+O
比較的地味なボードゲーム専用のスレが欲しくて立ててみました。

私はc言語で作ったデータベースを使って人間と対戦できる将棋かチェス
みたいなソフトを作りたいと思ってますが、グラフィックインターフェースの
作り方がわからなくてつっかえているレベルです。
2016/12/29(木) 00:29:19.19ID:T+iok27x
GGSってまだあるんだっけか
トッププログラムの開発者はみんなあそこで対戦しつつ改良してる
684310
垢版 |
2016/12/30(金) 02:11:45.43ID:iZpfxqhq
>>683
GGS探したけど見つかりません。
オセロのAI自体、行き着くところまで行っちゃってるからなぁ。

コメントの整備をしていたら、細かいところが気になって、あちこち手を入れています。
手を入れながら、UCTの探索結果があるので、それでmoveorderすれば良い事に気が
つきまして。SOLVERが少し早くなったので、終盤探索は38手に格上げ。

しかし、テストプレイしていたら、SOLVERのバグ発見。終局まで打ち続けると、50手目
近辺で間違えます。並列探索部分で、negaScout的に再探索かかったあたりにバグが
ありそうという所まで絞り込みましたが、ちょっと厄介な感じ。

ソース晒す用に昔使ってたDTIのホームページを使えないか調べたら、サービスごと
終了してました(汗。

久々にオセロAIで検索したら、MLPでAIのテストをしている人がいました。評価関数では
なく、次の1手で使っているようです。比較的軽い構成なので、気が向いたらもう一度、
トライしてみようかと思います。
685310
垢版 |
2016/12/30(金) 20:08:38.43ID:iZpfxqhq
バグ直りました。数日前に速度アップできると思いつきで直したところでした。
直ったは良いけど、何故バグるのか理解できないorz
2017/01/01(日) 01:33:49.09ID:AXNNcWXn
個人的にはディープラーニングやって欲しい
687310
垢版 |
2017/01/02(月) 09:01:41.61ID:YMPtqKka
いま、Bloogerにサイトを作ってやっつけで解説文を作ってます。
あらかたできたら公開します。

が、解説していると細かいバグを見つけて、直して確認が必要になるという…。

やっぱ次はディープラーニングですよね。Eigen使ったMLPで次の1手をやってみます。
DCNNももう一度トライしたいと思っていますが、貧弱なパソコン環境ではどうにもならない
かも知れない。
688535
垢版 |
2017/01/06(金) 21:06:02.45ID:/dmWmgCn
ネット碁でアルファ碁が無双してるみたいですね。
60連勝?とか凄すぎw
689310
垢版 |
2017/01/09(月) 14:10:27.74ID:kUxHCmxW
60連勝の相手が、マジトップ棋士だってんだから、あきれるしかないですね(笑

解説書きながらソース見てたら、色々直したくなってしまい、泥沼化しています(汗
強くなったと思ったら弱くなっていたというのの繰り返しです。
690535
垢版 |
2017/01/15(日) 01:15:01.84ID:FqCBSr/V
TensorFlowで学ぶディープラーニング入門って本読んでます。
かなり易しく書こうとしてるのが伝わってくる本なんですがそれでも難しい。orz
691310
垢版 |
2017/01/16(月) 13:21:19.22ID:Cfoi8GBB
カーネルサイズとかチャンネルとかフィルターのあたりですか?


僕の方は・・・モンテカルロだから間違えると思って、思考時間を増やしたり、末端ノードで
1回づつじゃなくて、100回づつプレイアウトするようにしたりして、プレイアウト回数を稼い
だところ、「同じところで同じように安定的に間違える」ようになってしまいまして(汗。

プレイアウトは適当でも、とにかくツリー展開させるか、それともプレイアウトである程度
正確な勝率を得るけど、ツリー展開は減らさないように努力するのか。その辺で、また
悩み始めてしまいまして。edaxの引き分けBOOKから何か情報が取れないかと頑張って
ますが・・・。そろそろ飽きてきちゃったんだよなぁ。
692535
垢版 |
2017/01/16(月) 21:00:44.96ID:UThQer2a
専門用語はよくわかりませんが、付属のサンプルコードをなんとなく動かしてます。
行列と誤差関数を定義してやればtensorflowが勝手に最適化してくれるとか。

成果でないとめげてきますよね。
ここらで一発アルファ碁級のブレークスルーが欲しいですねw
693310
垢版 |
2017/01/16(月) 22:06:12.04ID:cVXIBPCK
あれはやっぱマシンパワーが・・・

一旦計算できちゃってもそれなりの重さなんだけど、学習しようと思うと重さにめげます。
というか、やる気すら起きないレベルorz


とりあえず、実際の最善手順が、ヒューリスティックの何番目かを統計的に処理して、
プレイアウト関数の手のバラつきを表現しようかと思って、プログラム作ってEXCELで
集計して、それなりに計算が簡素にできる形に変形してなんてやりましたが、やった
所で、何番目を選ぶかはランダムではなくて理由があっての事なんだよなぁと…

ちっとマシなヒューリスティックとか言い出すと…できない事をしようとしている事に深く
思い至るわけで。
694310
垢版 |
2017/01/17(火) 00:25:27.65ID:SLwZ7IwS
統計処理して作ったプレイアウト関数も結局ダメでしたorz
最後はやっぱりBOOK頼みになっちゃいます。

もう一回NNに行って次の1手計算させてみるべかな。
695535
垢版 |
2017/01/17(火) 21:19:41.12ID:wCDEMY6U
モンテカルロ木探索ってわざと悪い手打ってる?ていうぐらい期待外れの手を打ちますねw
プレイアウトの質改善が必須か…
696310
垢版 |
2017/01/17(火) 22:04:13.23ID:SLwZ7IwS
例えば40手目くらいの盤面で、UCTの選択基準であるところの実行回数で次の1手を
並べると、トータルではzebraの完全読みの良い手から順に並んでくるんだけど、ところ
どころ順位が入れ替わるんだよね。その入れ替わる場所が、1位と2位とかだと−2して
しまうし、時々−10くらいの手を選んでしまったりする。

囲碁のプレイアウトをちょっと調べたら、やっぱり盤面のパターンを評価して、次の
1手の順位を決めて、点数に応じて着手確率を変えたり、あからさまに悪い手はカット
するみたいな事をしている。そちらの知見では、良いプレイアウトなら回数は少なくて
も何とかなるみたいな話になってる。

今の相手着手可能数ベースで、edaxのpvbook_2009の最善手順を評価すると、1位の手
が選ばれている確率は42%くらいで、2位で17%と、思いのほか手が散っているんです。
これ、同点1位は、ソート順で2位以下にするのではなく1位にまとめるようにしてあるから、
マッチング率が想像していたより悪いって事になります。

別の方法で次の1手ヒューリスティックを作って、一致率を例えば75%〜80%くらいに
までできないかなぁと思いまして。結局、もうしばらくモンテカルロを継続する事にしました。
NNに行く前に、縦横斜めのパターンでベースとなる一致率を作ってみようかなと思います。
697535
垢版 |
2017/01/21(土) 14:40:41.23ID:7GkfgTKT
プログラム作るなら単体テストは必須ですね…
後から後からバグが溢れてくる…
698535
垢版 |
2017/01/21(土) 15:30:15.75ID:7GkfgTKT
机上デバッグはいやだお…T△T
辛すぎる…
699310
垢版 |
2017/01/22(日) 23:15:41.71ID:7cgxubHE
思いっきり同感だけど、結局サボるというorz

実はモンテカルロやってるから見なかった事にしているけど、Solverにバグがあります。
発生する条件も薄々わかっています。いつの間にバグを仕込んだのか。

さて、プレイアウトのヒューリスティックですが、縦横斜めのラインで、その形が現れた
回数、着手された回数のデータベースを作って、プレイアウトの次の1手の時に、それ
ぞれの確率を縦横斜めで集計して、その高い順にsoftmaxで確率分布にして、着手を
選択させる形にしました。

結果は・・・。ヒューリスティックの次の1手としての精度はいまいちですが、それでも
上位3〜4位くらいには最善手が入ってる感じになります。でも、評価値が極端に出過ぎ
ている感じで、ダメダメな感じになりました。確率のバラつきが小さいように感じたので、
ちょっと修正してみましたがダメなので、思い切って累積確率50%でカットしてみました。
この辺で大体3〜4位までの着手になります。少しマシになったけど、やはりダメ。

softmaxの計算が重いため、プレイアウト回数が1/7くらいに減ってしまうんだけど、それを
補う精度が出ていない感じです。楽ちんなのでunordered_map使ってますが、もっと速度を
出そうと思うんなら、他の方法を考えた方が良いかも。

簡潔なプレイアウトで秒間プレイアウト数を稼いで、枝を伸ばす方向に逃げたい気持ちを
ぐっと抑えつつ、引き続いてニューラルネット系で次の1手を求めてみたいと思います。
更にスピード低下するので、いま以上に精度が出ないと・・・。
700535
垢版 |
2017/01/23(月) 23:10:08.18ID:ii9ofJgq
黒番限定ですがLV2に勝ち越せる?というところまで来ました。
何をやっているかというとLV2とLV3を対戦させた棋譜を大量に集めて、
LV2に勝てる手順のDBを作ってナゾルということをやっていますw
まあほとんどチートみたいなものですが、棋譜を集めれば集めるほど
勝てるようになるのでなかなか面白いです。

白番だとLV2が盤の中央からゲームを始めないのでうまくいかなかったりしますw
2017/01/23(月) 23:46:45.10ID:ii9ofJgq
勝利手順のDBからディープラーニングで評価関数を抽出することを考えていますが
今のところ全くうまくいく気配がありませんT△T
702310
垢版 |
2017/01/26(木) 21:23:21.53ID:foYEIc8+
>>700
Buroさんは逐次的にBOOK学習やってました。
僕は論文が理解しきれなかったのと、それやると特定AI相手だけに強いAIが作れて
しまうので禁じ手にしちゃいましたが、オセロというゲームの底の浅さからすると、
それが正解かも知れない(汗

デバッグ兼ねてZebraと対戦していたら、ZebraのBOOKが強化されていくのが実感
できてしまいました。
703310
垢版 |
2017/01/26(木) 21:32:27.07ID:foYEIc8+
さて、本日は非常にショックな事が判明しました。

次の1手を求めるNNを作って、大体できたのでAIに組み込んでました。
NNは以前にEigenで作ったものの流用改造。とりあえず学習結果が確認できる
ところまでやったら、コンパイルが通らない。C2059というエラー。前にも何回か
出ていて、ライブラリの順番いじると直るので放置していた奴。何かの名前が
組み込んだライブラリ間で衝突していると起きるらしい。それが途中からどうにも
直らなくなってしまった。

で、ようやく重い腰をあげて何が衝突しているのか調べたら、A1とかC1とかの
着手位置を表す#defineの定義が、Eigenの内部の型か何かの定義と被ってる。
こちらは#defineなのでnamespaceで回避できない。

楽に回避できる方法を色々考えたあげく、結局、C++良く知らなくてCとしてプログラム
書いていた頃から引きずって#defineを使っているのが悪いのだと気が付いて、
クラスとenumで対処するという、全面作り替えにする事にしてしまいました。

というわけで、修正に3日くらいかかりそうですorz
2017/01/26(木) 21:36:49.48ID:NsrLS1+v
705535
垢版 |
2017/01/26(木) 21:43:44.99ID:NsrLS1+v
>特定AI相手だけに強いAIが作れて
ディープラーニングが成功すれば汎用度もちっとは違うのかもですが。
706535
垢版 |
2017/01/26(木) 21:54:02.30ID:NsrLS1+v
強い詰みルーチンが欲しいですねぇ。
DBでほぼ勝ちという局面にもっていってもポロッと落とすことが結構ある。
707310
垢版 |
2017/01/26(木) 21:56:01.75ID:foYEIc8+
あ、もしかしてenumってunsigned __int64が使えないのか・・・
708535
垢版 |
2017/01/26(木) 23:23:42.26ID:NsrLS1+v
DBは勝率で手を選ぶよりも累計勝利数で手を選んだほうが良いっぽい。
そのほうが勝利再現率が上がるっぽい。
709535
垢版 |
2017/01/29(日) 01:07:10.63ID:uZb/TXFd
負けた手順に対して手動でDBを修正するという汎用性がみじんもない作業を始めましたw
なにかドカンと強くなる方法ないかなぁ
710310
垢版 |
2017/01/29(日) 13:11:46.36ID:rGbRSmBn
enumで__int64使えますね。というか、どこかのバージョンから使えるようになってましたね。
何か裏ワザ的な使い方考え付かないかと思って試しましたが結局ダメで、前から気になって
いた箇所をクラス化しだしたら大規模改造になってしまいました。

オブジェクト指向を忠実に実行しようとすると、結局何度もライブラリ作り直す羽目になると
いう本末転倒な状態(汗


色々ドタバタしていたので、オセロ共通のクラスのみ修正完了。ロジック部分はこれから。
711535
垢版 |
2017/01/30(月) 23:07:35.87ID:nIJrclSx
ファイル出力が思いのほか重い。
知識では知ってたけど今回、実感しました。
DB作るときは棋譜をまとめて読み込んで書きこみは1回だけとか工夫しないとだめですな。
712310
垢版 |
2017/01/31(火) 01:06:15.90ID:tF0OU/RM
>>709
ドカンとは強くならないけど、やっている事から推測すると遺伝的アルゴリズムが
合ってそうな気がします。茨の道ですが(汗

>>711
いまどきはメモリが大きいので、全部読み込んで一括処理とか、思いのほか可能ですね。
713310
垢版 |
2017/01/31(火) 01:17:50.59ID:tF0OU/RM
困った。3層MLPで次の1手を、
http://qiita.com/kanlkan/items/6bff417519ed7d5ce4da
を参考にして求めている(若干やり方が違う)のだけど、思ったように学習してくれない。

NNの計算どっかおかしい気がしてきたorz
714310
垢版 |
2017/02/01(水) 15:57:52.90ID:DrzIg7bz
ひょんな事から学習できました。デバッグ用に学習データを減らしてテストをしようとしたら
学習できてしまいまして。件数を増やすとダメになる模様。

これは仮説ですが、多種多様な棋譜を学習させると、ネットワークの自由度が不足して、
ウェイト更新が相互に打ち消し合った結果、ウエイトがゼロ(勾配消失)に陥ってしまうと。
学習に失敗した時は、大半のテストの結果が、全て同じ確率(softmaxのため)となってい
ます。中身は見ていませんが、softmax関数を通す前はオールゼロとなっている事が十分
に想像できます。

今から思うと、NNで評価関数を作ろうとして失敗していた時も、同じ状態だったのかなと。


学習データを減らすと精度が落ちますので、ネットワークをより複雑かつ大規模にしない
といけないのかなぁと。結局、同じ問題(ネットワークを大規模化しなきゃいけないけど、
自前のパソコンでは計算が厳しい上に、結果を使用する方もタイムクリティカルなので
あまりややこしくしたくない)の周りをグルグルしはじめてしまいました(汗
715535
垢版 |
2017/02/02(木) 23:55:47.04ID:JZtX1mUx
まとめて読むようにしたら3日かかったDB作成が数分で終了しましたw
しかしDBがかなり肥大化してしまいました。
読み込みに5秒くらいかかる。
しかもこの手法だとLV2には勝てるけどLV3には勝てないし。
LV2はパターン少ないからDBで勝利手順なぞれるけどLV3はパターンが多くてカバーできない(多分)。
そろそろ別の手を考えなければ。
716535
垢版 |
2017/02/03(金) 20:14:00.97ID:jkxdJ711
DBを使ってモンテカルロ木探索の探索結果を永続的に蓄積するというのをちょっと思案中。
計算すればするほどDBが洗練されていく感じで。
717310
垢版 |
2017/02/03(金) 20:39:47.64ID:dv6j41bl
>>716
同じ事妄想したけど、それなら後方枝刈付のmin-Maxの探索結果をひたすら
ため込んでいく方が容量的にも速度的にも有利で、それができないからモンテ
カルロだって事に思いいたりました(汗

min-Maxなら、いらない枝カットできるかと思いきや、相手がそこに打っちゃった
時の事を考えたら捨てられない事にも気づきました(汗汗

で、適当なところだけ保存して、残りは別途探索・・・って、これ定石DBやん!

というオチでした。
2017/02/03(金) 20:45:51.93ID:jkxdJ711
ボツ案でしたか。
でもまあ、とりあえずDBを充実させる方向でやってみます。
他に案がないので。
ディープラーニングがうまくいけばなぁ。
719535
垢版 |
2017/02/03(金) 20:49:10.94ID:jkxdJ711
今のところ黒番対LV2は2勝一敗ペースてな感じです。
もっと勝てるかと思ったけどそうでもないですね。
720310
垢版 |
2017/02/03(金) 20:58:39.46ID:dv6j41bl
こちとらディープラーニングで完全にドツボってますorz
721535
垢版 |
2017/02/04(土) 19:33:24.33ID:neMma6zi
ディープラーニングは盤面情報だけじゃなくてこちらでなにがしかの特徴量を計算してやって
その数値も食わせたほうがすこしはましになるんだろうか。
722310
垢版 |
2017/02/04(土) 20:57:26.78ID:ycMSfQXf
オセロではBuroさんの評価関数と同じ特徴を入力にしたMLPで評価関数を作った
オセロプログラムがあります。vsOthaというソフトです。

今回はディープなので、できれば特徴量は自動抽出してもらいたいものではあります。
一応、黒白の盤面情報の他、着手可能位置は与えています。

と、ここまで書いて、着手可能位置を求めるように学習させられるのか、ふと気になった。
何らかの事前学習に使えそうな気がする。

やらずに悶々としているだけなのですが、DCNNの四角い窓ではオセロの特徴はうまく
抽出できないのではないかと思っていますが、他に方法が思いつかないのが悲しい。
723名前は開発中のものです。
垢版 |
2017/02/05(日) 08:03:16.57ID:36jlTAsU
そうかそうか
724535
垢版 |
2017/02/07(火) 20:48:43.68ID:qiXxRrUf
機械学習じゃだめだ、手書き評価関数しかない…
しばらくするといや、手書き評価関数じゃやっぱりだめだ、機械学習だ…
の無限ループw
725310
垢版 |
2017/02/08(水) 21:46:39.89ID:GrcF81sn
昔mnistでオートエンコーダのテストした時のように、学習内容(ウェイト)をBMPにして
可視化してました。テストに時間がかかるので、色々すったもんだバグとりに時間が
かかってましたが、ようやくなんとか表示できるようになりました。で、とりあえず想定より
少な目の隠れ層4096個でテスト開始。

勾配ノイズ(焼きなまし)の設定値もでかすぎたので、設定値を自動計算するようにしたり。
NN復活当初うまく動かなかった原因がこれでした。

で、まだ学習途中なのですが、ウェイトデータ見ると192個(=64×3)毎に1ビットづつ
ずれるパターンに収れんしていっています。192といえば入力データのサイズで、
横に64個づつ並べたビットマップ画像に、まるで光子の回析実験のような縦じまが(汗
そんな周期性が生まれるはずがないので、どこかにバグがあるんじゃないかと。
表示するプログラムのバグかも知れないけど、1エポックに3時間かかるので、止めて
デバッグに入るか、それとも続行するかで悶々中…。

どっちにしても時間がかかるので、裏でDCNNをもう一度コーディング開始。
あまりにネストが深いのでミニバッチは一旦放棄してSGDで。
GoogleのTensorFlowがテンソルな意味が良くわかった。
DCNNだと元データが2次元で、更にチャンネルがある行列では次元が足りないorz

今最大の懸案は、とりあえず隠れ層4096でオートエンコーダの事前 学習しているけど、
それが終わり全体の学習にいって上手く行かなかった時、中間層を増やして再トライ
するか、それともDCNNに行ってしまうか。
726310
垢版 |
2017/02/08(水) 21:47:47.17ID:GrcF81sn
>>724
そこは…絶対的に機械学習である!という信念が必要だと思います(汗
727535
垢版 |
2017/02/09(木) 22:03:30.31ID:qkkjChao
>>726
そうですかw
まあそんな気もしますが、でも終盤の積みルーチンだけなら手書きでイケそうな気もするんですよねぇ
そこだけでもなんとかできれば…
728535
垢版 |
2017/02/10(金) 19:40:14.89ID:M6OFVkZO
黒番だとDBのせいで対LV1よりも対LV2のほうが勝率いいみたいw
めちゃくちゃ歪んだAIになってしまったw。
729310
垢版 |
2017/02/10(金) 23:52:07.84ID:HUcinQI4
3日かけて学習したオートエンコーダ型はやっぱりダメでした。
可能性すら見えなかった。

というわけで、開き直ってDCNN開始。
前回はオセロ専用で展開形を作ってましたが、それではmnistなどでテストできない
ので、max_poolingも含めて、本格的にちゃんとしたものを作ってみました。
とはいえ、まだ畳み込み層の誤差逆伝播の解釈が正しいか、自信はありません。
また、テストで動かしたところ、なんかすごく重い印象です。

ちゃんと動くのかなぁ。
2017/02/11(土) 10:06:04.43ID:CnQo/DsP
GGSはmimosaというソフトを使うと入れますよ
731310
垢版 |
2017/02/13(月) 22:45:03.11ID:d/p+PbrG
>>730
そのmimosaのサイトがリンク切れで見つからないのです。
732310
垢版 |
2017/02/14(火) 20:21:59.60ID:lpq90WbI
自作ライブラリにDCNNのレイヤーを書いたのですが、あまりの計算時間にデバッグ中に
めげて、試しにtiny_dnnというC++専用のNNライブラリを入れてみましたところ、自作の
10倍以上の速度で・・・こちらに乗り換えです。

で、tiny_dnnでmnistやって感度をつかんだところで、オセロの盤面を変換する処理を
書いて、小手調べに簡単なネットワークで動かそうとしてみたところ・・・盤面データの
変換の段階でメモリーが溢れて盛大にスワップ開始(^^;

5000,000盤面×100マス(Padding含む)×4チャンネル×4バイト(float)でデータだけで
8Gbytes。自分のパソコンのメモリーは8Gで、空いているメモリーは5Gちょいとメモリー
不足が判明しました。

いまどきのパソコンはメモリーでかいから一括でも大丈夫とか言って、このざまです(笑)。

tiny_dnnは全データ一括で渡して指定エポック回してくれる仕組みなのですが、仕方ない
ので、入力データを分割して、自分でループ回します。

α碁のハード環境がうらやましいorz
733310
垢版 |
2017/02/15(水) 23:06:48.81ID:DozmM7Z3
色々細かく改造。やっぱライブラリがあると気が楽です(汗

簡単なネットワークの初期の学習の具合では正答率50%くらいが上限な印象だったので、
ネットワークを複雑にしてみました。で、1エポック8時間以上かなぁ。

もっとハードを・・・って真剣に思いますorz
2017/02/17(金) 23:21:12.85ID:ZDoCs64T
AMDが今度発売するcpuが結構いいかもしれない
735310
垢版 |
2017/02/19(日) 20:31:51.68ID:PM1ZzNLK
DCNNで学習させてるのですが、あまりに時間がかかるので、裏でもう一度
アルファ碁の論文を。日本語解説ページがいくつかできていて助かります。

で、読んでいたら、ロールアウトポリシーなる線形Softmaxでプレイアウトの
手を選択していると・・・。つまりはオセロ評価関数のような特徴を渡して、線形
回帰の代わりに出力をSoftmaxで確率分布にしたものです。
ロールアウトポリシーは棋譜との一致率が25%程度だけど、計算が圧倒的
に速く、このばらけ具合がちょうど良いとの事。

むむむ。アルファ碁はプレイアウトの手の選択にDCNN使ってないのねorz

日本語解説のおかげで、MCTS部の構造もようやくわかった。
いくらマシンが早くても無理だろと思っていた計算も、これなら何とかなりそう
レベルの構造に落とし込まれていて、納得しました。

でも、実はまだインプットに何を食わせているのかが、よくわからない(汗
736535
垢版 |
2017/02/19(日) 22:19:16.15ID:FX6EUVR+
ついにアルファ碁論文まで…
英語かつ有料記事ということで私は手を出せずにいましたが日本語サイトもあるんですか。
ちょっとググってみるか…
737310
垢版 |
2017/02/20(月) 20:05:00.30ID:L40mCRWI
論文自体はだいぶ前にダウンロードしてたんですが(汗
MCTSやらない段階では、やはり理解は難しかったと思います。
DCNN部分の投入データあたりは囲碁の知識が必要だったりしますので、
まだよくわからない点が多いです。

で、MCTS的な視点から眺めると、巷の解説とは違うところにフォーカスが
あたったりします。強化学習使ったRL PolicyはValue netの事前学習で
使っていますが、プレイアウトの手の選択では線形Softmax、ノードの分岐
では教師付学習のものを使用しているなど、工夫が見られまして。オセロ
は既に評価関数があるので、無理やりDCNNしなくても応用が効くのでは
ないかと思ったりします。

とはいえ、今学習中の奴は、学習終わるまで1ヶ月くらいかかりそうではあり
ますが、どこまで手の一致率が高められるか、見てみたい気もしています。
738310
垢版 |
2017/02/20(月) 20:09:54.18ID:L40mCRWI
追記。なんか格好良く書きすぎですね。

ちょうど今MCTSで悩んでいる箇所に見事な回答を与えている点に感動。
日本語で読めたので、そこに速攻で気づく事ができたという事で。

とはいえ、アルファ碁の線形SoftmaxによるRollout関数の入力データは、
囲碁の特性がわからない事から、意味不明な事もまだあり、いずれにして
もそのままでは使え無さそうで、オセロに合わせて別途考えるしかなさそうです。
739535
垢版 |
2017/02/23(木) 20:58:02.50ID:ONUfwXLw
連続対戦してると突然落ちるバグがあるっぽいが意図的に再現できない。
どうデバッグすりゃいいんだ。orz.
2017/02/23(木) 23:03:49.03ID:ONUfwXLw
再現した!
けど一回再現させんのに1時間かかるw
741535
垢版 |
2017/02/24(金) 21:40:56.21ID:sIjNtQpy
コアダンプの吐かせ方がわからん。T△T
デバッグオプション付けてulimit -c unlimitedだけじゃだめなんか。
ちな環境はcygwin。
742名前は開発中のものです。
垢版 |
2017/02/24(金) 21:43:59.65ID:P/wI/gFl
age
743535
垢版 |
2017/02/26(日) 00:05:27.56ID:TbeyqTpr
やっと落ちてる場所見つかった。
ぬるぽだった
744535
垢版 |
2017/02/26(日) 23:30:45.62ID:TbeyqTpr
特徴量とか便利すぎる言葉考えたやつ誰だよ。
いつでも特徴量が効率よく計算できるとは限らんだろうが。
マジムカつく。
745310
垢版 |
2017/02/27(月) 01:19:56.03ID:kLJ7ziJk
全く同感orz
746535
垢版 |
2017/02/28(火) 21:58:57.62ID:+JAecqpe
ファイルに2Gの壁とかあんの?
2G以上のデータはどうやって受け渡せばいいんだ。
747名前は開発中のものです。
垢版 |
2017/03/01(水) 12:15:45.60ID:jElZYckW
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
http://labaq.com/archives/51880196.html
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
https://bodoge.hoobby.net/columns/00013
QRコード・クトゥルフ神話・24世紀などユニークすぎるデザインてんこ盛りのサイコロ「Dice Empire」レビュー
http://gigazine.net/news/20150313-dice-empire/
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
https://bodoge.hoobby.net/columns/00001
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
http://gigazine.net/news/20150820-board-game-crowdfunding/
実際のところ、自作ボードゲームってどれぐらい売れるもんなの?
http://roy.hatenablog.com/entry/2016/12/20/220102
ゲームマーケット2016春にて初参加サークルさんに作成数アンケートをとってきました
http://hidarigray.blog35.fc2.com/blog-entry-614.html
カフェも急増 ボードゲームにアラサーがハマる理由
http://style.nikkei.com/article/DGXMZO10921930R21C16A2000000?channel=DF260120166491
ボードゲームのオリジナルオーダー制作
http://www.logygames.com/logy/ordermade.html
748535
垢版 |
2017/03/02(木) 19:55:15.50ID:ejFPCGdH
がっつり連続対戦中。黒番対LV2だけ流し終わった。

100局目
黒(airandom.dll)の勝利回数: 73
白(ai-lv2.dll)の勝利回数: 27

なお他のレベルも平行して回してるけどいま黒番対LV3に1勝54敗中w

なんでこんなに差がでるのかなぁ。
749535
垢版 |
2017/03/02(木) 20:08:53.54ID:ejFPCGdH
対LV2はかなり同じパターンで勝ってるな。
勝利手順DBにずっぽり嵌ってくれてる感じだ。
LV3は嵌ってくれない。
750535
垢版 |
2017/03/02(木) 21:41:10.44ID:ejFPCGdH
序盤用DBはそこそこうまく動いているが
中盤〜終盤用のDBのせいで致命的に打ち手が狂ってるように見える。
LV3に勝てないのは多分これだな。
751535
垢版 |
2017/03/02(木) 23:28:08.02ID:ejFPCGdH
ずいぶん昔に書いたコードにバグがあった。
ビビるくらい致命的な奴。
よく今まで動いてたな。
752310
垢版 |
2017/03/03(金) 01:05:23.13ID:0ijSS6CX
次の1手もDCNNもなんか上手くいかないので、アルファ碁の原点に戻りました。
アルファ碁のMTCSとしての特徴は、各ノードで評価関数を動かして、そのノードに
点をつけて勝率と50%混合する事で、ノードの選択に事前に差をつけてしまう事に
あります。これによって、負けが多いけど1手だけ良い手があるルートを正しく評価
する可能性を高めていると解釈しています。

で、評価関数はオセロでは線形和で確立されているので、昔の奴をと思ったのですが、
どうせならMLPのライブラリ使ってしまえばEigenが使えるので信頼性高い上に、学習
率の最適化でモーメンタムどころかSMORMS3が使えるようになります。インプットが
とても疎なので、EigenのSparseMatrixを使って高速化を図ります。

早速作って学習させてみたところ…僕の記憶が確かなら以前のプログラムの数十倍
くらいの速度で動いています(汗。これなら100エポックくらい楽勝。

今は評価値を計算させていますが、一旦できたら、次のステップで勝率を計算させられ
ないかなぁと。ただ、評価値がある程度正確なら、勝率ではなく平均スコアでプレイアウト
しても良いのかなと思っています。
753535
垢版 |
2017/03/04(土) 22:29:00.76ID:ZrhUKe4E
DB初期化に35秒かかる。
コンパイラを64bit版に変えると11秒になる。
なぜこんなに差が…
ちなみに囲連星本体が32bitプログラムだからコンパイラ変えられないT△T
なんとかならんか?
754535
垢版 |
2017/03/05(日) 03:39:08.88ID:LufQ1oMY
コンパイラの問題じゃなくてライブラリを静的リンクするか動的リンクするかの違いみたいです。多分。
かなり早くなった^_^
755535
垢版 |
2017/03/06(月) 18:17:26.36ID:XCrs8w8i
思考時間は試行回数に直結する
重いモンテカルロは一旦封印する
756310
垢版 |
2017/03/10(金) 01:25:20.88ID:4qfAid0y
評価関数の作り直しを始めたら、計算してはやり直しの繰り返しです。
計算速度が上がったので、比較的気楽に再計算できちゃうのがいかん。

勝率の計算もしてみましたが、結果は似たようなものでした。
いずれにせよ、もう少し精度を上げたいなぁ。
757535
垢版 |
2017/03/14(火) 22:28:17.78ID:KNe/k0R5
LV1の棋譜はDBから削除したほうがいいみたい。
いいとこどりとはいかないか。
758535
垢版 |
2017/03/15(水) 21:45:36.14ID:gknDrLfY
囲連星のルールは囲碁と共通部分があるから囲碁AIを参考にするのが良いと思っていたが
7連を作れば勝ちというのは王様を詰ませれば勝ちという将棋のゲーム性に近いものがあるのかもしれない。
将棋AIの手法も調べてみるべきか?
759535
垢版 |
2017/03/18(土) 23:34:35.11ID:VnDB8sqw
手書き評価関数やっぱうまくいかないな。
LV0やLV1も実は結構強かったんだな。
反省。
760535
垢版 |
2017/03/19(日) 00:56:20.04ID:y6fifsqj
やっぱ機械学習しかない。(無限ループ)
761535
垢版 |
2017/03/21(火) 22:23:02.18ID:xGpFrIPp
特徴量と棋譜は用意できる。
棋譜の勝者の着手に対してどの特徴量が優先的に選択されたか?を計算したい。
どうすればいいかな?
2017/03/22(水) 00:39:02.37ID:/GDSNvuJ
優先的とか無いでしょ
評価関数は全ての特徴量に対応する評価点を合計するだけ
その各評価点の絶対値が大きくて評価値に割と大きな影響を与えるとかゼロに近いとかはあるけど
763310
垢版 |
2017/03/22(水) 09:25:05.89ID:sNSr7O3Z
>>761
それを統計的に処理して求めるのが線形回帰。
収束アルゴリズムは最急降下法を使用するのが普通。

特徴量あり1、無し0で特徴量並べたベクトルを食わせて、
荷重値であるウェイトを同数用意して内積計算。
出て来たスカラ値が、教師データに合うようにウェイトを収束計算させる。

出て来たウェイトが対応する各特徴量の重要度を表す。
764535
垢版 |
2017/03/22(水) 20:48:28.79ID:rRrXmS1r
自力で線形回帰を実装するのはしんどそう。
なにかいいライブラリないですか?
>>535のMM法が動いてくれれば話は早かったのになぁ
765535
垢版 |
2017/03/22(水) 21:25:31.00ID:rRrXmS1r
もう一度MM法トライしてみるか…
766310
垢版 |
2017/03/23(木) 17:35:49.51ID:xjqriUpX
線形回帰というか、最急降下法自体はたいした事ないよ。
ひたすらループ回して、答えを出して、教師データとの差に比例して
ウェイトを調整するだけ。ニューラルネットになるとバックプロパゲーション
が出てくる(これも似たようなものだけど)違いがあるけど。

とりあえず実装の参考にするならこれ。
http://sealsoft.jp/thell/learning.pdf

GitHUBとかで探すとなんかあるかも。裏ワザではMLPのライブラリ落として
来て、1層の活性化関数無しの全結合層で計算させるって手もある。
767310
垢版 |
2017/03/23(木) 17:40:46.97ID:xjqriUpX
こちらは、線形回帰の評価関数を作り直して、勝率と石差の2つ用意して、
アルファ碁っぽくMCTSに組み込んでみました。

で、テスト開始したらやたらと落ちる。
線形回帰の計算にEigen(行列パッケージ)を使用していたんだけど、こいつ
が並列処理に対応していないのが原因臭い。

というわけで、学習部分と、MCTSで使う評価関数を切り分けて、評価値を
求める時はEigenを使わないように改造中です。

果たして強くなっているのか。
768535
垢版 |
2017/03/23(木) 20:11:41.72ID:rddo+SDA
>>766
ありがとうございます。
さらっと読んでみました。
いい感じの文章ですね。
なんとなくイメージは掴めましたが、実際実装するのは結構大変そうな気がします。
まずはMM法でやり直してみて、駄目だったら手を出してみます。
すいません。
769310
垢版 |
2017/03/25(土) 10:29:51.08ID:8t9unId8
学習時と使用時の評価関数の切り分け。簡単にやるつもりだったのに、
バグ一杯出してデバッグで大変な事に。

デバッグが行き詰ると、気になっていた箇所を綺麗に直して手を動かし
続けたくなるんだけど、つい計算結果に影響が出てしまうところまで
手を入れてしまい、結局また再度学習しなおしです。

一応バグは解消したと思っていますが・・・
この土日に確認まで行けるか微妙。
770名前は開発中のものです。
垢版 |
2017/03/25(土) 15:51:24.00ID:eEMcRod/
自作アナログゲームを投稿・共有できる「紙ゲー.net」がオープン
http://www.moguragames.com/entry/kamigame-analog-game/
771535
垢版 |
2017/03/25(土) 21:50:08.29ID:S05KfsXi
特徴量、用意できるって言ったけど、いざ作ろうとすると迷うw
あれもほしい、これもほしいとなって発散してしまう。
772310
垢版 |
2017/03/25(土) 23:15:01.53ID:8t9unId8
特徴量の選択はね・・・

実際にその特徴量を使って統計処理(線形回帰でもMLPでもDCNNでも何でも可)して
みて、結果の精度に効くものを残して、効かないもの(ウェイトがゼロになるとか、外して
も精度が変わらないとか)を外して、結果的に決まるものじゃないかと思います。

そういう意味じゃ、仮説検証でトライアンドエラーしないといかん。

オセロではBuroさんが論文書いてくれているので、皆それをベースに小修正程度で、
ほぼ同じ精度のものができちゃいますが、そういう先行者がいないゲームだと、自分で
やらないといけないので大変だと思います。

DCNNで「特徴量を自動的に決めてくれる」ってのに、皆が胸熱になったのは、そういう
事です。自分はオセロに応用しようとして、失敗して、後回しにしちゃいましたが。
773310
垢版 |
2017/03/27(月) 01:55:55.89ID:n7C1rJ6D
アルファチックなMCTSオセロですが、とりあえず途中まで学習してテストしたところ・・・。

終局しているのに両者パスでツリーが伸びて行ってしまう(汗
何度チェックしても原因不明。ブレークポイントでチェックすると、あり得ない場所で
ボードデータが書き換わっているように見えますが…。並列探索が原因かと思い、
シングル動作にしてみましたが、それでも同じ。かなり重症です。

が、それを除くと、途中までテストした感じでは、最善手を打てている模様。
まだ序盤なのにツリー成長が尋常ではなく、終局までツリーができています。
不要な手をカットする仕組みとして、十分すぎる性能になっています。
とはいえ、勝率判定はそれほど正確ではないので、変な局面に誘導されると、
読み抜けが問題になってくるかも知れません。

もしかしたら、終局後もパスでツリーが伸びている問題は、これまでもあったけど、
終盤完全読みにしていて見えなかっただけかも知れません。
774310
垢版 |
2017/03/28(火) 03:12:19.93ID:Cq+qEzvW
パスが伸びる原因は判明。

着手後の盤面を返す関数で、合法手じゃない着手を要求された時を
エラーにせず、元の盤面をそのまま返していたため、手が進まなくなって
いたのが原因だった。

が、そもそも合法手以外の手を渡すはずがないから、エラートラップして
いなかっただけで・・・

まだ根本原因にはたどり着けず。
775535
垢版 |
2017/03/29(水) 21:27:24.43ID:a7v8cJOT
MM法動きました!
でも全然強くないw
特徴量が悪いのか棋譜が足りないのか…
776310
垢版 |
2017/03/29(水) 21:53:37.26ID:4lOT7Sa+
大体バグがとれました。

Zebraの学習モードと対局。
F5-D6から10手目までは定石使用。その後40手目まで新AIで手を分析。
途中数回-2の手を打つものの、そのまま終盤まで行き、−4〜−6くらいで安定。
40手前に負け趨勢が判明(勝率30%くらいかな?)するとご乱心モード入り(汗

というわけで、Zebraレベルまで、もう少しという感じです。

評価関数を使用したプレイアウトは、重すぎる上に結果も散々で、結局のところ
以前の角評価付相手着手可能数ヒューリスティックで3手を選択し、75%20%
5%で振り分けるものを使用しています。評価関数型の方は多分softmaxで
使うexpの計算が重いと思うので、テーブル化を検討してみようかと思います。

一番の改善点は・・・。評価関数で悪いと評価された手には、プレイアウトを割り当て
ないので、とにかくツリー展開が縦深します。30秒思考で12〜14手目には、一番
読んでいる枝は終局に達しています。これで、モンテカルロの偶然がかなり減って
いる印象です。また、余計な横枝が伸びていないので、メモリーにも優しいです。

2手ほど間違えるのは、ツリー展開の初期値で与える評価値の誤差が原因と思います。
ここは、今の評価関数では、これ以上精度出せないので、何か手を考える必要あり。

あと、いくつかの定数調整かな。
777310
垢版 |
2017/03/31(金) 20:13:06.62ID:Hurb1/nC
expの計算は重さの原因ではありませんでした。やはり単純に評価関数が重い模様。
プレイアウトはヒューリスティックのsoftmax版に変更。

ツリーの初期の評価値は、数手読む事で精度アップを図ってみましたが、3手も読む
とかなり時間がかかって、プレイアウト回数が1/10以下になってしまうので、バランス
見て2手読みにしてみましたが、これで強さが変わるのか不明。

10〜15手目で1回。35手前後で1回づつ間違えて、負けを確信したところで乱心。
試しに15手まで定石DBを使うようにしてみたところ、35手目まで引き分けで行けました。
やはり35手目で間違えて−6。むむむ。

40手までの棋譜。
F5 D6 C3 D3 C4 F4 C5 B5 B4 B3
E7 C6 B6 E6 F6 D7 C8 A6 C7 E3
F3 G4 G3 E2 H3 G5 G6 F7 E8 B7
F2 B8 D1 F1 A8 A7 A5 D8 A4 A3

35手目のA8以下を、A5 A4 E1 C1 A8 A7としていれば引分でした。
評価の順番はA8/E1/A5と、正解を3番手に予想しています。
Zebraの中盤20手読みでもE1と間違える局面で24手読みだと正解するみたいです。

実をいうと、途中で邪魔が入って放置している間に、バックグラウンド探索で1000万
プレイアウトの上限に2回達しています。強さ図る時はバックグラウンド探索を止めない
と意味ないかも。

囲碁AIの本を読んでいたら、プレイアウトの精度の検証に、プレイアウト結果盤面を
統計的に処理して、終局予想図を出す方法と、重要な手を見つけるクリティカリティと
言う概念の説明がありました。この辺使って、プレイアウトの弱点探してみます。
778310
垢版 |
2017/04/01(土) 01:30:30.93ID:Wq4mpDtN
直すところが無くなってきたのでパラメータ調整。
たまたまだと思いますが、初めてZebraの中盤24手読みと引き分けました。

こちらの設定は、バックグラウンド探索無しの1手1分(相手も30秒考えるという想定)
定石10手まで。完全読み切りルーチンなし。

F5 D6 C3 D3 C4 F4 C5 B5 B4 B3
D7 C6 B6 E6 F6 G5 G6 E3 A5 E7
F3 G4 E2 C2 H4 H3 H6 H5 C7 D8
G3 H7 A3 A4 A6 H2 F8 F7 C1 D2
C8 E8 F2 D1 F1 B1 E1 G1 B2 A1
A2 B8 A8 B7 A7 G2 H1 H8 G7 G8

ちなみにZebra側は全てBookにあった模様で、一度も中盤探索していません。
779535
垢版 |
2017/04/01(土) 11:28:54.33ID:Gu8vVrdS
おおーZebra越えが見えてきましたか凄い!
こっちも頑張らねば…
780310
垢版 |
2017/04/01(土) 12:57:37.15ID:Wq4mpDtN
あ、たまたま4月1日の投稿ですが、嘘ではありませぬ(^^;
Zebraがエイプリルフールしてくれたのかも知れませんが。

今回はZebra側は、全部Book上で打っていたので、思考時間実質ゼロです。
Bookを変化させるにして、最初にZebra側がBook評価で-0.5くらいの手を選んで
くれたので、緩まずに終盤まで行ったのかも知れません。

でも、流石に思考時間1分はやり過ぎですよね。
あと、Zebraの中盤探索と勝負したいのですから、ZebraもBookを切った方が良いかな。
781310
垢版 |
2017/04/01(土) 14:20:36.16ID:Wq4mpDtN
ZebraをBook無しにして対戦したら、中盤で読み勝って+2勝ちになりました。

以下棋譜。
F5 D6 C3 D3 C4 F4 C5 B3 C2 E3
D2 C6 B4 B5 F2 E6 F3 C1 A3 A4
A5 A6 A7 D1 B6 E2 E7 D7 F1 E1
A2 G1 F7 G5 G4 G6 F6 H3 E8 C8
D8 G3 B8 B7 H5 H7 G2 H1 H6 G8
B1 A1 A8 C7 G7 H4 B2 H8 H2 F8

Zebra設定:白番、中盤24手探索、Book未使用、中盤変化せず
当方設定:黒番、10手目まで引分定石使用、思考時間1分、バックグラウンド探索なし
注)昨夜評価関数の学習を少し進めました。多分誤差範囲です。

Zebraの解析によれば23手目あたりで間違えてくれたみたいです。

こちらは10手までは定石使っておかないと、かなり滅茶苦茶な手を打ってしまったり
しますので、Zebraの序盤の精度は凄いですね。

次はどうしよう。
強化学習を調べているんだけど、いまいちどう応用したら良いのかがわからない。
782310
垢版 |
2017/04/01(土) 16:16:54.26ID:Wq4mpDtN
1分探索では申し訳ないので、10秒探索+バックグラウンド探索にしてみました。

F5 D6 C4 D3 C3 F4 C5 B3 C2 E3
D2 C6 B4 B5 F2 E6 F3 C1 A3 A4
A5 A6 A7 D1 B6 E2 F1 E1 A2 G1
E7 D7 F7 G5 G4 G6 F6 H3 E8 C8
D8 G3 B8 B7 H5 H7 G2 H1 H6 G8
B1 A1 A8 C7 G7 H4 B2 H8 H2 F8

若干違うけど、ほとんど同じような進行で+2勝ち。
確認していないけど、手順前後で同じ終局図になっている気がする。

ちなみに23手目A7は、自分の手番でした。解析結果も、Zebra側が見落とした手
を発見している形になっています。恐らく、その手前の22手目のA6辺りで見落とし
が起きているのだと思います。

こちらが間違えていないという点は評価できるけど、Zebraを中盤変化させて色々な
パターンを試す必要ありそう。

まだ半信半疑だけど、10秒探索でこれって、ものすごく強くなってる気がしてきた。
783310
垢版 |
2017/04/01(土) 17:37:16.14ID:Wq4mpDtN
もう1局やって引分。

強化学習って、プレイアウト同士対局させながら、確率的勾配効果法で
1件づつ更新を繰り返す形で良いのかなぁ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況