RL策略梯度方法之(四): Asynchronous Advantage Actor-Critic(A3C)
本专栏按照 https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms.html 顺序进行总结 。
A 3 C \color{red}A3C A3C :[ paper | code ]
原理解析
在A3C中,critic 学习值函数,同时多个 actor 并行训练,并不时地与全局参数同步。因此,A3C可以很好地用于并行训练。
- 服务器的每个核都是一个线程,也就是一个平行世界,同样的一个程序,在平行世界里同时运行,可以成倍数的提升运行速度。每个线程中的运行结果反馈给主网络,同时从主网络获取最新的参数更新,这样就将多个线程结合在一起,同时进一步减弱了事件的相关性,利于程序的收敛。
以 state-value 函数为例,状态值的损失函数是最小均方误差: J v ( w ) = ( G t − V w ( s ) ) 2 J_v(w) = (G_t - V_w(s))^2 Jv(w)=(Gt−Vw(s))2,梯度下降可以用来寻找最优的 w w w。此状态值函数用作策略梯度更新的基线。
接下来,看一下A3C 的实现流程图:
可以看到,我们有一个主网络,还有许多Worker(主网络和每个线程中的网络结构相同,均为AC结构,唯一不同点在于主网络不需要进行训练,仅用于存储AC结构的参数。)。A3C主要有两个操作,一个是pull,一个是push:
pull:把主网络的参数直接赋予Worker中的网络
push:使用各Worker中的梯度,对主网络的参数进行更新
算法实现
总体流程
以下是算法的整体流程:
- 全局参数 θ \theta θ 和 w w w,相同的 特定线程的参数 θ ′ \theta' θ′ 和 w ′ w' w′
- 初始化时间步: t = 1 t=1 t=1
- 当
T
≤
T
M
A
X
T \le T_{MAX}
T≤TMAX:
(1). 重置梯度 d θ = 0 , d w = 0 d\theta =0, dw=0 dθ=0,dw=0
(2). 使用全局参数同步特定线程的参数 θ ′ = θ \theta' = \theta θ′=θ 和 w ′ = w w' = w w′=w
(3). t s t a r t = t t_{start}=t tstart=t,采样一个初始状态 s t s_t st
(4). 当 ( s t ! = s_t != st!=TERMINAL
& & t − t start ≤ t max \ \ \&\& \ \ \ t - t_\text{start} \leq t_\text{max} && t−tstart≤tmax):
\quad ① 取动作: A t ∼ π θ ′ ( A t ∣ S t ) A_t \sim \pi_{\theta'}(A_t \vert S_t) At∼πθ′(At∣St),从环境中获得奖励 R t R_t Rt 和 下一个状态 s t + 1 s_{t+1} st+1
\quad ② 更新 t = t + 1 t=t+1 t=t+1 和 T = T + 1 T=T+1 T=T+1
(5). 初始化 保存return估计 的变量
\quad R = { 0 if s t is TERMINAL V w ′ ( s t ) otherwise R = \begin{cases} 0 & \text{if } s_t \text{ is TERMINAL} \\ V_{w'}(s_t) & \text{otherwise} \end{cases} R={0Vw′(st)if st is TERMINALotherwise
(6). 对于 : i = t − 1 , … , t start i = t-1, \dots, t_\text{start} i=t−1,…,tstart
\quad ① R ← γ R + R i R \leftarrow \gamma R + R_i R←γR+Ri,这里 R R R 是 G i G_i Gi 的一个 MC 度量
\quad ② 累加梯度关于 θ ′ \theta' θ′: d θ ← d θ + ∇ θ ′ log π θ ′ ( a i ∣ s i ) ( R − V w ′ ( s i ) ) d\theta \leftarrow d\theta + \nabla_{\theta'} \log \pi_{\theta'}(a_i \vert s_i)(R - V_{w'}(s_i)) dθ←dθ+∇θ′logπθ′(ai∣si)(R−Vw′(si))
\qquad 累加梯度关于 w ′ w' w′: d w ← d w + 2 ( R − V w ′ ( s i ) ) ∇ w ′ ( R − V w ′ ( s i ) ) dw \leftarrow dw + 2 (R - V_{w'}(s_i)) \nabla_{w'} (R - V_{w'}(s_i)) dw←dw+2(R−Vw′(si))∇w′(R−Vw′(si))
(7). 使用 d θ , d w \mathrm{d}\theta, \mathrm{d}w dθ,dw 异步更新 θ , w \theta, w θ,w
算法流程图如下:
A3C允许在多个agent的训练中并行进行。梯度积累步骤(6.2)可以看作是对基于mini-batch的随机梯度更新的并行改善: w w w 或 θ \theta θ 的值分别在每个训练线程的方向上进行一点独立的修正。