強化学習 AlphaZero 16 (三目並べ AlphaZero8)

AlphaZeroの学習サイクルを実装します。

これまで実装したコードを次の手順で実行していきます。

  1. デュアルネットワークを作成します。
  2. セルフプレイを実行します。
  3. パラメータ更新部を実行します。
  4. 新パラメータ評価部を実行します。
  5. ベストプレイヤーを評価します。

2~5を10回(10サイクル)実行します。

では実装に移ります。
まずは必要なパッケージをインポートします。

train_cycle.py
1
2
3
4
5
6
# パッケージのインポート
from dual_network import dual_network
from self_play import self_play
from train_network import train_network
from evaluate_network import evaluate_network
from evaluate_best_player import evaluate_best_player

デュアルネットワークを作成します。
すでにベストプレイヤーのモデル(model/best.h5)がある場合は無処理となります。

train_cycle.py
1
2
# デュアルネットワークの作成
dual_network()

学習サイクルを10回(10サイクル)繰り返し実行します。

train_cycle.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i in range(10):
print('Train',i,'====================')
# セルフプレイ部
self_play()

# パラメータ更新部
train_network()

# 新パラメータ評価部
update_best_player = evaluate_network()

# ベストプレイヤーの評価
if update_best_player:
evaluate_best_player()

10サイクルの学習を完了するまでは、Corei5・メモリ8GB・GPUなしのPCで10時間ほどかかりました。

何回か学習サイクルを実行し、ベストプレイヤーの評価を行った結果は下記の通りです。

10サイクル 20サイクル 30サイクル

学習サイクルを増やすほど各勝率が増えていくかと予想していたのですがそうでもないようです。
ただ最強ロジックのアルファベータ法と互角に勝負できているのでAlphaZeroという手法は秀逸だと思います。

参考

AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門 サポートページ