【オセロ,将棋】ボードゲーム Part3【囲碁,War】 (636レス)
【オセロ,将棋】ボードゲーム Part3【囲碁,War】 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
127: 310 [sage] 2020/02/22(土) 21:32:51.12 ID:wHsEFeMN 間違える局面が特定できているて、間違えた手を訂正できるんなら、 訂正後から対戦再開させて、その棋譜で局面DB更新して、学習するとか。 特定できていなくても、基本強化学習は、対戦→DB更新&学習の 繰り返しで、徐々に間違いを訂正していく方法。もうちょっと工夫する ならε-Greedyなどの手法で既存の棋譜の途中で無理やり別の手に 分岐させていく。その手が悪くても、「悪い手である」という認識を学習 させる事ができる。 線形計画だとモデルが上手くできていないと学習が飽和しちゃうけど、 DNNだったらある程度うまく学習してくれるかも。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/127
131: 310 [sage] 2020/02/23(日) 00:56:57.70 ID:9FygPBnT 間違い探しを続けるうちに、何故Zebraの評価値の方がまともに見えるか問題に 突き当りました。で、評価関数を手数毎に60種類に分割している事で、学習データ が不足しているとか、スムージングしていないために、2手前の自分の番の盤面との 差分が取れないとかの問題があるのかなぁと思い立ちまして…。 また、4対称採用した事で学習時間も4倍になってしまいまして…。 思い切って、評価関数を1つにまとめてみたらどうだろうと思い立って、専用の学習 プロジェクトを作ってやってみました。通常数百回学習しないとまともな学習ができ ないのですが、20回学習したところで、意外とフィットしてしまいました。学習時間も 少し減ってる気がする。 一旦評価関数の癖を変えたほうが強化学習も進むかなと思い、とりあえず本番採用 してみました。気持ち速度も速くなった気がしています。もっとも、評価関数の学習具合 によってαβのorderingも変わって速度が変わったりするので、今後学習を積み重ね て、過学習気味になったりした時にどうなるのかは不明。 これから数日動かしてみて、良かったらこっちにしようかと思います。強いオセロAIを 作るのなら、対戦してどっちが強いとかやるのが本来なのですが、特にそういう目標も 現状あるわけでなし(汗 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/131
132: 310 [sage] 2020/02/23(日) 01:08:08.23 ID:9FygPBnT >>127に捕捉しとくと、 自分はGreedyな手法の精度をあげるために、浅い探索(9手)と組み合わせて、 評価値が少しだけ悪い手とか、Book登録ないのに評価値が良いとか、いくつかの 基準の訂正ロジックを作って、明らかに悪い手を排除したGreedy法をとって、 既存の棋譜に対して順次分岐を生成していく事で、Bookを埋めて行っています。 分岐は13手読みで作成していますが、この分岐も間違いがそれなりにあるため、 間違いを積み上げているのではないかという懸念もあります(汗 オセロの場合、黒白両者とも最善の場合、引き分けに収束する可能性が濃厚なため 初手から最善引き分けとなるツリーについては、先頭側からこのGreedy法で分岐を 生成し、また(後ろから)確定読み切りを優先して実行する事で、引き分け手順だけ 優先的に精度を上げています。 評価関数作るのに、こういう制約をつけた方法が良いのかは不明です。現に極端に 形勢が傾いた盤面の読み切りは、学習データが不足しているために、引き分け盤面 よりずっと時間がかかるように感じています。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/132
133: 310 [sage] 2020/02/23(日) 03:01:39.99 ID:9FygPBnT げげ。>>131の奴、本番に入れて学習させたらうまく動かん…。 原因箇所は特定できたけど、そもそもBook分だけで学習していて、後半の棋譜から 教師データ作ってなかったので、件数が大幅に違う。後ろ15手分が抜けている。 が、これが入ると学習の途中で無限ループに入ってしまう。 何かのオーバフローなんだと思うけど、今は原因不明orz http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/133
134: 310 [sage] 2020/02/23(日) 10:00:35.35 ID:9FygPBnT たぶんなおった。 学習の進行具合インジケータの*印の数を作るところでオーバーフローして 延々と*を表示し続けてるだけだったw こういうところで適当にint使っているのがいかん。 と、怪しそうなところをsize_tに直したら、整合性が取れなくなってワーニングの嵐w 適当にsize_tにすればよいというものでもなかったw http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/134
155: 310 [sage] 2020/03/04(水) 22:39:44.37 ID:XCbeW9Ri 自分は、最近、学習効率アップさせようと入れていたヒューリスティックなロジックは 見つけ次第外す方向だったりします。 棋譜作成の元ネタだけは、結構たくさん手動で追加していますが、見つけ次第追加 みたいなやり方で、偏りが出そうな気がするのと、手動追加だと入力ミスも結構あって 面倒なので、どこかで後続棋譜が少ない手順を順次自動で追加していくようにしちゃ おうかなと思ったりしています。ただ、本当に見てるだけになっちゃうのがちょっと嫌。 そんな事より、棋譜作成のペースが速すぎて、逆順での読み切り(スコア確定)が 追い付かない。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/155
160: 310 [sage] 2020/03/06(金) 21:29:36.82 ID:76Zol1eh 小人閑居して不善をなす… 評価関数の学習周りをいじっていたら、学習エラーが大きく(4〜5倍)なってしまった。 オプティマイザーをAdamにしてみたのが悪かったのか(バグ?)、それとも他にいじった ところが悪かったのか。オプティマイザーを戻して、追加学習してみたけど、全然もとに 戻らない。 と言いながら、色々と溜まっていた懸案も機能追加してしまった。 結局、どうにも直らないのでウェイトを一旦クリアしてRMSpropで再学習してる最中です。 明日の朝にはまともになっているかなぁ。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/160
161: 310 [sage] 2020/03/06(金) 21:39:02.84 ID:76Zol1eh 行列パッケージEigenにユーザ拡張のサポート無し機能がいくつか追加されていて、 その中にTensorクラスがある事に気づいた。 速度は期待できないけど、もう一度DCNNやってみようかなぁ。 つか、もう一台PCがあれば、棋譜が既にあるので、テストできるんだよなぁ。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/161
162: 310 [sage] 2020/03/06(金) 22:53:37.48 ID:76Zol1eh RMSpropで一から学習しなおしで、もうすぐ20エポックだけど、順調な感じ。 前回同様20回+αも回せば結構よいところに行きそうな感じ。 おかしかった時は、もともとの場所から離れて、変な局所解にトラップされていた ような感じになっていたんだよなぁ。現状のAdamのコードにバグがあるのか調べ たいけど、もともと参考にしたサイトが見つからない。今見つかるやつはChainerの 類の疑似コードらしく、ちょっとやそっとでは解読できないレベルの記号の羅列orz http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/162
166: 310 [sage] 2020/03/07(土) 22:53:18.55 ID:6tZRBA6n まあまあ。 自分は棋譜作成開始して、既に数年経ってる気がする(汗 途中データ飛んだりしているから、実際はもっと長い。 だんだんコツがわかって収集速度は加速的に高速化してきているけど、 今度はメモリー溢れが恐怖。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/166
168: 310 [sage] 2020/03/11(水) 19:25:55.84 ID:N0CjcdIm Eigen UnsupportedのTensorクラスを見つけて、またぞろDCNNに興味が沸いて来ま した。で、思い出しがてらウェブを眺めていました。前回断念したのは畳み込み層の 計算を行列で行うためのim2colのロジックを高速に行う方法が見つからなかったから だと思い出しました(汗 しかし、気が付いてしまいました。所詮8×8のマスの定型変換で、汎用性いらないので 64ビットのローテーションとマスク値とのandというビット演算で、前処理ができてしまい ます。そのあとで行列に変換すれば良いだけの事でした。つまりim2col関数はいらん。 もう少しDCNNの最新動向をフォローしてから、同じ棋譜を学習させて試してみたいと 思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/168
174: 310 [sage] 2020/03/12(木) 00:31:25.32 ID:CNvjXxHZ GitHubとかよーわからんのだけど、コメント適当だったり、変数や関数名の英語が 変だったりするソース公開する度胸ないのを言い訳に、調べようとしていない(汗 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/174
176: 310 [sage] 2020/03/12(木) 00:39:06.73 ID:CNvjXxHZ 情報ありがとうございます。 ちと調べてみます。 前みたいにソースもデータも丸ごと飛んだら困るので。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/176
183: 310 [sage] 2020/03/16(月) 00:36:34.84 ID:FpZgJFeI しばらくは棋譜の遡りを優先しようと思っていたのですが、やっぱり暇ができると どうしても何かやりたくなってしまい、結局序盤中盤の貪欲法絡みのブラッシュアップ をしてしまい、またまた遡り対象の棋譜を増殖させています(汗。 DLやろうか、将棋AIの勉強しようかと思い立ち、将棋AIの本などを買い込んでつらつら 眺めていたら、実現確率探索なるものを見つけてしまいました。遷移確率は評価値の Softmaxで作れる気がしています。現在、前方の打ち切りはProbCutでやっていますが、 途中の1つの盤面の評価値が酷い状態だと、その時点で問答無用でカット対象となって しまう懸念があります。その点、実現確率探索の方が多少ロバストなのかなぁと。逆に、 手が広い局面では探索深さが浅くなってしまう悪影響も想定できます。 とはいえ、中盤探索のロジック自体は多少の改良で済むのですが、置換表使って中盤 探索の結果を終盤探索のオーダリングに使うところは結構修正が必要な気がします。 最悪反復深化をまるっとあきらめなきゃならないかも知れません。あと、なぜか評価値 に+1〜2程度の手番加算がついたみたいになっている事から、探索深さを揃えられ ないと、そっちからも悪影響が出る可能性があります。 かなり大幅な変更と、テストが必要なので、ちょっと躊躇しています。 プロジェクト全体コピーして別プロジェクト建てるレベルです。むむむ。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/183
187: 310 [sage] 2020/03/18(水) 00:47:20.72 ID:Wk4mfxEa 結局、実現確率探索に取り掛かってしまいました(汗 新規ソリューション作ってコピペ始めたところで、いずれ評価関数を整数化したかった 事を思い出して、あちこち修正開始となりました。 一応、普通のDepthバージョンと同じ深さになるように調整して、速度比較してみるつもり。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/187
189: 310 [sage] 2020/03/18(水) 23:45:39.14 ID:Wk4mfxEa 実現確率探索の中盤探索、プロトタイプのαβ版を作って癖を見ています。 実現確率は、評価値のSoftmaxで各要素を足して1.0になるように正規化するより、 最大値が1.0になるようにした方が使いやすいです。というのも、最大値をひたすら 追った枝の終了条件が綺麗に決まって最大深さを指定できるようになるからです。 1.0そのままだと終わらないので、例えば0.5にしておくと、深さnにしたい時は1÷2^n が閾値になります。0.1の時は1÷10^nです。まあ、なんでもよいという事です。 後は各要素の差のつき具合を決める定数を調整すると、評価値が悪い手について、 どこまで探索の深さを確保するのかが決まります。ここが職人的作業なのがネック。 絞ると爆速。∞だと、ただの全幅探索になります。 速度は結構出てるのですが、調整ミスると全くダメみたいな様子が見え隠れしていて、 本当に常に使えるのか、まだ心配です。おそらくProbCutでも同じような問題がおきて いるんじゃないかと思いますが。 次は置換表ですが、合流が発生した時の実現確率がルートによって違うので、その 時の置換表の評価値を使って良いのか悩みどころです。また、上述のように最大探索 深さを調整できるので、反復進化的に閾値を下げて行く事が可能性です。そうすると、 反復深化的に使いたくなるのが人情ですが、オーダリングにどのように反映するのが 良いのか。これも悩みどころだったりします。 要するにあと1週間くらいは遊べそうです(笑) http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/189
190: 310 [sage] 2020/03/18(水) 23:56:29.62 ID:Wk4mfxEa あと、裏で棋譜作成進行中ですが、評価関数の学習時に、既存データに対する エラーが増加を始めて、過学習の傾向を示しているのですが、例えばFFOの盤面 のように教師データ中に現れない盤面に対するエラーは減少しています。 状況的には、極端な石差がついている盤面の評価値が、石差ほどの評価値になって おらず、じわじわと汎化が進んでいる一方、±0近傍の盤面は既に多いため、過学習 気味になっているのかなぁと推測しています。 とはいえ、非常に気持ち悪いです。 というわけで、ちょっと工夫をして石差が大きい棋譜を優先的に遡りチェック対象にしたり、 新規の自己対局するときに石差が大きくなる(悪い)進行も作るようにする事で、ほんの 少しですが、石差が大きい棋譜が増えるようにしてみました。まあ気休めです。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/190
191: 310 [sage] 2020/03/19(木) 23:17:05.43 ID:opMYHtHc 実現確率探索の中盤探索ができました。置換表と並列処理のところまでです。 反復深化→読み切り処理までです。置換表というか、オーダリング処理を結構修正。 反復深化まではそこそこ機能していますが、置換表経由で読み切り処理の高速化が 性能が出ません。置換表経由で、中盤探索の結果を用いて終盤探索のオーダリング をするところで、置換表データの不足があったり、オーダリングの間違いが生じて、 無駄な探索をしているように思います。 とすると、これは読み切り処理を前提とすると結構致命的な問題な気がします。 もちろん、まだバグや仕様ミスの可能性もありますが。というわけで、Solver関係には 使えない可能性が出てきました。 また、評価関数で実現確率を導いているので、浅い段階での間違いに対して、探索 対象をロックしてしまいやすく、深く探索していっても間違いがなかなか改まらない 傾向が見受けられます。 まあ、仮にダメでも、新バージョンにする過程で、これまでペンディングしていた細かい 修正ができますし、既存タイプの中盤探索も作ってあるので、このまま進めてみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/191
193: 310 [sage] 2020/03/21(土) 02:31:57.66 ID:XYOBIhf/ 実現確率探索で、探索幅広げる方向の反復を試してみましたが効果はあまりなし。 単体で使用するとかなり早いのですが、置換表使った探索との相性がいまいち。 とりあえずSolverまで作って速度計測していますが、既存の反復深化より遅く、反復 深化無しよりは若干早いという感じで、単体の速度を利用して幅を思いっきり広げて みましたが、こちらは逆に遅くなるという体たらく。 置換表周りでどこか間違いがあるのかなぁという気もしていますが、今のところ不明。 Solver周りでの活用は一旦置いといて、自己対局で使ってみる事にします。 http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/193
198: 310 [sage] 2020/03/28(土) 00:29:51.53 ID:vtZj/mQ8 実現確率探索というか、ソース全体見直し版が、だいたいできました。 まだデバッグ全部済んだわけではありませんが、後はログメッセージなんかの 細かいところくらいの修正かなと。 実現確率探索自体は、棋譜作成にフックを入れる感じでの使用にとどめていますが、 しばらく動かして、結果がよさそうなら切り替えようかなと思います。というか、対戦版 作るときには、中盤探索は実現確率探索で行くと思います。 で、実現確率探索と呼んでいますが、実際のところは違います。本来の実現確率は 「プロ棋譜など別途棋譜集から、よく出てくる手を回帰分析で確率化したもの」で、 よく出る手については深く探索しましょうという内容です。自分の奴は、確率を1手読み の評価値から生成しています。1手読みにした理由は、差分計算で速く計算できる からです。というわけで、本来は別の名前にした方が良いのですが、ネーミングセンス が無いので放置です(笑) 他にも、本来と違う形で実装してるけど、放置してある名前が結構ありますorz http://mevius.5ch.net/test/read.cgi/gamedev/1574503798/198
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.248s*