alphagoのしくみ
TRANSCRIPT
AlphaGoの仕組み
富士通株式会社
吉田裕之
伊藤尚洋
はじめに
本稿は、以下の文献を読み込んだ際に作成したメモである
David Silver他、Mastering the game of Go with deep neural networks and tree searchhttps://vk.com/doc-44016343_437229031?dl=56ce06e325d42fbc72
本稿は、上記論文の内容の内、AlphaGoのしくみにフォーカスしているので、評価結果等については原文を参照されたい
本稿は、原文に含まれていない内容の推察を一部含んでいる
本稿は、以下を前提知識として説明を省略する
囲碁のルール
畳込みニューラルネットワーク(CNN)の基本
1
概要
AlphaGoのPlay=50GPUを4週間使って学習した評価関数 +モンテカルロ木探索(MCTS)
①評価値が高い手を選びながら探索木を下る
②リーフまで来たら二つの方法で評価する(1) 評価関数(2) ロールアウト
③評価値をルートまで伝播する
s0
a
sL
現在の盤面(ルート)19✕19✕(空、黒、白)
すべての合法手
評価値が高い合法手aをうった後の盤面
評価値が高いパスで辿り着いたリーフ
win / lose
リーフから先は勝負がつくまでランダムにうってみる
(ロールアウト)④ リーフの評価回数が閾値を越えたら一段展開する
2
学習しておく関数
ポリシー関数 P(a|s)
盤面sで場所aにうつべき確率 aP(a|s)=1.0
バリュー関数 vθ(s)
盤面sの評価値 [-1,1]
名称 計算方法 教師データ 速度 用途
Pπ線形softmax 人間による800万盤面
CPU
2μs
ロールアウト時にaを決定
PτPσが求まるまでの暫定値
Pσディープネットワーク
人間による2840万盤面GPU2ms
場所aの評価値の重み
Pρ自分どうしで128万対戦
バリュー関数の訓練に使うだけで対戦には使わない
vθ ディープネットワーク
Pσでランダムに作った3000万盤面 +
Pρで1億6000万回ロールアウトしてみた勝率
GPU2ms
盤面sの評価値
3
AlphaGoのニューラルネットワーク
ポリシーネットワーク
入力層:(19✕19✕48)の盤面sの特徴量(次頁)
隠れ層:(19✕19✕k)✕12層k=128,192,256で試し、論文の対戦では192
出力層:(19✕19)の次にうつ場所の確率分布P(a|s)
バリューネットワーク
入力層:(19✕19✕49)の盤面sの特徴量
隠れ層:(19✕19✕192)✕12層+(19✕19)✕1層+256✕1層
出力層:1ノードで盤面sの評価値v(s)
4
入力層に使う特徴量
ポリシーネットワークPσ、 Pρ:①=48個の0 or 1
バリューネットワークvθ :①+②=49個の0 or 1
①
②
5
ポリシーネットワークPσ、 Pρの構造
入力層~第1隠れ層:
周囲2行2列に0パディングして(23✕23)に拡張
(5✕5)のフィルターk枚による畳込み
ReLU関数 φ(y) = max(0, y)
第n隠れ層~第n+1隠れ層:
(21✕21)(1行1列0パディング)+(3✕3)フィルターk枚+ReLU関数
第12隠れ層~出力層
(1✕1)のフィルター1枚
座標位置ごとに異なるバイアス
softmax関数 φ(y)i= eyi j eyj 総和が1.0になる
6
バリューネットワークvθの構造
入力層~第12隠れ層:
ポリシーネットワークと同じ
第12隠れ層~第13隠れ層:
(1✕1)のフィルター1枚+ReLU関数?
第13隠れ層~第14隠れ層:
全結合+ReLU関数
第14隠れ層~出力層
全結合+tanh関数 φ(y) =ey− e−y
ey+ e−y
7
ポリシーネットワークPσの教師あり学習
6~9段による16万棋譜(35.4%がハンデ戦)から(パスを除く)2940万盤面とその時に指した手を抽出
2940万からテスト用に100万を除いた2840万盤面に、8通りの対称性を加味して(2億2720万?)訓練データとする
特徴抽出は事前にやっておく
確率的勾配降下法を実施:
誤差関数は交差エントロピーH(a|s, Pσ)=‐ i t(ai)logPσ(ai|s)だが、プロが実際に選択したaiでのみt(ai)=1.0で他は0.0なので、このaiをaとすれば誤差関数はH(s, Pσ)=‐logPσ(a|s)
m(=16)個の訓練データをランダムに選択
∆σ=α
m k=1m 𝜕logpσ(ak|sk)
𝜕σ
学習率α:初期値0.003で8000万回毎に1/2にしていく
3.4億回(✕16盤面)の訓練を50GPUで3週間
フェーズ1
8
ロールアウトポリシーPπ 、Pτの学習
線形softmax回帰 P ai s = eyi j e
yj、yi = j k xjkwk
入力 xik: i:(19✕19)の盤面の位置、k:以下の特徴量
ロールアウトポリシーPπ:③=109,747個の0 or 1
ツリーポリシーPτ: ③+④=141,989個の0 or 1
800万盤面でwkを学習
③
④
9
フェーズ2
ポリシーネットワークPρの強化学習
学習したポリシーネットワークどうしを対戦させてさらに強化
学習側をポリシーρとし、相手をポリシーρ’とする
ρ’はそれまでのポリシープールの中からランダムに選ぶ
初期値はρ=ρ’=σ
500回ごとにその時点のρをポリシープールに入れる
n(=128)回対戦させて勝敗zTi(1 or -1)を決める
n回対戦中の全盤面に対して報酬の期待値を最大化する確率的勾配降下法:
∆ρ=α
n i=1n t=1
Ti 𝜕logpρ(ati|st
i)
𝜕ρ(zt
i−v(sti))
以上を1万回(✕128対戦) 、50GPUで一日
v(sti)の項は0
vθ(sti)が求まったらそれを使う
10
バリューネットワークvθの強化学習
PσとPρを使ってvθを強化学習
訓練データも人間の棋譜ではなく自動生成(>3000万個)
① 一様乱数(1~450)で手数Uを決める
② (U-1)手までPσ(人間のうち方を学習したポリシー)を相互に使って訓練盤面を作る
③ U手目は一様乱数(1~361)を使って決める(うてるところが出るまで)
④ Pρ (強化学習したポリシー)を使ってロールアウトし、勝ち負けz
を決定する
確率的勾配降下法を実施:
誤差関数は平均二乗誤差:α
2m k=1m (zk − vθ(s
k))2
m(=32)個の訓練盤面に対して
∆θ=α
m k=1m (zk − vθ(s
k))𝜕vθ(s
k)
𝜕θ
以上を5000万回(✕32盤面) 、50GPUで一週間
フェーズ3
11
MCTSによる対戦
48CPU、8GPU、40探索スレッド(論文時)
現在の盤面をルートノードとし、合法手をエッジとする木を構成。木の先端で、エッジを展開していないノードをリーフと言う
各エッジ(s,a)には以下の評価値を付与
P:事前確率 P s, a = Pσ(a|s)
Nv:leaf evaluation=そのエッジの先で何回vθを計算したか、初期値は0
Nr:rollout reward=そのエッジの先で何回ロールアウトしたか、初期値は0
Wv:vθの積算、初期値は0
Wr:zT(ロールアウトによる勝敗判定)の積算、初期値は0
Q:action value Q s, a = (1 − λ)wv(s,a)
Nv(s,a)+ λ
Wr(s,a)
Nr(s,a)λ:重み(=0.5)、0/0=0?
最初は、ルートノードs0 1個のみの木から始める
自分の手番で、シミュレーションを一定の持ち時間の間繰り返し最後にs0のエッジ(s0,ai)でNr(s0,ai)が一番大きいaiを選ぶ
対戦中に、Qの最大値が-0.8未満になったら投了
12
対戦時のシステム構成論文には明記されていないので
あくまでも想像
探索木
vθ用キュー
Pσ用キュー
CPU✕8?• キューから依頼を取り出してGPUに投げる
• vθ計算が終わったらルートまで伝播
• Pσ計算が終わったら探索木に反映
GPU✕8• Pσとvθを計算
CPU✕40?• 40並列で探索木を下る
• リーフまで来たら、vθ計算を依頼し、ロールアウトを実行
• 勝敗がついたらルートまで伝播
• 閾値を越えたらリーフを展開しPσ計算を依頼
13
シミュレーション手順詳細(1)
① ルートから Q s, a) + u(s, a を最大とするエッジ s, a を辿って木を下る
u s, a = cpuctP(s, a) b Nr(s,b)
1+Nr(s,a), cpuct:exploration constant(=5)
エッジ s, a を辿る時に、Q s, a + u s, a を一時的に下げて、評価が終わるま
で他のスレッドが同じパスを選択しにくくしておく
Nr s, a ← Nr s, a + nvl、Wr s, a ← Wr s, a − nvl(= 3)
② リーフsLに到達したら
vθ sL が未処理ならば、GPU計算するキューに入れ、非同期に処理
sLから先を、Pπ(a|s)を使ってロールアウトし、勝敗zT(1 or -1)を決定する
③ 盤面sLに対してvθ sL やzTが求まったら、
ルートノードまでパスを逆に辿って、評価値を更新する
vθ sL :N𝑣 s, a ← N𝑣 s, a + 1、 W𝑣 s, a ← W𝑣 s, a + vθ sL
zT :Nr s, a ← Nr s, a − nvl + 1、 Wr s, a ← Wr s, a + nvl + zT
14
シミュレーション手順詳細(2)
④ リーフsLの直前のエッジ sL−1, aL−1 で Nr sL−1, aL−1 > nthr = 40 ならsLで可能なすべての手aiにエッジ sL, ai を作成し以下を実行する
Nv sL, ai = Nr sL, ai = Wv sL, ai = Wr sL, ai = 0
P sL, ai = Pτ(ai|sL) (Pσ(∗ |sL)が計算できるまでとりあえず)
Pσ(∗ |sL)をGPU計算するキューに入れ、非同期に処理する
Pσ(∗ |sL)が求まったらP sL, ai = Pσβ(ai|sL)とする
Pβ ai = e(yiβ)/ j e
(yj
β)
β:softmax temperature(= 0.67)
その他
うった手のサブツリーを破棄しないで残し、相手の手番中も探索を継続する
持ち時間は中盤に多く配分し、Nr最大の手とQ最大の手が一致しない場合は延長する
nthrは、Pσ(a|s)のキューの捌け方と登録がつりあうように動的に調整する
Q(s,a)は、評価関数と勝率の両方をバランスよく見る
u(s,a)は、まだ試していないエッジを探索しようとする
メリハリが強くなる
15
まとめ
従来のMCTSベースの囲碁ソフトとの差異は
高速なPπ ・Pτと、ディープラーニングで獲得したPσ・Pρの2種類のポリシーを利用。
事前にPρでロールアウトした場合の評価近似値を、vθとしてディープラーニングしておく。
対戦では、Pπ ・PτとPσ・ vθを併用した評価に基づく探索を行い、大局観を見失わない強さと学習済み局面に対する強さを併せ持った
論文内の評価報告ではプロ5段相当となっているが、イ・セドル(9段)との対戦前にさらなる強化・改善があったと推察される
16