TadaoYamaokaの開発日記

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

将棋でディープラーニングする その15(強化学習)

前回まで棋譜を用いた教師あり学習で、将棋の方策ニューラルネットワークを学習した。

今回から、強化学習で方策改善を行う。
強化学習の手法は、AlphaGoの論文と同じREINFORCE algorithm*1を試す。

AlphaGoの論文の強化学習の手法は以下の通りである。

AlphaGoの強化学習の手法

教師あり学習で学習した方策ニューラルネットワーク(SL policy network)をベースラインとして、自己対戦を行い勝敗を報酬として方策改善を行う。

以下の式で表されるパラメータ\rhoの勾配を求め、パラメータを更新する。
\displaystyle
\Delta \rho = \frac{\alpha}{n} \sum_{i=1}^n \sum_{t=1}^{T^i} \frac{\partial \log p_\rho (a_t^i \mid s_t^i)}{\partial \rho} (z_t^i - v(s_t^i))

i ミニバッチ内の1回の対局番号
n ミニバッチサイズ
t ステップ番号(手数)
T^i 終局までのステップ数
z_t^i tステップ後の報酬 = \pm r(s_{T^i})
r(s_{T^i}) 勝敗の報酬(-1,1)
v(s_t^i) ステップtの局面s_t^iの価値
p_\rho (a_t^i \mid s_t^i) ステップtの局面s_tで行動a_tを選択する確率(方策\rho)
\alpha 学習率

\pm r(s_{T^i})\pmは先手、後手で符号を反転するという意味

v(s_t^i)は、バリューネットワークを学習した後にさらに方策改善する際に使用するもので、初めは0とする。

自己対戦は、方策改善を行うネットワークと、以前にパラメータ更新した方策ネットワークの中からランダムに選んだもので対戦を行う。
AlphaGoの論文では、500イテレーションごとにパラメータを保存している。

理論的背景について知りたければ、
Sutton & Barto Book: Reinforcement Learning: An Introduction
の「13.4 REINFORCE with Baseline」を読むとよい。

式自体は単純であり、実装はそれほど難しくない。

パラメータの更新はミニバッチ単位に行うので、n回対局してパラメータ更新を繰り返す。
AlphaGoの論文では、ミニバッチサイズはn=128として、10,000イテレーション学習している。

次回は、これの実装を行う予定。
まだ方策ニューラルネットワークを用いて対局できるようになっていないので、まずはそこから行う予定。

*1:Williams, R. J. Simple statistical gradient-following algorithms for connectionist reinforcement learning. Mach. Learn. 8, 229–256 (1992).