经验回放原理


时序差分学习(Temporal Difference Learning)

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

1.模型根据获取到的状态 st 决定采取动作 at 。

2.环境在执行动作 at 后会给出对应的奖励 rt 和新的状态 st+1 。

3.根据 TD target 计算出 TD error , 然后使用 梯度下降 等方法更新模型来降低 TD error 的值。

4.回到1重复。

经验回放(Experience Replay)

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

1.经验浪费
从上面的流程可以看出,经验 (sr,at,rt,st+1) 在使用一次后就会被丢掉。但是事实上,这些经验可以重复利用的。这也是需要做经验回放的主要原因。

2.经验相关性太强
前后相邻的经验的相关性太强了。比如对游戏来说,上一帧的画面和下一帧的画面变化很小。实验证明这种相关性是有害的,不利于模型的训练。

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

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

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

优先经验回放(Prioritized Experience Replay)

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

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

3.1 经验的重要性不同

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

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

3.2 经验的抽样概率

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

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

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

pt∝|δt|+ϵ

2.将所有经验的 TD error 的绝对值进行排序,大的靠前,小的靠后。 经验抽样的概率反比于排序后经验所处的位置。

pt∝1rank(t)

3.3 调整学习率

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

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

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

对于均匀抽样来说,每条经验概率相同,p1=⋯=pn=1n ,学习率系数 (n⋅pt)−β 值的和为1。

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

3.4 实现细节

需要将所有的经验 (sr,at,rt,st+1) 都计算出对应的 TD error。

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

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


评论
  目录