【オセロ,将棋】ボードゲーム【囲碁,War】 at GAMEDEV
【オセロ,将棋】ボードゲーム【囲碁,War】 - 暇つぶし2ch512:310
16/08/25 00:17:23.06 ZE8G6YuY.net
>>510
Eigen導入前のプログラムみたいにFFOの盤面渡して評価値見るようにしていれ
ば良かったのですが、あまりに収束しないので、収束の兆しが見えてからやろう
なんて放置していたのが失敗でした。あまりに急速に状況が改善していったので、
0.5石切るか知りたくなって、確認が後回しになってました。反省orz

ちなみに、列数がリセットされない問題も、原因がわかりました。
これも自分のミスというか、Eigenの使い方間違ってました。

Eigen便利すぎて、少なくとも行列演算部分に関してはバグフリーで、簡単に先に
進めちゃうので、細かいところがなおざりになっていたような感じです。

513:460
16/08/25 11:20:22.96 PNQVZmVa.net
そういえばFFOに夢中すぎて中盤の強さ評価を忘れていました。
現在は180万局の学習が終わっていますが、ゼブラ(24手読みBookなし中盤誤差なし)と黒と白で戦い、
それぞれ+8と-2という結果になりました。
完全にBook無しだと、白黒両方とも虎定石からのe3酉定石に分岐するため、
金魚や大量取りなどの主要な引き分けオープニングからの勝率を測定しようと思います。
あとHTML5版のMasterReversiレベル3とも対戦してみましたが、白黒両方とも-2という結果に…orz
Book構築方法もそのうち考えようと思います。

514:460
16/08/27 00:02:49.98 ct+QEGYU.net
学習プログラムのバグが怖くなって見直してたら超大バグを見つけました・・・
パターンモデルのうち、triangle(Thellが用いているモデル)だけが
局面出現数のカウントリセットされておらず延々と増え続けていましたw

あと同じ棋譜が結構あり、ダブった棋譜を全て除去すると180万局よりも10%程度減りそうです。
とりあえず除去中の150万局の棋譜でもう一度再学習します・・・orz

515:460
16/08/27 13:15:04.86 ct+QEGYU.net
学習プログラムのバグを直して再学習させたWZebraとの対局結果ですが、芳しくないです。。
棋譜生成で次善手を選ぶ時、打った後の7手読み(対局が8手読みなので)評価値で全ての手をソートしてから
2番目を選んでいるのですが、評価誤差を全く気にせずに選んでいました。
最善手が+10でも次善手が-4とかいう局面も結構あるので、そういった誤差が大きい手を選んでしまうと棋譜の質が低下します。
なので、最善手と次善手との誤差が-2以下の場合のみ次善手を打つようにしました。
その代わり85%で1回打つという処理を単に5%で打つように変えています。
これでなんとか中盤が強くなればいいですが・・・

516:460
16/08/27 13:18:13.50 ct+QEGYU.net
WZebra24手読みBOOK無し評価誤差なしとの対局結果

ゼブラは評価誤差がEdaxやMasterReversiに比べて大きいので、本来負けちゃいけないんですよね。。
実際50万棋譜計画のやつで学習させた場合はほとんど勝っていました。(負けても-8とかはありえない)

牛定石[f5f6d6]

黒持ち:+2
白持ち:+0

酉フック[f5d6c3d3c4f4c5b3c2e3]
黒持ち:+8
白持ち:-8

金魚[f5d6c3d3c4f4c5b3c2e6]

黒持ち:-2
白持ち:+4


FJT[f5d6c3d3c4f4c5b3c2e6]
黒持ち:-4
白持ち:+2

コンポス[f5d6c3d3c4f4f6]
黒持ち:-2
白持ち:-6

517:名前は開発中のものです。
16/09/01 22:33:13.77 PkLGbL4G.net
マイナーゲームで良質の棋譜が大量にない場合、どうやって学習させればいいんだろう?

518:名前は開発中のものです。
16/09/02 09:47:35.76 +DjGOwAN.net
事前学習じゃなくて、強化学習な手法を試したら良いのではないかな。
何をどうすれば良いのか、俺はわからんけど。

519:名前は開発中のものです。
16/09/03 00:54:14.21 lICUKSF2.net
うおお線形回帰とか最小二乗化とかわかんねぇぇ

520:名前は開発中のものです。
16/09/03 20:21:58.46 lICUKSF2.net
とりあえず自己対戦棋譜が1000局集まりそう。
まだ足りないかな?
ここからどう学習させればいいのか…

521:名前は開発中のものです。
16/09/03 21:00:16.00 DJdWXbUx.net
自分も機械学習とか興味あって細々作ってるけど、とても難しい
学習以外の部分も難しくて辛かったけど、学習はなかなか思い通りにするのに苦労する

とりあえずオンライン学習ってので、自分なりに色々やってみたけど
やっとちょっと上手くいき始めたかなってところ
ミスって学習やり直しとか何回もしてしまった

522:名前は開発中のものです。
16/09/03 22:28:55.42 lICUKSF2.net
今ブラッドリーテリーのモデルとやらを調べてる
数式ムズイT△T

523:460
16/09/04 01:59:20.91 f4dqEnZp.net
>>520
オセロは今でこそ強いソフト同士の棋譜が手に入りますが、
初期は人が対局した棋譜(ISOなど)を残り十数手のみ修正して学習させていたようです。

マイナーゲームが何かによりますが、オセロみたく終盤で神のような読み切りが出来る場合は
自己対局の教師あり学習で適当なモデルでもかなり強くすることはできるかと思います。

524:460
16/09/04 02:00:39.37 f4dqEnZp.net
レス番号間違えました。。>>523>>517宛てです。。

525:460
16/09/04 02:14:06.21 f4dqEnZp.net
自己対局中は暇なので、GUIの拡大縮小対応に手を出してみようと思ってドツボにはまりました。。
C#って描画ほんと遅いですね。。フルスクリーンにするとリスケールも含めて150msecぐらいかかります。
1024x768くらいだと50msecなのでギリギリ許容範囲内かなぁ。

あとGUIの実装に合わせて定石の変化度をツールバーから選べるよう実装していたのですが、
変化度を上げると着手時になぜか頻繁に落ちることが判明。
調べると、定石の木構造を作る処理に壮大なバグがあり、
30万近くある定石のうち1万くらいしか読み込めておらず、
リストも頻繁に上書きされてめちゃめちゃ状態でした。バグというか実装になっていないレベル。。
変化度を弄った時の処理をほとんどテストしなかった数年前の自分を殴りたい。。
かなり昔のコードなので、もう修正をあきらめて再設計して一新しているところです。

526:310
16/09/04 17:00:43.77 WEaBeSKk.net
実際、開発中ってアドレナリン出てるから、ほとんどノーテストで行けるところまで
行っちゃって後で何やってるの俺?って事がしばしば(汗

というかここ数日も、非常につまらない確認漏れというか、毎回間違うswitch文でバグ
出しているのに気づかずに、これはメモリーリークか?それとも計算式が間違ったのか?
みたいな状態になっていました・・・。

さて、今いじってるディープラーニングの仕組みは、かなり汎用性持たせて作ってます。
あまりに収束具合が悪いので、試しに、Buroさんモデルにしてみました。1層の活性化
関数無しにして、入力プログラムを流用するだけなので簡単です。でも、なかなか収束
しない。そこで、過去にどこまで収束したのか、残ってるログを探したところ・・・実際、
同じような感じ(1σ=約3.5石)でした・・・つまり、なんかできてると言えばできているし
これで満足かといえば満足ではなしと。また、なまじデバッグでまじまじ評価値を見ちゃっ
たため、これで本当に使えてるのか?状態です。

で、ミイラ取りがミイラになって、ディープラーニングの学習係数の最適化手法とか、
学習効率向上の方法を色々実装してました。勾配ノイズなる手法も入れてみました。
一体自分はどこに向かっているのだろうって状態です。

527:460
16/09/05 19:53:28.81 5Av5ahUz.net
そういえば散々オセロソフトを開発しておきながらネット対戦のオセロを一回もやった事ないなと思い・・・
やってみると案外勝ててしまいました。
この形は有利不利とかイメージだけで打っていましたが、、人間のパターン認識も結構優秀ってことですかねw

528:460
16/09/05 20:11:21.05 5Av5ahUz.net
>>526
ディープランニングはやはりなかなか曲者のようですな。
こちらも終盤の評価値が悪いところはよく見えて良いところは悪く見えるという平均化が起こっていてやばいです・・・
まずは次善手の割合を調整したのでどうなることやら。。
というかもうランダム数手をやめて、引き分けオープニングからの棋譜生成を重点的にやった方がいいのか考え中です。

529:名前は開発中のものです。
16/09/05 20:52:57.56 A3E5Chzv.net
学習始めたら速いPCが欲しくなってしまった
結果が出るまで時間掛かるなあ

530:310
16/09/05 22:33:11.28 KkVISbKe.net
上に書いた通り、線形回帰はディープラーニングに内包される計算手法ですので
(実際に最急降下法とバックプロパゲーション部分以外の計算式はほぼ同じ)、
学習率の設定にディープラーニングの最新の手法が使えるんじゃないかと思います。

学習率を外から与えるのではなく、初期値だけ与えて、後は誤差の具合を管理して
動的に変える。しかも、各重み毎に個別に学習率を変える。という発想です。

参考)
URLリンク(postd.cc)
URLリンク(qiita.com)
※)数式で、ただの変数のように書いてますが、行列だったりベクトルだったり解読が必要です

自分はこの中で一番新しいSMORMS3を使用してみたところ、モーメンタム法の10倍
以上の速さ(学習回数)で収束するようになったと感覚的に感じています。大体30~
50回も回せば収束してしまう感じです。実装&テストだけして確認していませんが、
AdamやRMSpropでもそん色ない程度には速くなると思います。

でも、早いPCで解決できるんなら、それに越した事はありませんねorz

531:名前は開発中のものです。
16/09/05 22:36:42.16 omFelghI.net
remi coulomの書いたMM法のコード見つけたが難しくて読めないorzorzorz
頑張って読むか

532:310
16/09/05 22:41:44.52 KkVISbKe.net
いかなディープラーニングでも評価関数をいきなり作るのは厳しい気がしてきてます。

ここはアルファ碁の学習の仕方にならって、最初は次の1手を学習させてみようかと。
で、今までは頭でわかったつもりになっていた、多クラス分類問題を調べてみると、
Softmax関数の微分(バックプロパゲーションで必要)がわからない事にあらためて
気が付きました。

幸い、Softmax関数の定義があるひな形プログラムがあったので、これから解読です。

人さまのプログラムを見ると、自分がいかにC++を知らないのか、思い知らされますorz

533:460
16/09/07 01:48:41.72 UfwPrMcb.net
自己対局ですが、8手読みの20マス空き完全読み設定だと、2日で大体20万局終わることが分かりました。
ここまで速いと10手読みの22マス空き読みにランクアップしてみたいところ。。
体感だと1/3くらい遅くなっているのですが、22マス空き読みだと偏りもひどくて、
1~2日やってみないとなんとも言えない感じです。
2日で7万局程度終えられるなら、それでのんびりやろうかと思います。

534:460
16/09/07 03:02:28.63 UfwPrMcb.net
今しがた動かし中ですが、400局完了まで16~17分でした。
1時間で1400局程度できそうなので、1か月で100万局くらい行けそうです。
とりあえずこのまま100万局集めようと思いますw

あと、初手ラムダムをやめて最悪手が数%程度で打つよう、評価値によって着手確率を調整しました。
最悪手の絶対値の1.2倍をそれぞれの評価値に加算した後の総和を使って
それぞれ加算した評価値を除算という古典的な方法ですが・・・
この方法だと絶対値が0に近いと悲惨な事が起こるので、絶対値は>=4にしています。

535:名前は開発中のものです。
16/09/07 23:27:08.71 4MEE20eO.net
誰かヘルプ!
このページのmm.tar.bz2の使い方わかる人いない?

URLリンク(www.remi-coulom.fr)

makeしてexe作るところまではできたんだけど
README通りにmm.exe < input.dat > output.dat
ってやってもoutput.datが空ファイルにしかならない。

536:460
16/09/07 23:57:41.97 UfwPrMcb.net
>>535
とりあえずmm.exe < input.datでコンソールに何が出てきてるか見た方が良いかも。
Cygwinでやるとこんなの出てきました。

$ ./mm < input.dat
..
Games = 2
Feature1 -0.89588 2.44949 0.0285792
Feature2 -0.867301 2.38048 0.15838
Feature2 -0.708921 2.0318 0.0737065
Feature2 -0.635214 1.88743 0.0358307
Feature2 -0.599384 1.821 0.0187057
・・・(略)・・・
0 1.49416
1 1.21426
2 0.586193
3 0.668003
4 2.13451

outputは下5行だけが出力されるみたいです。

537:535
16/09/08 00:10:42.63 /oQCQhP8.net
>>536
おお、返信ありがとうございます。
mm.exe < input.datやってみましたが何も出ないです。
もしかしてinput.datはなにか編集しないといけないのでしょうか?

538:535
16/09/08 00:16:47.92 /oQCQhP8.net
すいません。
makefileからコンパイルオプションを取り除いたところ結果が出力されました。
-O3がダメなのかなぁ。

ともかく、ありがとうございました。

539:460
16/09/08 00:21:28.75 LcwQkLYi.net
>>537
input.datは全く編集せずにやりました。
Cygwin64bitだと動くのですが、環境によっては動かないんですかね・・・
gcc-5.4.0でビルドしましたが、コンパイラのバージョンの差異も原因かもです。

