alphagoのしくみ

17
AlphaGoの仕組み 富士通株式会社 吉田裕之 伊藤尚洋

Upload: hiroyuki-yoshida

Post on 07-Jan-2017

24.500 views

Category:

Software


1 download

TRANSCRIPT

Page 1: AlphaGoのしくみ

AlphaGoの仕組み

富士通株式会社

吉田裕之

伊藤尚洋

Page 2: 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

Page 3: AlphaGoのしくみ

概要

AlphaGoのPlay=50GPUを4週間使って学習した評価関数 +モンテカルロ木探索(MCTS)

①評価値が高い手を選びながら探索木を下る

②リーフまで来たら二つの方法で評価する(1) 評価関数(2) ロールアウト

③評価値をルートまで伝播する

s0

a

sL

現在の盤面(ルート)19✕19✕(空、黒、白)

すべての合法手

評価値が高い合法手aをうった後の盤面

評価値が高いパスで辿り着いたリーフ

win / lose

リーフから先は勝負がつくまでランダムにうってみる

(ロールアウト)④ リーフの評価回数が閾値を越えたら一段展開する

2

Page 4: AlphaGoのしくみ

学習しておく関数

ポリシー関数 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

Page 5: AlphaGoのしくみ

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

Page 6: AlphaGoのしくみ

入力層に使う特徴量

ポリシーネットワークPσ、 Pρ:①=48個の0 or 1

バリューネットワークvθ :①+②=49個の0 or 1

5

Page 7: AlphaGoのしくみ

ポリシーネットワーク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

Page 8: AlphaGoのしくみ

バリューネットワークvθの構造

入力層~第12隠れ層:

ポリシーネットワークと同じ

第12隠れ層~第13隠れ層:

(1✕1)のフィルター1枚+ReLU関数?

第13隠れ層~第14隠れ層:

全結合+ReLU関数

第14隠れ層~出力層

全結合+tanh関数 φ(y) =ey− e−y

ey+ e−y

7

Page 9: AlphaGoのしくみ

ポリシーネットワーク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

Page 10: AlphaGoのしくみ

ロールアウトポリシー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

Page 11: AlphaGoのしくみ

フェーズ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

Page 12: AlphaGoのしくみ

バリューネットワーク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

Page 13: AlphaGoのしくみ

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

Page 14: AlphaGoのしくみ

対戦時のシステム構成論文には明記されていないので

あくまでも想像

探索木

vθ用キュー

Pσ用キュー

CPU✕8?• キューから依頼を取り出してGPUに投げる

• vθ計算が終わったらルートまで伝播

• Pσ計算が終わったら探索木に反映

GPU✕8• Pσとvθを計算

CPU✕40?• 40並列で探索木を下る

• リーフまで来たら、vθ計算を依頼し、ロールアウトを実行

• 勝敗がついたらルートまで伝播

• 閾値を越えたらリーフを展開しPσ計算を依頼

13

Page 15: AlphaGoのしくみ

シミュレーション手順詳細(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

Page 16: AlphaGoのしくみ

シミュレーション手順詳細(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

Page 17: AlphaGoのしくみ

まとめ

従来のMCTSベースの囲碁ソフトとの差異は

高速なPπ ・Pτと、ディープラーニングで獲得したPσ・Pρの2種類のポリシーを利用。

事前にPρでロールアウトした場合の評価近似値を、vθとしてディープラーニングしておく。

対戦では、Pπ ・PτとPσ・ vθを併用した評価に基づく探索を行い、大局観を見失わない強さと学習済み局面に対する強さを併せ持った

論文内の評価報告ではプロ5段相当となっているが、イ・セドル(9段)との対戦前にさらなる強化・改善があったと推察される

16