反应式玩法:实现了!!Atari Breakout 实验 [R]

Reddit r/MachineLearning 论文

摘要

在 Atari Breakout 上进行了 123 次失败的 PPO 实验后,添加一个简单的接近奖励来追踪球的下落,最终实现了反应式的、非脚本化的玩法,并且能够迁移到不熟悉的砖块布局上。

六个月前,我开始尝试用 PPO 和 Breakout 来学习机器学习和强化学习。在几次单纯为了拿到高分的实验之后,有一件事困扰着我:一切都是“记忆化”的脚本,而不是像人类玩家那样的反应式玩法。于是,我开始尝试让 PPO 真正去追踪球,而不是专注于得分。 我读了很多文章,尝试了很多方法。在 Atari Breakout 上进行了 124 次 PPO 实验后,我发现每一个模型——无论是 sticky actions、cursor wrappers、熵调整、动力学随机化、对抗性挡板,还是其他所有方法——都收敛到了一个记忆化的动作序列,而不是反应式的追球策略。argmax 总是一个脚本。 解决办法不是更多的环境工程,而是三行奖励塑形:在球下落时,直接奖励挡板与球的水平距离接近。一个很小的奖励(每帧 0.05,而每个砖块 1.0-7.0),在训练期间球下落的每一帧都会触发。在评估时,智能体玩的是干净的 Breakout,没有任何额外奖励。这种行为可以迁移!! 我之前尝试过的每种方法,都是通过让环境更难被记忆来惩罚脚本。PPO 总能找到绕过的方法:时间鲁棒脚本、布局条件脚本、噪声容忍脚本。最优解始终是脚本,只是形式变了。接近奖励改变了最优解的本质。一个居中保持的脚本会在球经过中心附近时获得偶然的奖励。一个反应式的追踪器在每一下落帧都能获得最大奖励。优化的压力非常明确:追踪球,获得更多奖励。 我还做了一个很酷的工具来观察智能体的行为!它叫“Split-Watcher”(真是聪明)。它显示两个 Breakout 实例,每个实例由同一个智能体的一个单独实例控制。左边的是原始 Breakout,右边的是一系列自定义砖块配置。在前 123 次实验中,你可以看到智能体每次都想要做出完全相同的挡板动作,当球的轨迹因非标准砖块配置带来的意外球路而改变时,它会忽略球。在第 124 次实验中,它追踪了球,并且无论砖块配置如何都能成功。你可以真正看到同一个智能体根据球的反应做出不同的挡板移动。 我仍在努力弄清楚为什么这有效,以及如何优化它,但我想分享出来!!这是 split-watcher 运作的视频。这是一个演示项目的链接,你可以用它创建类似的 PPO:https://github.com/mharrell/breakout-reactive-ppo 完整项目包含全部 123 次失败,以及比任何正常人愿意读的更多的文档:https://github.com/mharrell/BreakoutBot 我写的 Medium 文章链接,内有更多细节:https://medium.com/@mikey.harrell/three-lines-of-code-fixed-123-failed-ppo-experiments-on-atari-breakout-c751dcf38f2a?sharedUserId=mikey.harrell
查看原文

相似文章

通过回放轨迹重建分区表示与生成随时间变化的关卡

arXiv cs.AI

提出了一种新颖的“蛋糕”表示法,用于随时间变化的游戏关卡,该表示法隐式编码了动态信息;同时提出了一种生成方法(回放轨迹重建分区法,PRP),在Sokoban游戏中,该方法在不牺牲求解多样性的前提下生成了有效关卡,性能优于六种最先进的PCG方法。

我探索所有Tetris的旅程

Lobsters Hottest

来自Antithesis的一篇详细博客文章,描述了他们的软件测试工具如何用于探索并实现Tetris中的‘重生’(达到255级),在此过程中克服挑战并发现故障。