TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

リバーシ(オセロ)で深層強化学習 その2(教師ありQ学習)

前回、オセロの棋譜の終端の報酬を使用して(TD(1))、教師ありで学習することでランダムより強くなることを確認した。

今回は、教師ありでQ学習を試す。

Q学習

Q学習の学習則は以下の式で表される。
\displaystyle
\delta=Q(s, a)-\left(r+\gamma \max _{a} Q\left(s^{\prime}, a\right)\right)

rは、遷移に対応する即時報酬で、リバーシ(オセロ)の場合、終端以外では0になる。
\max _{a} Q\left(s^{\prime}, a\right)は、1ステップ先の局面での行動価値が最大となる手の行動価値である。

よって、学習の開始時は、ほとんどの局面で、ランダムで初期化されたニューラルネットワークの出力のうち、偶然最大になった値を教師として学習することになる。
学習が進むにつれ、徐々に終端の報酬が序盤の局面にも伝播していく。

棋譜の偏り

前回使用した棋譜を調べたところ、引き分けのゲームが8割以上含まれていた。
GGSの棋譜だけの傾向かもしれないが、オセロは引き分けが多いゲームのようだ。
そのまま使用すると終端の報酬の多くが0になってしまい学習が進まないことが予想される。
そこで、引き分けのゲームが1割以下になるように間引いて使用することにした。

ミニマックス対応

1ステップ後の行動価値は、相手局面になるため、Q\left(s^{\prime}, a\right)は、ニューラルネットワークの出力の符号を反転する必要がある。

パス対応

前回の終端の報酬を使った学習では、パスした局面は除外して学習を行った。
そのため、ニューラルネットワークの出力でもパスは考慮していなかった。

Q学習の場合、1ステップ後がパスとなる局面を考慮する必要があるため、ニューラルネットワークの出力にパスを加えた。
そのため、出力層は1×1の畳み込みから、全結合層に変更した。

学習結果

1万ステップ学習した結果は以下の通り。
f:id:TadaoYamaoka:20191205220744p:plain
前回に比べて損失の値の桁が一つ小さい。

強さの測定

ランダムとの対局した結果は、453勝500敗47分となった。
1万ステップではほとんど学習できていない。

終端の報酬で学習した場合との比較

同じネットワーク構成と教師局面で、終端の報酬で学習した場合は、同じ1万ステップで675勝281敗44分となった。
明らかに、Q学習の方が学習速度が遅い。

10万ステップ学習した結果

ステップ数を増やせば学習できるか確認するため、10万ステップ学習した。
f:id:TadaoYamaoka:20191205221328p:plain
前回は途中で横ばいになったが、Q学習の場合横ばいにならずに学習が進んでいる。

ランダムとの対局結果は、757勝214敗29分となった。
終端の報酬で10万ステップ学習した場合は、639勝330敗31分となった。
学習が進むと、Q学習の方が逆転して強くなっている。

まとめ

DQNのネットワークをQ学習でも学習できることが確認できた。
また、学習の初期は終端の報酬を使用した方が学習が早く進み、学習が進むと、終端の報酬よりQ学習の方がパフォーマンスが良くなることがわかった。

次は、強化学習DQNを学習させてみたい。


学習に使用したソースはこちら。
creversi_gym/train_from_training_data.py at master · TadaoYamaoka/creversi_gym · GitHub
creversiもちょくちょく改良しています。