A3C

A3C（Asynchronous Advantage Actor-Critic）是由Google DeepMind团队于2016年提出的一种基于异步梯度的深度强化学习框架（Asynchronous Methods for Deep Reinforcement Learning），利用了多线程同时并行运行的特点，让多个Actor(演员)并行训练而定期与全局参数同步。该方法在Atari游戏和3D迷宫等方面都有不错的效果。 由 A ( s , a ) = Q ( s , a ) − V ( s ) = r ( s , a ) + γ E s ′ ∼ p ( s ′ | s , a ) [ V ( s ′ ) − V ( s ) ] ≃ r ( s , a ) + γ ( V ( s ′ ) − V ( s ) ) {\displaystyle A(s,a)=Q(s,a)-V(s)=r(s,a)+\gamma \mathbb {E} _{s'\sim p(s'|s,a)}[V^{(}s')-V^{(}s)]\simeq r(s,a)+\gamma (V(s')-V(s))} 。 当选取k步TD后，在A3C中由于有参数 θ , θ v {\displaystyle \theta ,\theta _{v}} ,优势函数可改写为： A ( s t , a t ; θ , θ v ) = ∑ i = 0 k − 1 γ i r t + i + γ k V ( s t + k ; θ v ) − V ( s t ; θ v ) {\displaystyle A(s_{t},a_{t};\theta ,\theta _{v})=\sum _{i=0}^{k-1}\gamma ^{i}r_{t+i}+\gamma ^{k}V(s_{t+k};\theta _{v})-V(s_{t};\theta _{v})} 异步优势Actor-Critic - 每个Actor-Learner线程的伪代码如下： 定义全局参数向量 θ {\displaystyle \theta } 和 θ v {\displaystyle \theta _{v}} 以及全局计数器 T = 0 {\displaystyle T=0} 定义线程自身参数向量 θ ′ {\displaystyle \theta '} 和 θ v ′ {\displaystyle \theta '_{v}} ,初始化线程步数计数器 t ← 1 {\displaystyle t\leftarrow 1} 当 T ≦ T m a x {\displaystyle T\leqq T_{max}} : 重置梯度: d θ ← 0 {\displaystyle d\theta \leftarrow 0} 和 d θ v ′ ← 0 {\displaystyle d\theta '_{v}\leftarrow 0} 将线程自身的参数向量与全局参数向量同步: θ ′ = θ {\displaystyle \theta '=\theta } ， θ v ′ = θ v {\displaystyle \theta '_{v}=\theta _{v}} 令线程计数器 t s t a r t = t {\displaystyle t_{start}=t} 并随机采样一个初始状态 s t {\displaystyle s_{t}} 当( s t ! = {\displaystyle s_{t}!=} 终止状态)且 t − t s t a r t ≦ t m a x {\displaystyle t-t_{start}\leqq t_{max}} : 根据当前线程的策略选择当前执行的动作 a t ∼ π θ ′ ( a t | s t ) {\displaystyle a_{t}\sim \pi _{\theta '}(a_{t}|s_{t})} 执行动作后接受回报 r t {\displaystyle r_{t}} 并转移到下一个状态 s t + 1 {\displaystyle s_{t+1}} 。 更新t以及 T : t = t + 1 {\displaystyle T:t=t+1} 并且 T = T + 1 {\displaystyle T=T+1} 初始化保存累积回报估计值的变量: R = { 0 , if  s = s t e r m i n a l V ( s t , θ v ′ ) , non-terminal  s t {\displaystyle R={\begin{cases}0,&{\text{if }}s=s_{terminal}\\V(s_{t},\theta '_{v}),&{\text{non-terminal }}s_{t}\end{cases}}} 对于 i ∈ { t − 1 , . . . , t s t a r t } {\displaystyle i\in \{t-1,...,t_{start}\}} ，执行： R ← r i + γ R {\displaystyle R\leftarrow r_{i}+\gamma R} 累积关于参数 θ ′ {\displaystyle \theta '} 的梯度: d θ ← d θ + ∇ θ ′ log ⁡ π ( a i | s i ; θ ′ ) ( R − V ( s i ; θ v ′ ) ) {\displaystyle d\theta \leftarrow d\theta +\nabla _{\theta '}\log \pi (a_{i}|s_{i};\theta ')(R-V(s_{i};\theta _{v}'))} 累积关于参数 θ v ′ {\displaystyle \theta '_{v}} 的梯度: d θ v ← d θ v + ∂ ( R − V ( s i ; θ v ′ ) ) 2 ∂ θ v ′ {\displaystyle d\theta _{v}\leftarrow d\theta _{v}+{\partial (R-V(s_{i};\theta _{v}'))^{2} \over \partial \theta _{v}'}} 分别使用 d θ {\displaystyle d\theta } 和 d θ v {\displaystyle d\theta _{v}} 异步更新 θ {\displaystyle \theta } 和 θ v {\displaystyle \theta _{v}} 在Asynchronous Methods for Deep Reinforcement Learning （页面存档备份，存于互联网档案馆）中作者还将熵( H ( π ( s t , θ ′ ) ) {\displaystyle H(\pi (s_{t},\theta '))} )加到目标函数中以避免收敛到次优确定性解，这是由于在最大化熵的过程中会避免分布过于集中，包含熵在内的完整目标函数梯度如下 ∇ θ ′ log ⁡ π ( a t | s t ; θ ′ ) ( R t − V ( s t ; θ v ) ) + β ∇ θ ′ H ( π ( s t ; θ ′ ) ) {\displaystyle \nabla _{\theta '}\log \pi (a_{t}|s_{t};\theta ')(R_{t}-V(s_{t};\theta _{v}))+\beta \nabla _{\theta }'H(\pi (s_{t};\theta '))} 其中H为熵函数， β {\displaystyle \beta } 是用于控制熵正则化项的超参数。 [1] （页面存档备份，存于互联网档案馆） [2] （页面存档备份，存于互联网档案馆） 策略梯度方法. Abracadabra. [2022-05-14] （英语）.  Asynchronous Methods for Deep Reinforcement Learning (PDF). [2022-05-15]. （原始内容存档 (PDF)于2022-06-22）.  策略梯度方法. Abracadabra. [2022-05-15] （英语）.  A3C - 搜索结果 - 知乎. www.zhihu.com. [2022-05-15]. （原始内容存档于2022-05-15）.