540:460
16/09/08 00:23:56.75 LcwQkLYi.net
>>538
動いてよかったです。
最適化が悪さしていましたか。。-O1程度の方がいいかもですね。

541:460
16/09/10 21:06:28.42 FA2ccDEd.net
>>534の読みを深くさせた自己対局棋譜ですが、15万程度集まったので
無理やり学習してWZebraと対局させてみたところ、黒持ちで+12、白持ちで+2でした!
次善手や序盤ランダムの考慮と読みを深くした効果が現れてて安心しました。。100万達成した時の結果が楽しみです。

542:460
16/09/11 09:03:13.98 UepiTkRD.net
ついにBOOKの読み込みとアルファベータによる手の選択を実装できました。
まだ最善しか着手できないので、誤差率によるランダム着手も実装しようと思います。
ゼブラのExtra-Bookをそのまま使っているので、ゆくゆくは自力で構築できるシステムを
考えたいところ。。

543:名前は開発中のものです。
16/09/11 11:41:57.36 dMHrH3w2.net
>>542
やっぱり最終目標は完全解析なんですか?

544:460
16/09/11 15:25:12.97 UepiTkRD.net
>>543
いえ、さすがにそこまでは・・・w
Edaxの作者が完全解析を先行してやってるみたいですし、そこは任せようかなと。
最終的にEdaxやMasterReversiと同等の評価関数やBOOKを作成できるレベルまで持っていきたいです。

545:535
16/09/12 21:36:16.05 vkOlNla9.net
>>535です。
<number of gammas for this feature>というのがよくわからん。
とりあえず1にしとけばOKみたいな?
input.dat色々いじってみたけど確かにそれっぽい値はに出る。

546:310
16/09/12 22:52:49.52 5hD0Gf9W.net
>>460さん、着実に進んでいてうらやましい。

自分はというと、だんだんとオセロの事は忘れて、ディープラーニングのプログラムの
確認修正、機能追加に頭がスイッチしちゃってる感じです。むむむ。

C++スキルも微妙に上がってきていますので、オセロ側に戻る時も、もう1回1から
全部コーディングしなおした方が良いかもw。ほとんどCの状態から始まって、もう3回
くらい書き直しているので、そんなに時間かからないと思うし。

と、どんどん脱線していくのであった。

>>545さん
そのプログラム見てないですが、γというと、たいてい何かの係数パラメータじゃないかと。

547:535
16/09/12 22:58:52.81 vkOlNla9.net
>>546
返信ありがとうございます。
係数ですか。詳しい説明がどこにあるのかわからなくて。。。

プログラムって最初から書き直すほど洗練されていきますよねw

548:535
16/09/14 22:57:07.95 lQtAf6dT.net
本番のデータ使うと結果が表示されないorz
入力ファイルの形式なんか間違ってるんだろうけど
何間違ってるのかわからんorz

549:535
16/09/15 21:47:58.41 NUOEmvbB.net
もしかして万が一だけど同じフィーチャーに属するガンマは同じチームになれないとかあるのか?

550:535
16/09/15 23:35:36.05 NUOEmvbB.net
うお~わかんねぇぇぇ
コード熟読しかないのか?
厳しいぃぃぃ

551:310
16/09/16 00:03:09.94 44uFy3HE.net
featureってコンピュータの世界では、機能を意味するよね。
あと、もう一度読み返すと、γが複数形になってるので、
γの数であってγの値ではなさそう。

「この機能で使用するγの数」となるけど・・・
これだけだと正直なんのこっちゃだねw

この機能が何を表すかどこかに書いてないの?

552:名前は開発中のものです。
16/09/16 07:31:01.43 mrye4Vvn.net
もう一年くらい将棋をちまちま作ってるけど、なかなか強くならないな
最近ようやくアマ高段くらいには行った感じだ
ランダムでただ指すところから始めて、先人の歴史を全部なぞるようにプログラムして来た

みんなはゲームは違うだろうけど、もうその筋ではかなり強いレベルなの?

553:460
16/09/16 13:50:57.59 gJ0b6G2+.net
自己対局での棋譜生成ですが、10手読みだとまだまだ精度が落ちるようで、思いきって中盤16手読みの24手読みにしてみたところ…10分で35局…w
今日は出勤時間がせまっていたのもありこのままで生成していますが、
中盤14手読みか12手読み、22マス空き完全読みにした方が良さそうです。

ああ、PC10台くらい並べて棋譜生成したい…

554:535
16/09/16 21:02:11.49 l6ih+FVI.net
>>551
返信ありがとうございます。

どこかに解説あるんですかね?
ちょっと本気で探してみるか…

555:名前は開発中のものです。
16/09/16 21:22:13.05 l6ih+FVI.net
URLリンク(www.remi-coulom.fr)
の「囲碁の手のパターンのEloレーティングを計算する」をよみゃいいのかな?
もしかして

556:535
16/09/16 22:26:17.01 l6ih+FVI.net
囲碁の手の特徴にパス、トリ、伸び、自己当たり、当たり、
盤端との距離、直前の手との距離、2手前の手との距離、モンテカルロオーナー
などがあると書かれている。

feature=特徴?

557:名前は開発中のものです。
16/09/17 22:31:21.85 mQ7ypIPZ.net
下がりすぎ
上げるぜ

558:460
16/09/18 02:39:21.57 6855FAgd.net
オセロオンラインというアプリに付属されている真・HAYABUSAと対戦してみました。
どうも定石がかなり充実しているようで、普通にやってると
こちら側が記憶していないドロー進行に分岐されて負けます。。
しょうがないので野兎とか序盤から不利な定石に分岐して評価関数の勝負に入らせると、案外勝てましたw
評価チューニングがEdaxなどに比べると結構甘いようです。
とはいえ国産アプリでここまでチューニングされているとは思わなかったので驚いています。

559:名前は開発中のものです。
16/09/18 09:21:43.32 u+E0nELs.net
おめでとうございます

