问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

利用PPO算法训练超级玛丽AI模型

创作时间:
作者:
@小白创作中心

利用PPO算法训练超级玛丽AI模型

引用
CSDN
1.
https://blog.csdn.net/YeJuliaLi/article/details/145645381

本文使用PPO增强学习策略,训练一个自动玩超级玛丽的AI模型。在进入主题之前,先介绍几个代码中会用到的python库。

  • gym:OpenAI开发的Python库,提供了开发和比较增强学习算法的标准API。简单地说,这个库是一个游戏模拟器,可以通过API控制游戏如何进行。

  • PyTorch:使用GPU加速的动态神经网络训练程序库。

PPO算法

PPO,全称 Proximal Policy Optimization Algorithms,是OpenAI提出的增强学习策略,出自论文Proximal Policy Optimization Algorithms(https://arxiv.org/pdf/1707.06347),应用于Instruct GPT对齐训练阶段,也是许多大模型的对齐训练策略之一。基本原理是:先利用当前模型计算出一系列动作(或基于随机采样),得到一个状态和动作序列,随后通过离线迭代,重复利用这个序列更新模型。更新的策略为:如果某个动作产生正向激励,那么离线模型将提升在此状态下该动作的概率,反之抑制其概率。这个策略与Q-Learning类似,一般来说,采样状态和动作序列的成本较高,利用同一序列进行多次更新则更有效的利用采样数据。与Q-Learning不同的是,Q-Learning每次计算策略梯度时,仅使用一步迭代后的状态,并以Q矩阵估计长期激励,而PPO则需要利用整个序列,在此基础上计算动作的相对熵、价值误差与策略分布自身的熵三部分之和。同时,为了保证离线模型在更新策略梯度时的平稳性,使用一个小的误差窗口将策略误差控制在一个小范围内。

分别通过PPO和Q-Learning对超级玛丽奥游戏的学习发现,PPO算法的学习效率更高,通过5次迭代,游戏进程从29步增加到200步。

PPO算法的局限性是只适合于离散策略,因为需要计算同样的动作序列在活动模型与基准模型之间的KL散度。由于自然语言生成任务满足这一约束,在同一序列的多次更新中,反向传播的信息量大幅提升,并且梯度的稳定性比单步更新可靠。

代码实现

完整代码请参考 https://github.com/eastonhou/super-mario-ppo。

选择游戏和关卡

在trainer.py文件的最后几行中,可以看到如下代码

上述示例代码创建了超级玛丽游戏训练对象,其中第一个参数是游戏创建函数,第二个参数设置大关和小关,第三个参数代表每相邻8帧组成一个模型的输入(模型无法从一张静态图推理最佳的执行动作或者计算局面分数,因此需要连续的几帧),具体表现为通道层的层数。第四个参数代表每次跳过4帧,因为AI不需要每帧都进行推理和操作。如果只想看AI如何玩游戏,可以在上述设定游戏参数上,执行

随后可在以下文件夹中找到游戏视频checkpoints文件夹中找到游戏视频。

视频上方的橙色格子表示AI对当前画面的预测的各种操作的概率,最终采取的操作通过多项式采样。如果发现游戏停滞不前并且操作锁死,可以通过降低分值系数或c₂系数(见超参数设置),如果发现操作过于随机,则反方向调整参数。

模型设计

AI模型是采用PyTorch实现的一个简单的卷积网络,由4个卷积层和一个全链接层组成,actor_linear输出策略对数概率,critic_linear输出局势评估分数值。

激励函数的设计

在games.py文件中有Mario和Breakout两个游戏的激励函数定义,以MarioReward为例,定义局面分数为

通俗地解释,每获得一枚金币得100分,向前走一像素加1分,每花一秒扣1分(为了防止AI躺平),吃了变大蘑菇得200分,通关得1000分,游戏失败扣200分。

策略梯度的计算

训练曲线的解释

  • actor: 优势函数的相反数,越小越好,反映AI操作的熟练程度。
  • critic: 价值函数的精度,越小越好,虽然曲线看起来不收敛,但价值函数的具体值与游戏进程有关,并且策略梯度的计算主要依赖邻近状态的差值,与绝对数值关系不大。
  • entropy: AI对操作的困惑度,一般在0.2~0.6之间比较好,太小会导致过早收敛,探索不到更好的全局目标,太大则操作不稳定,容易挂。
  • score: 游戏中所得分数,越高越好。
  • steps: 游戏结束时间,在能通关的前提下,越小越好。

总结

本文主要是为了复原PPO的算法实现,但PPO算法本身未必是最适合游戏的增强学习策略,读者可以自行修改策略函数,超参数,以及奖励函数,构造出更智能的游戏模型。PPO的超参数调整过程很玄学,各参数之间必须保持平衡,否则容易不收敛,调参时建议逐个参数测试,做好实验笔记。有什么想法欢迎交流。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号