用深度强化学习玩超级马里奥兄弟

本文介绍了如何使用Deep Q-Network和Double Deep Q-Network玩超级马里奥兄弟,通过OpenAI Gym的NES模拟器进行实验。讨论了数据预处理、理论背景,包括DQN和DDQN的高估问题,并展示了五个实验结果,表明DDQN在解决高估问题和训练效率上的优势。
摘要由CSDN通过智能技术生成

介绍

从本文中,你将学习如何使用 Deep Q-Network 和 Double Deep Q-Network(带代码!)玩超级马里奥兄弟。

超级马里奥是任天堂在 1980 年代开发和发行的著名游戏。它是历经多年无需解释的经典游戏名称之一。这是一款2D横向卷轴游戏,让玩家可以控制主角——马里奥。

游戏玩法包括从左到右移动马里奥,从反派中生存下来,获得硬币,以及到达旗帜以清除关卡。马里奥最终需要拯救公主。这些有不同的奖励系统、硬币、反派、漏洞和完成时间。

游戏环境取自 OpenAI Gym,使用 Nintendo Entertainment System (NES) python 模拟器。在本文中,我将展示如何使用深度 Q 网络 (DQN) 和深度双 Q 网络 (DDQN) 算法和PyTorch 库来实现强化学习算法,以检查它们各自的性能。然后评估对每种算法进行的实验。

数据理解和预处理

超级马里奥兄弟的原始观察空间是 240 x 256 x 3 的 RGB 图像。动作空间是 256,这意味着能够采取 256 种不同的可能动作。为了加快我们模型的训练时间,我们使用了gym的包装器函数对原始环境应用了某些转换:

  • 在 4 帧上重复代理的每个动作并减小视频帧大小,即环境中的每个状态都是 4 x 84 x 84 x 1(4 个连续 84 x 84 灰度像素帧的列表)

  • 将像素值归一化到 0 到 1 的范围内

  • 将动作次数减少到 5(仅右)、7(简单动作)和 12(复杂动作)

理论结果

最初,我想使用 Q-learning 执行一个实验,该实验使用二维数组来存储状态和动作对值的所有可能组合。但是,在这种环境设置中,我意识到应用 Q-learning 是不可能的,因为需要存储非常大的 Q-table, 而这是不可行的。

因此,本项目使用 DQN 算法作为基线模型。DQN 算法使用  Q-learning 来学习在给定状态下采取的最佳动作,并使用深度神经网络来估计 Q 值函数。

我使用的深度神经网络类型是一个 3 层卷积神经网络,后跟两个完全连接的线性层,每个可能的动作都有一个输出。该网络的工作原理类似于 Q-Learning 算法中的 Q-table。我们使用的目标损失函数是 Huber 损失或 Q 值的平滑平均绝对误差。Huber loss 结合了 MSE 和 MAE 来最小化目标函数。我们用来优化目标函数的优化器是 Adam。

但是,DQN 网络存在高估的问题。

图 1:说明 DQN 网络如何被高估

如图1所示,高估的主要原因有两个。第一个原因是由于用于计算目标值的最大化函数。假设action值为True, 表示为:x(a₁) … x(aₙ)。由 DQN 做出的噪声估计由 Q(s,a₁;w), ... Q(s, aₙ;w) 表示,在数学上,

因此它高估了真实的 Q 值。

第二个原因是高估的 Q 值再次被用于通过反向传播更新 Q 网络的权重。这使得高估更加严重。

高估的主要缺点是由于 DQN 所做的非均匀高估。直观的感觉是,一个特定的状态、操作对在重放缓冲区中出现的频率越高,对该状态-操作对的高估就越高。

为了获得更准确的 Q 值,我们想在我们的问题上使用 DDQN 网络,然后将实验结果与之前的 DQN 网络进行比较。为了减轻由最大化引起的高估,DDQN 使用 2 个 Q 网络,一个用于获取动作,另一个用于通过反向传播更新权重。DDQN Q-learning更新方程为:

Q* 用于更新权重,Q^ 用于获取特定状态的动作。Q^ 只是每 n 步复制 Q* 的值。

实验结果

使用 2 种算法 DQN 和 DDQN,基于智能体的不同运动进行了 5 次实验。不同的动作是复杂动作、简单动作和仅右动作。

参数设置如下:

  • 观察空间:4 x 84 x 84 x 1

  • 动作空间:12(复杂动作)或7(简单动作)或5(仅右动作)

  • 损失函数:HuberLoss,δ = 1

  • 优化器:Adam,lr = 0.00025

  • betas  = (0.9, 0.999)

  • 批大小 = 64 Dropout = 0.2

  • gamma  = 0.9

  • 体验回放的最大内存大小 = 30000

  • 对于 epsilon greedy:探索衰减 = 0.99,探索最小值 = 0.05

在探索开始时,max = 1,代理将采取随机动作。在每一次动作之后,它将以探索衰减率衰减,直到达到 0.05 的探索最小值。

实验一

进行的第一个实验是比较 DDQN 和 DQN 算法用于智能体的复杂运动。

实验二

进行的第二个实验是比较 DDQN 和 DQN 算法对于智能体的简单移动。

实验三

进行的第三个实验是比较 DDQN 和 DQN 算法仅适用于代理的右运动。

从以上 3 个实验结果可以看出,在所有情况下,DQN 在第 10,000 集的性能与 DDQN 在第 2,000 集的性能大致相同。因此,我们可以得出结论,DDQN 网络有助于消除由 DQN 网络引起的高估问题。

使用 DDQN 和 DQN 对 3 种不同运动进行了进一步的实验。

实验四

进行的第四个实验是在所有 3 个不同的动作上使用 DDQN 算法。

实验五

进行的第五个实验是对所有 3 个不同的动作使用 DQN 算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值