RL论文阅读【五】Prioritized Experience Replay

1 废话

·前一段一个很重要的面试挂了,难受了几天,又是谢师宴,还有昨天还打了一个晚上的电话,总之托了好几天。。。

prioritized replay 早就知道,也知道大概的意思,就是之前 loss 大的优先级设置大些,但是仔细看了论文,思想的确就是这样,但是实际的算法还是有很多细节要考虑的,下边就仔细说说。

注意:我把 transition 翻译成了“转换”,有时候也说成了“样本”。

2 Motivation

其实在我们日常的生活中就存在这样的现象,比如我们做错了一件事情,很难受,我们印象会特别深,甚至在脑海中重复很多次。其实这就是我们大脑在我们的 Experience Replay 把这些做错的事拿出来重新模拟训练。

还有一种情况,比如文中举了一个例子,在一个环境中,从起点需要走很多步才能到终点,只有从终点在走到起点才能获得一个正的 reward,而每一步都有一种走错地动作导致直接回到起点。这就造成了如果一共需要走n步,随机运动获得 reward 的概率是1/2^n,也就是平均执行 2^n 次动作才能获得 reward,那么我们把每次执行动作的转换(s, a, r, s')存在 replay 里,里面大量的都是没有 reward 的经验,直接均匀抽样几乎不可能抽到哪个能获得 reward 的转换。所以我们一定要增加那个有用的转换的优先级,保证一旦我们得到这个经验,我们就会多抽样几次,使得训练的时候把时间用在有用的转换上。

而且 Replay 越大,Prioritzed replay 越有用,因为均匀采样越难抽到有用的样本。

3 算法细节

主要讨论了如何计算优先级,实现的数据结构以及存在的问题和修正进行了说明。

3.1 用 TD-Error 计算优先级

这个其实是最容易想到的办法,就是我们每次从 replay 中抽到一批样本,我们计算 loss 其实就是用的 TD-error,把之前 loss 越大的样本优先级设置越高,然后选择优先级最高的一批数据,每次增加的新数据都先将优先级调至最高保证至少能抽到一次,在训练时再更新抽到的一批样本的 TD-error,论文中称这种方法为“greedy TD-error prioritization ”

实现的数据结构使用最大堆。

3.2 Stochastic prioritization

使用 TD-error 是存在一些问题的:

(1)replay 中的每个样本只有在被抽到后他的优先级才会被更新,那么有的样本可能刚开始 TD-error 很小,但是随着网络的训练,他的 TD-error 应该已经变得很大了,但是由于优先级低就一直没被抽到,也就一直没有更新,所以会错过很多有用的样本。

(2)比如在训练初期,我们的网络输出的值是错误的,其实 target 也是错误的,TD-error 带有很强的随机性,我们可能就会被某个 TD-error 很大的样本困住,其实他并没有多大用处,只是因为初期随机性比较大导致了他的 TD-error 比较大。换句话说收到异常值的影响比较大。

(3)使得抽到的样本可能会频繁是那几个最大的,导致网络过拟合。

所以我们应该增加一些随机性,使得剩余优先级不是特别大的样本也有可能被抽到,而且不要受异常值影响过于严重。因此应该定义一种概率,根据这种概率在 Replay 中抽取样本,文中给出的抽到第 i 个样本的概率为:

然后计算 p(i) 提出了两种方法:

(1) Proportional prioritization

直接定义 p(i) = TD-error + 一个很小的正值,保证分母不为零。 

(2) Rank-based prioritization 

根据 TD-error 对 Replay 中的样本进行排名,然后 p(i) 就等于第 i 个样本排名的倒数。

 

具体实现的数据结构我就不细说了,直接贴图:

3.3 有偏估计的改善

使用随机的更新(训练)来估计 value 的期望需要这些更新的分布和期望的分布相一致。而 Prioritized relay 改变了分布,所以带来的偏置,尤其在训练的最后阶段,估计的偏置影响是比较严重的因此需要减小偏置,很直观的办法就是除以抽到的概率,定义一个\omega _{i}乘在 loss 前,来根据抽到的概率改变 loss 的缩放程度。

\omega_{i}=(\frac{1}{N}\cdot \frac{1}{P(i)})^{\beta}

\beta为1时完全消除偏置,越小则优先级大的样本对训练的影响越大。在实现时从一个较小值逐渐增大至1。

将 Prioritized replay 用在 Double DQN 中的算法如下所示:

4 实验

还没看完,回头再加上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值