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)+\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中由于有参数\theta,\theta_v,优势函数可改写为:

A(s_t,a_t;\theta ,\theta_v) = \sum^{k-1}_{i=0} \gamma^i r_{t+i} + \gamma^k V(s_{t+k};\theta_v)-V(s_t;\theta_v)

算法流程
异步优势Actor-Critic - 每个Actor-Learner线程的伪代码如下:

定义全局参数向量\theta和\theta_v以及全局计数器T=0

定义线程自身参数向量\theta'和\theta'_v,初始化线程步数计数器t\leftarrow 1

当T\leqq T_{max}:

重置梯度:d\theta \leftarrow 0 和d \theta' _v \leftarrow 0

将线程自身的参数向量与全局参数向量同步:\theta' = \theta,\theta'_v = \theta_v

令线程计数器t_{start} =t并随机采样一个初始状态s_t

当(s_t !=终止状态)且t-t_{start}\leqq t_{max}:

根据当前线程的策略选择当前执行的动作a_t \sim \pi_{\theta '}(a_t|s_t)执行动作后接受回报r_t并转移到下一个状态s_{t+1}。

更新t以及T:t=t+1并且T=T+1

初始化保存累积回报估计值的变量:R = \begin{cases} 0, & \text{if }s=s_{terminal}\\V(s_t,\theta'_v), & \text{non-terminal }s_t \end{cases}

对于i \in \{t-1,...,t_{start}\},执行:

R \leftarrow r_i +\gamma R

累积关于参数\theta'的梯度:d\theta\leftarrow d\theta +\nabla_{\theta'}\log\pi(a_i|s_i;\theta')(R-V(s_i;\theta_v'))

累积关于参数\theta'_v的梯度:d\theta_v \leftarrow d\theta_v+{\partial(R-V(s_i;\theta_v'))^2\over\partial \theta_v'}

分别使用d\theta和d\theta_v异步更新\theta和\theta_v

改进
在[https://arxiv.org/pdf/1602.01783.pdf Asynchronous Methods for Deep Reinforcement Learning] 中作者还将熵(H(\pi(s_t,\theta')))加到目标函数中以避免收敛到次优确定性解,这是由于在最大化熵的过程中会避免分布过于集中,包含熵在内的完整目标函数梯度如下

\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为熵函数,\beta是用于控制熵正则化项的超参数。

论文
[https://arxiv.org/abs/1602.01783]
代码实现
[https://github.com/uvipen/Super-mario-bros-A3C-pytorch]
参考资料

评论 (0)

  • 还没有评论,来抢沙发吧。