三目並べをAlphaZeroで解いていきます。
今回はAlphaZeroを実装する事前準備として、ゲームの全体像と三目並べを実装します。
AlphaZeroは、モンテカルロ木探索をベースに次の2点を組み込んでいます。
- 深層学習の曲面から最善手を予測する。
- 強化学習の自己対戦による経験を組み合わせる。
AlphaZeroによる三目並べのポイントは次の通りです。
- 目的は勝つことです。
- 状態は局面です。
- 行動は手を打つことです。
- 報酬は勝ったら+1、負けたら-1です。
- 学習方法はモンテカルロ木検索+ResNet+セルフプレイです。
- パラメータ更新間隔は1エピソードごとです。
AlphaZeroの強化学習は下記のようになります。
- デュアルネットワークの作成
ニューラルネットワークを定義し、ベストプレイヤー(過去最強)のモデルを作成します。 - セルフプレイ部
AI同士でゲーム終了までプレイします。 - パラメータ更新部
セルフプレイで作成した学習データで最新プレイヤーを作成します。
初期状態としてはベストプレイヤーをコピーして作成します。 - 新パラメータ更新部
最新プレイヤーとベストプレイヤーで対戦し、勝ち越した場合はベストプレイヤーを更新します。
2~4を繰り返して学習を行います。
まず三目並べを実装します。
1 | # パッケージのインポート |
ランダムで行動を選択する関数を定義します。
1 | # ランダムで行動選択 |
アルファベータ法で行動を選択する関数を定義します。
1 | # アルファベータ法で状態価値計算 |
プレイアウト関数を定義します。
1 | # プレイアウト |
モンテカルロ木探索で行動を選択する関数を定義します。
1 | # モンテカルロ木探索の行動選択 |
動作確認のためのコードを実装します。ランダムとランダムで対戦するコードです。
1 | # 動作確認 |
1手ごとの局面が表示され、ゲーム終了まで実行されます。(1エピソードに対応)
参考
AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門 サポートページ