深層学習

A3C

複数の環境を非同期に走らせ、経験再生に頼らず相関を弱めながら方策と価値関数を同時に学習する手法です。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

A3C(Asynchronous Advantage Actor-Critic)は、複数の actor-learner がそれぞれ環境を進め、短い軌跡から得た勾配を共有パラメータへ非同期に反映する強化学習法です。Actor は方策、Critic は状態価値を学び、両者の差である advantage を方策勾配の重み付けに使います。

同じ課題を複数の作業員が別々の机で試し、各自の途中結果を中央の設計図へ順次書き戻すイメージです。机ごとに試行の順序がずれるため、同じ経験を保存して混ぜ直さなくても、更新に入るデータの相関が弱くなります。

なぜ必要か

DQN 系は経験再生に保存した遷移をランダムに取り出しますが、メモリと追加計算が必要で、古い方策のデータを扱う off-policy 学習が前提です。A3C は複数環境の並列実行でこれを置き換えます。worker ごとに環境が異なるため、勾配の相関が下がり、学習を安定化します。

観点A3CDQN 系の典型
データの扱い複数 worker の新しい軌跡replay memory から再標本化
主な学習対象方策と状態価値行動価値 QQ
並列化の役割相関を弱め、更新を進める主にデータや計算を拡張

原論文は、複数の標準的な強化学習法を非同期化して検証し、その中で非同期 actor-critic が最も良い結果を示したと報告しています。また、Atari の実験を単一のマルチコアCPUでGPUなしに学習したことも主張しています。

仕組み

方策を π(at∣st;θ)\pi(a_t\mid s_t;\theta)、そのパラメータを θ\theta、状態価値を V(st;θv)V(s_t;\theta_v)、価値側のパラメータを θv\theta_v とします。worker は tt から最大 nn step 進み、終端なら0、未終端なら最後の状態価値で bootstrap した n-step return を作ります。

Rt=rt+γrt+1+⋯+γn−1rt+n−1+γnV(st+n;θv)R_t = r_t + \gamma r_{t+1} + \cdots + \gamma^{n-1}r_{t+n-1} + \gamma^n V(s_{t+n};\theta_v)

ここで rtr_t は時刻 tt の報酬、γ\gamma は割引率です。Critic の誤差は Rt−V(st;θv)R_t-V(s_t;\theta_v) で、Actor に渡す advantage の推定値にもなります。

At≈Rt−V(st;θv)A_t \approx R_t - V(s_t;\theta_v)

AtA_t が正なら、その行動は現在の価値予測より良いので選択確率を増やし、負なら減らします。方策側の勾配は次の形です。

∇θlog⁡π(at∣st;θ) At\nabla_\theta \log\pi(a_t\mid s_t;\theta)\,A_t

worker はローカルに軌跡と勾配を蓄積し、共有パラメータへ非同期に更新します。別 worker が共有値を書き換えるため、勾配は厳密に同じパラメータから計算されません。この非同期更新が、経験再生なしで多様なサンプルを流し込む設計です。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
A3C の名前の意味Asynchronous、Advantage、Actor-Critic の対応を押さえるA を Agent や Action と読む
advantage の役割return と状態価値の差で方策勾配を重み付けする行動価値そのもの、または報酬そのものとする
経験再生との関係複数環境の並列性でサンプル相関を弱めるreplay memory を必須部品とする
worker の更新ローカル軌跡から勾配を作り共有パラメータへ非同期反映する全workerを同期バリアで待たせる

実装で確かめる

次の例は、軌跡から n-step return と advantage を計算します。A3Cでは、この値から方策・価値の勾配を作り、worker で共有モデルを更新します。

import numpy as np

rewards = np.array([0.0, 1.0, 2.0])
values = np.array([0.4, 0.5, 0.6, 0.0])  # 最後は終端のbootstrap値
gamma = 0.9
n = 3
R = values[-1]
returns = np.zeros(n)
for t in range(n - 1, -1, -1):
    R = rewards[t] + gamma * R
    returns[t] = R
advantages = returns - values[:n]
assert np.allclose(returns, [2.52, 2.8, 2.0])
assert np.allclose(advantages, [2.12, 2.3, 1.4])

取り違えやすいもの

用語A3Cとの切り分け
Actor-CriticA3Cの土台。A3Cはそこへ非同期 worker と advantage を組み合わせたもの
A2CActor-Critic の更新を同期してまとめる実装上の対比。非同期性がA3Cとの焦点
DQN行動価値を学び、経験再生を使う代表例。A3Cは方策を直接更新する
n-step 法A3Cがreturnを作る時間方向の方法。A3Cという並列更新機構そのものではない

想起チェック

A3Cで経験再生の代わりになる設計は何か

複数の worker が別々の環境を非同期に進め、相関の異なる軌跡から更新します。再生メモリからのランダム抽出ではありません。

advantageは何と何の差か

return の推定値 RtR_t と、Critic が出す状態価値 V(st;θv)V(s_t;\theta_v) の差です。方策勾配の大きさと向きを行動の良し悪しに合わせます。

A3Cの非同期性は何を共有するか

worker が計算した勾配を共有パラメータへ反映します。worker同士が同じ時刻の軌跡を同期してから更新する方式ではありません。

出典