オセロの強化学習

GPU / 強化学習 / 機械学習

概要

方策勾配法は、強化学習(行動の結果として得た得点だけを手がかりに、得点が高くなる行動のしかたを学ぶ機械学習)の方法の1つで、打った手の確率を、その対局の結果が平均より良ければ上げ、悪ければ下げることをくり返して、良い結果になる打ち方を覚える。このページは、「なるべく負ける」オセロ AI を方策勾配法で学習させるときに何をどの式で学習しているかと、同じ学習を手元の RTX 3070 Ti と Colab の A100 で、それぞれ動かせた最大の同時に進める対局数で走らせた速さを示す。学習プログラムの全文は GPU のページにある。

読む順路:問題の設定で何を学習するかを決め、ゲームの機械学習の方法で選択肢を挙げる。記号から学習の手順までが方策勾配法の式、学習中に見る量が損失などの見方とグラフ、ほかの方法との比較が選択肢の式と比較、結果と速さの比較が実測である。

問題の設定

この節では、AI が何を目指し、誰と対局するかを決める。

  • 相手:合法手(その局面で打てる手)の中から等確率で1つ選んで打つ。この相手を以下「ランダムな相手」と呼ぶ。
  • AI の色:対局ごとに、黒(先手)か白(後手)かを等確率で決める。
  • 目的:終局時に、AI の石の数が相手の石の数より少ないこと(AI の負け)。
  • パス:打てる手が無い側はパスし、両者が続けてパスしたら終局とする。

ゲームの機械学習の方法

この節では、ゲームを打つ AI を学習させる方法の選択肢を挙げ、このページで使う方法を決める。どの方法も、対局をくり返して集めた結果から、局面ごとの打ち方を決める数(パラメータ)を直していく。違いは、何を学習するかと、どうやって手を選ぶかにある。

方法学習するもの手の選び方
方策勾配法局面ごとに、各合法手を選ぶ確率学習した確率に従って選ぶ
見込みに基づく方法(Q 学習など)局面と手の組ごとに、その手を打った後に得られる得点の見込み見込みが最大の手を選ぶ
探索と組み合わせる方法(AlphaZero の方式)手を選ぶ確率と、局面の得点の見込みの両方学習した確率と見込みを使って先を読み、その結果で選ぶ

このページでは方策勾配法を使う。理由は2つある。1手を選ぶ計算がネットワーク1回で済み、先読みが無いので、全対局を GPU で同時に1手ずつ進められる。また、学習するのが確率だけなので、必要な式が記号から更新までの節で閉じる。ほかの2つの式と比較は、方策勾配法の式を定義した後のほかの方法との比較に置く。

記号

この節では、以降の節で共通に使う記号をまとめて定義する。1つの節や例の中だけで使う記号は、その場で定義する。

記号意味
局面。AI から見た向きの盤面で、64 マスそれぞれが「AI の石」「相手の石」「空き」のどれか
局面 で手番側が打てるマス(合法手)の集合。マスは 0〜63 の番号で表す
ネットワーク(式(2) で定義する関数)のパラメータ(重みとバイアスをすべて並べたもの)。学習で直す対象
自然対数と、その逆の指数関数
で決まる実数 を、 の各成分で偏微分(ほかの成分を定数とみなして微分)した値を並べたベクトル(勾配)。偏微分は で書く
局面 をネットワークに入れる形に直した 192 個の 0 か 1(式(1))
局面 を入れたときにネットワーク(式(2))が出す 64 個の実数。マス の値を と書く
局面 で AI がマス に打つ確率(方策)。青で書く
1局分の記録(AI の色、両者が打った手、パスの全部)
対局 が起きる確率と、そのうち によらない部分(AI の色と相手の手の確率の積)(式(6)・式(7))
1局の中で AI が石を打った回数。パスは数えない
AI が 回目()に石を打った局面と、打ったマス
対局 の得点。橙で書く
得点の期待値。学習で大きくしたい量
1回の更新に使う対局の数。全対局を GPU で同時に進めるので「同時に進める対局数」でもある
対局の番号()。対局 の記録を 、AI が打った回数を と書く
対局 で AI が 回目に石を打った局面と、打ったマス
ベースライン(得点から引く値)。緑で書く
学習率(1回の更新でパラメータを動かす幅を決める正の数)

方策

この節では、局面からマスごとの確率 を作る計算を定義する。

ネットワークへの入力は、局面 を 192 個の 0 か 1 に直したもの である。マス について、AI の石なら 1、相手の石なら 1、合法手なら 1 になる 3 つの値を、64 マス分並べる。 は中の条件が成り立てば 1、成り立たなければ 0 を表す。