Policy Gradient 之 A3C 与 A2C 算法

本文介绍了Policy Gradient方法中的A3C和A2C算法,探讨了Policy Gradient与Value-based方法的区别,并分析了A3C算法的并行化优势。A3C在Actor-Critic基础上加入并行化,提高了训练速度和稳定性。A2C则是取消异步更新的简化版本。实验结果显示模型在Pong环境中能快速收敛。
摘要由CSDN通过智能技术生成

Motivation

之前参加了学习强化学习以及PARL框架的训练营。这次是上次学习的一个拓展(“你学习,我送书,一起来爬RL的大山”)。这里主要来研究一下Policy Gradient下面的一个非常重要的算法A3C。

Background

Policy Gradient方法是对立于Value-based方法的另外一大类解决强化学习问题的算法。Policy Gradient下属有许多重要的算法,比如最基本的REINFORCE方法,以及Actor-Critic算法,PPO算法以及DDPG算法等。A3C在原始Actor-Critic的算法框架上加入了并行化模型的方法。最初在DeepMind在ICML2016年发表的论文Asynchronous Methods for Deep Reinforcement Learning中被提出。实际上,这篇论文不仅仅提出了A3C算法,还给出了一种在强化学习模型,特别是需要利用深度神经网络的深度强化学习模型中引入并行化方法的范式。论文中同样也给出了one-step Q-learning、one-step SARSA 以及 n-step Q-learning的并行化异步训练版本。

之所以要引进这样一种并行化训练的范式是因为在此前的强化学习算法中存在一些问题。因为agent与环境交互并得到reward以及下一个state这样的流程是一个串行的结构。如果我们希望充分利用历史经验来降低模型的variance以及减少环境扰动带来的偏差,我们就必须使用一个经验回放的机制。为此我们需要维护一个经验池。但是这样会导致占用巨大的存储空间以及我们的算法只能采用off-policy的方法。相信训练过DQN的同学都有这样的感受,训练一个简单的Atari模型就需要几十个小时,加上还要调参,可能一周时间也就跑几次实验,最后还是很难训练出来一个很好的模型。这也是强化学习算法难以复现的其中一个因素。另一方面,如果我们使用的是on-policy的方法,由于我们只能使用当前policy所生成的transaction作为训练数据,我们很难充分利用我们平时训练神经网络的时候采用的采样batch的方法来让我们的网络训练的比较稳定。所以这里就引入了一种并行化产生多个policy function同时探索并产生transaction数据来训练模型的想法。实际实验中我们会发现,增加了并行化之后,模型训练的速度直接起飞。比使用单机DQN快了好几倍。同时网络训练看起来也更加稳定。实际上在论文中作者也证实了这个结果:

First, we obtain a reduction in training time that is roughly linear in the number of parallel actor-learners. Second, since we no longer rely on experience replay for stabilizing learning we are able to use on-policy reinforcement learning methods such as Sarsa and actor-critic to train neural networks in a stable way.

在之后的实验中,大家发现异步更新和同步更新并不是决定算法优劣的主要因素,因此大家开始尝试非异步的方法,这样就有了A2C。接下来我们就从Policy Gradient开始,来理解一下A3C/A2C模型的结构以及背后的思想。之后再来看一下PARL里面是如何实现的。

Algorithm

Policy Gradient

首先我们还是来回顾一下Policy Gradient以及其中非常重要的一个基本算法:REINFORCE。与基于最优价值的强化学习算法不同,基于策略的强化学习算法并不对于值函数进行估计,而是直接输出action的参数或者action的概率从而计算策略可能更新的方向。Value-Based的方法是一种确定性策略,当模型优化到最优的时候,对于同样的一个state的输入,产生的action是确定的。Policy-based的策略可以表示随机性策略,这种策略在一些随机性较大的任务中效果更好。

强化学习的目标是最大化长期回报期望。由于环境和每一步动作都存在随机性,这里我们要先引入一个轨迹(Trajectory)的概念。我们将一个episode中出现的state和action的序列记为一个Trajectory:

τ = { s 1 , a 1 , s 2 , a 2 , . . , s T , a T } \tau = \{s_1, a_1, s_2, a_2, .., s_T, a_T\} τ={ s1,a1,s2,a2,..,sT,aT}

该Trajectory发生的概率是:
p θ ( τ ) = p ( s 1 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 ) π θ ( s 2 ∣ s 1 , a 1 ) . . . p_{\theta}(\tau) = p(s_1)\pi_{\theta}(a_1 | s_1)p(s_2|s_1)\pi_{\theta}(s_2 | s_1, a_1) ... pθ(τ)=p(s1)πθ(a1s1)p(s2s1)πθ(s2s1,a1)...

该Trajectory的总回报是:
R ( τ ) = ∑ t = 1 T r t R(\tau) = \sum_{t=1}^{T} {r_t} R(τ)=t=1Trt

当然我们知道,从一个state出发,之后会存在许多不同的Trajectories。故而,当前策略的期望回报就是所有轨迹的回报的期望。由于轨迹有很多,我们可以进一步采用蒙特卡洛法来近似估计这个期望回报,也就是通过所有episode的平均回报值来估计当前的策略的回报值:

J ( θ ) = R ˉ θ = ∑ τ R ( τ ) p θ ( τ ) ≈ 1 N ∑ n = 1 N R ( τ ) J(\theta) = \bar R_{\theta} = \sum_{\tau}{R(\tau)p_{\theta}(\tau)} \approx \frac{1}{N} \sum_{n=1}^{N}{R(\tau)} J(θ)=Rˉθ=τR(τ)pθ(τ)N1n=1N

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值