431 views
74個のモデルの総当たり対戦
現在までに、超パラメータを変えて学習させた全 74個のモデルがある。
どれもランダム指し手の相手に対して勝率 75%以上の猛者(?)たちだ。
どれが一番強いんだろう?
と、ふと気になったので、総当たりで対戦させてみることにした。
対戦ルール
ε=0とする。
すなわち、推論時の探索率を 0 にする。
探索率が 0ということは、Q学習で得られた Neural Networkのパラメータを使って対戦し続けるので、
「状態 → 行動 → 報酬」のロジックにランダム性が入る余地は0
であり、1000回対戦しても 1000回同じ結果になる。
つまり、ε > 0 に設定してランダム性を入れない限り、1000勝0敗 or 0勝1000敗になる。
絶対に 738勝262敗とかにはならない。
対戦結果
出場者数 74人の総当たりなので、
組合せ、すなわち 試合数 = 74 x 73 / 2 = 2701試合
いったい何時間かかるんだろうか・・・
と心配していたが、GeForce RTX 5070ti のパワーを使えば、たったの 1分で全 2701試合が完了した。
恐るべしGPU
星取表
全試合の結果をプログラムで CSVファイル出力させ、それを Excel上で色付けしてみた。
全 2701試合の星取表は、大きすぎて全体を見渡せない・・・
いやぁ、これを 1分でやってしまう 5070tiは本当に凄いわ。
5080, 5090はもっとすごいのか・・・
左上隅を拡大するとこんな感じだ。(勝利数の多い順)
栄えある第一位は、37番目に誕生したモデルで 勝率 78.6% だ。
Hyper parameterの記録が無いので、どんな学習をさせたかの記録が無い。→ 今後制作が進んだらモデルファイルに埋め込む予定
CvR値と対戦順位の比較
前回の投稿 (45)【Othello AI】強化学習でオセロAIを作る。 で記した CvR(勝手に作った指標)は、すべてのモデルを同じ物差しで比較するための指標だ。
CvR 10000 : ランダム指し手の相手と 10000回対戦したときの勝利数。レベルとも呼ぶ。
→ CvRの値が大きいほど強いはず!
今大会で優勝したモデルは、Lv.8314 と CvR値は第19位と決して高くはない。(CvRの大きい順)
でも、星取表を見ると、上位の強豪たちに対して多くの勝利 〇 を獲得している。
全体的には CvRの大きいモデルが上位寄りにいるが、CvRは絶対的な強さの評価指標にはなり得ない。
∵モデル間の戦術の違いに相性があるから。
だと思う。
こんな次元をはるかに超越した強さを獲得したモデルが、本物の強者なのだろう。
個別の対戦結果
いくつか気になった対戦結果をアニメーションにしてみた。
Python matplotlibと imageioライブラリを使うと、こんなことも簡単に出来てしまう。Pythonすごい!
(1) model#37〇 vs model#68●
今回の優勝モデルである #37 と CvRランキングトップの #68 との対戦だ。
結果は 18対18 の引分け。 前述の通り ε=0 であれば何回やってもこの結果になる。
(2) model#37〇 vs model#18●
今回の優勝モデルである #37 と最下位の #18 との対戦だ。
こちらも結果は 18対18 の引分けだった。
(3) model#37〇 vs model#22●
今回の優勝モデルである #37 と準優勝の #22 との対戦だ。
結果は 21対15 でチャンピオンの勝ち。
(4) model#68〇 vs model#69●
CvRランキング第一位の #68 と第二位の #69 との対戦だ。
結果は 3対22 で #69の勝ち。
しかも、途中でお互いに石を置く場所がなくなり… (両者パスで試合終了)
vs 人間(私)
今回の優勝モデルがどれだけ強いのだろうか?
私が人間代表として対戦してみた。
結果は・・・
思わず
「なんじゃこりゃ・・・」
と声が出てしまった。
弱い、弱すぎる・・・
まだまだ強化が必要です。
所感
・今日までの CvR最高値は 8855 であり、目標の CvR 9500 に少しだけ近づいた。
でも、ここからの +645 はとてもしんどい上り道だ。
・なかなか面白いが、壁にぶち当たっている気がする。
Break throughするためには何が必要か?
ネット上を徘徊して先人のお知恵を拝借したい。
・高速な GPU実行環境を使えるのだから 6×6ではなく正式な 8×8盤面 で学習させてみようかとも思う。
でも…
目的は「私(人間)の学習」なので、試せる回数が多い 6×6のまま制作を進めよう。
残課題
投稿後に気づいたのだが…
先攻、後攻を変えると勝敗が変わるケースがある!
当然と言えば当然だが、
ランキング集計時には両方の結果を使う必要がある。
後日やり直そう…
試合数は 2701 x 2 = 5402試合
になるが、GeForce RTX 5070ti が2分以内に実行してくれるはず。