ひょっとして物足りないと感じましたか?
それなら次は
PREMIUM・HAYABUSA に挑戦してみませんか?
いまなら特別キャンペーン中につき(ry

560:535
16/09/21 00:02:39.39 DjDR9tnr.net
すいませんが誰か俺のデータを>>535のmm.exeにかけてみてくれませんか?
まじで何が悪いのかさっぱりわからん。
環境の問題かも?

URLリンク(thuploader.orz.hm)
のmy_input.zipが俺のデータです。

だれか親切な方よろしくお願いします。

561:310
16/09/21 01:01:30.09 CFP8O8Vn.net
>>558
URLリンク(www.slideshare.net)

これですね。色々AIの特徴を説明してますが、まあLogistelloの
日本語解説みたいな感じで、皆さんのAIもほぼ同じ構造かなと
思います。

テレビ番組企画でEdaxと良い勝負するAIを短期間で開発したという
のが開発経緯らしいので、恐らくEdaxをたたき台にして定石DBの
学習をしていると思います。

つまり、Edaxよりちょこっとだけ強ければよいと割り切った目標をたて、
目標がはっきりしている分、手間をかける箇所を、定石DBの対局学習に
集中したって感じだと思います。想像ですが。

で、これ読んだ時に、オセロAIの強さって結局は定石DBじゃんと、
結構真剣に思いまして・・・。まあ、それゆえ、オセロAIの開発者の多くが
ドロー進行のリストアップに走ってしまったのかなぁと。

562:535
16/09/21 20:18:28.81 DjDR9tnr.net
環境が悪いのかと思い押し入れからノートPCを引っ張り出して走らせてみたところ
計算結果がNaNになってるっぽい。
駄目なのか?うーむ。

563:460
16/09/22 13:08:07.84 aLXK2a2e.net
>>561
ほとんど考えずに打ってくるので、もしやと思い定石からわざと外してみたらいきなり10秒超の長考でした・・・w
本当にBOOKの精度がEdaxよりちょっと良いのでしょうね(逆に言うとそれだけ)
開発期間が短期間って制限があったらしいので、しょうがないのでしょうけどもったいない気もします。

564:310
16/09/22 20:43:51.38 esximYO0.net
BOOK学習ってあんまり実装例見ないので、その点は評価しても良いかなと。
Buroさんの論文はあるので、自分もいずれは実装しようと思っています。

が、BOOK学習で、別のオセロプログラムとひたすら対局学習させると、そのプログラム
相手限定ならほぼ負けないBOOKが得られるんです。

EdaxのBookは引き分け進行のリストアップで、そこに記載されていない分岐は、基本は
分岐した方が負けるはずなのですが、分岐後は純粋に評価関数の読みの勝負になるの
で、いかなEdaxでも間違える事があります。で、勝った手順、負けた手順をリストアップし
ていき、負けたら勝つ手順が見つかるまで、ランダムな手番で別の分岐を探していく。

Edax側がBOOK学習をオフにすれば、間違えた箇所は何度対局しても同じ間違いをする
ので、勝った手順になれば勝ちは確定し、負け手順は自分は打たないようになっていく。
要するに、そのプログラムの弱点を学習する事になるので、勝率が上がっていく。

EdaxのBookより精度が良いというのとはちょっと違う気がします。

とはいえ、Edaxとかの引分進行リストをパクっても意味が無いし、限られた時間で、パソコン
ぶん回して引分進行を発見していっても、間に合わないしで、これしかやりようがないんだ
とは思います。

実はこれに気が付いた時、BOOK学習+乱数着手(打たない箇所がない)で、自己対局を
延々と続けていくと、究極のBOOKができるんじゃないかと妄想してしまいましたが、よくよく
考えたら、それって全手順リストアップというか、完全解析大差ない事に気が付きました(汗

565:535
16/09/22 21:29:54.82 kzrJOomn.net
RemiさんのMM法諦めるしかないのかなぁ
他の学習方法探すか…

566:535
16/09/27 23:07:26.38 AU3JIk+S.net
いまいち手ごろな強化学習が見つからなかったので
モンテカルロ木探索をパターンに応用することにした。

567:535
16/09/28 22:21:31.56 DgDU0GF3.net
とりあえずConnect 4のAI書いてるんだけどまあまあ強くなってきた。
Connect 4は完全ソルバが公開されてるので
先手でこれに一発入れるのが当面の目標。

Connect 4 完全ソルバ
URLリンク(connect4.gamesolver.org)

568:535
16/09/29 20:34:59.17 1GHOMTNV.net
評価関数の基になるパターンが悪いせいで
一生学習しても完全ソルバに勝てない気がしてきました。

569:535
16/09/29 21:12:02.15 1GHOMTNV.net
まあ、Connect 4は習作なので一定の成果が確認できたということで一旦休止します。
これから本番のゲームに着手します。

できたConnect 4のexeをアップしてみます。
URLリンク(fast-uploader.com)

Connect 4の経験がない人にはかなり強く感じるはずです。
遊んでみてください。

570:535
16/09/30 22:44:03.81 Ol1OvzoR.net
人為的なパターンを評価関数の基礎においてると
幾ら学習しても完全解析にたどり着かない可能性があるよね?

十分学習すれば完全解析にたどり着くと保証できる
出来るだけ効率の良いパターンセットてのは
なんとか数学的に割り出せないだろうか。

571:460
16/10/01 15:19:39.34 NwASWJgd.net
>>570
オセロしか開発したことがないのですが、connect4のノード数だと4兆程度だと聞きました。
オセロよりも合法手生成が簡単かつ常に7つなので、相当早い段階から完全読み出来そうです。
現在のAI同士を戦わせて数千から1万局程度の棋譜を作成すれば、
簡単なモデル(縦横斜めだけとか)でほぼ完ぺきな評価関数が線形回帰で
出来そうな気がするのですが、どうでしょうか。

572:535
16/10/01 16:21:13.92 UW3pMcrq.net
レスありがとうございます。

線形回帰は試したことないですが縦横斜めのモデルで
勝率で重みを振って評価関数を作ったのが>>569です。

線形回帰で学習させれば>>569はもっと強くなるんですかね。

縦横斜めモデルは意外とイケてないんじゃないかというのが今の私の感触です。

あと初手から10手目位まではBOOK作ったほうが良いのかなぁとも思ったり。

終盤完全読みは今やってないですが、やってみる価値ありそうな気がします。

573:535
16/10/01 22:20:23.15 UW3pMcrq.net
ちょっと思いついたんで、縦横斜めのパターンに加えて、
盤面の空マスの情報をパターンに加えて再学習させてみます。

もしかしてこれなら完全ソルバに一発入るかも?

574:460
16/10/02 00:33:37.72 jNeryq9p.net
>>572
完全読みは深くすればするほど線形回帰で有利になってくるのでオススメです。
オセロでも20手読みの棋譜と22手読みの棋譜では2手違いなのに強さが段違いでしたので・・・

575:535
16/10/02 00:38:22.45 8lzQrfNi.net
レスありがとうございます。

オセロでも20手も読めるのか!
Connect 4ならもっと読めないとダメですね~

線形回帰はちょっと調べてみます。

576:名前は開発中のものです。
16/10/02 01:27:36.48 8lzQrfNi.net
完全読みかなり厳しいorz
なぜオセロは20手も読めるんだろう?
よほど実装がいいのか?

577:460
16/10/02 04:03:56.40 jNeryq9p.net
>>576
オーダリングはしてますか?オーダリング無しだと20手は厳しいと思います。
オセロは最後あたりだと数マスしか無くなるので合法手が1手しかないとかも頻出するのですが
connect4は最後まで7つあるので、20手はちょっと難しいかもですね。。

578:名前は開発中のものです。
16/10/02 18:53:33.45 8lzQrfNi.net
すいません。
オーダリングとはよさそうな枝を先に読むってことでしたっけ?
なぜそれで計算量が削減できるんでしたっけ?
最終的に全部読むなら結局同じのような…
素人考えですが。

579:名前は開発中のものです。
16/10/02 19:09:19.16 8lzQrfNi.net
完全ソルバと対戦させると誤った学習をしてしまってるように見えます。
悪い手を良い手と思ってる。
うーん。
学習量が足りないだけなんだろうか?

580:310
16/10/02 20:32:53.90 n86BxDyi.net
>>578
αβ刈りしているでしょ。

最初に読んだ手でα値が最高値になる。
次の手を1段読んだ時、それを超える手が出ないので、全ての手がβカットの対象となる。

本当に一番良い手を選べるんなら、そもそも読む必要がないけど、何らかのヒューリスティック
な基準でよさそうな手から読むと、それが正解だった時に、βカットが大量発生して、実際に
読む事になるノード数が激減する。

αβ刈りみたいな方法は、後ろ向き枝刈と言って、完全読み切りに必要が無い手を読まずに
済ます手法。

581:名前は開発中のものです。
16/10/02 20:59:00.22 8lzQrfNi.net
レスありがとうございます。

αβですか~。
実はあれ、私、理解してないんですよね。
説明読むとなんとなくわかった気になるんですけど
いまだ実装できたことない。orz
MinMaxなら実装できるんですけどね。

582:名前は開発中のものです。
16/10/02 21:29:32.92 8lzQrfNi.net
αβが最高に上手く働けばMinMaxの倍の深さ読めるんでしたっけ?
それなら20手行けそうですね。

583:535
16/10/03 00:03:31.42 5qtC3pHr.net
完全ソルバでいろいろ試してるんですが、
Connect 4って思ったよりずっと底の浅いゲームのような気がしてきましたw

□□□□□□□
□□□○□□□
□○□●□○□
□●□○□●□
□○□●□○□
□●□○□●□

この配石が必勝法の骨格のようです。
ここさえ押さえればあとは自動的に勝つる。

584:310
16/10/03 01:55:16.80 alBluDZI.net
>>582
深さはなんとも言えないけど、オセロで言えば、αβだけでノード数は1/100くらいに
なるってどこかのサイトに出ていたかな。1/100だとアバウト2~4手くらい深く読めるはず。

置ける箇所が結構絞られるゲームなので置換表入れたら更にいけるかもしれない。
あとはビットマップの実装だね。

ゲームの規模的には(ネットチラ見だけど7兆パターンって書いてあった)完全解析を
ターゲットにしても良い気がする。軽はずみ発言だけど。

585:310
16/10/03 02:02:27.60 alBluDZI.net
ちなみに。当方、Sparse正則化付AutoEncoderの実装に不安が付きまとった挙句、
MNISTという手書き数字認識のテストで動作確認をするという遠回りな事をしてます。
というか、何をしたら認識率改善するのかという事を考えて、色々といじって時間を
食ってました。

結果、オセロの方が盤面は狭いけど、良く現れる状態の数と、その特徴の複雑性が
圧倒的に違うので、やはり畳み込みのような、盤面の特徴の解釈の仕方を外から
与える方向に行く必要がありそうだという事になりました。
いままでも薄々気づいていたんですが。

ただ、画像解析や囲碁のように隣接するノードとの関係性からスタートしても意味がなさ
そうなので、その辺の工夫をしてみようと思っています。

586:535
16/10/03 22:00:29.42 5qtC3pHr.net
完全解析はできるに越したことはないですが、
Connect 4やってるのは勉強の意味あいが強いので
Connect 4以外では通用しないようなヒューリスティックで強くなるのは
出来るだけ避けたいです。
理想的には汎用的な手法で完全解析レベルまでもっていきたいですね。

αβもそろそろ片づけなければいけない宿題ですね。

587:460
16/10/04 00:53:57.08 OTRn7xTU.net
コネクト4、軽く実装してみましたが(ほとんどオセロの流用)
単純アルファベータ、置換無しオーダリング無し、
評価関数が連続している数だけ考慮・・・だと8手涛ヌみは一瞬ですbェ、12手読みはbキでにきついでbキね。。
末セ日評価関数を給lめてみてとりbえず8手読みで535さんのAIと対戦してみる予定ですw

588:535
16/10/04 21:18:36.22 dRd+Ucp+.net
おお!楽しみですね。
ありがとうございます。

工夫無しの8手読みなら勝ちたいですねw

ちなみに私のAIは結構思考時間が長いのでw
統計といえるほどの試合数はこなせないと思いますが期待しちゃいます。
よろしくお願いします。

589:460
16/10/05 00:36:10.60 JvSO0BT6.net
>>588
結果ですが、ぼこぼこにされましたw
ヒューリスティックだとやはり限界ありますね~

590:460
16/10/05 11:21:34.44 WWXbBFqc.net
オセロは大体やることはやったので、そろそろ将棋か囲碁に着手してみようかと思っています。
ルールの実装が楽なのは囲碁なのかな…
自身が囲碁を打ったことがないのでルールから調べないとですがw

591:310
16/10/05 12:08:04.26 Iif/OHnc.net
やっぱ囲碁行きたいですよね。

昔調べた感じでは、日本ルールと中国ルールで勝敗の判定が微妙に違って、日本
ルールだと曖昧なところがあるので、AI開発は中国ルールでしているみたいです。

ルールの実装は着手禁止点が少なくて拍子抜けするくらいですが、その先が・・・
色々と一筋縄ではいかないようです。

オセロの評価関数ですが、AutoEncoderの限界を感じ、DCNNの実装を始めていますが、
バックプロパゲーションがスパゲッティでわけわからん状態になっています。しばらくは
紙と鉛筆で考える必要がありそうです。DCNNがある程度できたら、僕も囲碁に行って
みようかな。

その前にConnect4に脱線してみたい気も(汗

592:535
16/10/05 19:29:25.92 KcSrUkxH.net
>>589 >>590
ん。IDが違いますね。
>>589は偽物ですかね?

593:535
16/10/05 19:48:59.89 KcSrUkxH.net
>>591
囲碁は終局判定させるのも結構難しいみたいですね。
セキの判定とか。

Connect 4は易しすぎず難しすぎずいい塩梅のゲームだと思います。
完全解析も狙えますしw

594:460
16/10/05 21:34:13.58 JvSO0BT6.net
>>592
同一ですよ!
スマホから書き込んだのでID変わってしまいました

595:535
16/10/05 21:53:19.85 KcSrUkxH.net
ん~そっちのID使って同一って言われても。
>>590のIDで書き込みお願いします。

596:名前は開発中のものです。
16/10/05 22:05:36.36 KcSrUkxH.net
まあ、こんな過疎スレでわざわざ嘘をついて騙るひともいない気もしますが…

597:名前は開発中のものです。
16/10/05 22:31:22.88 KcSrUkxH.net
>>590の書き込み時間からすると学校や職場から書き込んだ可能性もありますね。
とすると>>590のIDでは今は書きこめないかもしれませんね。

598:460
16/10/06 20:28:59.44 1mBat3Ee.net
460の名前があるものは偽物ではないので大丈夫です・・・
コテ付けた方がいいかもですけど、まぁこの人数ですし、そこまでする必要もないかなと思いますー

囲碁ですが、ネットから集めた棋譜をざっと見てみましたが、投了がほとんどなんですね・・・
中押し勝ち?はて・・・?となって調べるくらいルールを理解していないという;;
投了だとするとロジスティック回帰でないとあんまり良い精度は出なさそう・・・?
というより一般的な機械学習のアプローチで良いのかも微妙ですね。
やはりディープランニングなのでしょうか。。。腰が引けますw

599:535
16/10/06 21:04:20.88 /7+JrWaw.net
>>598
ん~そうですか。
それは失礼しました。

600:310
16/10/06 22:11:43.15 2nbHwrUk.net
>>598
投了は将棋用語で「参った」です。むしろ中押し勝ちと同じ意味です(汗
将棋の場合、詰まれるまで粘る事はみっともないこととされているので、
入玉とか千日手、反則負けなどの特殊なケースを除けば全て投了です。

囲碁は、逆に終局まで打つ事があって、「数え碁」と呼ぶみたいです。
この間のアルファ碁vsセドルの試合見て覚えました(笑)
オセロのように必ず最後まで打って、得点差がはっきりと出るゲームの
方が珍しいのかも知れません。

オセロみたいなmin-Max+評価関数は既にダメ認定されてます。
アルファ碁までは、MTCS(モンテカルロツリーサーチ)が主流で、
モンテカルロ系には評価関数はありません。着手順決定のための
ヒューリスティックが大事になります。

アルファ碁の登場で、一気にディープラーニングにシフトしていますが、
基本骨格はMTCSです。着手順のヒューリスティックに「次の1手を返す
DCNN」と、評価値たるモンテカルロの勝率に、補助的に「勝率を返す
評価関数としてのDCNN」を組み合わせているようです。

601:310
16/10/08 22:22:06.53 wBSLMo4h.net
あ、MTCSじゃねー。MCTSだ。

>>600書きながら、Q-Learningなるものの存在を思い出して、調べ始めたら、
やっぱりDQN(ブロック崩しで有名になった奴)はQ-Learning+DeepLearning
だった。

興味津々だけど、どんどん発散しちゃうなぁ。

602:535
16/10/10 19:51:24.57 WonRpXhk.net
なんかモチベーションあがらんなぁ
三連休まるまるさぼってしまった。

603:名前は開発中のものです。
16/10/10 22:22:05.27 WonRpXhk.net
将棋電王戦あったみたいですね。

604:名前は開発中のものです。
16/10/10 22:38:31.22 WonRpXhk.net
優勝はポナンザか。
一発勝負のトーナメントなのに強え。

605:名前は開発中のものです。
16/10/10 23:10:57.87 WonRpXhk.net
ん?
一発勝負じゃないのか?

606:310
16/10/13 11:06:43.08 f6Nd8WJL.net
ここ数日、気分転換でConnect4やってました。

ビットマップ方式の置換表付αβのオーダリング無し。リーチ状態のみ後方枝刈。
完全解析ができそうか確認してました。

全42手でルートから30手くらい置換表適用すると、序盤はかなり良いペースで探索
してくれますが、数時間で置換表パンク。置換表を20手くらいまでにとどめると、びっくり
するほど速度低下。手順の前後で簡単に同形が生じるので、置換表が肝なのは確か。
というか、手順前後の同形を排除する仕組みが作れればメモリ節約可能になる。
けど、それを一般化した処理が置換表なので、全てカバーしなくても3手以内くらいで
排除すれば状況はかなり改善するかも知れない。

あと、パンク前も探索が進むにつれて徐々にnpsが低下していきます。原因不明。
書きながら気づいたのですが、置換表のハッシュ値はオセロのものを流用しています。
Connect4はビット数が少ないので、ハッシュ衝突が頻発して、格納効率が低下して
領域拡張が頻繁におきて、探索速度も落ちている可能性があります。

というわけで、現段階では置換表周りを工夫しないと完全解析は厳しそうです。
一方で、空26箇所くらいの終盤探索なら実用的な速度が出そうな感触です。

>>569の完全ソルバは、評価値表示機能があるけど、あの表示の仕方だと、証明数
探索みたいな手法を使っているのかなぁ。ほぼノータイムで最善手のみ着手してくる
ので。完全ソルバの出現で終わっちゃってるゲームなんでしょうね。

で、このゲームってMCTSの練習台にちょうど良いのではないか?とふと思いついて
しまいまして・・・。更に脱線しようかなと思います。Playout関数は作りましたが、ツリー
展開の仕方に疑問があり、まだ調べ中です。

607:名前は開発中のものです。
16/10/13 21:15:41.15 XMNeJMFS.net
310氏もConnect 4 参戦か~

608:535
16/10/13 21:53:14.86 XMNeJMFS.net
名前書き忘れた。

終盤26手読み行けそうというのは流石ですな。
完全解析ってConnect 4だと簡単そうに見えますがこれが意外と手強いんですよね~

609:310
16/10/15 13:58:53.52 iZ3eY/zy.net
NPS低下問題はやはりハッシュ衝突のようで、ちょこっと直したら解消しました。

Connect4は手順前後しても同じ形になる事が多いゲーム(DAG問題多発)なので、
置換表を上手く使わないと、7兆種類あると言われている盤面を何度も重複探索して
しまう事になります。が、置換表探索と登録のオーバーヘッドは結構大きく、メモリ
パンクでスワップ多発の問題も起きます。

今の設定だと残り27手探索くらいなら難しい問題で1分程度で解けそうです。
NPSは20メガくらい。が、メモリパンクや重複探索の問題があるので、その速度を
もとに完全解析に要する期間を推計するのは無理っぽい感じです。

というわけで、完全解析はこの辺にして、MCTSの方に行きます。

610:535
16/10/15 20:55:10.85 jn3cHMWR.net
>>609
多分純粋なMCTSだけではあまり強くならず、
プレイアウトになにがしかの工夫を入れる必要が出てくると見てます。

逆にプレイアウトさえ改良できればMCTSはびっくりするくらい強くなる。

しかしそれでも完全ソルバには届かない。みたいな感じだと思います。

611:310
16/10/15 21:29:59.48 iZ3eY/zy.net
MCTS(UCT)多分できました。STL様様です。
探索時間1秒で40万プレイアウト。

playout部をnegamax的に書いたので、ちょっと混乱しました。
まだ終局判定とかいい加減で、引分近辺で落ちる可能性あります。

オセロでも1秒で10万プレイアウト以上いけるんじゃないかなぁ。
探索時間固定できるのでオセロ序盤~中盤で使えるかも。

>>535さんのプログラムはもうダウンロードできないですね。

612:535
16/10/15 21:54:42.38 jn3cHMWR.net
秒速40万プレイアウト!?すげぇぇぇぇ
1プレイアウト=1手てことですか?
1プレイアウト=1局てことですか?

613:535
16/10/15 22:17:47.78 jn3cHMWR.net
460氏もオセロで10000Knps~15000Knpsとか言ってるし、まじか~
やっぱ本気でやってる人達は違うのかな…

614:535
16/10/15 23:46:45.43 jn3cHMWR.net
NPSは20メガって書いてありますね…
すいません。

615:310
16/10/16 01:32:06.03 KTdXBWLt.net
プレイアウトなので1局です。色々ごにょごにょはありますが、ランダム着手で、
とりあえず勝負がつくまで打ちます。これで1プレイアウト。
速度が出るのはビットマップとBMI命令などのX64命令を使ってるからだと思います。

が、Perfect Solverに先手で勝てません(汗。5手目に必ず間違えます。
評価値を眺めても、当たり前のように、正解(真ん中列)が最下位になります。
パラメータをそこそこいじってみましたが、状況は変わらないです。
一本道には弱いって事かなぁ。

とはいえ、自分がやると、さっくりと負けてしまいます(汗

616:310
16/10/16 13:25:18.14 KTdXBWLt.net
mobility周りにバグがあって直したところ、1秒読みでPerfect Solverに先手で勝ちました。
昨夜は120秒読みでも同じ手順で負けていました。
とはいえ、乱数が絡むので引き分ける事もあります。

まだ若干問題があります。1本道を交互に着手していくと自動的に勝ちが確定する盤面
なのに、評価が引き分けになっています。プレイアウトの終局判定で何かの条件が抜け
ていて、勝ちと判定されていない感じです。

直したらまた勝てなくなったりして(汗

C++の診断ツールを今回初めて使ってみました。
関数ごとの使用時間がわかるようで、速度アップの検討に重宝します。
が、どうもUCB1の計算で使うsqrtとlogを使ってる箇所でCPUを9割くらい使っている
感じです。見方が良くわからないけど、多分そういう状況。速度アップ難しい。

617:535
16/10/16 16:43:19.50 Ts0NTtMt.net
一秒読みで完全ソルバに勝とかまじか~
やっぱ積み上げてきた基礎力が違うんだろうな~

618:310
16/10/16 17:19:15.26 KTdXBWLt.net
どもです。評価値問題は治りました。

乱数じゃなくて、ある手順で引き分けな手を選んでしまう事が判明したので探索時間
を延ばしてみたら、逆に序盤で負け手順を選んでしまうようになりました(汗。
ツリー部の地平線臭い感じなのかなぁ。

というわけで、たまたま選んだ1秒が良かっただけかも知れませんorz

MCTSも理論的には探索回数を∞にすると、最善手を必ず導き出す事は保証されて
いるらしいのですが、中途半端な回数の時は保証されていないんですよね。

619:535
16/10/16 21:36:30.64 Ts0NTtMt.net
なんか将棋で評価値を深く探索した時の評価値に近づけるっていう学習方法があるみたいですね。
ちょっと興味あります。

620:310
16/10/16 22:45:31.89 KTdXBWLt.net
なんか、デバッグ報告みたいな状況になってすみません。

地平線臭い状況を調べていたら、負ける寸前なのに評価値が勝ちになってます。
つまり負けを認識していない。

着手を間違えるのはこの辺も原因かも知れません。

ぱっと思いつく原因が見当たらないので、しばし長考します。

621:535
16/10/17 22:03:40.14 B9d5KHtX.net
connect 4序盤ブック作ってみようかな。
完全ソルバ丸パクリでw

622:310
16/10/18 00:57:04.06 k8M1GDOc.net
色々直して、ほぼバグは取れたと思います。
で・・・強くなったはずですが・・・PerfectSolverに先手で勝てなくなりました。
かつて勝てたのはたまたま上手くバグっていたという事みたいです。

1秒設定は途中で間違えて引き分け、10秒設定は初手で負け確定(真ん中以外に着手)。
1秒設定で初手真ん中を選択するのはたまたまかもしれません。
初手だけ調べると150万プレイアウトくらいで間違えはじめ、15億プレイアウトまで確認
しましたが、雰囲気的には当分正しい答えに戻ってこないようです。
評価値の推移を見ると、一本道問題に引っかかっているように見えます。

DAG問題がやっぱり気になるので、ハッシュと組み合わせて合流できるようにしてみます。
多少は改善するかも知れないし、逆にもっと早く真ん中から外れるかも。

623:名前は開発中のものです。
16/10/18 17:50:18.00 7idTlLLA.net
読めば読むほど弱くなるとは不思議
ucbの計算間違えてるとかでは?

624:名前は開発中のものです。
16/10/18 19:31:31.87 4bRvdGb+.net
ボードゲームのオリジナルオーダー制作
URLリンク(www.logygames.com)
簡単に本格自作ボードゲームが作れる時代到来!!
URLリンク(jellyjellycafe.com)
100円ショップでボードゲームを自作しよう
URLリンク(sites.google.com)
ノーアイデアでボードゲームを作ろう第1回「100円ショップで物を買う」
URLリンク(boardgamelove.com)
自作ゲームをゲームマーケットで売って来た
URLリンク(portal.nifty.com)
「街コロ」はカードゲームに興味ありな初心者の入門用に最適、サイコロを振って
カードを集めどんどん自分の街を発展させて勝利を目指せ
URLリンク(news.livedoor.com)
ようこそ「男の世界」へ。『ダンジョン オブ マンダム』試されるカードゲーム
URLリンク(www.moguragames.com)
かわいいひつじを増やして増やして増やしまくれ! “一人用”カードゲーム『シェフィ』
URLリンク(www.moguragames.com)

625:535
16/10/18 22:30:42.36 5rT5zFZw.net
完全ソルバから定石パクるの意外とめんどくさいな。
クローラーみたいにして自動でパクれるようにしようかな。
でも迷惑かかるかな?

626:535
16/10/18 23:07:54.58 5rT5zFZw.net
なんか本末転倒だからやめとくかw

627:310
16/10/19 02:53:35.54 YWnebdEb.net
まさかの場所にバグ発見。
プレイアウトでランダムに1手選ぶところがバグってました。
良く動いていたものだと思う反面、MCTSってそういう所がある事も薄々感じてます。

が、状況はほぼ変わらず。初手真ん中と、5手目真ん中。この2か所が鬼門。

まだバグがあるのかも知れない。やっぱり自分が一番信用できないですね。

DAG問題対策でノードの合流を実装しました。枝とノードを分離して、ノードをハッシュ
にして、ノードの下に次の枝をぶら下げました。同時に、ハッシュキーに細工して、
左右同形も合流させてます。あまり変化はない気が。
速度低下が酷いです。

628:310
16/10/20 00:37:06.99 yz39woaL.net
5手目真ん中以後どうなるのか1秒探索検証。6手目2列目に対しては、勝利(全て
最善着手)。6手目1列目に対しては、5列目着手で引き分け進行に入り、引分終了。
この時の手順では、全箇所が最善手という盤面ばかり通っていくように感じています。
つまり、MCTS的に勝利期待値が最大になりやすい手です。という事で、まあ、そんな
に間違った手は打っていないかなと。

また、プレイアウトを繰り返して手がどう変遷するのか見ていくと、最善手である真ん中
は、ある一定数からほとんど選択されなくなっています。結果、その手で枝の分岐が起き
ない事から、いつまでたっても評価が更新されず正解に戻らないと推測できます。

そこで、試行回数に圧倒的な差ができても、下位の手も一定回数は試行されるように
できないかと、手の選択基準をucb1の大きい順から、ソフトマックス関数を通して確率
分布に変えて、乱数で選択してみました。

結果は・・・。expの計算がある事からか、速度が激減。PVに割り当てられる試行回数は
2/3程度になり、その時点の最悪手でもそれなりに試行されるようになりましたが、それ
でも手の選択は微妙な感じです。この程度の効果なら、他のパラメータいじった方が
速度低下も無く良かったかも(汗

というわけで、本日のトライアルも失敗。
気が進まなかったけど、やっぱりucb1計算の検算をしてみます。
あと、部分的にmin-Maxを適用するとか。

629:310
16/10/23 09:58:44.72 qEEwIK82.net
UCB1の計算は合ってました。
プログラムがC++的に美しくない事が気になりだし始めて、全部書き直ししてました。
書いた端から美しくないのが気になりだしましたが(笑)

UCTで後方枝刈というか、小枝の勝敗が確定していたら、ツリーを縮小していく処理を
追加。一本道問題が多少緩和するかと期待。対戦はちゃんと動いているっぽい。
デバッグ情報をファイル出力する処理書いて確認。
間違え方はあまり変わっていないのが残念というか、安心というか(汗

モンテカルロで1手目から最善手順が確実にわかったら、それはそれでゲームが
簡単すぎるって事になっちゃうので、大きく間違えないんなら、それで仕方ないかな。
というわけで、COM1手目は真ん中に固定。

プレイアウト部を高速化できる気がしていますが、やってみないとわかりません。
プレイアウトの末端部分に完全読みを数段入れるのも良いかと思っています。
DAG問題対応と左右対称チェックを入れて毎秒20万プレイアウトくらい。

評価値の算出方法でちょっと悩み中。

そこそこ落ち着いたらオセロの中盤探索に応用してみます。

630:310
16/10/26 20:47:59.29 H5ji3apJ.net
また美しくない病が出て、書き直したところ、びっくりするほど弱くなってしまった。
しばらくデバッグで悩みそうです。

631:535
16/10/26 20:59:11.78 +YpzcPTO.net
Connect 4は一旦休止して別のゲームのAI書いてます。
マイナーゲームですが囲連星というゲームで囲碁と五目並べを混ぜたようなゲームです。
簡単に言うと、七目並べれば勝ち、囲った石は取れるというルールです。

ついさっき黒番で公式AIのLV0に1勝できました。
(;SZ[19]
;B[jj];W[kj];B[jl];W[ji];B[ik];W[km];B[kk];W[ki]
;B[ii];W[lj];B[ll];W[mm];B[hh];W[gg];B[im];W[ih]
;B[ig];W[jh];B[ij];W[in];B[lk];W[gi];B[hk];W[gk]
;B[mk];W[nk];B[hn];W[hl];B[jn];W[io];B[lm];W[jo]
;B[go];W[fp];B[gh];W[hi];B[fg];W[ko];B[gf];W[ln]
;B[hg];W[jg];B[ff];W[gj];B[gg])

囲連星AIはこちらで配布されてます。
URLリンク(www.vector.co.jp)

632:535
16/10/27 22:26:16.59 CgNWWTgQ.net
LV2からも黒番で一本取りました。
キセキが起きたw

(;SZ[19]
;B[jj];W[ik];B[ji];W[hj];B[jh];W[jk];B[kk];W[jl]
;B[gi];W[il];B[ll];W[hm];B[ii];W[hh];B[hi];W[ki]
;B[mm];W[nn];B[li];W[in];B[kh];W[fi];B[mi];W[io]
;B[kj];W[lj];B[ki])

633:535
16/10/27 22:53:05.70 CgNWWTgQ.net
黒番でLV3からも一本取りました。
なかなかいい感じ。
ここからどう高めるか。

(;SZ[19]
;B[jj];W[ji];B[ij];W[kj];B[kk];W[ii];B[ki];W[lj]
;B[lk];W[jk];B[ik];W[kh];B[li];W[mj];B[lh];W[hl]
;B[mk];W[hj];B[jl];W[hk];B[ok];W[nk];B[nj];W[hh]
;B[nl];W[km];B[jk];W[lm];B[nk])

634:310
16/10/27 23:41:56.56 KUg+LQ1A.net
バグ取れました。わかればどうという事はないですねorz

左右対称はデバッグが面倒くさいので省きました。どうせ序盤でした
意味がありませんので。

初手真ん中は、多分モンテカルロでは答えを出すのが相当厳しいです。
5手目真ん中は、乱数次第みたいな感じで、100万プレイアウトくらいまでに
出るか、1億プレイアウトしても出ないかみたいな感じになります。

一応、DOS窓ベースでプレイできるようにして、途中でMTCSのツリーを
色々と確認したり、追加のプレイアウトをしたりできるようにしましたが、
本質的にモンテカルロなので、完全に近いけど完全じゃないし、乱数の
具合によって着手する手もバラつくという事で勝手に納得してしまいまして、
せっかく作ったデバッグルーチンも禄に活用していません。

高速化も、一時期は40万プレイアウト毎秒くらいまで出たように感じて
ましたが、最終的に20万くらいで落ち着いてしまいました。

次のステップでオセロに応用と思ったのですが、その前に並列処理化を
してみようかと思います。上手くやれば探索ノード数は3倍強(自分のPC
では)くらいにはなりますが・・・数段深く読んだとて、結論にはあんまり大差
が無いのかなと。まあ練習ですな。

というか、min-Maxとモンテカルロのノウハウ、仕事で使えそうだなぁ。

635:名前は開発中のものです。
16/10/27 23:46:29.29 CgNWWTgQ.net
>>310氏はプロのプログラマなのか。
まあ納得。

636:310
16/10/28 10:50:00.21 /58y3Hfc.net
いや。趣味の深夜プログラマです。
物流業務改善の会議で提案してみて、わからんと言われたら
ソース見せて動作検証してやろうかなと。

システム屋さんからすると、とてつもなく面倒くさいクライアント
だと自覚しておりまするorz

637:535
16/10/29 21:09:01.77 4znFYNwN.net
囲連星、公式AIとガッツリ対戦してみました。
LV0はdll化されてないので対戦できませんでしたが。。。
結果はLV1には大きく勝ち越しましたがLV2,LV3には敵わなかったです。
airandom.dllが私のAIです。

50局目
黒(airandom.dll)の勝利回数: 44
白(ai-lv1.dll)の勝利回数: 6

50局目
黒(ai-lv1.dll)の勝利回数: 10
白(airandom.dll)の勝利回数: 40

50局目
黒(airandom.dll)の勝利回数: 20
白(ai-lv2.dll)の勝利回数: 30

50局目
黒(ai-lv2.dll)の勝利回数: 41
白(airandom.dll)の勝利回数: 9

50局目
黒(airandom.dll)の勝利回数: 15
白(ai-lv3.dll)の勝利回数: 35

50局目
黒(ai-lv3.dll)の勝利回数: 44
白(airandom.dll)の勝利回数: 6

私のAIが長考するのでこの対戦するのに丸一日以上かかってしまいましたw

638:310
16/10/29 21:13:21.87 hyv6QOjp.net
並列化してみました。

色々やり方ありますが、まあ順当なやり方という事で、ツリー単位の並列化です。
が、4コアに対して4並列でむしろ速度低下。排他で怪しいところを色々変えてみて
ようやく若干(10~20%程度)の速度アップにしかなりません。並列数を減らすと
速度低下していくので、排他待ちが原因ではなく、並列化オーバーヘッドの模様。
ノード&ツリーの構造で複雑な分、オーバーヘッドが大きくなっているのか、オセロの
時の効果には大きくおよびません。

ルート単位の並列化で、一定時間ごとにツリー統合(合算)というやり方もあるような
ので、次はこちらを試してみます。

もしかしたら、一番効果が無さそうな、プレイアウトのみ並列化の方が効果出たりして。

639:310
16/10/29 21:14:51.22 hyv6QOjp.net
MTCSは並列化と相性が良いとは思えないなぁ。

640:535
16/10/30 23:47:35.70 11nwLD7b.net
return文忘れててめちゃくちゃな値返してた。
この不可解なバグ潰すのに3時間かかったorz.
関数の終わりでreturn文無かったら警告だしてよコンパイラ(泣
まあコンパイラオプション付けてない俺が悪いんだがwww

641:310
16/10/30 23:54:19.10 vT6Vi1L+.net
結局ツリー部の並列化はやめてプレイアウトだけを並列化しました。
ツリー統合も気になりますが、とりあえずこれで末端の評価が正確になります。
プレイアウト部分は処理時間が短いので、プレイアウト回数は大幅に増えます。
MCTSは面倒でも、モンテカルロは並列化向きです。
100回プレイアウトして、そのスコアでまとめて更新。

ところが、バグを発見してしまいました。
勝ち手順で進めていたのに、最後の最後に1手間違えて引分。
もうプレイアウトではなくツリーの勝敗が確定している状態で、間違えるはずがない。
勝敗確定時のフラグ設定がおかしいようです。

そこから色々見直しを始めたら、negaMax的な処理の扱いに完全に混乱して
しまいまして…。これだと思って修正すると、おかしくなってしまいます。
どこか根本的に勘違いしているみたいなので、しばし長考に入りますorz

642:535
16/10/31 00:37:25.82 KdjBytFw.net
なかなかいい感じのルーチンが書けた。
まだ結果に結びついてないけどこれはあと一捻りいれればかなりいい線行くんじゃないか?

643:535
16/10/31 21:35:59.05 KdjBytFw.net
おかしいな。
石の流れは良くなってるのになかなか勝利に結びつかない。

644:535
16/10/31 22:47:38.80 KdjBytFw.net
パラメータ微調整地獄w
機械学習に切り替えないと限界が…

645:535
16/11/01 21:33:50.00 pQxzEPLf.net
あかん。
完全にバランスを失った。
一から出直しだな。orz

646:名前は開発中のものです。
16/11/03 03:15:09.64 x7yDYWU2.net
ボードゲームのオリジナルオーダー制作
URLリンク(www.logygames.com)
簡単に本格自作ボードゲームが作れる時代到来!!
URLリンク(jellyjellycafe.com)
100円ショップでボードゲームを自作しよう
URLリンク(sites.google.com)
ノーアイデアでボードゲームを作ろう第1回「100円ショップで物を買う」
URLリンク(boardgamelove.com)
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
URLリンク(gigazine.net)

647:310
16/11/04 15:36:30.74 zGiY9OSz.net
長考の結果、もう一度作り直し(笑)していたら、混乱の原因がわかりまして。
勝敗の持ち方を逆にしたらすっきりしました。

あと、終盤の手順の前後で、あと3手粘れるのに1手で負けるという現象を調べた
結果、ツリー部で負けと判定している以上、何手先に負けるか関係ないというプロ
グラムになっていた事も判明。バグじゃありませんでした。とはいえ気持ちが悪いので、
なるべく長く粘るようにしてみました。

そこでわかったのは、Perfect Solverの数字は、42手21ターン目の引分から何ターン
前に勝負がつくのかを表していて、プラスは勝ち、マイナスは負けという事です。先手で
+1と出たら最善を尽くせば41手目の自分の着手で勝つという事のようです。
つまりスコアを勝敗決定ターンにしたmin-Maxで、速度考えるとDB化してるんでしょう。

で、MCTSですが、まあやはりモンテカルロなので間違えます。試しに10手目程度
の間違えた局面から、シミュレーションを続行してみたところ、億単位の探索(プレイ
アウトとしては10倍)で、間違えた手が本当は悪かった事に気づいた様子で、そこから
正しい答えに向かって行きました。なので、まあプログラムは間違っていない模様です(汗。

DAG対応とか、自殺手禁止プレイアウトとか、色々やった結果、選択手のばらつきが
減って、「たまたま正解手順を引く」事がなくなって、自信満々に間違えるようになっ
た印象です。それでも、時間をかけて探索を続けると、いつかは正しい答えにたどり着くと。

今となってはあまり意味が無いですが、せっかくなので、ここまで積み上げて来た
ノウハウで、今一度Solver作ってみようかなと。

648:535
16/11/04 23:52:18.01 lKhN7bKh.net
色々ぐちゃぐちゃやってたら計算時間がとてつもないことになってしまった。

649:310
16/11/06 13:49:29.22 Z4kqE5wB.net
Solver作りました。
PerfectSolverにならって評価値を、42手目から何手手前で勝敗がついたかにしました。
お蔭さまで、null window searchが使えるようになり、mtd(f)で高速化しました。
あと、初段のみ単純な並列して、残り28手で6秒強となりました。

そろそろオセロに戻ります。

650:535
16/11/06 17:53:47.27 B23WCzGo.net
終盤28手読み6秒とか凄い
こっちはというとそろそろαβ刈りを習得しなければ…

651:535
16/11/07 00:12:13.27 vL8wkeAF.net
αβできたっぽいです。
というかwikiの疑似コードを完コピしたらうごいたっぽい?という感じで
理解したとはいいがたいですが。

652:535
16/11/07 22:06:07.74 vL8wkeAF.net
え、もしかしてminmaxに比べてαβめちゃめちゃ速い?
なんか間違ってんのかな…

653:310
16/11/08 00:02:22.02 CUgV7Bvg.net
安心してください。めちゃ早いですよw

後ろ向き枝刈系のアルゴリズムはほとんどがαβを前提にしています。
自分の最初は擬似コードコピペしました。
すぐ忘れちゃいますが、1回は真剣に動作を追っておくと良いですよ。

654:535
16/11/08 22:35:11.27 BlAmLHY6.net
評価関数が致命的に狂ってる気がする。
手動で直すのは限界があるから機械学習したいがさてどうするか。

655:310
16/11/10 20:55:19.87 gpSCAC4W.net
オセロでUCTをしてます。コピペでちょいちょいと思っていたらパスの処理が面倒で、
思った以上に動作速度が落ちてしまいました。

その後、デバッグしてたらおかしな現象を発見。探索ツリーでプラスになるべき数字が
マイナスに。しかも1か所だけ。発生条件を絞り込めず、なんだかんだと数日間。

原因は整数のオーバーフローでした。設定時間におけるプレイアウト回数でのスコア合計
がちょうど境目にきて、本当に微妙にオーバーフローしていたので、スコアの正負がひっく
りかえったように見えていたのでした。

俺の時間を返せorz

終盤5手読みくらいならすぐにUCTのツリーが終局まで達して、完全読み同等の答えを
返してくれるのですが、10手だと結構時間がかかり、20手だと全く歯が立たない。
評価関数を使った中盤探索の置き換えに使えないかと想定しているのですが、やはり
簡単に精度は出ない感じです。

プレイアウトでありがちな手を優先的に着手するように、ヒューリスティックな評価関数を
用意して、プレイアウトの精度を高められるか試してみたいと思います。あと、スピード
アップもしないと・・・。

656:535
16/11/10 23:14:15.10 4tjjzH07.net
Zenは治勲と三番勝負か~
Zen勝ちそうw

657:535
16/11/13 00:19:43.02 otFLKKMJ.net
doubleの有効桁数が足りなくておかしくなってたorz
評価値に差をつけようとして極端にデカい数値を設定してたら
小さい数値が無視されてた

658:310
16/11/13 00:47:25.03 Be0ooFvL.net
DeepZenGo楽しみですね。
ポストアルファ碁の今となってはZenが2勝できなかったらちょっと悲しいかな。


こちらはオセロのモンテカルロツリー探索がほぼできました。
当初かなり速度ダウンしていたのですが、何とか改良できました。vectorが遅かった。
数か所工夫して、テストデータで正解を早く導けるようにしてみましたが、調整が面倒そう。

とりあえずネタ切れなので、次は探索済ツリーを再利用できるようにして、対戦できるよう
にする予定です。で、今一度終盤読み切りルーチンと、序盤の定石DBつけて完成としたい。

しかし、相変わらず評価値をどう計算したら良いのかわからない。
単純に、着手する手の平均スコアだと、探索の進み具合によってあなりブレてしまい
意味がある数字になりそうにない。アルファ碁はDCNNの評価値を使ってるのかなぁ。

659:310
16/11/13 20:49:23.63 Be0ooFvL.net
ちょっと疑念が湧いてきたので数か所工夫したところを全てコメントアウトしてみたところ
やらない方が遥かにマシという結論に(汗。下手な考え休むに至りでした。
全部外してしまうと一旦最善手から外れてまた戻ってくるような事もなくなり、探索時間が
長い方が良いと単純に言えるようになります。

また、評価値ですが、モンテカルロならやはり点差を考慮しない「勝率」であるべきでは
ないかと思い始めています。今は、「点差」を返しています。「勝率」で選ぶ手は、「もっと
良い手があった」となりますし、「点差」で選ぶ手は「欲張りすぎた」となりそうです。

探索済ツリーの再利用の仕組みができました。まだパスがらみのテストはしてませんが、
多分大丈夫でしょう。

ボード関連のクラスをかなり作り直してしまったので、終盤読み切りルーチンや序盤定石
処理を作り直さないといけません。というか、評価関数を持ってないので、終盤探索は
オーダリングの仕方を変えないといけません。

あと、人間側入力待ちの間も探索を継続できるようにしてみたいと思っています。
モンテカルロだと、いつでも停止したり再開できるので、ぜひとも導入したいものです。

660:310
16/11/16 01:01:14.01 2m1pjf8n.net
人間の入力待ちの時のバックグラウンド探索を実装しました。
並列処理はPPLを使ってるので、思いのほか簡単にできましたが、入力待ちのまま
放置されると、数時間でメモリーを食いつぶしてしまう事に気づきました。
パンクしそうになったらツリーをルートに近い順に削除するようにしましたが、メモリー
リークしてそうでちょっと怖いです。

コンピュータ同士で対戦させてみたところ、まあそれっぽくは打ちますが、序盤で定石
から外れてしまいます。終盤は結構正確に見えます。

評価値の件、独自ロジックを外したところ、それっぽい値を表示するようになりました。

661:310
16/11/16 09:03:26.60 uZWbEwsE.net
自分のつたないオセロ力では、モンテカルロが着手した手が良いのか悪いのか
わからないので、どうしようかと寝ながら考えました。

まず考えたのは、完全読み切りルーチンを作って、終盤に限っては正解着手も
探索してみる事。でも、最終的には終盤は完全読み切り使った方が、正確で早い
ので、そちらを使用。中盤や序盤の具合がわからない以上、ほぼ意味なし。

続いて、WZebraにある「解析機能」を実現できないかと考えました。中身はわからない
ので想像。使用して感動した経験あり。
「後ろから解析」なら、αβを後ろから回し、自分が着手した手より良い手が無ければ
βカット、あればそれで生じたスコアの増減を記録という形で、中盤のある程度のところ
までは、遡りつつ誤着手を検出できるんじゃないかなと。棋譜にある着手はこのロジック
で評価が定まっているので、探索を省く事ができます。評価関数を持っていないので、
遡れても30~35手目くらいまでかと思いますが、読み切りルーチンをいじれば作れ
そうなので、トライしてみようと思います。

誤着手率がわかっても、簡単に直らないのがモンテカルロですが…。

662:535
16/11/19 18:30:11.32 X8ZFdPyh.net
ん~Zen負けちゃった。
期待してたんだが。

663:310
16/11/19 20:47:46.55 F+e1LSRb.net
とりあえずWZebra相手に戦ってみたのですが、全滅しない程度に負けますw
評価値が全然違うというか、自分は有利なつもりで進んでいても、Zebra的には
+50とかになってます。40~50手目付近で末端までツリーを展開してようやく
気づくみたいな。そこまで行くと、ほぼ間違えなくなる(当たり前)のですが、序盤
中盤があまりに酷いので、定石ルーチンで助けられないレベルかなと。

そもそも評価値が間違いまくりで、自分のAIは少し有利くらいの勝率になっている
のに、zebraは既に+30とか+50とか。形を見ても、素人目にも全く不利な形に。
ランダム着手で勝率や平均スコア求めても意味が無いかも、という本質的な
課題に突き当たってしまいました。

ツリー依存度を上げようと閾値を下げてツリー展開しやすくすると、あっという間に
メモリが溢れてしまいますので非現実的。本来はucb1の計算が機能して、変な
ツリーに手を回さないのですが、むしろ変な手にロックオンしてしまいがち。
囲碁みたいに、1手の価値や、最終的な形が同じなら着手する順番関係ないよう
なゲームじゃないと厳しいのかなと思い始めています。

相手の入力待ちの時のバックグラウンド探索では、敢えて初手についてのみ全て
の手に均等に割り振って、ツリー展開を進めさせてみたのですが、これもやりすぎ
ると簡単にパンクしてしまうので、ほどほどにという感じです。
アンドゥ機能を消して、終わったツリーをバサバサ消す仕様に変更です。

というわけで、解析とか後回しして、強さを上げられないか検討です。
ヒューリスティックな手法で、プレイアウトをもう少し現実的に。同様にUCB1に多少
細工して、よさそうな手の割り当てを増やせないか検討してみます。といっても、
相手の着手可能位置の数を減らすような手を優先するくらいしか、アイデアはあり
ませんが。

664:310
16/11/20 16:54:24.84 4i7ILKOH.net
「相手の打てる箇所が少ない手を確率的に増やす」程度では全くダメでした。むむむ。

脳内では、プレイアウトの次の1手を決めるのにDCNNでみたいな…本末転倒な対策が
渦巻いてきています(汗。手元にある囲碁のモンテカルロ本(彩の解説、技術的な種本)
でも、自分の石の周辺のパターンを統計的に処理して着手確率を計算みたいな事をして
いまして。オセロでいうと評価関数みたいな事をしていたりします。

オセロは、着手する石の価値が重すぎるので、モンテカルロが向かないって当たり前の
結論ではあるのですが。それにしても、あまりに弱い。

というわけで、ダメ元でプレイアウト時に開放度で着手確率を変える方法を試してみつつ、
技術的勉強で、もう一度、きちんとツリー並列で並列化を実装してみようかなと思ってます。

665:535
16/11/20 21:28:29.17 gm8FgHLO.net
も~インテルさん早く1ThzのCPU出してよ~w

666:535
16/11/23 19:46:23.65 /Z9U4oFa.net
Zen負けちゃったか~
でも一勝しただけでもすごい。

667:310
16/11/23 23:37:07.28 wq9OFZ+n.net
うむぅ。アルファ碁があるから期待高いけど、互先で1勝したのは凄いよね。
まだ伸びしろありそうだから、次回に期待ですね。

こちらは、モンテカルロがあまりにダメダメで悩み中です。

煮詰まってしまったので、ツリー並列をきちんと実装したり、終盤探索作ったりしてました。
終盤探索は、ようやく>>460さん指摘の偶数理論を実装しました。どうやるのかなかなか
思いつかなかったけど、手を動かしだしたらわかるものですね。Zebraとかのソース見て
いないので、もっと良いやり方があるかも知れませんが。

668:535
16/11/25 20:21:12.84 udjtSdAy.net
終盤の打ち方はまあまあいいんだが序盤が致命的すぎる。
思考時間もめちゃめちゃ長いし。
あと強化学習やりたいけどアイディア湧いてこないなぁ。

669:535
16/11/26 14:07:56.90 3TEfCPcy.net
LV2が思考速くて強いからってLV2の棋譜大量に集めたら学習が偏りそう?

670:310
16/11/28 13:44:46.30 moEHPVOW.net
>>669
やってみないとわからないけど、棋譜は質が良くて偏らないってのが基本だからね。
間違えたら間違えたなりに、負けてくれる棋譜じゃないと、変な学習しちゃうかも。

この辺の兼ね合いが難しい。

ただ、スタートの棋譜をその辺にして、だんだん更新しつつ、強くしていくって方法も
あるかと思う。


こちらは、終盤探索に手こずっています。
AVX2命令をオペレーターオーバーロードして使っているのですが、グローバルなのが
気持ち悪くて、クラスに変更。ついでに見直しをしていたら、過去にどうしてもわからなくて
別の方法で逃げてしまったバグをようやく解消。速度には大した影響ないですが。

一番の問題は、評価関数を持っていないので、MPCが使えない事。MPCのスレッショルド
を広げながら置換表使って、moveorderを最適化していたので。他の方法で速度アップを
考えないといけない。逃げてを考えると、結局、NNなりなんなりで別の評価関数なり、次の
1手ヒューリスティックが欲しくなります。もともとNN方面に行ったのは、そこが目的だった
事を思い出しました(汗

モンテカルロは、プレイアウトを疑っているので、いずれきちっとやり直してみます。

671:535
16/11/28 22:46:28.36 nf8GSvVi.net
NN興味ありますねぇ。
Zenチームの人とかがわかりやすい解説本書いてくれないかなぁ。

672:535
16/12/02 21:41:56.73 Vv9WnV3F.net
モンテカルロはやはりプレイアウトの質がカギか?
軽くて良いヒューリスティックが欲しいところだ。

673:535
16/12/02 22:02:53.36 Vv9WnV3F.net
モンテカルロは良い枝をカットしないこともかなり重要とみた。

674:310
16/12/04 20:20:17.67 E6FCgpFL.net
うーん。モンテカルロはFFOなんかで残り20手くらいから戦うと、結構まともな着手を
するんだけど、10~30手目付近がわざとじゃないかというくらい悪い手ばかり選択する。
残り10手くらいまで行けば完璧。

序盤は次の1手が多すぎるのと、プレイアウトで回す回数が単純に多いので、ツリー部が
なかなか深くならないし、あまり簡単に深くするとすぐにメモリーオーバーフローしちゃうし
で難しい。

>>673
UCTではカットはしません。単純にプレイアウトの割り当ての順番がなかなか回ってこなく
なるだけです。良い手に優先的に割り当てさせるためには、やはりプレイアウトで良い手は
良いと、悪い手は悪いと評価できなきゃならんわけで。それが難しいからモンテカルロだと
言う矛盾。

まあ、オセロの場合は、伝家の宝刀評価関数があるので、プレイアウトを20手くらいで
打ち切って、評価値を返すとか…MPCみたいな事をして無駄な着手を回避させるか…
と、本末転倒な妄想をしてます(汗。良くなる点は、時間管理が易しくなるくらいかな(涙。

675:310
16/12/06 00:37:18.95 zUbz1knV.net
モンテカルロが弱い理由を探ってます。

WZebraと対戦させると、一番顕著なのは、モンテカルロは辺に着手したがり、その結果
WZebraに内側に潜りこまれて選択肢が減っているという事です。流石に×とかCには
簡単には打ちませんが、序盤からあっさり中辺に出て行き、更にあっさり辺に打ちます。

相手もランダムに着手したとすると、辺の石は1方向からしか返せない(内側は4方向)
ので、プレイアウトでは残りやすくなると言う仮説を立ててみました。つまり全部で28石
ある辺の攻防が相対的に下手くそになるため、プレイアウトの結果が楽観的になりすぎ
ているのではないかと言う事です。

残り20手切ってくると、ツリー展開できているので、min-Max的に攻防できるけど、それ
より前の段階ではプレイアウトで、相手のミスを咎めるような手を打たないといけないと
言う事かなと思います。

これをどう次の1手の確率分布に表現するかですね。

676:310
16/12/11 01:06:32.29 8cq3+Gjk.net
なんか袋小路に入ってます(汗

プレイアウトの改良は速度低下との戦いになり、効果が出ません。
結局、とにかく無駄をそぎ落とし、単純化してプレイアウト回数を稼いで、なおかつ
ツリー展開の閾値を下げて、ツリーに頼る形になりました。

が、ここでメモリーパンクとの戦いが始まります(涙
中盤の分岐が多い局面だと、あっという間にツリー部で8ギガくらい使ってしまいます。
更に処理を単純化してメモリー使用量削減に走る事に。

結局、40手目以後なら使えるけど、それ以前ではあまり精度が期待できないという、
当初やりたかった、少しマシな序盤・中盤探索という目論見は崩れてしまいました。

評価関数があるんだったらαβの方がマシという当たり前の結論に傾きつつあります(汗

677:310
16/12/11 23:57:52.07 8cq3+Gjk.net
たった一晩で楽観してきました。

今までsoftmaxで確率分布を変えていましたが、あまり大きな差はついていないようだった
ので、この際、思いっきり割り切ってみました。1位に70%、2位に25%、残り5%で他の
手に均等割り。イメージとしては1σ、2σ、その他って感じです。ヒューリスティックは
αβのmoveorderのものを使用。

もちろんzebraにはぼろ負けですが、今までと違うのは、相手を囲んで着手可能位置を
減らしてしまう事が無くなりました。ちょっとした手ごたえを感じています。これをスタート
に、ヒューリスティックに終盤変化を組み込んだり、序盤は開放度にしてみたりして検証
しようかと思っています。プレイアウトの精度があがったら、無駄にツリー展開しなくて
済むので、メモリーにも優しくなれるかも。

また、敗勢での発狂モードや、勝勢での手抜きモードの原因は、勝敗が明らかになり、
手毎の勝率の差がなくなる事が原因です。プレイアウト回数が多いからか、評価値は
かなりデジタルに変化するので、25%、75%などを境目に、石差評価に変更すると、
ある程度回避できるんじゃないかと思います。

678:310
16/12/19 00:57:35.60 V27xPT8O.net
地味に色々改良。素UCTに色々追加してます。
・uctの終盤にsolverを組み込んだ
・手の割り振りに全手均等な部分を作って読み抜けの可能性を減らした
の2点が主な追加点です

当初想定していたより結構強くなったと思います。

AI黒番30秒探索。zebra思考中にもMAX30秒探索で、zebraに対しては20石強負け
くらい。序盤1回間違えて、中盤ジワジワ差が広がって、40手前後で読み切りできず
に間違う感じ。序盤は定石で回避できると思いますが、中盤の間違いは2番手の手を
選んでしまいます。修正は難しい感じ。終盤はチューニングか、探索時間延長で対応
できないか検討。

テストで作った20手目で黒+12(zebra評価値)程度の盤面からは、zebraが間違える
のか、終盤に入るところまで、かなり押してまして、読み切りミスで22石差→16石差と
ぬるい手を打ちましたが、勝ち切る事ができるようになりました。

ここから先は、レーティングが欲しいなぁ。
オセロでAI使用OKなところないですかね?

679:310
16/12/22 01:29:32.37 4YVdXlZ1.net
地味に色々改良した結果、あらかたボツにしてます(汗

発狂モード対策でスコア最大化を図ろうとしていましたが、極端なスコアが悪さしている
ようなので、結局勝率のみに限定しました。この時点で終盤はsolver任せに方針転換。

で、勝敗のみにした事で、solverの探索範囲を+-1のシングルウィンドウにできて
スピードアップしたのでプレイアウトのラスト7手くらいでも使用する事にしました。
プレイアウトでは、moveorder順の下位はバッサリカットしました。酷い手が混入する
とスコアが散らかるので。

uctのif分ネストがスパゲッティ化したので、処理順を大幅に見直したら、時々落ちるように
なってしまった。並列化が原因かそれともshared_ptrの使い方が悪いのか、散々調べた
結果、ちゃんと全体をリビルドすれば回避できる事が判明。俺の時間を返せorz

テストで使用している引分手順30手目から開始すると、たいていは負けてしまうけど、
希にzebraが認識していない勝利手順を見つけて勝つようになった。乱数の具合なので
再現性は低いけど、zebraの評価値にも間違いがある事を実感した。

ここのところ30手目~40手目をターゲットに改善していたけど、それなりに成果が出た。
40手目以後はsolverを使用し、対局開始は定石DBを20手分くらい用意したら、まあまあ
なAIになるかなぁと思い始めました。ただ、1手30秒考えるのは長すぎるなぁ。

あと、正しい手順を見つけ勝率も上回って来ているのに、探索時間が足りずにプレイアウト
回数で負けて最善手が選ばれないケースが散見されます。ものの本だと、そういう時は
探索時間を延長するとか書かれていますので、対応してみようかと思っています。

というわけで、なんか行けそうな気がしてきた。

680:310
16/12/27 01:58:53.16 lSRXuhfg.net
uctの探索部分がある程度できたので、とりあえずDOS窓ベースでゲームとして成り立つ
ようにしました。edax-pvbook_2009.wtbから作った40手分の定石DBをつけて、終盤探索
は40手目からsolverで。multi probe cutできないので、FFO#40で1.3秒程度の性能です。
その他諸々。探索時間延長とか。タイマーを作り直してプログレスバーつけたり。

WZebraの20手読み、定石DB変化大相手に、まれに勝ちます。直接対決はまだして
ませんが、以前自分が作ったmin-Max版よりちょっと弱いくらいかなという感触です。
モンテカルロは乱数がらみで、ナチュラルに変化しちゃうので、5~10手に1回程度は
ミスをしちゃう感じです。

プレイアウトはもう少し詰められそうだけど、まあこの辺が潮時かなぁ。

次は何しようかな。

681:名前は開発中のものです。
16/12/27 06:12:54.86 A0w16iJG.net
Vectorとかで配布しては?

682:310
16/12/28 10:02:51.11 8e16q4EG.net
vectorは考えてないですが、どこかでソース晒しても良いかなと思っています。
しばし検討。

なおUCT探索の探索時間は30秒にしてます。微妙な時は10秒づつ探索延長します。
また、人間が長考すると、その分だけバックグラウンドで探索が進んで強くなります。
気が長い人におすすめです。

683:名前は開発中のものです。
16/12/29 00:29:19.19 T+iok27x.net
GGSってまだあるんだっけか
トッププログラムの開発者はみんなあそこで対戦しつつ改良してる

684:310
16/12/30 02:11:45.43 iZpfxqhq.net
>>683
GGS探したけど見つかりません。
オセロのAI自体、行き着くところまで行っちゃってるからなぁ。

コメントの整備をしていたら、細かいところが気になって、あちこち手を入れています。
手を入れながら、UCTの探索結果があるので、それでmoveorderすれば良い事に気が
つきまして。SOLVERが少し早くなったので、終盤探索は38手に格上げ。

しかし、テストプレイしていたら、SOLVERのバグ発見。終局まで打ち続けると、50手目
近辺で間違えます。並列探索部分で、negaScout的に再探索かかったあたりにバグが
ありそうという所まで絞り込みましたが、ちょっと厄介な感じ。

ソース晒す用に昔使ってたDTIのホームページを使えないか調べたら、サービスごと
終了してました(汗。

久々にオセロAIで検索したら、MLPでAIのテストをしている人がいました。評価関数では
なく、次の1手で使っているようです。比較的軽い構成なので、気が向いたらもう一度、
トライしてみようかと思います。

685:310
16/12/30 20:08:38.43 iZpfxqhq.net
バグ直りました。数日前に速度アップできると思いつきで直したところでした。
直ったは良いけど、何故バグるのか理解できないorz

686:名前は開発中のものです。
17/01/01 01:33:49.09 AXNNcWXn.net
個人的にはディープラーニングやって欲しい

687:310
17/01/02 09:01:41.61 YMPtqKka.net
いま、Bloogerにサイトを作ってやっつけで解説文を作ってます。
あらかたできたら公開します。

が、解説していると細かいバグを見つけて、直して確認が必要になるという…。

やっぱ次はディープラーニングですよね。Eigen使ったMLPで次の1手をやってみます。
DCNNももう一度トライしたいと思っていますが、貧弱なパソコン環境ではどうにもならない
かも知れない。

688:535
17/01/06 21:06:02.45 /dmWmgCn.net
ネット碁でアルファ碁が無双してるみたいですね。
60連勝?とか凄すぎw

689:310
17/01/09 14:10:27.74 kUxHCmxW.net
60連勝の相手が、マジトップ棋士だってんだから、あきれるしかないですね(笑

解説書きながらソース見てたら、色々直したくなってしまい、泥沼化しています(汗
強くなったと思ったら弱くなっていたというのの繰り返しです。

690:535
17/01/15 01:15:01.84 FqCBSr/V.net
TensorFlowで学ぶディープラーニング入門って本読んでます。
かなり易しく書こうとしてるのが伝わってくる本なんですがそれでも難しい。orz

691:310
17/01/16 13:21:19.22 Cfoi8GBB.net
カーネルサイズとかチャンネルとかフィルターのあたりですか?


僕の方は・・・モンテカルロだから間違えると思って、思考時間を増やしたり、末端ノードで
1回づつじゃなくて、100回づつプレイアウトするようにしたりして、プレイアウト回数を稼い
だところ、「同じところで同じように安定的に間違える」ようになってしまいまして(汗。

プレイアウトは適当でも、とにかくツリー展開させるか、それともプレイアウトである程度
正確な勝率を得るけど、ツリー展開は減らさないように努力するのか。その辺で、また
悩み始めてしまいまして。edaxの引き分けBOOKから何か情報が取れないかと頑張って
ますが・・・。そろそろ飽きてきちゃったんだよなぁ。

692:535
17/01/16 21:00:44.96 UThQer2a.net
専門用語はよくわかりませんが、付属のサンプルコードをなんとなく動かしてます。
行列と誤差関数を定義してやればtensorflowが勝手に最適化してくれるとか。

成果でないとめげてきますよね。
ここらで一発アルファ碁級のブレークスルーが欲しいですねw

693:310
17/01/16 22:06:12.04 cVXIBPCK.net
あれはやっぱマシンパワーが・・・

一旦計算できちゃってもそれなりの重さなんだけど、学習しようと思うと重さにめげます。
というか、やる気すら起きないレベルorz


とりあえず、実際の最善手順が、ヒューリスティックの何番目かを統計的に処理して、
プレイアウト関数の手のバラつきを表現しようかと思って、プログラム作ってEXCELで
集計して、それなりに計算が簡素にできる形に変形してなんてやりましたが、やった
所で、何番目を選ぶかはランダムではなくて理由があっての事なんだよなぁと…

ちっとマシなヒューリスティックとか言い出すと…できない事をしようとしている事に深く
思い至るわけで。

694:310
17/01/17 00:25:27.65 SLwZ7IwS.net
統計処理して作ったプレイアウト関数も結局ダメでしたorz
最後はやっぱりBOOK頼みになっちゃいます。

もう一回NNに行って次の1手計算させてみるべかな。

695:535
17/01/17 21:19:41.12 wCDEMY6U.net
モンテカルロ木探索ってわざと悪い手打ってる?ていうぐらい期待外れの手を打ちますねw
プレイアウトの質改善が必須か…

696:310
17/01/17 22:04:13.23 SLwZ7IwS.net
例えば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
17/01/21 14:40:41.23 7GkfgTKT.net
プログラム作るなら単体テストは必須ですね…
後から後からバグが溢れてくる…

698:535
17/01/21 15:30:15.75 7GkfgTKT.net
机上デバッグはいやだお…T△T
辛すぎる…

699:310
17/01/22 23:15:41.71 7cgxubHE.net
思いっきり同感だけど、結局サボるというorz

実はモンテカルロやってるから見なかった事にしているけど、Solverにバグがあります。
発生する条件も薄々わかっています。いつの間にバグを仕込んだのか。

さて、プレイアウトのヒューリスティックですが、縦横斜めのラインで、その形が現れた
回数、着手された回数のデータベースを作って、プレイアウトの次の1手の時に、それ
ぞれの確率を縦横斜めで集計して、その高い順にsoftmaxで確率分布にして、着手を
選択させる形にしました。

結果は・・・。ヒューリスティックの次の1手としての精度はいまいちですが、それでも
上位3~4位くらいには最善手が入ってる感じになります。でも、評価値が極端に出過ぎ
ている感じで、ダメダメな感じになりました。確率のバラつきが小さいように感じたので、
ちょっと修正してみましたがダメなので、思い切って累積確率50%でカットしてみました。
この辺で大体3~4位までの着手になります。少しマシになったけど、やはりダメ。

softmaxの計算が重いため、プレイアウト回数が1/7くらいに減ってしまうんだけど、それを
補う精度が出ていない感じです。楽ちんなのでunordered_map使ってますが、もっと速度を
出そうと思うんなら、他の方法を考えた方が良いかも。

簡潔なプレイアウトで秒間プレイアウト数を稼いで、枝を伸ばす方向に逃げたい気持ちを
ぐっと抑えつつ、引き続いてニューラルネット系で次の1手を求めてみたいと思います。
更にスピード低下するので、いま以上に精度が出ないと・・・。

700:535
17/01/23 23:10:08.18 ii9ofJgq.net
黒番限定ですがLV2に勝ち越せる?というところまで来ました。
何をやっているかというとLV2とLV3を対戦させた棋譜を大量に集めて、
LV2に勝てる手順のDBを作ってナゾルということをやっていますw
まあほとんどチートみたいなものですが、棋譜を集めれば集めるほど
勝てるようになるのでなかなか面白いです。

白番だとLV2が盤の中央からゲームを始めないのでうまくいかなかったりしますw

701:名前は開発中のものです。
17/01/23 23:46:45.10 ii9ofJgq.net
勝利手順のDBからディープラーニングで評価関数を抽出することを考えていますが
今のところ全くうまくいく気配がありませんT△T

702:310
17/01/26 21:23:21.53 foYEIc8+.net
>>700
Buroさんは逐次的にBOOK学習やってました。
僕は論文が理解しきれなかったのと、それやると特定AI相手だけに強いAIが作れて
しまうので禁じ手にしちゃいましたが、オセロというゲームの底の浅さからすると、
それが正解かも知れない(汗

デバッグ兼ねてZebraと対戦していたら、ZebraのBOOKが強化されていくのが実感
できてしまいました。

703:310
17/01/26 21:32:27.07 foYEIc8+.net
さて、本日は非常にショックな事が判明しました。

次の1手を求めるNNを作って、大体できたのでAIに組み込んでました。
NNは以前にEigenで作ったものの流用改造。とりあえず学習結果が確認できる
ところまでやったら、コンパイルが通らない。C2059というエラー。前にも何回か
出ていて、ライブラリの順番いじると直るので放置していた奴。何かの名前が
組み込んだライブラリ間で衝突していると起きるらしい。それが途中からどうにも
直らなくなってしまった。

で、ようやく重い腰をあげて何が衝突しているのか調べたら、A1とかC1とかの
着手位置を表す#defineの定義が、Eigenの内部の型か何かの定義と被ってる。
こちらは#defineなのでnamespaceで回避できない。

楽に回避できる方法を色々考えたあげく、結局、C++良く知らなくてCとしてプログラム
書いていた頃から引きずって#defineを使っているのが悪いのだと気が付いて、
クラスとenumで対処するという、全面作り替えにする事にしてしまいました。

というわけで、修正に3日くらいかかりそうですorz

704:名前は開発中のものです。
17/01/26 21:36:49.48 NsrLS1+v.net


705:535
17/01/26 21:43:44.99 NsrLS1+v.net
>特定AI相手だけに強いAIが作れて
ディープラーニングが成功すれば汎用度もちっとは違うのかもですが。

706:535
17/01/26 21:54:02.30 NsrLS1+v.net
強い詰みルーチンが欲しいですねぇ。
DBでほぼ勝ちという局面にもっていってもポロッと落とすことが結構ある。

707:310
17/01/26 21:56:01.75 foYEIc8+.net
あ、もしかしてenumってunsigned __int64が使えないのか・・・

708:535
17/01/26 23:23:42.26 NsrLS1+v.net
DBは勝率で手を選ぶよりも累計勝利数で手を選んだほうが良いっぽい。
そのほうが勝利再現率が上がるっぽい。

709:535
17/01/29 01:07:10.63 uZb/TXFd.net
負けた手順に対して手動でDBを修正するという汎用性がみじんもない作業を始めましたw
なにかドカンと強くなる方法ないかなぁ

710:310
17/01/29 13:11:46.36 rGbRSmBn.net
enumで__int64使えますね。というか、どこかのバージョンから使えるようになってましたね。
何か裏ワザ的な使い方考え付かないかと思って試しましたが結局ダメで、前から気になって
いた箇所をクラス化しだしたら大規模改造になってしまいました。

オブジェクト指向を忠実に実行しようとすると、結局何度もライブラリ作り直す羽目になると
いう本末転倒な状態(汗


色々ドタバタしていたので、オセロ共通のクラスのみ修正完了。ロジック部分はこれから。

711:535
17/01/30 23:07:35.87 nIJrclSx.net
ファイル出力が思いのほか重い。
知識では知ってたけど今回、実感しました。
DB作るときは棋譜をまとめて読み込んで書きこみは1回だけとか工夫しないとだめですな。

712:310
17/01/31 01:06:15.90 tF0OU/RM.net
>>709
ドカンとは強くならないけど、やっている事から推測すると遺伝的アルゴリズムが
合ってそうな気がします。茨の道ですが(汗

>>711
いまどきはメモリが大きいので、全部読み込んで一括処理とか、思いのほか可能ですね。

713:310
17/01/31 01:17:50.59 tF0OU/RM.net
困った。3層MLPで次の1手を、
URLリンク(qiita.com)
を参考にして求めている(若干やり方が違う)のだけど、思ったように学習してくれない。

NNの計算どっかおかしい気がしてきたorz

714:310
17/02/01 15:57:52.90 DrzIg7bz.net
ひょんな事から学習できました。デバッグ用に学習データを減らしてテストをしようとしたら
学習できてしまいまして。件数を増やすとダメになる模様。

これは仮説ですが、多種多様な棋譜を学習させると、ネットワークの自由度が不足して、
ウェイト更新が相互に打ち消し合った結果、ウエイトがゼロ(勾配消失)に陥ってしまうと。
学習に失敗した時は、大半のテストの結果が、全て同じ確率(softmaxのため)となってい
ます。中身は見ていませんが、softmax関数を通す前はオールゼロとなっている事が十分
に想像できます。

今から思うと、NNで評価関数を作ろうとして失敗していた時も、同じ状態だったのかなと。


学習データを減らすと精度が落ちますので、ネットワークをより複雑かつ大規模にしない
といけないのかなぁと。結局、同じ問題(ネットワークを大規模化しなきゃいけないけど、
自前のパソコンでは計算が厳しい上に、結果を使用する方もタイムクリティカルなので
あまりややこしくしたくない)の周りをグルグルしはじめてしまいました(汗

715:535
17/02/02 23:55:47.04 JZtX1mUx.net
まとめて読むようにしたら3日かかったDB作成が数分で終了しましたw
しかしDBがかなり肥大化してしまいました。
読み込みに5秒くらいかかる。
しかもこの手法だとLV2には勝てるけどLV3には勝てないし。
LV2はパターン少ないからDBで勝利手順なぞれるけどLV3はパターンが多くてカバーできない(多分)。
そろそろ別の手を考えなければ。

716:535
17/02/03 20:14:00.97 jkxdJ711.net
DBを使ってモンテカルロ木探索の探索結果を永続的に蓄積するというのをちょっと思案中。
計算すればするほどDBが洗練されていく感じで。

717:310
17/02/03 20:39:47.64 dv6j41bl.net
>>716
同じ事妄想したけど、それなら後方枝刈付のmin-Maxの探索結果をひたすら
ため込んでいく方が容量的にも速度的にも有利で、それができないからモンテ
カルロだって事に思いいたりました(汗

min-Maxなら、いらない枝カットできるかと思いきや、相手がそこに打っちゃった
時の事を考えたら捨てられない事にも気づきました(汗汗

で、適当なところだけ保存して、残りは別途探索・・・って、これ定石DBやん!

というオチでした。

718:名前は開発中のものです。
17/02/03 20:45:51.93 jkxdJ711.net
ボツ案でしたか。
でもまあ、とりあえずDBを充実させる方向でやってみます。
他に案がないので。
ディープラーニングがうまくいけばなぁ。

719:535
17/02/03 20:49:10.94 jkxdJ711.net
今のところ黒番対LV2は2勝一敗ペースてな感じです。
もっと勝てるかと思ったけどそうでもないですね。

720:310
17/02/03 20:58:39.46 dv6j41bl.net
こちとらディープラーニングで完全にドツボってますorz

721:535
17/02/04 19:33:24.33 neMma6zi.net
ディープラーニングは盤面情報だけじゃなくてこちらでなにがしかの特徴量を計算してやって
その数値も食わせたほうがすこしはましになるんだろうか。

722:310
17/02/04 20:57:26.78 ycMSfQXf.net
オセロではBuroさんの評価関数と同じ特徴を入力にしたMLPで評価関数を作った
オセロプログラムがあります。vsOthaというソフトです。

今回はディープなので、できれば特徴量は自動抽出してもらいたいものではあります。
一応、黒白の盤面情報の他、着手可能位置は与えています。

と、ここまで書いて、着手可能位置を求めるように学習させられるのか、ふと気になった。
何らかの事前学習に使えそうな気がする。

やらずに悶々としているだけなのですが、DCNNの四角い窓ではオセロの特徴はうまく
抽出できないのではないかと思っていますが、他に方法が思いつかないのが悲しい。

723:名前は開発中のものです。
17/02/05 08:03:16.57 36jlTAsU.net
そうかそうか

724:535
17/02/07 20:48:43.68 qiXxRrUf.net
機械学習じゃだめだ、手書き評価関数しかない…
しばらくするといや、手書き評価関数じゃやっぱりだめだ、機械学習だ…
の無限ループw

725:310
17/02/08 21:46:39.89 GrcF81sn.net
昔mnistでオートエンコーダのテストした時のように、学習内容(ウェイト)をBMPにして
可視化してました。テストに時間がかかるので、色々すったもんだバグとりに時間が
かかってましたが、ようやくなんとか表示できるようになりました。で、とりあえず想定より
少な目の隠れ層4096個でテスト開始。

勾配ノイズ(焼きなまし)の設定値もでかすぎたので、設定値を自動計算するようにしたり。
NN復活当初うまく動かなかった原因がこれでした。

で、まだ学習途中なのですが、ウェイトデータ見ると192個(=64×3)毎に1ビットづつ
ずれるパターンに収れんしていっています。192といえば入力データのサイズで、
横に64個づつ並べたビットマップ画像に、まるで光子の回析実験のような縦じまが(汗
そんな周期性が生まれるはずがないので、どこかにバグがあるんじゃないかと。
表示するプログラムのバグかも知れないけど、1エポックに3時間かかるので、止めて
デバッグに入るか、それとも続行するかで悶々中…。

どっちにしても時間がかかるので、裏でDCNNをもう一度コーディング開始。
あまりにネストが深いのでミニバッチは一旦放棄してSGDで。
GoogleのTensorFlowがテンソルな意味が良くわかった。
DCNNだと元データが2次元で、更にチャンネルがある行列では次元が足りないorz

今最大の懸案は、とりあえず隠れ層4096でオートエンコーダの事前 学習しているけど、
それが終わり全体の学習にいって上手く行かなかった時、中間層を増やして再トライ
するか、それともDCNNに行ってしまうか。

726:310
17/02/08 21:47:47.17 GrcF81sn.net
>>724
そこは…絶対的に機械学習である!という信念が必要だと思います(汗

727:535
17/02/09 22:03:30.31 qkkjChao.net
>>726
そうですかw
まあそんな気もしますが、でも終盤の積みルーチンだけなら手書きでイケそうな気もするんですよねぇ
そこだけでもなんとかできれば…

728:535
17/02/10 19:40:14.89 M6OFVkZO.net
黒番だとDBのせいで対LV1よりも対LV2のほうが勝率いいみたいw
めちゃくちゃ歪んだAIになってしまったw。

729:310
17/02/10 23:52:07.84 HUcinQI4.net
3日かけて学習したオートエンコーダ型はやっぱりダメでした。
可能性すら見えなかった。

というわけで、開き直ってDCNN開始。
前回はオセロ専用で展開形を作ってましたが、それではmnistなどでテストできない
ので、max_poolingも含めて、本格的にちゃんとしたものを作ってみました。
とはいえ、まだ畳み込み層の誤差逆伝播の解釈が正しいか、自信はありません。
また、テストで動かしたところ、なんかすごく重い印象です。

ちゃんと動くのかなぁ。

730:名前は開発中のものです。
17/02/11 10:06:04.43 CnQo/DsP.net
GGSはmimosaというソフトを使うと入れますよ

731:310
17/02/13 22:45:03.11 d/p+PbrG.net
>>730
そのmimosaのサイトがリンク切れで見つからないのです。

732:310
17/02/14 20:21:59.60 lpq90WbI.net
自作ライブラリにDCNNのレイヤーを書いたのですが、あまりの計算時間にデバッグ中に
めげて、試しにtiny_dnnというC++専用のNNライブラリを入れてみましたところ、自作の
10倍以上の速度で・・・こちらに乗り換えです。

で、tiny_dnnでmnistやって感度をつかんだところで、オセロの盤面を変換する処理を
書いて、小手調べに簡単なネットワークで動かそうとしてみたところ・・・盤面データの
変換の段階でメモリーが溢れて盛大にスワップ開始(^^;

5000,000盤面×100マス(Padding含む)×4チャンネル×4バイト(float)でデータだけで
8Gbytes。自分のパソコンのメモリーは8Gで、空いているメモリーは5Gちょいとメモリー
不足が判明しました。

いまどきのパソコンはメモリーでかいから一括でも大丈夫とか言って、このざまです(笑)。

tiny_dnnは全データ一括で渡して指定エポック回してくれる仕組みなのですが、仕方ない
ので、入力データを分割して、自分でループ回します。

α碁のハード環境がうらやましいorz

733:310
17/02/15 23:06:48.81 DozmM7Z3.net
色々細かく改造。やっぱライブラリがあると気が楽です(汗

簡単なネットワークの初期の学習の具合では正答率50%くらいが上限な印象だったので、
ネットワークを複雑にしてみました。で、1エポック8時間以上かなぁ。

もっとハードを・・・って真剣に思いますorz

734:名前は開発中のものです。
17/02/17 23:21:12.85 ZDoCs64T.net
AMDが今度発売するcpuが結構いいかもしれない

735:310
17/02/19 20:31:51.68 PM1ZzNLK.net
DCNNで学習させてるのですが、あまりに時間がかかるので、裏でもう一度
アルファ碁の論文を。日本語解説ページがいくつかできていて助かります。

で、読んでいたら、ロールアウトポリシーなる線形Softmaxでプレイアウトの
手を選択していると・・・。つまりはオセロ評価関数のような特徴を渡して、線形
回帰の代わりに出力をSoftmaxで確率分布にしたものです。
ロールアウトポリシーは棋譜との一致率が25%程度だけど、計算が圧倒的
に速く、このばらけ具合がちょうど良いとの事。

むむむ。アルファ碁はプレイアウトの手の選択にDCNN使ってないのねorz

日本語解説のおかげで、MCTS部の構造もようやくわかった。
いくらマシンが早くても無理だろと思っていた計算も、これなら何とかなりそう
レベルの構造に落とし込まれていて、納得しました。

でも、実はまだインプットに何を食わせているのかが、よくわからない(汗

736:535
17/02/19 22:19:16.15 FX6EUVR+.net
ついにアルファ碁論文まで…
英語かつ有料記事ということで私は手を出せずにいましたが日本語サイトもあるんですか。
ちょっとググってみるか…

737:310
17/02/20 20:05:00.30 L40mCRWI.net
論文自体はだいぶ前にダウンロードしてたんですが(汗
MCTSやらない段階では、やはり理解は難しかったと思います。
DCNN部分の投入データあたりは囲碁の知識が必要だったりしますので、
まだよくわからない点が多いです。

で、MCTS的な視点から眺めると、巷の解説とは違うところにフォーカスが
あたったりします。強化学習使ったRL PolicyはValue netの事前学習で
使っていますが、プレイアウトの手の選択では線形Softmax、ノードの分岐
では教師付学習のものを使用しているなど、工夫が見られまして。オセロ
は既に評価関数があるので、無理やりDCNNしなくても応用が効くのでは
ないかと思ったりします。

とはいえ、今学習中の奴は、学習終わるまで1ヶ月くらいかかりそうではあり
ますが、どこまで手の一致率が高められるか、見てみたい気もしています。

738:310
17/02/20 20:09:54.18 L40mCRWI.net
追記。なんか格好良く書きすぎですね。

ちょうど今MCTSで悩んでいる箇所に見事な回答を与えている点に感動。
日本語で読めたので、そこに速攻で気づく事ができたという事で。

とはいえ、アルファ碁の線形SoftmaxによるRollout関数の入力データは、
囲碁の特性がわからない事から、意味不明な事もまだあり、いずれにして
もそのままでは使え無さそうで、オセロに合わせて別途考えるしかなさそうです。

739:535
17/02/23 20:58:02.50 ONUfwXLw.net
連続対戦してると突然落ちるバグがあるっぽいが意図的に再現できない。
どうデバッグすりゃいいんだ。orz.

740:名前は開発中のものです。
17/02/23 23:03:49.03 ONUfwXLw.net
再現した!
けど一回再現させんのに1時間かかるw

741:535
17/02/24 21:40:56.21 sIjNtQpy.net
コアダンプの吐かせ方がわからん。T△T
デバッグオプション付けてulimit -c unlimitedだけじゃだめなんか。
ちな環境はcygwin。

742:名前は開発中のものです。
17/02/24 21:43:59.65 P/wI/gFl.net
age

743:535
17/02/26 00:05:27.56 TbeyqTpr.net
やっと落ちてる場所見つかった。
ぬるぽだった

744:535
17/02/26 23:30:45.62 TbeyqTpr.net
特徴量とか便利すぎる言葉考えたやつ誰だよ。
いつでも特徴量が効率よく計算できるとは限らんだろうが。
マジムカつく。

745:310
17/02/27 01:19:56.03 kLJ7ziJk.net
全く同感orz

746:535
17/02/28 21:58:57.62 +JAecqpe.net
ファイルに2Gの壁とかあんの?
2G以上のデータはどうやって受け渡せばいいんだ。

747:名前は開発中のものです。
17/03/01 12:15:45.60 jElZYckW.net
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
URLリンク(labaq.com)
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
URLリンク(bodoge.hoobby.net)
QRコード・クトゥルフ神話・24世紀などユニークすぎるデザインてんこ盛りのサイコロ「Dice Empire」レビュー
URLリンク(gigazine.net)
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
URLリンク(bodoge.hoobby.net)
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
URLリンク(gigazine.net)
実際のところ、自作ボードゲームってどれぐらい売れるもんなの?
URLリンク(roy.hatenablog.com)
ゲームマーケット2016春にて初参加サークルさんに作成数アンケートをとってきました
URLリンク(hidarigray.blog35.fc2.com)
カフェも急増 ボードゲームにアラサーがハマる理由
URLリンク(style.nikkei.com)
ボードゲームのオリジナルオーダー制作
URLリンク(www.logygames.com)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch