AlphaGoのしくみ

25,409 views

Published on

AlphaGoの論文を読んで、しくみがわかったのでメモを作りました。

Published in: Software
1 Comment
139 Likes
Statistics
Notes
No Downloads
Views
Total views
25,409
On SlideShare
0
From Embeds
0
Number of Embeds
1,316
Actions
Shares
0
Downloads
191
Comments
1
Likes
139
Embeds 0
No embeds

No notes for slide

AlphaGoのしくみ

  1. 1. AlphaGoの仕組み 富士通株式会社 吉田裕之 伊藤尚洋
  2. 2. はじめに  本稿は、以下の文献を読み込んだ際に作成したメモで ある  David Silver他、Mastering the game of Go with deep neural networks and tree search https://vk.com/doc-44016343_437229031?dl=56ce06e325d42fbc72  本稿は、上記論文の内容の内、AlphaGoのしくみに フォーカスしているので、評価結果等については原文 を参照されたい  本稿は、原文に含まれていない内容の推察を一部含ん でいる  本稿は、以下を前提知識として説明を省略する  囲碁のルール  畳込みニューラルネットワーク(CNN)の基本 1
  3. 3. 概要 AlphaGoのPlay= 50GPUを4週間使って学習した評価関数 + モンテカルロ木探索(MCTS) ① 評価値が高い手 を選びながら探 索木を下る ② リーフまで来たら二つ の方法で評価する (1) 評価関数 (2) ロールアウト ③ 評価値をルート まで伝播する s0 a sL 現在の盤面(ルート) 19✕19✕(空、黒、白) すべての合法手 評価値が高い合法手aを うった後の盤面 評価値が高いパスで 辿り着いたリーフ win / lose リーフから先は勝負がつくまで ランダムにうってみる (ロールアウト) ④ リーフの評価回数が閾 値を越えたら一段展開 する 2
  4. 4. 学習しておく関数  ポリシー関数 P(a|s) 盤面sで場所aにうつべき確率 a P(a|s)=1.0  バリュー関数 vθ(s) 盤面sの評価値 [-1,1] 名称 計算方法 教師データ 速度 用途 Pπ 線形softmax 人間による800万盤面 CPU 2μs ロールアウト時にaを決定 Pτ Pσが求まるまでの暫定値 Pσ ディープネットワーク 人間による2840万盤面 GPU 2ms 場所aの評価値の重み Pρ 自分どうしで128万対戦 バリュー関数の訓練に使う だけで対戦には使わない vθ ディープネットワーク Pσでランダムに作った 3000万盤面 + Pρで1億6000万回ロール アウトしてみた勝率 GPU 2ms 盤面sの評価値 3
  5. 5. 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
  6. 6. 入力層に使う特徴量  ポリシーネットワークPσ 、 Pρ :①=48個の0 or 1  バリューネットワークvθ :①+②=49個の0 or 1 ① ② 5
  7. 7. ポリシーネットワーク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
  8. 8. バリューネットワークvθの構造  入力層~第12隠れ層:  ポリシーネットワークと同じ  第12隠れ層~第13隠れ層:  (1✕1)のフィルター1枚+ReLU関数?  第13隠れ層~第14隠れ層:  全結合+ReLU関数  第14隠れ層~出力層  全結合+tanh関数 φ(y) = ey− e−y ey+ e−y 7
  9. 9. ポリシーネットワーク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=1 m 𝜕logpσ(ak|sk) 𝜕σ  学習率α:初期値0.003で8000万回毎に1/2にしていく  3.4億回(✕16盤面)の訓練を50GPUで3週間 フェーズ1 8
  10. 10. ロールアウトポリシーPπ 、Pτの学習  線形softmax回帰 P ai s = eyi j eyj、yi = j k xjkwk 入力 xik: i:(19✕19)の盤面の位置、k:以下の特徴量  ロールアウトポリシーPπ :③=109,747個の0 or 1  ツリーポリシーPτ: ③ +④=141,989個の0 or 1  800万盤面でwkを学習 ③ ④ 9
  11. 11. フェーズ2 ポリシーネットワークPρの強化学習  学習したポリシーネットワークどうしを 対戦させてさらに強化  学習側をポリシーρとし、相手をポリシーρ’とする  ρ’はそれまでのポリシープールの中からランダムに選ぶ  初期値はρ=ρ’=σ  500回ごとにその時点のρをポリシープールに入れる  n(=128)回対戦させて勝敗zTi(1 or -1)を決める  n回対戦中の全盤面に対して 報酬の期待値を最大化する確率的勾配降下法:  ∆ρ= α n i=1 n t=1 Ti 𝜕logpρ(at i |st i ) 𝜕ρ (zt i −v(st i ))  以上を1万回(✕128対戦) 、50GPUで一日 v(st i)の項は0 vθ(st i)が求まったらそれを使う 10
  12. 12. バリューネットワークvθの強化学習  PσとPρを使ってvθを強化学習  訓練データも人間の棋譜ではなく自動生成(>3000万個) ① 一様乱数(1~450)で手数Uを決める ② (U-1)手までPσ(人間のうち方を学習したポリシー)を相互に 使って訓練盤面を作る ③ U手目は一様乱数(1~361)を使って決める(うてるところが出る まで) ④ Pρ (強化学習したポリシー)を使ってロールアウトし、勝ち負けz を決定する  確率的勾配降下法を実施:  誤差関数は平均二乗誤差: α 2m k=1 m (zk − vθ(sk ))2  m(=32)個の訓練盤面に対して ∆θ= α m k=1 m (zk − vθ(sk )) 𝜕vθ(sk) 𝜕θ  以上を5000万回(✕32盤面) 、50GPUで一週間 フェーズ3 11
  13. 13. 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
  14. 14. 対戦時のシステム構成 論文には明記されていないので あくまでも想像 探索木 vθ用キュー Pσ用キュー CPU✕8? • キューから依 頼を取り出し てGPUに投 げる • vθ計算が終 わったらルー トまで伝播 • Pσ計算が終 わったら探索 木に反映 GPU✕8 • Pσとvθを 計算 CPU✕40? • 40並列で探索 木を下る • リーフまで来た ら、vθ計算を依 頼し、ロールア ウトを実行 • 勝敗がついたら ルートまで伝播 • 閾値を越えたら リーフを展開し Pσ計算を依頼 13
  15. 15. シミュレーション手順詳細(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
  16. 16. シミュレーション手順詳細(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
  17. 17. まとめ  従来のMCTSベースの囲碁ソフトとの差異は  高速なPπ ・Pτと、ディープラーニングで獲得したPσ・Pρの 2種類のポリシーを利用。  事前にPρでロールアウトした場合の評価近似値を、vθとして ディープラーニングしておく。  対戦では、Pπ ・PτとPσ・ vθを併用した評価に基づく探索を 行い、大局観を見失わない強さと学習済み局面に対する強さ を併せ持った  論文内の評価報告ではプロ5段相当となっているが、 イ・セドル(9段)との対戦前にさらなる強化・改善 があったと推察される 16

×