UnityとゲームAIと将棋

Unity、Pythonを中心にゲーム開発やゲームAI開発の技術メモ等、たまに将棋も

【AlphaZeroを理解する】モンテカルロ法編

概要

囲碁、将棋、チェスなどのボードゲームにおいてルール以外のドメイン知識を利用せずに対戦用AIとしてのState-of-the-art(SOTA)を達成したAlphaZeroを細かく分解しながら理解していこうというシリーズです。今回はAlphaZeroの根底にあるモンテカルロ木探索のさらに基礎となるモンテカルロ法についてまとめていきます。

モンテカルロ法

AlphaZeroの候補手探索のベースになっているのがモンテカルロ木探索で、モンテカルロ木探索が依拠しているのがモンテカルロ法というアルゴリズムです。

モンテカルロ法はシミュレーションや数値計算などを行う際に乱数を用いる手法の総称です。

代表的な例として円周率の近似があります。 辺の長さが1の正方形内にランダムに点を打っていき、正方形内にある半径1の四分円の中に入った点の数を集計します。

四分円の面積は

四分円内にある点の数(n_in) / 正方形内にある点総数(n)

で近似できるので、円周率 \pi

 \pi = \displaystyle \frac{4 \times n_{in}}{n}

という形で近似できます。 上記のシミュレーションをPythonで実装して視覚化してみると下図のようになります。

モンテカルロ法Pythonシミュレーション

円周率は3.172と近似されており概ね正しい値に収束していることがわかります。

このように乱数を用いたサンプリングを数千、数万回と繰り返していくことでシミュレーションや数値計算の解が一定の値に収束していき、サンプリング数が十分な大きさになると近似解が得られます。これがモンテカルロ法の基本的な考え方になります。

次回の記事ではこのモンテカルロ法をゲーム木探索に適用したモンテカルロ木探索についてまとめます。