论文:《Distributed Prioritized Experience Replay》
会议:ICLR 2018
背景1:DQN进化史
引自《Deep Learning for Video Game Playing》Ape-X在左下角:DQN --> Prioritized DQN --> Ape-X DQN --> Ape-X DQfD (Dueling)
问题
在Nature DQN出来之后,肯定很多人在思考如何改进它。那么DQN有什么问题呢?
(1)目标Q值的计算准确吗?全部通过max Q来计算有没有问题?
(2)随机采样的方法好吗?按道理不同样本的重要性是不一样的Q值代表状态,动作的价值,那么单独动作价值的评估会不会更准确?
(3)DQN中使用\epsilonϵ-greedy的方法来探索状态空间,有没有更好的做法?
(4)使用卷积神经网络的结构是否有局限?加入RNN呢?
(5)DQN无法解决一些高难度的Atari游戏比如《Montezuma’s Revenge》,如何处理这些游戏?
(6)DQN训练时间太慢了,跑一个游戏要好几天,有没有办法更快?
(7)DQN训练是单独的,也就是一个游戏弄一个网络进行训练,有没有办法弄一个网络同时掌握多个游戏,或者训练某一个游戏后将知识迁移到新的游戏?
(8)DQN能否用在连续动作输出问题?
解决 参考
- Double DQN:Nature DQN的两个Q网络分离的还不够彻底,Double DQN用当前的Q网络来选择动作(公式中红色部分所示),而用目标Q网络来计算目标Q。
- Prioritised replay:采样优先级采用目标Q值与当前Q值的差值来表示
- Dueling Network:Dueling Network将Q网络分成了两个通道:Action无关的值函数:Q(s,a)=V(s,v)+Action相关的值函数:A(s,a,w)A(s,a,w)
- NAF:既可以输出action,也可产生Q值,而Q值可用于DQN训练,从而使算法可以进行下去。
- Distributional DQN:也叫做Categorical DQN,传统价值函数的目标是近似地估计价值的期望,而Distributional RL的目标是近似地估计价值的分布(概率密度函数)
- Rainbow:没有提出新方法,而只是整合了6种DQN算法的变种,达到了SOTA的效果(①Double DQN、②Prioritized Experience Replay、③DuelingNet、④NoisyNet、⑤Distributional DQN(Categorical DQN)、⑥N-step Learning)
背景2:大规模深度强化学习发展史 link
大规模深度强化学习要充分的利用大规模的cpu-gpu 计算资源来实现神经网络模型的高效训练。
- 监督学习 link :数据并行(data parallelism)和模型并行(model parallelism)。一般做数据并行,然后一个GPU做超大batch的更新。对于深度学习的训练,一般batch越大,学习效果越快越好(GPT-3的batchsize达到了惊人的320万)。
- A3C:2016年,让每个worker都做采样+训练,把梯度传给统一的learner做更新,learner再把参数传给每个worker。
- A2C:同步版本的,worker仅采集数据,传给learner做训练,快很多。
- Ape-X:思想很简单,面向Off-Policy的算法如DQN,DDPG,有很多个Actor包含Network和Env进行采样,然后把采集的数据统一放到一个Replay Buffer当中,接下来Learner从Replay中取数据训练。
- IMPALA:A2C的进阶版,取消了同步限制,通过importance sampling的做法来使得Actor和Learner可以相对独立的采样和训练,不用等待(本质上和PPO的做法一样)。和Ape-X对比不需要replay buffer(放一个来做临时存储也可以),面对的还是偏向于on-policy的DRL算法。对于大规模深度强化学习,有时候因为采样数据够多,反而不需要考虑sample inefficiency的问题了。
- OpenAI Dota 2 link:整体架构上和IMPALA并没有本质区别,只不过OpenAI使用PPO而不是V-trace,另外,forword也是放在GPU上处理,不是CPU,对于网络巨大的model快一些。
- Seed RL link:解决IMPALA的问题(其实在OpenAI Dota 2采用GPU进行forward就都解决了),实验结果:SEED RL相比IMPALA快了很多。
- ACME link:看起来是一个类似RLLib的framework,直接让Actor采样。
总结:基于OpenAI Dota 2或SEED RL可以取得目前最佳的CPU-GPU使用效率,但效果好不好还要看数据样本好不好。
Ape-X
强化学习征服的几个灵域:【AI改变游戏设计】
- 征服Atari游戏—— Deep Mind link
- 征服围棋——Alpha GO link
- 征服德州扑克——Pluribus(没有用神经网络,用博弈论CRF+剪枝) link
- 征服麻将——微软 Suphx link
- 征服星际争霸——Alpha Star link
- 征服王者荣耀——绝悟 link
当我们以为Rainbow就是Atari游戏的巅峰时,Ape-X出来把Rainbow秒成了渣!link
Ape-X直接把性能翻了一倍,而且,更关键是还学的更快,快太多了!看上图右边的具体游戏示例,Pong乒乓游戏在大概半小时内就训练到极致了,原始DQN需要好几天!
实现方式:
只使用一个learner和一个Replay buffer,但是分布式的使用了多个Actor来生成数据,paper中实验使用了360个Actor(一个Actor一个CPU)
- multiple actors:每个actor都有一个自己的环境,共享一个网络模型(定期从learner处拉取新网络),相互独立地产生经验数据放至经验数据池。每个actor拥有一个小的缓存(buffer),并本地计算优先级,定期提交至经验数据池。
- learner:从经验数据池中采样数据,更新经验的优先级,更新网络参数
- shared, distributed, prioritized,experience replay memory:计算初始优先级,存经验数据。
特点
- 经验数据的产生和采样都相互独立开了
- 每一个Actor都不完全一样,用ε−greedy采样时的ε不一样,更好地explore。
- 很大的一个Replay Buffer来装几百个actor的数据
- 与共享梯度相比,共享经验具有一定的优势。 低延迟通信并不像分布式SGD那么重要,因为经验数据比梯度过时更慢,只要学习算法对off-policy数据具有鲁棒性。
-
整个算法也就是训练架构上发生改变,因为用到了Replay Buffer,所以在DQN和DDPG上做了验证。
APE-X DQN
APE-X DPG
实现思路
step1:实现DQN
step2:实现带Priority Replay Buffer的DQN: https://blog.csdn.net/maqunfi/article/details/90897587
step3:实现并行架构,多个actor产出数据给learner训练
其他资料
- 相关工作有提到Ape-X的RUDDER:https://www.jiqizhixin.com/articles/2018-06-22-3
- 讨论强化学习中的经验回放:https://www.cnblogs.com/lucifer1997/p/13529635.html
网友评论