一、时序差分学习(Temporal Difference Learning)

强化学习中常用时序差分学习来更新模型,时序差分学习的一般流程是:

  1. 模型根据获取到的状态 sts_t 决定采取动作 ata_t 。
  2. 环境在执行动作 ata_t 后会给出对应的奖励 rtr_t 和新的状态 st+1s_{t+1} 。
  3. 根据 TD target 计算出 TD error , 然后使用 梯度下降 等方法更新模型来降低 TD error 的值。
  4. 回到1重复。

二、经验回放(Experience Replay)

原始的时序差分学习在实际的应用中有两个缺点:

  1. 经验浪费 从上面的流程可以看出,经验 (sr,at,rt,st+1)(s_r, a_t, r_t, s_{t+1}) 在使用一次后就会被丢掉。但是事实上,这些经验可以重复利用的。这也是需要做经验回放的主要原因。
  2. 经验相关性太强 前后相邻的经验的相关性太强了。比如对游戏来说,上一帧的画面和下一帧的画面变化很小。实验证明这种相关性是有害的,不利于模型的训练。

经验回放则可以有效的解决上面的两个缺点。

经验回放的原理就是只保留最近的 nn 条经验,每次训练时 随机均匀的 从这些经验中 不重复的 选取一条或多条经验来训练。

nn 的大小通常在十万到百万之间,视情况而定。这个值对训练影响较大。 经验回放现在是深度强化学习的标准技巧之一。

三、优先经验回放(Prioritized Experience Replay)

对经验回放改进有很多,其中一个常见的是优先经验回放。

优先经验回放的原理是 用非均匀抽样代替均匀抽样 来抽取经验。

3.1 经验的重要性不同

模型在和环境交互时,获得的经验的重要性是不同的。

比如:在一个打怪升级的游戏中,大多数经验都是和小兵战斗,只有很少的经验是和BOSS战斗。这样就容易导致训练出来的模型容易战胜小兵,但是很难打赢BOSS。所以和BOSS战斗的经验比和小兵战斗的经验更为重要。

3.2 经验的抽样概率

对于越不熟悉的状态,模型预测出的 TD error 的绝对值就会越大,所以可以根据 TD error 的绝对值的大小来判断一条经验的重要性。即 TD error 的绝对值越大越重要。

将 TD error 对应到抽样概率的方式有两种:

  1. 经验抽样的概率 ptp_t 正比于 TD error δt\delta_t 的绝对值加上一个很小的数 ϵ\epsilon (避免概率为0)。

    pt∝∣δt∣+ϵp_t \propto \vert \delta_t \vert + \epsilon
  2. 将所有经验的 TD error 的绝对值进行排序,大的靠前,小的靠后。 经验抽样的概率反比于排序后经验所处的位置。

    pt∝1rank(t)p_t \propto \frac{1}{rank(t)}

3.3 调整学习率

因为抽样时是非均匀的,所以需要调整学习率来抵消不同抽样概率造成的偏差。

如果一条经验的抽样概率很大,那么它就会经常的被抽到用于更新模型,所以需要调小这条经验的学习率。反之亦然。

每条经验的学习率都需要乘以系数 (n⋅pt)−β(n \cdot p_t)^{-\beta},其中 nn 是经验回放池中经验的总条数, ptp_t 是每条经验的抽验概率, β\beta 是一个超参数,值在0到1之间, β∈(0,1)\beta \in (0, 1)。

对于均匀抽样来说,每条经验概率相同,p1=⋯=pn=1np_1 = \cdots = p_n = \frac{1}{n} ,学习率系数 (n⋅pt)−β(n \cdot p_t)^{-\beta} 值的和为1。

对于非均匀抽样来说,抽样概率 ptp_t 越大,学习率系数 (n⋅pt)−β(n \cdot p_t)^{-\beta} 的值越小。论文中推荐开始时 β\beta 值很小,后面逐步增长到1。

3.4 实现细节

需要将所有的经验 (sr,at,rt,st+1)(s_r, a_t, r_t, s_{t+1}) 都计算出对应的 TD error。

对于刚刚收集到的经验,可以将其 TD error 的值设置为最大值。

每次使用经验后都需要更新对应的 TD error 。


参考:Experience Replay 经验回放论文:Reinforcement Learning for Robots Using Neural Networks 优先经验回放论文:Prioritized Experience Replay