【オセロ,将棋】ボードゲーム Part3【囲碁,War】 (636レス)
1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
155: 310 [sage] 2020/03/04(水) 22:39:44.37 ID:XCbeW9Ri(1) AAS
自分は、最近、学習効率アップさせようと入れていたヒューリスティックなロジックは
見つけ次第外す方向だったりします。

棋譜作成の元ネタだけは、結構たくさん手動で追加していますが、見つけ次第追加
みたいなやり方で、偏りが出そうな気がするのと、手動追加だと入力ミスも結構あって
面倒なので、どこかで後続棋譜が少ない手順を順次自動で追加していくようにしちゃ
おうかなと思ったりしています。ただ、本当に見てるだけになっちゃうのがちょっと嫌。

そんな事より、棋譜作成のペースが速すぎて、逆順での読み切り(スコア確定)が
追い付かない。
160: 310 [sage] 2020/03/06(金) 21:29:36.82 ID:76Zol1eh(1/3) AAS
小人閑居して不善をなす…

評価関数の学習周りをいじっていたら、学習エラーが大きく(4〜5倍)なってしまった。
オプティマイザーをAdamにしてみたのが悪かったのか(バグ?)、それとも他にいじった
ところが悪かったのか。オプティマイザーを戻して、追加学習してみたけど、全然もとに
戻らない。

と言いながら、色々と溜まっていた懸案も機能追加してしまった。

結局、どうにも直らないのでウェイトを一旦クリアしてRMSpropで再学習してる最中です。
明日の朝にはまともになっているかなぁ。
161: 310 [sage] 2020/03/06(金) 21:39:02.84 ID:76Zol1eh(2/3) AAS
行列パッケージEigenにユーザ拡張のサポート無し機能がいくつか追加されていて、
その中にTensorクラスがある事に気づいた。

速度は期待できないけど、もう一度DCNNやってみようかなぁ。

つか、もう一台PCがあれば、棋譜が既にあるので、テストできるんだよなぁ。
162: 310 [sage] 2020/03/06(金) 22:53:37.48 ID:76Zol1eh(3/3) AAS
RMSpropで一から学習しなおしで、もうすぐ20エポックだけど、順調な感じ。
前回同様20回+αも回せば結構よいところに行きそうな感じ。

おかしかった時は、もともとの場所から離れて、変な局所解にトラップされていた
ような感じになっていたんだよなぁ。現状のAdamのコードにバグがあるのか調べ
たいけど、もともと参考にしたサイトが見つからない。今見つかるやつはChainerの
類の疑似コードらしく、ちょっとやそっとでは解読できないレベルの記号の羅列orz
166: 310 [sage] 2020/03/07(土) 22:53:18.55 ID:6tZRBA6n(1) AAS
まあまあ。

