矩池云 | 训练AI智能体,实现童年《超级玛丽》通关梦想

在你的童年记忆里,是否有一个蹦跳、顶蘑菇的小人?

这个头戴红色帽子身穿蓝色背带裤的“中年大叔”叫做马里奥,来自任天堂出版的游戏《超级玛丽》。《超级玛丽》一经发行便火爆全球,成为全民级游戏。然而,随着关卡的不断推进,游戏难度逐渐攀升,让不少玩家望而却步。
不过,通过强化学习训练出来的 AI 智能体,可以降低超级玛丽通关的门槛,玩家能够一键通关,并且不损失任何生命值。在Github上有一个名为Super-Mario-RL的项目(地址:https://github.com/jiseongHAN/Super-Mario-RL),能帮助玩家实现童年的通关梦想。整个项目用 Python完成,在矩池云 www.matpool.com上就可以轻松复现。
一、关于强化学习
本次项目依托强化学习(Reinforcement Learning, RL)开展。强化学习是学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力。
以小猫咪为例,我们可以在抚养小猫咪初始,就预设好规则。什么样的行为能够得到猫粮、什么样的行为能够得到小鱼干,从而训练小猫咪更加符合我们的期望,进而成为一只更加适配人类社会的小猫咪。

而落实到算法层面,在《超级玛丽》游戏中,吃蘑菇可以取得较高的分数,那么算法就进一步「强化」这种策略,以期继续取得较好的结果。
《超级玛丽》的强化学习场景可以这么拆解:
机器有一个明确的马里奥角色——代理
需要控制马里奥走得更远——目标
整个游戏过程中需要躲避各种反派角色——环境
躲避反派角色的方法是让马里奥向上跳——行动
走得越远,就会获得越多的积分——奖励
以下内容即为 Super-Marioa-RL项目的复现,不需要繁杂的程序调试,只要跟着教程走下来就能轻松体会通关的乐趣。
二、分析项目依赖,租用机器
2.1 分析项目依赖环境
由于项目有图像的输出,所以运行过程中还需要VNC server(需要先下载并安装使用,教程如下 https://matpool.com/supports/doc-vnc-connect-matpool/ )。
2.2 在矩池云租用合适的机器
我们进入矩池云,如果你还没有注册过账号,可以先注册一个账号,新注册用户关注并绑定矩池云微信公众号可获赠5元体验金,体验金在租用机器时直接抵扣(本次训练就可以使用)。
矩池云的主机市场提供了非常丰富的GPU选项,今天的项目就选NVIDIA Tesla K80。

点击租用按钮后,我们可以对机器进行配置:
选择基础镜像,我们直接搜索 Pytorch ,大于1.6即可
选择好镜像后,我们可以进行其他配置,阅读了文档之后,了解到有图像的输出,所以这时我们要开启 VNC 功能

3.3. VNC 相关配置
机器租借完成后,将 VNC 链接的这部分内容复制

粘贴到建立的新链接的 VNC Server中,点击continue

随后会弹出一个需要填写密码的窗口。

密码就是ssh连接的密码,在租用机器页面可以直接点击复制密码进行复制。

VNC service即可打开,但在使用 VNC之前,我们还需要在网页上进行其他准备工作。
三、下载代码、数据及模型
租用好机器后,我们先使用最简单的使用方法,直接点击租用界面的JupyterLab连接,快速使用服务器(在我的租用页面也可以找到类似窗口哦)。

进入JupyterLab页面后,我们先点击Terminal进入终端,并输入下面指令。

我们可以了解一下刚才输入这段代码的含义,它代表着
先进入/mnt目录(矩池云网盘挂载目录)
新建一个文件夹MyCode并进入文件夹(用于存放项目文件)
git clone下载开源项目Super-Mario-RL
进入 Super-Mario 项目目录中
这一步为安装所需依赖
四、使用模型和训练
4.1 使用预训练模型测试
我们进入到项目目录。具体方式为,找到名为 mnt 的文件夹,再找到 Super Mario-RL文件夹。

然后点击左上角+新建一个Launcher,点击Notebook中的myconda。即可新建一个jupyter notebook文件。
我们可以先使用预训练好的模型来测试使用,测试使用代码官方已经给我们提供好了,可以在官方代码上进行尝试。
在官方的代码版本上,我们在原代码基础上,做了一些调整,duel_dqn 文件的调整情况具体如下
(1)我们使用的 enviroment 为 SuperMarioBros-v2。demo 用的是 v0 ,但是 v0 跑的时间非常长,运行期间系统会提示 v3 是最新版本,但是 v3 非常像素化不太适合本次展示;
(2)设置运行 2000 次;
(3)增加了输出 loss 和 epoch 等信息。
即:
与此相对,eval 文件中涉及的 Bros-v0 也变成 Bros-v2,具体改动点,即在 eval 文件中的本段代码中。
训练代码我们打开 VNC ,打开代码所在的文件夹

右键 打开 Terminal

运行 duel _dqn 文件

运行后,可无视这一条 warning

运行过程比较漫长,前期调试可以适当减少运行步数,查看训练过程则可在文件夹中,右键打开 Terminal。
运行 eval 文件
以下是训练了1460步之后的一个结果,已经跑完了第一关。
