AlphaGo
AlphaGo では、畳み込みニューラルネットワークでモデル化した状態価値関数、および方策関数を用いることで、探索の深さと幅を減らしている。
学習
1. SL 方策ネットワーク(SL: 教師あり学習)
- プロの手を教師データとして学習する。
- 入力は盤面、出力はそれぞれ合法的な手を選ぶべき確率 \(p_{\sigma}(a \vert s)\)
- パラメータの更新は以下の式で行う
2. RL 方策ネットワーク(RL: 強化学習)
- SL ネットワークで学習させた初期値を利用し、今度はランダムに選択された手同士を戦わせる。
- ランダムに選択する理由は、現在の方策に対して過剰適合しないようにするため。
- パラメータの更新は以下の式で行う。
3. 盤面に関する価値関数を評価
盤面 s における価値関数 \(v^p(s)\) は、両方のプレイヤーが方策 p を用いた場合、
\(v^p(s) = E[z_t|s_t = s, a_t, ..., a_T ~ p]\)
ただ、最適な方策は分からないため、 RL 方策ネットワーク p_{\rho} に対する価値関数を評価する。
また、価値関数をパラメータ \(\theta\) の価値ネットワーク \(v_{\theta}(s)\) でモデル化する。
パラメータの更新は以下の式で行う。
目標出力 z を得るための大戦では、 t < U-1 の時間ステップでは SL 方策ネットワークから、 t > U+1 の時間ステップは RL 方策ネットワーク \(p_{\rho}\) から差し手を選ぶ。
t=T の時はランダムに指し手を選択する。
実戦(モンテカルロ木探索)
AlphaGoは、モンテカルロ木探索で選択肢を評価する「勝率」と「バイアス」に深層学習モデルを使った補正をしている。
打った手の勝率の予測を勝率の補正に使い、次の一手の予測をバイアスの補正に使う。
勝敗のカウントは、計算の速いロジスティック回帰が手を進めた結果を数える。
選択
探索木のルートからシュミレーションを始め、葉(木の末端)に到達した時点で終える。
終了時点のタイムステップを L とする。
各時間ステップ t < L で、行動を \(a_t = argmax_a(Q(s_t, a) + u(s_t, a))\) のように選ぶ。
ここで、
これは PUCT アルゴリズムに基づくボーナス項目であり、多く訪問した手については採用確率を低くし、広い探索を促進する役割がある。
\(C_{PUCT}\) は定数。
展開
訪問回数が閾値を超えたら、 s から行動選択した結果の状態 s’ を探索木に追加する。
評価
葉 \(s_L\) を 2 つの方法で評価する。
1 つ目は価値ネットワーク \(v_{\theta}(s_L)\) による評価。
2 つ目は、ロールアウトによる評価。
葉 \(s_L\) からロールアウトをゲームが終了するまで行う。
ロールアウトの時間ステップ \(t \geq L\) では、双方のプレイヤーの行動はロールアウト方策 \(p_{\pi}(a|s)\) を使って選択する。
ゲームが終わったら、報酬 \(z_t = r(s_T)\) を計算する。
\(r(s_T)\) は最終タイムステップ T における報酬であり、買ったら 1、負けたら -1 である。
記録
時間ステップ \(t \leq L\) では、ロールアウトの統計をあたかも \(n_rl\) 回負けたかのように更新しておく。
こうすることで、並列で走っている計算が同じノードをシュミレートする可能性を下げることができる。
1 回のシュミレーションが終了したら、負け分は元に戻しておく。
各状態、行動の評価値はモンテカルロ平均で与えることとし、
\[Q(s, a) = (1 - \lambda) \frac{W_v (s, a)}{N_v (s, a)} + \lambda \frac{W_r (s, a)}{N_r (s, a)}\]以上の操作が終われば、再びルートからシュミレーションを繰り返す。
与えられた時間内でシュミレーションを繰り返し、探索が終了したら 最も訪問回数が多い 行動を次の指し手として採用する。
AlphaStar
2019 年 1 月に、 StarCraft2 というゲームでプロプレイヤーを破った AI。
Transformer、 LSTM、 ResNet などの構造を採用している。