自分は棋譜作成開始して、既に数年経ってる気がする(汗
途中データ飛んだりしているから、実際はもっと長い。

だんだんコツがわかって収集速度は加速的に高速化してきているけど、
今度はメモリー溢れが恐怖。
168: 310 [sage] 2020/03/11(水) 19:25:55.84 ID:N0CjcdIm(1) AAS
Eigen UnsupportedのTensorクラスを見つけて、またぞろDCNNに興味が沸いて来ま
した。で、思い出しがてらウェブを眺めていました。前回断念したのは畳み込み層の
計算を行列で行うためのim2colのロジックを高速に行う方法が見つからなかったから
だと思い出しました(汗

しかし、気が付いてしまいました。所詮8×8のマスの定型変換で、汎用性いらないので
64ビットのローテーションとマスク値とのandというビット演算で、前処理ができてしまい
ます。そのあとで行列に変換すれば良いだけの事でした。つまりim2col関数はいらん。

もう少しDCNNの最新動向をフォローしてから、同じ棋譜を学習させて試してみたいと
思います。
174: 310 [sage] 2020/03/12(木) 00:31:25.32 ID:CNvjXxHZ(1/2) AAS
GitHubとかよーわからんのだけど、コメント適当だったり、変数や関数名の英語が
変だったりするソース公開する度胸ないのを言い訳に、調べようとしていない(汗
176: 310 [sage] 2020/03/12(木) 00:39:06.73 ID:CNvjXxHZ(2/2) AAS
情報ありがとうございます。
ちと調べてみます。

前みたいにソースもデータも丸ごと飛んだら困るので。
183: 310 [sage] 2020/03/16(月) 00:36:34.84 ID:FpZgJFeI(1) AAS
しばらくは棋譜の遡りを優先しようと思っていたのですが、やっぱり暇ができると
どうしても何かやりたくなってしまい、結局序盤中盤の貪欲法絡みのブラッシュアップ
をしてしまい、またまた遡り対象の棋譜を増殖させています(汗。

DLやろうか、将棋AIの勉強しようかと思い立ち、将棋AIの本などを買い込んでつらつら
眺めていたら、実現確率探索なるものを見つけてしまいました。遷移確率は評価値の
Softmaxで作れる気がしています。現在、前方の打ち切りはProbCutでやっていますが、
途中の1つの盤面の評価値が酷い状態だと、その時点で問答無用でカット対象となって
しまう懸念があります。その点、実現確率探索の方が多少ロバストなのかなぁと。逆に、
手が広い局面では探索深さが浅くなってしまう悪影響も想定できます。

とはいえ、中盤探索のロジック自体は多少の改良で済むのですが、置換表使って中盤
探索の結果を終盤探索のオーダリングに使うところは結構修正が必要な気がします。
最悪反復深化をまるっとあきらめなきゃならないかも知れません。あと、なぜか評価値
に+1〜2程度の手番加算がついたみたいになっている事から、探索深さを揃えられ
ないと、そっちからも悪影響が出る可能性があります。

かなり大幅な変更と、テストが必要なので、ちょっと躊躇しています。
プロジェクト全体コピーして別プロジェクト建てるレベルです。むむむ。
187: 310 [sage] 2020/03/18(水) 00:47:20.72 ID:Wk4mfxEa(1/3) AAS
結局、実現確率探索に取り掛かってしまいました(汗

新規ソリューション作ってコピペ始めたところで、いずれ評価関数を整数化したかった
事を思い出して、あちこち修正開始となりました。

一応、普通のDepthバージョンと同じ深さになるように調整して、速度比較してみるつもり。
189: 310 [sage] 2020/03/18(水) 23:45:39.14 ID:Wk4mfxEa(2/3) AAS
実現確率探索の中盤探索、プロトタイプのαβ版を作って癖を見ています。

実現確率は、評価値のSoftmaxで各要素を足して1.0になるように正規化するより、
最大値が1.0になるようにした方が使いやすいです。というのも、最大値をひたすら
追った枝の終了条件が綺麗に決まって最大深さを指定できるようになるからです。
1.0そのままだと終わらないので、例えば0.5にしておくと、深さnにしたい時は1÷2^n
が閾値になります。0.1の時は1÷10^nです。まあ、なんでもよいという事です。

後は各要素の差のつき具合を決める定数を調整すると、評価値が悪い手について、
どこまで探索の深さを確保するのかが決まります。ここが職人的作業なのがネック。
絞ると爆速。∞だと、ただの全幅探索になります。

速度は結構出てるのですが、調整ミスると全くダメみたいな様子が見え隠れしていて、
本当に常に使えるのか、まだ心配です。おそらくProbCutでも同じような問題がおきて
いるんじゃないかと思いますが。

次は置換表ですが、合流が発生した時の実現確率がルートによって違うので、その
時の置換表の評価値を使って良いのか悩みどころです。また、上述のように最大探索
深さを調整できるので、反復進化的に閾値を下げて行く事が可能性です。そうすると、
反復深化的に使いたくなるのが人情ですが、オーダリングにどのように反映するのが
良いのか。これも悩みどころだったりします。

要するにあと1週間くらいは遊べそうです(笑)
190: 310 [sage] 2020/03/18(水) 23:56:29.62 ID:Wk4mfxEa(3/3) AAS
あと、裏で棋譜作成進行中ですが、評価関数の学習時に、既存データに対する
エラーが増加を始めて、過学習の傾向を示しているのですが、例えばFFOの盤面
のように教師データ中に現れない盤面に対するエラーは減少しています。

状況的には、極端な石差がついている盤面の評価値が、石差ほどの評価値になって
おらず、じわじわと汎化が進んでいる一方、±0近傍の盤面は既に多いため、過学習
気味になっているのかなぁと推測しています。

とはいえ、非常に気持ち悪いです。

というわけで、ちょっと工夫をして石差が大きい棋譜を優先的に遡りチェック対象にしたり、
新規の自己対局するときに石差が大きくなる(悪い)進行も作るようにする事で、ほんの
少しですが、石差が大きい棋譜が増えるようにしてみました。まあ気休めです。
191: 310 [sage] 2020/03/19(木) 23:17:05.43 ID:opMYHtHc(1) AAS
実現確率探索の中盤探索ができました。置換表と並列処理のところまでです。
反復深化→読み切り処理までです。置換表というか、オーダリング処理を結構修正。

反復深化まではそこそこ機能していますが、置換表経由で読み切り処理の高速化が
性能が出ません。置換表経由で、中盤探索の結果を用いて終盤探索のオーダリング
をするところで、置換表データの不足があったり、オーダリングの間違いが生じて、
無駄な探索をしているように思います。

とすると、これは読み切り処理を前提とすると結構致命的な問題な気がします。
もちろん、まだバグや仕様ミスの可能性もありますが。というわけで、Solver関係には
使えない可能性が出てきました。

また、評価関数で実現確率を導いているので、浅い段階での間違いに対して、探索
対象をロックしてしまいやすく、深く探索していっても間違いがなかなか改まらない
傾向が見受けられます。

まあ、仮にダメでも、新バージョンにする過程で、これまでペンディングしていた細かい
修正ができますし、既存タイプの中盤探索も作ってあるので、このまま進めてみます。
193: 310 [sage] 2020/03/21(土) 02:31:57.66 ID:XYOBIhf/(1) AAS
実現確率探索で、探索幅広げる方向の反復を試してみましたが効果はあまりなし。
単体で使用するとかなり早いのですが、置換表使った探索との相性がいまいち。

とりあえずSolverまで作って速度計測していますが、既存の反復深化より遅く、反復
深化無しよりは若干早いという感じで、単体の速度を利用して幅を思いっきり広げて
みましたが、こちらは逆に遅くなるという体たらく。

置換表周りでどこか間違いがあるのかなぁという気もしていますが、今のところ不明。
Solver周りでの活用は一旦置いといて、自己対局で使ってみる事にします。
198: 310 [sage] 2020/03/28(土) 00:29:51.53 ID:vtZj/mQ8(1/2) AAS
実現確率探索というか、ソース全体見直し版が、だいたいできました。
まだデバッグ全部済んだわけではありませんが、後はログメッセージなんかの
細かいところくらいの修正かなと。

実現確率探索自体は、棋譜作成にフックを入れる感じでの使用にとどめていますが、
しばらく動かして、結果がよさそうなら切り替えようかなと思います。というか、対戦版
作るときには、中盤探索は実現確率探索で行くと思います。

で、実現確率探索と呼んでいますが、実際のところは違います。本来の実現確率は
「プロ棋譜など別途棋譜集から、よく出てくる手を回帰分析で確率化したもの」で、
よく出る手については深く探索しましょうという内容です。自分の奴は、確率を1手読み
の評価値から生成しています。1手読みにした理由は、差分計算で速く計算できる
からです。というわけで、本来は別の名前にした方が良いのですが、ネーミングセンス
が無いので放置です(笑)

他にも、本来と違う形で実装してるけど、放置してある名前が結構ありますorz
200: 310 [sage] 2020/03/28(土) 22:16:21.29 ID:vtZj/mQ8(2/2) AAS
見直し版のチェックを本番やりながら進めてます。

今のところ、学習の速度が30%程度ダウンしたものの、終盤探索の速度が
30〜50%高速化している感じ。どちらも原因不明。
201
(1): 310 [sage] 2020/03/31(火) 00:30:27.16 ID:1mhY2vrp(1) AAS
見直し版で、遡りチェックで無駄な処理を見つけて直しました。
更に速度アップして、トータル50%強の速度アップとなりました。
まだ探索自体の速度は上がってませんが、まだ無駄があったとは。
202: 310 [sage] 2020/04/01(水) 23:58:19.45 ID:SRR0rDGm(1) AAS
急に探索自体の速度アップを思い立ちまして、いくつか実行。

ヒープ領域に作っていたオーダリング処理をスタック領域に来るように修正。
置換表のHash関数の修正で、置換表のキーエントリーの偏りを減らす。

これらにより更に高速化して、トータルで前バージョンの倍速近くなった感じです。
残り26手探索処理が1時間に90件弱→160件くらい。

あと、もうちょっとやってみたい事があります。
207: 310 [sage] 2020/04/06(月) 22:33:27.64 ID:eOx9NvDZ(1) AAS
更に少し高速化しました。

オーダリングのvectorをスタック領域の配列に変更する部分ですが、並列探索部分
にも適用しました。配列も&でアドレス渡せばSTLのalgorism周りが使えるの知りました(^^;
スレッド間でのlockも他の処理と一緒にできるので、オーバーヘッドはありません。
あと、地味にセーブの時間がかかっていたので、回数減らしました。

残り26手1000件で10時間半が、5時間40〜50分くらいまで来ました。平均20秒強。
残り25手の読み切りができていてBookで時短しているので、まったくの新規棋譜の
読み切りはもっと遅くなります。

sort部分も何とかならないかと思いましたが、もともと32件以下(オセロはたまたま
ですが次の手の上限は32)は挿入ソートになっているようです。コピペで挿入ソート
を組んで、速度比較してみましたが、有意差は出ませんでした。

件数少ない時に早くかつ安定ソートな方法が他にないか調べてみようかと思います。
248: 310 [sage] 2020/04/22(水) 20:43:03.08 ID:ZptezZKq(1/2) AAS
相変わらず棋譜作成中。

プログラムはそれなりに改良しているつもりだけど、成果は全くなし。
まあ、思いついて試すのが楽しいんだけどね。

つか、逆順探索での棋譜訂正。やってるそばからあまりに間違っている筋を
見つけて、修正かける過程で、新しい棋譜どんどん増えて、バックログがどんどん
増えていく地獄になっています。まだまだ重要な分岐でも間違いというか未探索
が多すぎる。

手作業で修正箇所見つけるの面倒なので、延々やらないといけないけど、
ε-Greedy的な何か導入しようかなぁと思い始めています。
250: 310 [sage] 2020/04/22(水) 22:21:38.60 ID:ZptezZKq(2/2) AAS
あるところまでは、間違いは間違いと学習するための時間かも知れませんね。
255: 310 [sage] 2020/04/24(金) 19:50:11.65 ID:wU9GyZ2x(1/2) AAS
DCNNなら層数よりもフィルタ数の方が大事かも。
257: 310 [sage] 2020/04/24(金) 22:19:55.86 ID:wU9GyZ2x(2/2) AAS
>>256
256(1): 535 [sage] 2020/04/24(金) 19:55:02.17 ID:aNVKQhdF(3/3) AAS
まじすか
現状でもフィルタは256(デフォルト)とかなり贅沢に使ってるんですが。。。
オリジナルの作者もフィルタ数が大事と思ったのかもしれませんね。
256フィルタあるんなら流石に大丈夫そうだね。
284: 310 [sage] 2020/05/09(土) 00:56:41.26 ID:tOwbW1Pp(1) AAS
棋譜作成触りすぎるとなかなかはかどらなくなるので、しばし回しっぱなし。

そろそろBookが巨大化しすぎているので、メモリーからSDDに移せないか検討中。
concurrent_unordered_mapを自作した経緯があるので、同じような感じでランダム
アクセスなDB化をしてます。確定分は探索で使うのでメモリーにおいて、速度を
必要としないアクセスをDBにしようかなと。

巨大Bookの作成処理の類を並列処理にしているので、何とか並列にできないかと
色々やっていますが、色々と罠がある。複数プロセスからの並列更新はあきらめた
けど、単一プロセスからの並列更新でロック範囲がまだいまいち。

専門書買ってコード見て勉強した方が早いんだろうけど、まあ、しばらく楽しみます。
287: 310 [sage] 2020/05/12(火) 23:05:51.81 ID:AcB4a3UT(1) AAS
うぬぬ。DB化は並列諦めてみたけど、やはり更新が遅すぎる。
もうちょっと工夫してみるけど。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.025s