[過去ログ] 【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
693: 310 2017/01/16(月)22:06 ID:cVXIBPCK(1) AAS
あれはやっぱマシンパワーが・・・
一旦計算できちゃってもそれなりの重さなんだけど、学習しようと思うと重さにめげます。
というか、やる気すら起きないレベルorz
とりあえず、実際の最善手順が、ヒューリスティックの何番目かを統計的に処理して、
プレイアウト関数の手のバラつきを表現しようかと思って、プログラム作ってEXCELで
集計して、それなりに計算が簡素にできる形に変形してなんてやりましたが、やった
所で、何番目を選ぶかはランダムではなくて理由があっての事なんだよなぁと…
ちっとマシなヒューリスティックとか言い出すと…できない事をしようとしている事に深く
思い至るわけで。
694: 310 2017/01/17(火)00:25 ID:SLwZ7IwS(1/2) AAS
統計処理して作ったプレイアウト関数も結局ダメでしたorz
最後はやっぱりBOOK頼みになっちゃいます。
もう一回NNに行って次の1手計算させてみるべかな。
695: 535 2017/01/17(火)21:19 ID:wCDEMY6U(1) AAS
モンテカルロ木探索ってわざと悪い手打ってる?ていうぐらい期待外れの手を打ちますねw
プレイアウトの質改善が必須か…
696: 310 2017/01/17(火)22:04 ID:SLwZ7IwS(2/2) AAS
例えば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 2017/01/21(土)14:40 ID:7GkfgTKT(1/2) AAS
プログラム作るなら単体テストは必須ですね…
後から後からバグが溢れてくる…
698: 535 2017/01/21(土)15:30 ID:7GkfgTKT(2/2) AAS
机上デバッグはいやだお…T△T
辛すぎる…
699: 310 2017/01/22(日)23:15 ID:7cgxubHE(1) AAS
思いっきり同感だけど、結局サボるというorz
実はモンテカルロやってるから見なかった事にしているけど、Solverにバグがあります。
発生する条件も薄々わかっています。いつの間にバグを仕込んだのか。
さて、プレイアウトのヒューリスティックですが、縦横斜めのラインで、その形が現れた
回数、着手された回数のデータベースを作って、プレイアウトの次の1手の時に、それ
ぞれの確率を縦横斜めで集計して、その高い順にsoftmaxで確率分布にして、着手を
選択させる形にしました。
結果は・・・。ヒューリスティックの次の1手としての精度はいまいちですが、それでも
上位3〜4位くらいには最善手が入ってる感じになります。でも、評価値が極端に出過ぎ
ている感じで、ダメダメな感じになりました。確率のバラつきが小さいように感じたので、
ちょっと修正してみましたがダメなので、思い切って累積確率50%でカットしてみました。
この辺で大体3〜4位までの着手になります。少しマシになったけど、やはりダメ。
softmaxの計算が重いため、プレイアウト回数が1/7くらいに減ってしまうんだけど、それを
補う精度が出ていない感じです。楽ちんなのでunordered_map使ってますが、もっと速度を
出そうと思うんなら、他の方法を考えた方が良いかも。
簡潔なプレイアウトで秒間プレイアウト数を稼いで、枝を伸ばす方向に逃げたい気持ちを
ぐっと抑えつつ、引き続いてニューラルネット系で次の1手を求めてみたいと思います。
更にスピード低下するので、いま以上に精度が出ないと・・・。
700(1): 535 2017/01/23(月)23:10 ID:ii9ofJgq(1/2) AAS
黒番限定ですがLV2に勝ち越せる?というところまで来ました。
何をやっているかというとLV2とLV3を対戦させた棋譜を大量に集めて、
LV2に勝てる手順のDBを作ってナゾルということをやっていますw
まあほとんどチートみたいなものですが、棋譜を集めれば集めるほど
勝てるようになるのでなかなか面白いです。
白番だとLV2が盤の中央からゲームを始めないのでうまくいかなかったりしますw
701: 2017/01/23(月)23:46 ID:ii9ofJgq(2/2) AAS
勝利手順のDBからディープラーニングで評価関数を抽出することを考えていますが
今のところ全くうまくいく気配がありませんT△T
702: 310 2017/01/26(木)21:23 ID:foYEIc8+(1/3) AAS
>>700
Buroさんは逐次的にBOOK学習やってました。
僕は論文が理解しきれなかったのと、それやると特定AI相手だけに強いAIが作れて
しまうので禁じ手にしちゃいましたが、オセロというゲームの底の浅さからすると、
それが正解かも知れない(汗
デバッグ兼ねてZebraと対戦していたら、ZebraのBOOKが強化されていくのが実感
できてしまいました。
703: 310 2017/01/26(木)21:32 ID:foYEIc8+(2/3) AAS
さて、本日は非常にショックな事が判明しました。
次の1手を求めるNNを作って、大体できたのでAIに組み込んでました。
NNは以前にEigenで作ったものの流用改造。とりあえず学習結果が確認できる
ところまでやったら、コンパイルが通らない。C2059というエラー。前にも何回か
出ていて、ライブラリの順番いじると直るので放置していた奴。何かの名前が
組み込んだライブラリ間で衝突していると起きるらしい。それが途中からどうにも
直らなくなってしまった。
で、ようやく重い腰をあげて何が衝突しているのか調べたら、A1とかC1とかの
着手位置を表す#defineの定義が、Eigenの内部の型か何かの定義と被ってる。
こちらは#defineなのでnamespaceで回避できない。
楽に回避できる方法を色々考えたあげく、結局、C++良く知らなくてCとしてプログラム
書いていた頃から引きずって#defineを使っているのが悪いのだと気が付いて、
クラスとenumで対処するという、全面作り替えにする事にしてしまいました。
というわけで、修正に3日くらいかかりそうですorz
704: 2017/01/26(木)21:36 ID:NsrLS1+v(1/4) AAS
乙
705: 535 2017/01/26(木)21:43 ID:NsrLS1+v(2/4) AAS
>特定AI相手だけに強いAIが作れて
ディープラーニングが成功すれば汎用度もちっとは違うのかもですが。
706: 535 2017/01/26(木)21:54 ID:NsrLS1+v(3/4) AAS
強い詰みルーチンが欲しいですねぇ。
DBでほぼ勝ちという局面にもっていってもポロッと落とすことが結構ある。
707: 310 2017/01/26(木)21:56 ID:foYEIc8+(3/3) AAS
あ、もしかしてenumってunsigned __int64が使えないのか・・・
708: 535 2017/01/26(木)23:23 ID:NsrLS1+v(4/4) AAS
DBは勝率で手を選ぶよりも累計勝利数で手を選んだほうが良いっぽい。
そのほうが勝利再現率が上がるっぽい。
709(1): 535 2017/01/29(日)01:07 ID:uZb/TXFd(1) AAS
負けた手順に対して手動でDBを修正するという汎用性がみじんもない作業を始めましたw
なにかドカンと強くなる方法ないかなぁ
710: 310 2017/01/29(日)13:11 ID:rGbRSmBn(1) AAS
enumで__int64使えますね。というか、どこかのバージョンから使えるようになってましたね。
何か裏ワザ的な使い方考え付かないかと思って試しましたが結局ダメで、前から気になって
いた箇所をクラス化しだしたら大規模改造になってしまいました。
オブジェクト指向を忠実に実行しようとすると、結局何度もライブラリ作り直す羽目になると
いう本末転倒な状態(汗
色々ドタバタしていたので、オセロ共通のクラスのみ修正完了。ロジック部分はこれから。
711(1): 535 2017/01/30(月)23:07 ID:nIJrclSx(1) AAS
ファイル出力が思いのほか重い。
知識では知ってたけど今回、実感しました。
DB作るときは棋譜をまとめて読み込んで書きこみは1回だけとか工夫しないとだめですな。
712: 310 2017/01/31(火)01:06 ID:tF0OU/RM(1/2) AAS
>>709
ドカンとは強くならないけど、やっている事から推測すると遺伝的アルゴリズムが
合ってそうな気がします。茨の道ですが(汗
>>711
いまどきはメモリが大きいので、全部読み込んで一括処理とか、思いのほか可能ですね。
713: 310 2017/01/31(火)01:17 ID:tF0OU/RM(2/2) AAS
困った。3層MLPで次の1手を、
外部リンク:qiita.com
を参考にして求めている(若干やり方が違う)のだけど、思ったように学習してくれない。
NNの計算どっかおかしい気がしてきたorz
714: 310 2017/02/01(水)15:57 ID:DrzIg7bz(1) AAS
ひょんな事から学習できました。デバッグ用に学習データを減らしてテストをしようとしたら
学習できてしまいまして。件数を増やすとダメになる模様。
これは仮説ですが、多種多様な棋譜を学習させると、ネットワークの自由度が不足して、
ウェイト更新が相互に打ち消し合った結果、ウエイトがゼロ(勾配消失)に陥ってしまうと。
学習に失敗した時は、大半のテストの結果が、全て同じ確率(softmaxのため)となってい
ます。中身は見ていませんが、softmax関数を通す前はオールゼロとなっている事が十分
に想像できます。
今から思うと、NNで評価関数を作ろうとして失敗していた時も、同じ状態だったのかなと。
学習データを減らすと精度が落ちますので、ネットワークをより複雑かつ大規模にしない
といけないのかなぁと。結局、同じ問題(ネットワークを大規模化しなきゃいけないけど、
自前のパソコンでは計算が厳しい上に、結果を使用する方もタイムクリティカルなので
あまりややこしくしたくない)の周りをグルグルしはじめてしまいました(汗
715: 535 2017/02/02(木)23:55 ID:JZtX1mUx(1) AAS
まとめて読むようにしたら3日かかったDB作成が数分で終了しましたw
しかしDBがかなり肥大化してしまいました。
読み込みに5秒くらいかかる。
しかもこの手法だとLV2には勝てるけどLV3には勝てないし。
LV2はパターン少ないからDBで勝利手順なぞれるけどLV3はパターンが多くてカバーできない(多分)。
そろそろ別の手を考えなければ。
716(1): 535 2017/02/03(金)20:14 ID:jkxdJ711(1/3) AAS
DBを使ってモンテカルロ木探索の探索結果を永続的に蓄積するというのをちょっと思案中。
計算すればするほどDBが洗練されていく感じで。
717: 310 2017/02/03(金)20:39 ID:dv6j41bl(1/2) AAS
>>716
同じ事妄想したけど、それなら後方枝刈付のmin-Maxの探索結果をひたすら
ため込んでいく方が容量的にも速度的にも有利で、それができないからモンテ
カルロだって事に思いいたりました(汗
min-Maxなら、いらない枝カットできるかと思いきや、相手がそこに打っちゃった
時の事を考えたら捨てられない事にも気づきました(汗汗
で、適当なところだけ保存して、残りは別途探索・・・って、これ定石DBやん!
というオチでした。
718: 2017/02/03(金)20:45 ID:jkxdJ711(2/3) AAS
ボツ案でしたか。
でもまあ、とりあえずDBを充実させる方向でやってみます。
他に案がないので。
ディープラーニングがうまくいけばなぁ。
719: 535 2017/02/03(金)20:49 ID:jkxdJ711(3/3) AAS
今のところ黒番対LV2は2勝一敗ペースてな感じです。
もっと勝てるかと思ったけどそうでもないですね。
720: 310 2017/02/03(金)20:58 ID:dv6j41bl(2/2) AAS
こちとらディープラーニングで完全にドツボってますorz
721: 535 2017/02/04(土)19:33 ID:neMma6zi(1) AAS
ディープラーニングは盤面情報だけじゃなくてこちらでなにがしかの特徴量を計算してやって
その数値も食わせたほうがすこしはましになるんだろうか。
722: 310 2017/02/04(土)20:57 ID:ycMSfQXf(1) AAS
オセロではBuroさんの評価関数と同じ特徴を入力にしたMLPで評価関数を作った
オセロプログラムがあります。vsOthaというソフトです。
今回はディープなので、できれば特徴量は自動抽出してもらいたいものではあります。
一応、黒白の盤面情報の他、着手可能位置は与えています。
と、ここまで書いて、着手可能位置を求めるように学習させられるのか、ふと気になった。
何らかの事前学習に使えそうな気がする。
やらずに悶々としているだけなのですが、DCNNの四角い窓ではオセロの特徴はうまく
抽出できないのではないかと思っていますが、他に方法が思いつかないのが悲しい。
上下前次1-新書関写板覧索設栞歴
あと 280 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.015s