Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AlphaGoのしくみ

46,870 views

Published on

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

Published in: Software

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

×