オセロの強化学習

GPU / 強化学習 / 機械学習

オセロの評価値・単純な規則の打ち手どうしの総当たり・Edax の評価関数の形は オセロ のページにある。

概要

このページは、オセロの AI を作った実験を材料にして、強化学習を勉強するための資料である。強化学習は、行動の結果として得た得点を手がかりに、得点が高くなる行動のしかたを学ぶ機械学習である。このページでは、「なるべく負ける」オセロ AI と「勝つ」オセロ AI を、方策勾配法(打った手の確率を、その対局の結果が平均より良ければ上げ、悪ければ下げる方法)・AlphaGo・AlphaZero の方式で学習させ、既製のプログラム Edax の作り(評価関数と αβ 探索)と比べ、同じ作りの「負けたがる AI」の点数表を自己対戦から当てはめ、強さを 1 つの数(レーティング)で測り、計算をどう分ければ速くなるかを調べた。数値は、手元と Colab で動かした記録、出典を示した外部の値(論文・公開されているベンチマーク・連盟のレーティングの一覧・機器の公称値)、それらからの計算のどれかで、本文に出どころを書く。第2章の方策勾配法の学習プログラムの全文は GPU のページ にある。そのほかのプログラム(AlphaGo・AlphaZero の学習、評価、負けたがる AI、並列の測定)は手元の othello-lose/ にあり、本文ではファイル名で指す。

読む順路

上から順に読む。記号と用語は前の章で定義したものを使う。実験の結果は、後の章で扱うものを先に使う所がある(第3章が第5章のレーティングの値を、第2章が第6章の速さの比較の実行を使うなど)。そうした所は「第5章の…」のように章を書いて指す。各章の終わりに確かめ問題を置き、解答は折りたたみに入れた。

章扱うこと読むと分かるようになること
第1章 問題と方法の選び方何を学習させるか、学習の方法の選択肢、記号問題(相手・目的)の決め方と、方法を選ぶ観点(何を学習し、1 手にどれだけ計算するか)
第2章 方策勾配法方策・目的・勾配の式、ベースライン、実装する損失、学習中に見る量、学習の前後の打ち方(実行の条件の一部は第6章の速さの比較で示す)得点の期待値の勾配が、対局して記録した量の平均で書ける理由。損失の値が進み具合を表さない理由
第3章 価値と先読みQ 学習、AlphaZero の損失、モンテカルロ木探索、AlphaGo と AlphaZero の学習と結果局面の見込み(価値)を学ぶ方法と、先読みの結果を学習の目標にする方法の違い。先読みの回数で強さがどう変わるか
第4章 探索と評価関数オセロのドメイン知識、Edax の評価関数と αβ 探索、このページの打ち手との対比、このページの対局での Edax の条件、第3章の先読みの回数と Edax の深さの違い、Edax にならった作りで、点数表を自己対戦から当てはめた「負けたがる AI」点数表で局面に点を付け、深さを決めた探索で打つ作りの仕組みと、点数表を自己対戦から当てはめる方法(ネットワークの方式との強さの比較は第5章)
第5章 強さの測り方(レーティング)Bradley–Terry モデル、当てはめとブートストラップ、人間の値の換算、段位の意味、結論とほかの AI との比較、αβ 探索と AlphaZero の方式の比較、Egaroucid の評価関数、負ける強さのレーティング対局の勝ち負けから強さを 1 つの数にする方法と、その数の確かさ。オセロで αβ 探索と点数表の作りが強い理由と、AlphaZero の方式が弱いとは言えない理由
第6章 計算資源と並列学習計算量、1 台の GPU での速さ、並列に計算できる条件(データ並列と BatchNorm の統計、通信と計算の比、Amdahl の法則、データを集める部分と学習する部分の分担、古いパラメータで集めたデータ、モデル並列、そのまま並列にできる仕事と並列にしにくい仕事、並列の数と速くなる倍率)、Colab の費用、途中からの再開どういう性質があれば計算を複数の GPU や CPU のプロセスに分けられるか、分けたときにどこまで速くなるか
確認できていない点確かめていない事項どこまでが確かめた事実か

本文では、記録や計算で確かめた事実と、推測(「推測」と書く)と、確かめていないこと(「確かめていない」「未確認」と書く)を分けて書く。

第1章 問題と方法の選び方

この章では、AI に何を学ばせるか(問題)と、学ばせる方法の選択肢を決め、以降の章で共通に使う記号を定義する。読む順は、問題の設定、ゲームの機械学習の方法、記号 である。

問題の設定

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

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

ゲームの機械学習の方法

この節では、ゲームを打つ AI を学習させる方法の選択肢を挙げ、このページで使う方法を決める。どの方法も、局面ごとの打ち方を決める数(パラメータ)を持ち、対局をくり返して集めた結果からその数を決める(Edax の点数表だけは決め方が公開されていない。第4章の負けたがる AI(なるべく負けることを目指して、Edax にならって作った AI)は、点数表を自己対戦の結果に当てはめる)。違いは、何を学習するかと、どうやって手を選ぶかにある。

方法学習するもの手の選び方
方策勾配法局面ごとに、各合法手を選ぶ確率学習した確率に従って選ぶ
見込みに基づく方法(Q 学習など)局面と手の組ごとに、その手を打った後に得られる得点の見込み見込みが最大の手を選ぶ
探索と組み合わせる方法(AlphaZero の方式)手を選ぶ確率と、局面の得点の見込みの両方学習した確率と見込みを使って先を読み、その結果で選ぶ
点数表と αβ 探索(Edax の方式)盤の決まったマスの組(形)ごとの点数表の値点数表で局面に点を付け、何手か先まで読み、点が最大の手を選ぶ。αβ 探索は結果を変えない枝を省き、Edax の一部の設定では、浅く読んだ値から結果が変わらないと見込める枝も打ち切る(ProbCut。第4章の αβ 探索)

このページは、最初に第2章で方策勾配法を使う。理由は2つある。1手を選ぶ計算がネットワーク1回で済み、ネットワークで先読みをする方法(第3章のとおり、このページの設定では1手に33回)より計算が軽い。また、学習するのが確率だけなので、必要な式が記号から更新までの節で閉じる(Q 学習も1手の計算は1回で済むが、見込みの目標を作る式が別に要る)。ほかの方法の式と比較は、方策勾配法の式を定義した後の第3章(Q 学習と AlphaZero の方式)と第4章(点数表と αβ 探索)に置く。第3章では AlphaGo と AlphaZero の方式も学習させ、第4章では点数表と αβ 探索で打つ AI も作る。

記号

この節では、以降の節で共通に使う記号をまとめて定義する。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回の更新でパラメータを動かす幅を決める正の数)