全部代码
https://github.com/ColinFred/Reinforce_Learning_Pytorch/tree/main/RL/DQN
一、优先回放
在经验回放中是利用均匀分布采样,而这种方式看上去并不高效,对于智能体而言,这些数据的重要程度并不一样,因此提出优先回放(Prioritized Replay)的方法。优先回放的基本思想就是打破均匀采样,赋予学习效率高的样本以更大的采样权重。
一个理想的标准是智能体学习的效率越高,权重越大。符合该标准的一个选择是TD偏差δ。TD偏差越大,说明该状态处的值函数与TD目标的差距越大,智能体的更新量越大,因此该处的学习效率越高。
简而言之,就是在原来的replay buffer中给每个Transition增加了抽样的优先级(priority)
优先回放DQN主要有三点改变:
1, 为了方便优先回放存储与及采样,采用sumTree树来存储;
原文有两种方法计算样本抽样概率:proportional priority和rank-based priority。proportional priority就是样本被sample到的概率是正比于TD偏差的priority;rank-based priority就是概率正比于Transition priority的排序(rank)。这里考虑proportional priority,Transition被抽到的概率与TD偏差成正比。
并且,为保证每一个存入的Transition都能被sample到,新Transition会被赋予一个很大的priority。
2, 目标函数在计算时根据样本的TD偏差添加了权重(权重和TD偏差有关,偏差越大,权重越大):
1 m ∑ j = 1 m w j ( y j − Q ( s j , a j , w ) ) 2 \frac{1}{m}\sum\limits_{j=1}^m w_j (y_j-Q(s_j, a_j, w))^2 m1j=1∑mwj(yj−Q(sj,aj,w))2
3,每次更新Q网络参数时,都需要重新计算TD误差 δ j = y j − Q ( s j , a j , w ) \delta_j = y_j- Q(s_j, a_j, w) δj=yj

本文介绍了优先回放(Prioritized Replay)在DQN算法中的应用,以提高学习效率。通过使用TD偏差作为优先级标准,打破均匀采样,赋予高学习效率样本更大权重。文章详细讲解了优先回放的三个关键改变,包括使用SumTree存储和采样,根据TD偏差加权目标函数,以及每次更新时重新计算TD误差。还提供了相关代码实现,包括SumTree和ReplayMemory_PER类。最后,展示了如何在PerDQN类中整合这些概念进行学习。
最低0.47元/天 解锁文章
915

被折叠的 条评论
为什么被折叠?



