[過去ログ] 【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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の四角い窓ではオセロの特徴はうまく
抽出できないのではないかと思っていますが、他に方法が思いつかないのが悲しい。
723: 2017/02/05(日)08:03 ID:36jlTAsU(1) AAS
そうかそうか
724(1): 535 2017/02/07(火)20:48 ID:qiXxRrUf(1) AAS
機械学習じゃだめだ、手書き評価関数しかない…
しばらくするといや、手書き評価関数じゃやっぱりだめだ、機械学習だ…
の無限ループw
725: 310 2017/02/08(水)21:46 ID:GrcF81sn(1/2) AAS
昔mnistでオートエンコーダのテストした時のように、学習内容(ウェイト)をBMPにして
可視化してました。テストに時間がかかるので、色々すったもんだバグとりに時間が
かかってましたが、ようやくなんとか表示できるようになりました。で、とりあえず想定より
少な目の隠れ層4096個でテスト開始。
勾配ノイズ(焼きなまし)の設定値もでかすぎたので、設定値を自動計算するようにしたり。
NN復活当初うまく動かなかった原因がこれでした。
で、まだ学習途中なのですが、ウェイトデータ見ると192個(=64×3)毎に1ビットづつ
ずれるパターンに収れんしていっています。192といえば入力データのサイズで、
横に64個づつ並べたビットマップ画像に、まるで光子の回析実験のような縦じまが(汗
そんな周期性が生まれるはずがないので、どこかにバグがあるんじゃないかと。
表示するプログラムのバグかも知れないけど、1エポックに3時間かかるので、止めて
デバッグに入るか、それとも続行するかで悶々中…。
どっちにしても時間がかかるので、裏でDCNNをもう一度コーディング開始。
あまりにネストが深いのでミニバッチは一旦放棄してSGDで。
GoogleのTensorFlowがテンソルな意味が良くわかった。
DCNNだと元データが2次元で、更にチャンネルがある行列では次元が足りないorz
今最大の懸案は、とりあえず隠れ層4096でオートエンコーダの事前 学習しているけど、
それが終わり全体の学習にいって上手く行かなかった時、中間層を増やして再トライ
するか、それともDCNNに行ってしまうか。
726(1): 310 2017/02/08(水)21:47 ID:GrcF81sn(2/2) AAS
>>724
そこは…絶対的に機械学習である!という信念が必要だと思います(汗
727: 535 2017/02/09(木)22:03 ID:qkkjChao(1) AAS
>>726
そうですかw
まあそんな気もしますが、でも終盤の積みルーチンだけなら手書きでイケそうな気もするんですよねぇ
そこだけでもなんとかできれば…
728: 535 2017/02/10(金)19:40 ID:M6OFVkZO(1) AAS
黒番だとDBのせいで対LV1よりも対LV2のほうが勝率いいみたいw
めちゃくちゃ歪んだAIになってしまったw。
729: 310 2017/02/10(金)23:52 ID:HUcinQI4(1) AAS
3日かけて学習したオートエンコーダ型はやっぱりダメでした。
可能性すら見えなかった。
というわけで、開き直ってDCNN開始。
前回はオセロ専用で展開形を作ってましたが、それではmnistなどでテストできない
ので、max_poolingも含めて、本格的にちゃんとしたものを作ってみました。
とはいえ、まだ畳み込み層の誤差逆伝播の解釈が正しいか、自信はありません。
また、テストで動かしたところ、なんかすごく重い印象です。
ちゃんと動くのかなぁ。
730(1): 2017/02/11(土)10:06 ID:CnQo/DsP(1) AAS
GGSはmimosaというソフトを使うと入れますよ
731: 310 2017/02/13(月)22:45 ID:d/p+PbrG(1) AAS
>>730
そのmimosaのサイトがリンク切れで見つからないのです。
732: 310 2017/02/14(火)20:21 ID:lpq90WbI(1) AAS
自作ライブラリにDCNNのレイヤーを書いたのですが、あまりの計算時間にデバッグ中に
めげて、試しにtiny_dnnというC++専用のNNライブラリを入れてみましたところ、自作の
10倍以上の速度で・・・こちらに乗り換えです。
で、tiny_dnnでmnistやって感度をつかんだところで、オセロの盤面を変換する処理を
書いて、小手調べに簡単なネットワークで動かそうとしてみたところ・・・盤面データの
変換の段階でメモリーが溢れて盛大にスワップ開始(^^;
5000,000盤面×100マス(Padding含む)×4チャンネル×4バイト(float)でデータだけで
8Gbytes。自分のパソコンのメモリーは8Gで、空いているメモリーは5Gちょいとメモリー
不足が判明しました。
いまどきのパソコンはメモリーでかいから一括でも大丈夫とか言って、このざまです(笑)。
tiny_dnnは全データ一括で渡して指定エポック回してくれる仕組みなのですが、仕方ない
ので、入力データを分割して、自分でループ回します。
α碁のハード環境がうらやましいorz
上下前次1-新書関写板覧索設栞歴
あと 270 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.030s