最早的 RL 算法同时做这两件事,于是得到了 on-policy 算法框架,其 agent 与环境交互的行为策略和最终学到的策略是相同的,如下所示
举例来说,经典 on-policy 方法 sarsa 的数据流图如下
同时做两件事,就要同时处理价值估计面临的贡献度分配和策略更新面临的探索利用困境,这会导致几个问题
训练不稳定
:要良好地估计价值函数,需要无限次地访问所有 s s s 或 ( s , a ) (s,a) (s,a),因此 agent 不得不把环境探索结合到其策略中,比如使用 ε \varepsilon ε-greedy 策略,这不但增加了不稳定定性,且无法直接得到最优策略。更重要的是,on-policy 算法的探索是直接建立在其价值估计上的,而价值估计又来自探索经验,二者循环依赖,这会导致更强的风险寻求行为(比如某状态位置价值估计高了,就会进一步倾向于试探这附近的位置,有点正反馈的意味),使得训练不稳定数据相关性强
:由于我们使用轨迹中连续的 transition 作为训练样本,短期数据相关性是很强的(比如玩电子游戏,连续两帧画面之间非常相似),这违反了机器学习常见的 i.i.d 原则,在做梯度下降时,最近一段时间内的梯度方向总是相似,会导致更多震荡数据利用率低
:on-policy 要求必须使用当下行为策略采集的 transition 更新策略,因此过去的经验 transition 无法重用,所有数据用一次就扔掉了,有些当前不重要但后期重要的 transition 无法发挥最大作用,数据浪费严重由于 on-policy 算法存在上述问题,人们提出了 off-policy 框架,将数据收集和策略提升两个任务解耦分别处理,其包含两个策略
行为策略behavior policy
π b \pi_b πb:专门负责 transition 数据的获取,具有随机性因而可以无限次地采样所有 s s s 或 ( s , a ) (s,a) (s,a)目标策略target policy
π t \pi_t πt:利用行为策略收集到的样本以及策略提升方法提升自身性能,并最终成为最优策略举例来说,经典的 off-policy 方法 Q-learning 使用 ε \varepsilon ε-greedy 作为行为策略,使用 greedy 作为目标策略,其数据流图如下
为了高效地进行探索,行为策略通常还是需要借助估计价值的指导,on-policy 中的不稳定(循环依赖)、数据相关性强、数据利用率低等几个问题仍然存在。但好消息是,off-policy 框架非常灵活,我们可以使用各种手段收集 transition 数据,如果能找到一个 “聪明的” 行为策略,总是能为算法提供最合适的样本,那么算法的效率将会得到提升
一个自然的想法是,我们可以把过去的经验 transition 保存下来重用,这样就能一举缓解上述三个问题,这个保存过去 transition 的机制就是 replay buffer,交互流程图示如下
DQN 论文 Playing Atari with Deep Reinforcement Learning 首次将深度学习和 Q-learning 结合,并加入了 replay buffer 机制。其伪代码如下所示,蓝色部分把采样 transition 加入 replay buffer,黄色部分从 replay buffer 中均匀采样并更新价值价值网络参数
经验重放可以用更多的计算和内存来减少学习所需的样本数量,这通常比 agent 与环境的交互的成本低
如 1.2 节伪代码所示,原始的 replay buffer 是随机均匀采样来更新的,但事实上,不同 transition 的重要性是不同的,如果更频繁地重放重要的 transition,那么就能进一步提升学习效率。为了验证这个想法,作者进行了一个简单的实验,如下所示
优先级重放的核心是设计衡量每个 transition 重要性的标准
这尤其适用于增量在线 RL 算法,如 SARSA 或 Q-learning,因为它们已经计算出 TD error δ \delta δ ,并按照其比例更新参数
作者进一步实验了使用 TD error 设计重放优先级的有效性,实验 MDP 及 replay buffer 设置和上面相同,使用 TD error 绝对值 ∣ δ ∣ |\delta| ∣δ∣ 大小作为优先级,并贪心地选择 ∣ δ ∣ |\delta| ∣δ∣ 最大的 transition 进行重放。对于未见 transition,在加入 replay buffer 时将其设为最高优先级,以保证所有 transition 都至少计算一次,实验结果如下所示
可见,基于 TD error 设计重放优先级,虽然不如上帝 Oracle,但也带来了不小的性能提升
注:作者在这个实验中对 Q 价值设置了乐观初始化。在使用 TD error 作为重放优先级时,随机(或乐观)初始化是必要的,因为若用零初始化,则无 reward 的 transition 最初 TD error δ = 0 \delta = 0 δ=0,因而其将被放置在队列的底部,直到其他 transition 上的 TD error 降至收敛阈值以下(都被调整完)后才有机会被重放
需要说明的是,在某些情况下,贪心地按照 TD error 进行重放可能是一个很差的选择,这是因为 TD error 只有在遇到对应的 ( s , a ) (s,a) (s,a) transition 时才会更新,这导致几个后果
为此,我们必须要在基于 TD error 的简单贪心重放策略中增加一些随机性,并且保证
具体地说,设第 i i i 个样本优先级为 p i > 0 p_i>0 pi>0,则其被采样的概率为
P ( i ) = p i α ∑ k p k α P(i) = \frac{p_i^\alpha}{\sum_k p_k^\alpha} P(i)=∑kpkαpiα 其中超参数 α \alpha α 控制对优先级的倾向程度
具体实现上,作者使用了一种叫做 “sum-tree” 的数据结构。这里可以用概率论中的几何概型去理解,如果把每个样本的 p i α p_i^\alpha piα 看成一段区间,那么所有样本可以拼成一个长 ∑ k p k α \sum_k p_k^\alpha ∑kpkα 的区间
下图是 sum-tree 的采样示例(sum-tree 其实就是一个大顶堆,每个父节点大小是其两个子节点的和),详细说明可以参考 off-policy全系列(DDPG-TD3-SAC-SAC-auto)+优先经验回放PER-代码-实验结果分析
下面我们进一步考虑样本优先级 p i p_i pi 的设计
注:如果对价值进行 0 初始化,那么 δ = 0 \delta=0 δ=0 的 transition 在训练早期特别常见,如果是稀疏奖励的情况就更常见了、
对于 Q-learning 而言,其使用 Bellman optimal equation 作为更新公式,由于使用最优价值函数,其 Bellman 一致性条件可以用一种特殊的形式表示,不拘泥于任意特定的策略。从公式上看, Q-learning 的学习目标如下
Q ∗ ( s , a ) = max E π ∗ [ G t ∣ S t = s , A t = a ] = max E π ∗ [ R t + 1 + γ G t + 1 ∣ S t = s , A t = a ] = E [ R t + 1 + γ max a ′ Q ∗ ( S t + 1 , a ′ ) ∣ S t = s , A t = a ] = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ max a ′ Q ∗ ( s ′ , a ′ ) ] \begin{aligned} Q_*(s,a) &= \max\mathbb{E}_{\pi_*}[G_t|S_t=s,A_t=a] \\ &= \max \mathbb{E}_{\pi_*}[R_{t+1}+\gamma G_{t+1}|S_t=s,A_t=a] \\ &= \mathbb{E}[R_{t+1}+\gamma \max_{a'}Q_*(S_{t+1},a')|S_t=s,A_t=a] \\ &= \sum_{s',r}p(s',r|s,a)[r+\gamma \max_{a'}Q_*(s',a')] \end{aligned} Q∗(s,a)=maxEπ∗[Gt∣St=s,At=a]=maxEπ∗[Rt+1+γGt+1∣St=s,At=a]=E[Rt+1+γa′maxQ∗(St+1,a′)∣St=s,At=a]=s′,r∑p(s′,r∣s,a)[r+γa′maxQ∗(s′,a′)] 等式右侧的期望只与状态转移分布有关而与策略无关,不论训练 transition 来自于哪个策略,按照 Q-learning 的更新式更新都能使 Q Q Q 函数接近 Q ∗ Q^* Q∗,又因为 Q-learning 是一个表格型方法,没有泛化性,对一个 ( s , a ) (s,a) (s,a) 的价值更新完全不会影响到其他 ( s , a ) (s,a) (s,a) 的价值估计,因而无论使用什么行为策略去收集 transition,都不会引入偏差,也就不需要重要性采样。不过,不同行为策略导致的价值收敛过程还是不一样的,行为策略更频繁访问 transition 的价值会更快收敛,当计算 transition 数量趋向无穷时,所有能无限采所有 ( s , a ) (s,a) (s,a) 的行为策略最终会学到一样的价值函数 Q Q Q
这就好像是用茶壶往一堆杯子里倒水,向一个杯子倒水不会干扰其他杯子。行为策略指导你向哪些杯子倒,其频繁访问的杯子更快装满水(价值收敛),如果所有杯子被访问的概率都大于 0,则时间趋于无穷时总能使所有杯子装满水(价值全部收敛到相同位置)
当引入神经网络估计价值时,由于其泛化性,情况有所不同了。对于 DQN 系列方法而言,其使用 L 2 L_2 L2 损失进行优化。如果做梯度下降的话,第 i i i 轮迭代损失函数为
L i = E s , a ∼ ρ ( ⋅ ) [ ( y i − Q ( s , a , θ i ) 2 ) ] \mathcal{L_i} = \mathbb{E}_{s,a\sim\rho(·)}\big[(y_i-Q(s,a,\theta_i)^2)\big] Li=Es,a∼ρ(⋅)[(yi−Q(s,a,θi)2)] 其中 ρ \rho ρ 是行为策略诱导的 ( s , a ) (s,a) (s,a) 分布, y i y_i yi 是 TD target y i = E s ′ ∼ env [ r + γ max a ′ Q ( s ′ , a ′ , θ i − 1 ) ∣ s , a ] y_i = \mathbb{E}_{s'\sim \text{env}}\big[r+\gamma\max_{a'}Q(s',a',\theta_{i-1})|s,a\big] yi=Es′∼env[r+γa′maxQ(s′,a′,θi−1)∣s,a] 损失函数梯度为
▽ θ i L i = E s , a ∼ ρ ( ⋅ ) , s ′ ∼ env [ ( r + γ max a ′ Q ( s ′ , a ′ , θ i − 1 ) − Q ( s , a , θ i ) ) ▽ θ i Q ( s , a , θ i ) ] \triangledown_{\theta_i}\mathcal{L}_i = \mathbb{E}_{s,a\sim\rho(·),s'\sim \text{env}}\big[\big(r+\gamma\max_{a'}Q(s',a',\theta_{i-1})-Q(s,a,\theta_i)\big)\triangledown_{\theta_i} Q(s,a,\theta_i)\big] ▽θiLi=Es,a∼ρ(⋅),s′∼env[(r+γa′maxQ(s′,a′,θi−1)−Q(s,a,θi))▽θiQ(s,a,θi)] 虽然这里依然是基于 Bellman optimal equation 来做更新,但是要注意到梯度期望中 ρ \rho ρ 会受到行为策略影响。这本质上是由于神经网络的泛化性导致的,神经网络的梯度更新会影响到所有 ( s , a ) (s,a) (s,a) 的价值,期望梯度方向来自 mini-batch 中的 transition 样本,这些样本的采集又受到行为策略影响,于是不同的行为策略就会导致价值网络收敛到不同位置
这就好像是用水桶往一堆杯子泼水,往一个地方泼水,所有杯子都会溅到,水还可能洒出来。行为策略指导你向哪些泼水,这时行为策略的一点点区别,都会导致各个杯子最终的水量不同
从这个角度分析,当 replay buffer 使用均匀采样时,对行为策略影响不大因,而不需要考虑偏差(replay transition 的分布是近期行为策略诱导 ( s , a ) (s,a) (s,a) 分布的平均分布)
事实上,DQN 的原始论文完全没有提到可能引入偏差这件事,我认为这里其实还是会有一点偏差的,因为 online RL 中行为策略在不断变化,replay buffer 中的 transition 毕竟还是来自比较老的策略
·
当向 DQN 系列方法中加入 RER 时,这时真正去更新价值网络的 ( s , a ) (s,a) (s,a) 分布和行为策略诱导的 ( s , a ) (s,a) (s,a) 分布会有很大区别了,加上神经网络泛化性的影响,价值估计偏差就会变得很大了(价值网络会过拟合到频繁采样重放的 transition 上),因此必须做重要性采样
为了使价值网络收敛到相同的结果,做重要性采样,使用系数 w ( i ) w(i) w(i) 来调节第 i i i 个 transition 样本的损失,即
L PER = w ( i ) L ( δ ( i ) ) \mathcal{L}_{\text{PER}} = w(i)\mathcal{L}(\delta(i)) LPER=w(i)L(δ(i)) 这里的系数使用重要性采样权重(importance sampling weights),具体为
w i = ( 1 N ⋅ 1 p ( i ) ) β w_i = (\frac{1}{N}·\frac{1}{p(i)})^\beta wi=(N1⋅p(i)1)β 其中 N N N 是 replay buffer 中的样本数,当 β = 1 \beta=1 β=1 时退化为均匀采样(还是会更多次重放高 TD error 的 transition,但这些 transition 的影响梯度的步长较小,期望梯度和均匀采样重放时相等)。在典型的强化学习场景中,由于策略、状态分布和引导目标的变化,梯度更新的无偏性在训练结束时接近收敛时最为重要,因为过程无论如何都是高度非平稳的,所以对 β \beta β 进行退火处理,从 β 0 < 1 \beta_0<1 β0<1 线性增加到 1 1 1
这里的重要性采样并不能完全消除 distribution shift,因为梯度下降的影响是类似积分那样的,早期 β < 1 \beta<1 β<1 时造成的影响仍会存在。可以在训练早期完成退火,然后在均匀重放的情况下继续训练较长时间,以缓解这种影响。另外作者也尝试了使 β \beta β 恒等于 1 的情况,同样取得了性能提升
最后,为了增加稳定性,通过除以最大值把 w ( i ) w(i) w(i) 压缩到 ( 0 , 1 ] (0,1] (0,1] 之间,即
w ( i ) = w i max j w j w(i) = \frac{w_i}{\max_j w_j} w(i)=maxjwjwi
作者文中还提出这样处理的另一个优点,TD error ∣ δ ( i ) ∣ |\delta(i)| ∣δ(i)∣ 高的 transition,其损失梯度也比较大,通过重要性采样权重可以减小更新梯度,这有点相当于自适应地调整学习率,使算法能更好地跟踪高度非线性的函数曲线
对于两种优先级方案,作者猜想
实验发现两种变体在实践中表现相似,作者怀疑这是因为在 DQN 算法中大量使用了 clipping 操作(将 reward 和 TD error 裁剪到一个小区间中),这会去除异常值,避免 Proportional prioritization 方案受到太大影响
作者观察了 TD error 分布随时间的变化情况,如下
这里线的颜色表示了其对应的时间(蓝色是开始时刻,红色是结束时刻),作者发现无论均匀采样重放还是 PER,都会使 TD error 分布接近重尾形式,但是 PER 会加速这个过程,这从经验上验证了 PER 公式 P ( i ) = p i α ∑ k p k α P(i) = \frac{p_i^\alpha}{\sum_k p_k^\alpha} P(i)=∑kpkαpiα 的形式
作者还进一步分析的均匀采样重放和 PER 的区别
另外作者还进行了一些拓展探索,请参考原文