[過去ログ] 【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
482(1): 310 2016/08/12(金)20:50 ID:USoZXJIB(2/2) AAS
>>481
YBWCはnegascoutのnull window searchを並列化して一括処理する
ようなものだと解釈して実装しました。
この辺はゲーム計算メカニズムなる本で勉強したかな。
並列処理のフレームワーク何使うかが問題ですね。
自分はVC++なのでmsdnで情報が得やすいPPLを使いました。
インテルTBBとかOpenMPなんてのもあります。
PPLは結構使いやすかったですが、速度は不明。
まあ、ルートの方でしか使わないので、あまり影響ないと思っています。
手組でマルチスレッドなプログラム書ける人には不要かも知れません。
483: 310 2016/08/13(土)14:18 ID:D+1dBs0T(1/2) AAS
あ、考え方がnegascoutみたいだという事で。
484: 2016/08/13(土)20:35 ID:p7EbJiId(1) AAS
avx2って256bitだよな
オセロだと128bitしか使えないような?
485: 310 2016/08/13(土)20:47 ID:D+1dBs0T(2/2) AAS
方向が8つあって、それぞれの処理を8回計算するとき、
右シフト方向が4つ、左シフト方向が4つ。
256bitは64bit×4。右シフトと左シフトで2回。
というわけで、mobilityとかflipとかで便利に使えます。
486: 460 2016/08/14(日)16:41 ID:ALD5heTO(1/2) AAS
現在、終盤用MPCパラメータ作成中です。
23手完全読みのカットペアに入っています。24手読みの計算が終わったらいったん実装に入るつもりです。
>>310
YBWCに関して調べましたが、そうみたいですね。
MPCパラメータを作成している間に、なんとなくで適当に実装してみましたが
なぜかエラーで落ちまくりでしたw
排他がかかっていない致命的な箇所があるのか・・・置換表は排他をかけたのですが・・・
PVライン生成あたりも怪しい、とりあえずもう少し調べてみないとダメそう。
487: 460 2016/08/14(日)16:42 ID:ALD5heTO(2/2) AAS
>>310は>>482の間違いです。。
488(5): 2016/08/17(水)21:19 ID:Z2gXWq7v(1) AAS
俺もボードゲーム系AIでディープラーニング書いてみたいと思ってるけど難しいんだろな。
論理もそうだけど膨大なデータが必要そうだし。
>>479
どのへんで諦めました?
489(1): 310 2016/08/18(木)15:43 ID:7GnJQiSP(1) AAS
>>488
まだ細々やってます(汗
Eigenの導入と、少しづつ進んでいくC++技術のおかげで、前よりは試行の
スピードはアップしていますが、なかなか成果は出ません。まだ、色々な
パターンを試しながらディープラーニングって何ぞやを体感しているところ
なんだと思います。
少なくとも「簡単に凄い事ができそう」という幻想は捨てる事ができました(汗
ボードゲームがターン制なら、基本はmin-Maxになると思います。
まずは、盤面の状態に(恣意的で構いません)点をつける評価関数作るところ
から始めたらどうでしょう?
次のステップで評価関数に統計(線形回帰)を持ち込むと、ディープラーニング
じゃなくても、プレイ譜がたくさん必要になります。
オセロの場合は、Buroさんという先人が、実用レベルの評価関数が線形回帰
で作れる事を示してくれています。
僕がディープラーニングを適用しようと思っているのは、ただの思いつきでして。
場合によっては、より軽くて正確評価関数が作れるかと思いましたが、実際に
始めてみると、なかなか評価関数として機能してくれないし、仮にできたとしても
重いものになっちゃいそうという感じです。
490(1): 488 2016/08/19(金)23:15 ID:i9HkvHw2(1/2) AAS
>>489
手動評価関数はかなり昔五目並べで書いたことあります。
min-maxで思考時間が1手5分くらいかかったけど、
自分でプレーして負かされることもあるくらいの強さにはなりました。
そのBuroさんの線形回帰とやらはWebで論文とか見れたりしますか?
読んでも多分理解できないだろうけどちょっと興味あります。
491: 488 2016/08/19(金)23:23 ID:i9HkvHw2(2/2) AAS
ぐぐったらこんなのがあったけど多すぎ。
外部リンク[html]:skatgame.net
492(1): 310 2016/08/20(土)16:51 ID:m44rb9b4(1/2) AAS
>>490
Buroさんが作った伝説のオセロプログラムがLogistelloです。
Thellというオセロプログラムの作者の方が日本語で解説してくれています。
外部リンク[pdf]:sealsoft.jp
5.2の計算の高速化のところの説明(P.8の冒頭)のところ。
自分なりに解釈したら、自分が解釈違いしたのか、説明がおかしいのか、
この通りではなかった記憶があります。
とはいえ、これはオセロの考え方であって、将棋なんかだとbonanzaなどを
参考にすべきだし、全く別のゲームであったら、別な事を考えなければなり
ませんね。当たり前ですが。
493(1): 488 2016/08/20(土)20:33 ID:+7ONDgCM(1) AAS
>>492
パターンの重みの線形和が評価関数になる的なことが書いてあるっぽいですけど、
パターンというのは人間が与えてやるわけですよね?
そのパターンすら学習で求めるというのがディープラーニングなのかと思ってますけど。
まあディープラーニングにはロマンがありますね。
494(1): 310 2016/08/20(土)21:29 ID:m44rb9b4(2/2) AAS
>>493
ですです。
あと、Deepじゃなくても、2層以上のパーセプトロンだと、線形分離不可能問題の
分類ができるようになります。XORの学習が典型ですね。
ところが、パターンの部分まで学習で求めてくれるってのは、やっぱり幻想でして。
ある程度パターンを想定しながら、ネットワークを作らないといかんのではないか
という事に思い至っています。
例えば畳み込みニューラルネットワーク(CNN)で、何故畳み込みをするのかという
と、縦線横線などの隣接ドット同士もつながりを識別してもらうためですし。そもそも
畳み込みのフォワード計算自体が、画像に対して例えば輪郭線強調といったフィル
ターかけるのと、プログラム的に同じものだったりします。学習対象は、フィルターに
なります。
オセロは、囲碁とかと違って、石の色がコロコロ変わるので、隣同士の石のつながで
判断するCNN的なネットワークをそのまま適用できないよなぁというのが、最近の諦め
ポイントであります。
じゃあ、何に頼るかというと、自分はオセロ弱いので・・・No ideaだったりします。
あんな簡単な(DeepLearningと比較して)線形和でBuroさんの評価関数ができています
ので、パターンを活かして、まずはそこに点数を割り振るところをMLPなんかでできない
かなぁと思っています。
495: 488 2016/08/21(日)00:04 ID:EnsCDbgT(1/2) AAS
>>494
>ところが、パターンの部分まで学習で求めてくれるってのは、やっぱり幻想でして。
>ある程度パターンを想定しながら、ネットワークを作らないといかんのではないか
>という事に思い至っています。
ふーむそうなのか。残念。
聞きかじった知識だと夢のような技術なのかと思っちゃったけど、
実戦してみるとなかなか難しいのかぁ。
496(2): 2016/08/21(日)21:39 ID:EnsCDbgT(2/2) AAS
いくらオセロの盤面が小さいからってシングルスレッドで
10000Knps〜15000Knpsというのはとてつもなく速く感じるんだが。
どうやったらそんな速度がでるんだ?
オセロ業界じゃ普通なのか?
497: 310 2016/08/22(月)02:41 ID:2ubnBUwd(1/2) AAS
Kが余計で3桁間違えているんじゃないかと(汗
498: 310 2016/08/22(月)02:46 ID:2ubnBUwd(2/2) AAS
あ、違った。自分が3桁間違えていた。
全然おかしくないです。自分の2コアで13000Kくらい出てます。
シングルで同等の速度ですから、かなり速いとは思いますが、
敢えて言うなら2倍程度なら縮められないとは思えない差です。
499: 460 2016/08/22(月)08:13 ID:yZES3OuI(1) AAS
終盤MPCを実装完了してFFOを測定してみました。。
残すのはFFO#57のみですが、この時点で9364秒と1万秒を割ってるので
10%程度の高速化は期待できそうです。(評価テーブルは64ビット移行+120万局から変更なし)
500: 460 2016/08/22(月)09:20 ID:qlwiS2PE(1) AAS
>>496
簡単な実装だと終盤探索は2000万ノード/秒いけますね。
合法手生成が将棋などより速いので。
とはいえ、中盤探索だと色々やるので5000knps程度に落ちてしまってます。
501(1): 496 2016/08/22(月)21:10 ID:WzxI/O2e(1) AAS
2000万ノード/sとかってsseやavx使って始めて可能になるレベル?
オセロの合法手の実装になにかすごい効率的なビット演算やってるとか?
502(2): 460 2016/08/23(火)11:44 ID:sSUGbl7L(1/2) AAS
>>501
終盤探索だと合法手生成は葉ノードの近くでは使わないので、ループや条件分岐を使ったコードでなければアセンブラでなくても速度はそれなりに出ますよ。
こことかが参考になります。
外部リンク:d.hatena.ne.jp
自分はこんな感じのコードをアセンブラに落として少し改変したものを使ってますー
503: 460 2016/08/23(火)11:47 ID:sSUGbl7L(2/2) AAS
置換表に超大バグがあることに気づき修正したらFFO45が32秒になりました…w
180万局の学習を朝に終えたので今晩再度FFOを測定しようと思います。
504(1): 310 2016/08/23(火)13:54 ID:LVh7XLe+(1) AAS
>>502
そのサイトは知りませんでしたが、同じことやっています。
自分の場合は、それをAVX2命令で1,7,8,9ビットシフトを4つ並列で動かす様にして、
右シフト左シフト2回の演算をC++で組んでます。並べて書くと混乱しそうだったので
演算オーバーライドしまくりで、バグ防止しました。
やっぱりアセンブラの方が速いんでしょうね。
ディープラーニングな評価関数の方ですが、突然収束を始めました。
まだ途中ですが、見た感じざっくりで、平均二乗誤差の平方根(σ)が0.6石程度に
収まりそうです。2σで1石、スコアは2づつ変わるので、評価逆転が起きる確率を
数%程度にするには、0.5石以下にしたい。
肝はミニバッチのサイズだった様です(謎)。ハイパーパラメータとしては考慮対象外
でしたが、テスト用に小さくすると収束が悪くなる感触があったので、思い切って大き
くしてみたところ…大きくすればするほど記録を更新していくという状態。ついに212640
件という特大バッチサイズにしてしまいました。メモリー的にはまだいけるかも。
今までの比較検討データは全てパーになったので、検討済のネットワークも、バッチ
サイズ変えて再評価です。今やってるのは、Buroさんパターンがベースのネットワーク
ですが、もしかしたら入力ベタ打ちで「勝手に特徴抽出してくれる。すげー!」に戻るかも(汗
505: 2016/08/23(火)19:39 ID:1+aieVpn(1/2) AAS
>>502
ループはおろか条件分岐すらいらんのか(驚愕)
>>504
おお、ディープラーニング期待してます。
506: 2016/08/23(火)21:26 ID:KqeLXU8U(1) AAS
文系の俺には全然分からん。
もっと簡素な3目並べなら勝てるAIとか作れないかな(´;ω;`)
507: 2016/08/23(火)21:47 ID:1+aieVpn(2/2) AAS
ちょっと興味が湧いたんでとあるオセロアプリ落としてやってみた。
弱設定AIが程よく負けてくれて嬉しいw
一方的にボコされたら詰まらんよな一般人は。
オセロAIはもう神の領域だし。
508: 460 2016/08/24(水)01:02 ID:elb1k4A2(1/2) AA×

509(1): 310 2016/08/24(水)10:40 ID:GpcelPIW(1) AAS
こちらも大バグを見つけて放心中です(汗
ミニバッチサイズごときで収束具合が大きく変わるのがおかしい点。
ミニバッチサイズを大きくすると、収束点がかなり規則的に減少していくように見える点。
この2点から、寝ながらデバッグしてたんですが、テストデータの件数で平均を出すべき
ところで、ミニバッチサイズで割っていた事に思い当りました。
で、修正して、行列の列数で割るようにしたのですが、今度は列数がリセットされていない
事が判明。どうもポインタ渡しで行列を渡した時に行数・列数が正しく引き継がれないよう
な現象のようです。
というわけで、一瞬大喜びしましたが、全くのやり直しとなりました。
510(1): 460 2016/08/24(水)14:56 ID:Kkx6VEyM(1) AAS
>>509
学習プログラムのバグはやっかいですよね。
自分も何回ひどい目に遭ったか…
今でもまだありそうな気がして怖いですw
511: 460 2016/08/24(水)22:16 ID:elb1k4A2(2/2) AAS
FFO57をどうにかしようとチューニングをして、なんとかFFO57が1200秒台に縮まりました。
ある程度縮まったので、期待せずにもう一度全部を測定してみると
全体がかなり高速化されていて、FFO55がまさかの3774秒までに縮まりました!(奇跡)
とりあえずこれをオーダリングの暫定最終結果として、次は並列化に手を出してみようと思います。
まずはYBWCアルゴリズムの実装方法の検討から・・・
FFO#40 (a2:+38) 1.05s FFO#41 (h4: +0) 3.19s
FFO#42 (G2: +6) 2.55s FFO#43 (G3:-12) 7.82s
FFO#44 (D2:-14) 4.18s FFO#45 (b2: +6) 29.77s
FFO#46 (b3: -8) 6.99s FFO#47 (G2: +4) 3.10s
FFO#48 (F6:+28) 19.49s FFO#49 (e1:+16) 36.63s
FFO#50 (d8:+10) 128.15s FFO#51 (E2: +6) 50.46s
FFO#52 (a3:+0) 36.88s FFO#53 (d8:-2) 427.77s
FFO#54 (c7:-2) 730.26s FFO#55 (G6:+0) 3774.07s
FFO#56 (H2:+0) 185.22s FFO#57 (a6:-10) 1281.31s
FFO#58 (g1:+4) 556.86s FFO#59 (g8:+64) 1.08s
合計:7286.83[s]
上下前次1-新書関写板覧索設栞歴
あと 491 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.038s