基于 Paddle2.0 的强化学习新玩法 —— 通关超级马里奥兄弟
前言
超级马里奥兄弟作为几代人的童年回忆,陪伴了我们的成长。如今随着深度强化学习的发展,越来越多的游戏已经被 AI 征服,那么今天我们展示如何用深度强化学习,试着通关超级马里奥兄弟吧!
马里奥游戏环境简介

马里奥游戏环境链接:
https://pypi.org/project/gym-super-mario-bros/
游戏环境允许玩家或 AI 在 3 次尝试内通过游戏的 32 关。环境提供了 RIGHT_ONLY,SIMPLE_MOVEMENT,COMPLEX_MOVEMENT 三种难度的操作模式。只需要对环境输入各种动作所代表的数值,就能实现对马里奥的各种操作。
PPO 算法简介
PPO 算法论文链接:
https://arxiv.org/abs/1707.06347
相信了解强化学习的各位一定听说过近端策略优化 PPO 算法吧。
PPO 算法是一种新型的 Policy Gradient 算法,由于 Policy Gradient 算法对步长十分敏感,若没有选择到合适的步长,在训练过程中新旧策略的变化可能会出现差异如果过大的现象,不利于模型的收敛。PPO 提出了新的目标函数可以在多个训练步骤中实现小幅度的更新,解决了 Policy Gradient 算法中步长难以确定的问题。
作为强化学习领域的 SOTA 算法,PPO 是每一个学习者最常用的算法。OpenAI 也早已把 PPO 作为自己的默认算法。
基于 Paddle2.0 实现 PPO
下面就让我们用 Paddle2.0 实现 PPO 算法吧。
不过在此之前,先让我们看看模型结构。我们的模型是 Actor-Critic 结构,但是对模型结构做了一点简化,Actor 和 Critic 只在输出层有所区别 。由于模型处理的是图像信息,故在全连接层前加入了卷积层。
class MARIO(Layer):
def __init__(self, input_num, actions):
super(MARIO, self).__init__()
self.num_input = input_num
self.channels = 32
self.kernel = 3
self.stride = 2
self.padding = 1
self.fc = 32 * 6 * 6
self.conv0 = Conv2D(out_channels=self.channels,
kernel_size=self.kernel,
stride=self.stride,
padding=self.padding,
dilation=[1, 1],
groups=1,
in_channels=input_num)
self.relu0 = ReLU()
self.conv1 = Conv2D(out_channels=self.channels,
kernel_size=self.kernel,
stride=self.stride,
padding=self.padding,
dilation=[1, 1],
groups=1,
in_channels=self.channels)
self.relu1 = ReLU()
self.conv2 = Conv2D(out_channels=self.channels,
kernel_size=self.kernel,
stride=self.stride,
padding=self.padding,
dilation=[1, 1],
groups=1,
in_channels=self.channels)
self.relu2 = ReLU()
self.conv3 = Conv2D(out_channels=self.channels,
kernel_size=self.kernel,
stride=self.stride,
padding=self.padding,
dilation=[1, 1],
groups=

本文介绍了如何利用Paddle2.0实现基于PPO算法的强化学习,以通关超级马里奥兄弟游戏。通过预处理图像、设置奖励函数和并行训练提升模型效率,最终展示训练效果和通关视频。
最低0.47元/天 解锁文章
1101





