LoginSignup
7
2

More than 3 years have passed since last update.

AlphaZeroで6x6オセロ

Posted at

最初に

コードはここには書かないのでこのリンクを参照していただきたい。
https://github.com/AokiMasataka/AlphaZero
環境
windows10
python 3.7
tensorflow 1.12
keras 2.2.4

CPU i7 7700
メモリ 16GB
GPU GTX1070
モンテカルロやデュアルネットワークなどは、探索回数や畳み込みフィルターの枚数を減らして実装していたり、その他諸々省いていたりしているが悪しからず。

参考:
https://www.amazon.co.jp/AlphaZero-深層学習・強化学習・探索-人工知能プログラミング実践入門-布留川-英一/dp/4862464505

実装

model.py

このファイルにはデュアルネットワークのインスタンスを生成するModelクラスを入れている。
デュアルネットは、3層畳み込みレイヤーのボトルネック型のレズデュアルブロックを8層重ねPolicy、Valueの二つの出力へ続けている。
ブロックの数とフィルターの枚数はconfig.pyで変更できるのでPCスペックに応じて調整していただきたい。

game.py

今回は6x6オセロで実装しているが、将棋やチェスなどのボードゲームでもニューラルネットの入出力サイズを変更するだけで動くはず。多分…

game_c.pyx

実行速度を上げるためにcythonバージョンで書いてあり、コンパイルしてMCTS.py, main.py, self_play.pyのimportを

from game_c import Game

に書き換えることで自己対戦の速度を1.2倍くらいにできる。

config.py

アルゴリズムに影響する各種パラメーターを記述している。
学習速度が遅いと感じたら、SARCH_NUMを160から80くらいに減らすと学習がスムーズになる。

self_play.py

自己対戦によるデータ生成とモデルの評価などを行う。
なるべく同じような局面にならないように、最初の数手は完全にランダムな手を打つようにしている。

MCTS.py

選択可能なアクションなど現在の盤面の状態を入れるNodeクラスと、
そのNodeを広げて探索を行うMCTSクラスが入っている。
デュアルネットワークを使用したモンテカルロ探索の具体的な解説はhttps://postd.cc/alphago-zero-how-and-why-it-works/
こちらがわかりやすく説明してある。

main.py

Mainクラスでは学習を進めるtrainメソッドがあり、その際生成した学習データをdataフォルダに、モデルをmodelフォルダに保存する。

play.py

学習したAIと対戦することができる。playインスタンスを生成するときの引数で対戦するAIの世代の選択が可能。
GUIを練習がてら実装したが、バグが大量にあり尚且つかなり使いにくくなってしまった。
修正する予定はないです。MACで起動するとtkinterライブラリのせいで落ちてしまうので悪しからず

学習結果、学習したAIと戦った感想

自己対戦による学習データ生成→対戦データの学習→一つ前の世代との対戦(評価)の流れを一つのサイクルとし、最終的に14世代まで学習を進め、そのAIと実際に対局し評価した。
結果として5世代目で完全に歯が立たなくなり、それ以降は自分自身の実力では勝率0%なので、AIの評価ができなっかた。一応世代を進めるには一つ前の世代に52%の勝率を出さないといけないので、確実に強くはなっているはずである。
当初は、AIを実装するにあたって「自分と同じくらいの実力程度になればいいか」ぐらいに思っていたので、正直その成長速度には驚かされた。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2