论文结果难复现?本文教你完美实现深度强化学习算法DQN

本文详细介绍了深度强化学习算法DQN的实现过程,包括关键点如深度Q学习的细节、性能波动、训练技巧,如掉命终止和梯度下降优化算法。通过复现DQN论文结果,作者提供了一个比原始实现快4倍的开源实现,并强调了实现DQN时应注意的细节,以帮助研究者更好地理解和复现DQN算法。
摘要由CSDN通过智能技术生成
论文的复现一直是很多研究者和开发者关注的重点,近日有研究者详细论述了他们在复现深度 Q 网络所踩过的坑与训练技巧。本论文不仅重点标注了实现过程中的终止条件和优化算法等关键点,同时还讨论了实现的性能改进方案。机器之心简要介绍了该论文,更详细的实现细节请查看原论文。


过去几年来,深度强化学习逐渐流行,因为它在有超大状态空间(state-spaces)的领域上要比先前的方法有更好的表现。DQN 几乎在所有的游戏上超越了之前的强化学习方法,并在大部分游戏上比人类表现更好。随着更多的研究人员用深度强化学习方法解决强化学习问题,并提出替代性算法,DQN 论文的结果经常被用作展示进步的基准。因此,实现 DQN 算法对复现 DQN 论文结果和构建原算法都很重要。


我们部署了一个 DQN 来玩 Atari 游戏并重复 Mnih 等人的结果。我们的实现要比原始实现快 4 倍,且已经在网上开源。此外,该实现在设计上,对不同的神经网络架构、ALE 之外领域也更为灵活。在重复这些结果时,我们发现实现这些系统的过程的几个关键。在这篇论文中,我们强调了一些关键的技术,这些技术对于获得优良的性能和重复 Mnih 等人的结果是很基本的,其中包括了终止条件和梯度下降优化算法,以及算法的期望结果(也就是网络的性能波动)。


论文:Implementing the Deep Q-Network



论文地址:https://arxiv.org/abs/1711.07478


Mnih 等人在 2015 年提出的深度 Q 网络已经成为了一项基准,也是许多深度强化学习研究的基点。然而,复现复杂系统的结果总是非常难,因为最初的文献经常无法详细描述每个重要的参数和软件工程的解决方案。在此论文中,我们复现了 DQN 的论文结果。此外,我们重点标注了实现过程中的关键点,从而让研究人员能更容易地复现结果,包括终止条件、梯度下降算法等。而这些点是原论文没有详细描述的。最后,我们讨论了改进计算性能的方法,并给出我们的实现,该实现可广泛应用,而不是只能在原论文中的 Arcade 学习环境(ALE)中实现。


3 深度 Q 学习


深度 Q 学习(DQN)是经典 Q 学习算法的变体,有 3 个主要贡献:(1)深度卷积神经网络架构用于 Q 函数近似;(2)使用小批量随机训练数据而不是在上一次经验上进行一步更新;(3)使用旧的网络参数来评估下一个状态的 Q 值。DQN 的伪代码(复制自 Mnih et al. [2015])见算法 1。深度卷积架构提供一个通用机制从图像帧的短历史(尤其是最后 4 帧)中评估 Q 函数的值。后面两个贡献主要关于如何使迭代的 Q 函数

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于gym的pytorch深度强化学习实现源码+项目说明(PPO,DQN,SAC,DDPG,TD3等算法).zip 本人学习强化学习(PPO,DQN,SAC,DDPG等算法),在gym环境下写的代码集。 主要研究了PPO和DQN算法,根据各个论文复现了如下改进: - PPO: dual-PPO, clip-PPO, use-RNN, attention etc. - DQN: rainbow DQN 在离散动作空间和连续动作空间,PPO算法都奏效,因此我对离散和连续动作空间的代码探索主要在CartPole(PPO), Pendulum(PPO)两份代码进行,读者可以重点关注。 感谢知乎分享:https://zhuanlan.zhihu.com/p/654972230 提出的神经网络构建思路,尤其是其提出的PSCN层: ```python class PSCN(nn.Module): def __init__(self, input_dim, output_dim): super(PSCN, self).__init__() assert output_dim >= 32 and output_dim % 8 == 0, "output_dim must be >= 32 and divisible by 8 " self.hidden_dim = output_dim self.fc1 = MLP([input_dim, self.hidden_dim], last_act=True) self.fc2 = MLP([self.hidden_dim // 2, self.hidden_dim // 2], last_act=True) self.fc3 = MLP([self.hidden_dim // 4, self.hidden_dim // 4], last_act=True) self.fc4 = MLP([self.hidden_dim // 8, self.hidden_dim // 8], last_act=True) def forward(self, x): x = self.fc1(x) x1 = x[:, :self.hidden_dim // 2] x = x[:, self.hidden_dim // 2:] x = self.fc2(x) x2 = x[:, :self.hidden_dim // 4] x = x[:, self.hidden_dim // 4:] x = self.fc3(x) x3 = x[:, :self.hidden_dim // 8] x = x[:, self.hidden_dim // 8:] x4 = self.fc4(x) out = torch.cat([x1, x2, x3, x4], dim=1) return out # MLP层即封装的全连接层,具体实现请参照utils/model.py ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值