介绍
在这篇文章中,我将描述作者关于 Atari 2600 游戏策略的实验内容,该策略已成为强化学习研究的标准。
除了发布在 Google Colab 上运行的代码之外,我们还可以查看实际了解许多游戏的 AI 视频。像这样的文章不少,但我认为涵盖这么多游戏的文章并不多。
关于实施
我是通过自己实施 PPO 来学习的。如果你自己做,有很大的错误实现风险,但这是我自己理解机制的选择,所以如果你想避免这种风险稳定的基线使用等会更好。作为实验的结果,似乎和论文一样的性能已经出来了,所以我认为这个实现没有什么大问题。
网上对PPO的解释已经有好几种了,这里就不赘述了。文章在这里貌似是最靠谱的,我在实现的时候就拿来作为参考。
虽然是用TensorFlow(Keras)实现的,但我打算尽可能本地化依赖机器学习框架的部分。
与纸的区别
论文中的超参数存在一些差异。
超参数差异列表
| 超参数 | 纸 | 本文 |
|---|---|---|
| 地平线 (T) | 128 | 128 |
| 亚当步长 | 0.0025 × α | 0.0025 × β |
| 时代数 | 3 | 4 |
| 小批量 | 32×8 | 128×8 |
| 折扣 | 0.99 | 0.95/0.99/0.995/0.999 |
| GAE 参数 | 0.95 | 0.95 |
| 演员人数 | 8 | 8 |
| 裁剪参数 | 0.1 × α | 0.1 |
| VF 系数。 | 1.0 | 0.5 |
| 熵系数。 | 0.01 | 0.01 |
Adam 的学习率在论文中线性下降到 0,但在本实验中呈指数衰减到 0.1 倍。
网络的权重为另一篇论文根据 正交初始化。
此外,每个批次的 Advantage 值都进行了标准化。这也是另一篇论文本来好像是用平均值减去标准差除以标准差,但在本文的实现中只使用了标准差。实验进行后,我意识到我错误地实现了它,但它似乎没有任何不良影响(在某些情况下,这更好),所以我坚持了下去。
实验结果
用于学习的总帧数为40M,与论文相同。强化学习论文中的帧数似乎有多种解释,但这里代表的是 Atari 的 Environment 最终执行的帧数。由于连接了 4 个 Action 做 1 个 Observation 数据,因此输入了 10M Frames 进行学习。使用 Google Colab 的 GPU 大约需要 6-7 小时(取决于游戏)。顺便说一句,200M (50x4M) 似乎是 DQN 论文的主流。
PPO是A2C的系统,其特点也是可以并行运行游戏,但Google Colab只有两个CPU核心,本文不做并行处理。如果你修改它以便它可以并行处理,如果它在具有大量内核的 PC 上执行,它可能会更快地结束。
下面是论文中的分数和实验结果表。 (随机和人类是Nature的DQN论文引用自)
| 游戏 | 随机的 | 人类 | PPO(纸质) | PPO(实验性) |
|---|---|---|---|---|
| 外星人 | 227.8 | 6875 | 1860.3 | 3093.0 |
| 阿米达尔 | 5.8 | 1676 | 674.6 | 909.1 |
| 突击 | 222.4 | 1496 | 4971.9 | 4862.1 |
| 阿斯特里克斯 | 210 | 8503 | 4532.5 | 6540.0 |
| 小行星 | 719.1 | 13157 | 2097.5 | 133181.0 |
| 亚特兰蒂斯 | 12850 | 29028 | 2311815.0 | 2944420.0 |
| 银行抢劫 | 14.2 | 734.4 | 1280.6 | 1244.0 |
| 战区 | 2460 | 37800 | 17366.7 | 28100.0 |
| 光束骑士 | 363.9 | 5775 | 1590.0 | 4088.0 |
| 保龄球 | 23.1 | 154.8 | 40.1 | 115.6 |
| 拳击 | 0.1 | 4.3 | 94.6 | 89.0 |
| 爆发 | 1.7 | 31.8 | 274.8 | 480.0 |
| 蜈 | 2091 | 11963 | 4386.4 | 22450.6 |
| 斩波器命令 | 811 | 9882 | 3516.3 | 13270.0 |
| 疯狂的登山者 | 10781 | 35411 | 110202.0 | 118980.0 |
| 恶魔攻击 | 152.1 | 3401 | 11378.4 | 9248.0 |
| 双扣篮 | -18.6 | -15.5 | -14.9 | 15.2 |
| 耐力赛 | 0 | 309.6 | 758.3 | 1122.0 |
| 钓鱼德比 | -91.7 | 5.5 | 17.8 | 30.0 |
| 高速公路 | 0 | 29.6 | 32.5 | 32.9 |
| 冻疮 | 65.2 | 4335 | 314.2 | 2838.0 |
| 地鼠 | 257.6 | 2321 | 2932.9 | 59920.0 |
| 重力仪 | 173 | 2672 | 737.2 | 955.0 |
| 冰球 | -11.2 | 0.9 | -4.2 | -4.7 |
| 詹姆斯邦德 007 | 29 | 406.7 | 560.7 | 5150.0 |
| 袋鼠 | 52 | 3035 | 9928.7 | 14140.0 |
| 克鲁尔 | 1598 | 2395 | 7942.3 | 9274.0 |
| 功夫大师 | 258.5 | 22736 | 23310.3 | 42350.0 |
| 蒙特祖玛的复仇 | 0 | 4367 | 42.0 | - |
| 吃豆人女士 | 307.3 | 15693 | 2096.5 | 3936.0 |
| 命名这个游戏 | 2292 | 4076 | 6254.9 | 6633.0 |
| 陷阱 | - | - | -32.9 | - |
| 乒乓 | -20.7 | 9.3 | 20.7 | 20.7 |
| 私家侦探 | 24.9 | 69571 | 69.5 | - |
| Q*伯特 | 163.9 | 13455 | 14293.6 | 12460.0 |
| 河流袭击 | 1339 | 13513 | 8393.6 | 8218.0 |
| 跑者 | 11.5 | 7845 | 25076.0 | 50070.0 |
| 机器人坦克 | 2.2 | 11.9 | 5.5 | 20.6 |
| 海探 | 68.4 | 20182 | 1204.5 | 2700.0 |
| 太空侵略者 | 148 | 1652 | 942.5 | 1059.0 |
| 星际枪手 | 664 | 10250 | 32689.0 | 28530.0 |
| 网球 | -23.8 | -8.9 | -14.8 | 14.2 |
| 时间飞行员 | 3568 | 5925 | 4342.0 | 4370.0 |
| 图坦卡姆 | 11.4 | 167.6 | 254.4 | - |
| 上下 | 533.4 | 9082 | 95445.0 | 104567.0 |
| 风险投资 | 0 | 1188 | 0.0 | - |
| 视频弹球 | 16257 | 17298 | 37389.0 | 19073.9 |
| 工作向导 | 563.5 | 4757 | 4185.3 | 11670.0 |
| 扎克松 | 32.5 | 9173 | 5008.7 | 9960.0 |
在论文中,似乎每次进行 3 次学习,每次结束时 100 集的平均值为结果。另一方面,在本文的实验中,在学习过程中平均 100 集的时间点权重最高的 10 次运行的平均分数。
最右边的数字是这个实验的结果,超出人类分数的数字是粗体。有些游戏没有结果,但这是因为作者从一开始就放弃了,没有进行实验。
每场比赛都进行了调整,也有大大超过原论文中公布的分数的情况,但本文的主要目的是考虑那方面。
从游戏名的链接可以跳转到作者学习到的AI的播放视频。除了上面的得分统计,这是一个三倍得分最高的视频。至于Asteroids/Atlantis/Enduro/Gopher,等到比赛结束拍视频太长了,所以我把它剪到了中间。
论文中包含一个学习曲线,可以粗略地了解每个游戏的难度。但是,仅凭此无法理解为什么在某个游戏中学习停止了,但是如果您实际尝试一下,您就会明白。
论文引用的学习曲线
关于各种调整的内容
在一篇普通的论文中,基本上所有的游戏都用统一的设置进行实验,以展示算法的多功能性。由于我对“AI可以玩游戏的程度”感兴趣,因此我通过为每场比赛提供各种助攻来争取高分。以下是我所做的调整。
奖励调整(缩放和裁剪)
在早期的强化学习论文中,“将奖励限制在 ±1.0”是标准做法,但在许多游戏中,为了获得高分,最好避免这个过程。事实上,现代算法似乎是基于自适应缩放奖励而不进行裁剪。
在这个实现中,我们手动设置了系数和比例。
-
缩放
- 像Ms.Pac-Man一样,有不少类似“吃怪物拿高分”的设计,但如果你简单地剪辑这个,拿高分的动力就会降低。本文中的许多实现将奖励乘以 0.001 或 0.01,以便更容易获得高分。
-
剪裁
-
顾名思义,保龄球是一种保龄球游戏,奖励是两次投掷击倒的瓶数(不包括备件和好球)。没有动力去击败很多,即使你让它学习,它也会结束以低分。在本文的实现中,Bowling 实际上消除了剪辑本身。
-
作为剪裁的一种特殊情况,FishingDerby 使用“从 0 到 +1 的剪裁”过程。本游戏是一款与CPU对战形式的钓鱼游戏,如果你钓到了一条鱼,你将获得正奖励,如果CPU抓到一条鱼,你将获得负奖励。但是由于没有办法阻止CPU在游戏中抓鱼,负奖励对于AI学习来说被认为是没有意义的,所以我们会通过消除负奖励来专注于抓鱼。
-
行动限制
Atari 游戏中可能的动作最大为 9x2=18,乘以总共 9 个运动系统(8 个方向 + 无输入)与有无火输入。可能的动作因游戏而异,但在许多情况下,如果您手动限制动作似乎更容易学习。
主要受以下政策限制。
-
移除火力+方向的动作
- 除部分游戏外,Fire+方向的Actions没有特殊意义,所以如果你简单地让它们不可选,那么Actions的总数可以一次减半。在这篇文章的实现中,“火+方向”这个动作在很多游戏中都被主动移除了。
-
删除对角线移动动作
- 有些游戏允许您沿对角线移动,即使您只能在四个方向上移动。如果你去掉这些,你可以减少要探索的动作的数量,所以看起来学习往往更快。这是 MsPacman 等。
-
移除上、下、左、右动作(仅对角线移动)
- Zaxxon 是一款射击游戏,可让您向 8 个方向移动,但最好只限制对角线移动。
- 如果只有对角动作可以替代其他动作,限制为对角动作会提高动作效率。
-
删除次数有限的操作
- Amidar、Alien 和 Frostbite 中的火是适用的,但有一个并不总是可用的动作会使学习变得不必要地复杂化。因此,在本文的实现中,Fire 本身是根据游戏禁用的。
- 这个实验的学习长度经常会超过论文中公布的分数,但是如果让它学习的时间更长,可能会产生不良影响。
贴现率调整
奖励的折扣率(Discount)在论文中固定为 0.99,但根据游戏的不同,可以通过更改此值来促进学习。
-
降低贴现率
- 如果奖励的机会很多,最好降低折扣率。
- Breakout/Enduro/RoadRunner 的折扣率为 0.95。
-
提高贴现率
- 如果奖励机会很少(从行动到奖励需要时间),提高折扣率可能会更好。
- 在 Amidar/WizardOfWor/Robotank 等中,增加到 0.995。
- 保龄球的最大值为 0.999。我认为这可以用两次投球后的动作和奖励之间有很大的时间差来解释,并且游戏中没有干扰玩家的元素。
引导特定方向
在某些类型的游戏中,“在某个方向上的进步是游戏进步的先决条件,但从奖励中不会立即显现出来。”例如,这个超级马里奥健身房环境在 中,“x 轴距离”给出了原始游戏中没有的奖励,但这显然会导致关卡更容易通关。
在这次针对的雅达利游戏中,唯一的奖励就是游戏中的积分,这种游戏设计难度很大,但稍加匠心,或许可以诱导。
-
奖励行动本身
- 如果您在选择您要引导的方向的动作时给予奖励,您可能能够成功地引导它朝那个方向。
- Enduro/RoadRunner/Kangaroo/KungFuMaster/UpNDown 使用此技术。
- 在KungFuMaster和Kangaroo中,要引导的方向实际上是根据进度而变化的,但是在这个实现中,不可能达到那么远,所以你要引导的方向在一开始就固定了。
-
删除操作
- 当您想要引导特定方向时,也可以使用操作限制。 Freeway 似乎是最容易捕获的游戏,但它对 AI 来说却出乎意料的困难,而且在论文中,除了 PPO 之外根本无法学习(在我的实验中,即使 PPO 运气不好也失败了)。在这个游戏中,你唯一能得到的奖励就是你来回移动你的机器并过马路,但在这种情况下,你需要偶然到达那里才能进步你的学习,而且概率本身很低。如果你把它限制为“禁止向后移动,只允许向前移动”并引导它向前,学习会立刻变得更容易。如上所述,它也可以以“奖励进步”方法为指导。
- 如果删除动作会对游戏进度产生不利影响,则不能使用此方法。
没有奖励的惩罚
在游戏中,负奖励比正奖励更有可能进入,并且没有时间限制,人工智能更有可能选择什么都不做。为了防止这样的事情发生,一些游戏有以下处理。
- 长时间没有奖励时插入负奖励
- 长时间未收到奖励游戏结束
关于Breakout,如果块数减少,它可能会在相同的轨迹中循环,并且不断将球击回(而不是什么都不做)会出现问题,所以我们也加入了这个处理来加速它。我正试图切断它。
收到奖励后,这一集就结束了。
当生命(自我)消失时,在内部结束情节的过程已经完成了很长时间。其原因被认为是在大多数游戏中,如果你失去了你的机器,你就失去了作为一系列动作的连续性,但在竞技体育游戏中,生命本身并不存在,因此无法使用。在竞争性游戏中,如果任何一方得分,就会失去连续性,所以我添加了一个流程,当奖励为正或负时结束这一集(设置完成标志)。
这是由 Pong/Tennis/DoubleDunk/IceHokey 使用的。
其他通知等
观看重播的有趣游戏
在大多数情况下,仅仅看 AI 玩的视频并没有那么有趣,但有些游戏有超级玩法。
Enduro 奖励踩加速器本身的行为,这让我们看到了人类似乎不可能的高速游戏。
Freeway作为一款游戏看似过于简单无趣,但我觉得AI玩法还是挺惊险的,值得一看。
网球和双扣篮也有人类不可能完成的比赛,但它们并不是很有趣,因为它们感觉很接近奇闻趣事。
只赚取积分,关卡没有进展的游戏
在很多情况下,你只是赚取积分而放弃通关,这让你想知道简单地比较分数并说“超越人类”是什么感觉。
在具有清除阶段概念的游戏中,你通关了多少级?但它应该被评估。
袋鼠爬到顶楼,像第一只大金刚一样过关,但通向它的奖励很少,所以他一直在底楼赚取积分,直到时间用完。
在Seaquest中,如果您将一定数量的潜水员保存在潜艇中,然后上升到海面,则该阶段将被清除。不存在。另一方面,击败鲨鱼和敌方潜艇有很多奖励,所以我只学习如何在靠近海面的地方赚取积分。
功夫大师(日本的斯巴达X)有一个生命值,当生命值达到0时就会失去生命,但是这种生命值的损失并不是作为负面奖励进来的,所以很难学会躲避攻击。它是设计的。这样一来,到了阶段BOSS,体力就会下降,打不过BOSS。不战而退,前行到舞台BOSS位置的可悲玩法,但即便如此,在分数上,你也可以获得比人类更高的分数。
银行抢劫是最差的例子,刚开始后立即重复左右移动就超过了人类的分数。
克鲁尔的分数本身就超过了人类,但并没有清场的迹象。这是一个我不太了解通关条件的游戏(困难?),所以我觉得无能为力。
Dot Eat 类型的游戏很难
这是一种以吃豆人为代表的游戏,在许多以获得所有预定对象为通关条件的游戏中,甚至连一个关卡都无法通关。虽然在阶段开始时很容易获得奖励,但在阶段结束后,当对象的数量不可避免地减少时,学习效率会下降。
Ms Pac-Man、Alien 和 Amidar 可以被归类为 dot-eat 类型的游戏,作为这次捕获的目标。
上下广义上应该属于dot-eat类型,但在刚过关前的情况下,它不断地赚取积分,虽然分数本身不错,但在第一阶段就结束了。
BreakOut通常不被认为是dot-eat类型,但它具有相同的特征,即随着游戏的进行奖励的机会减少,并且在所有块都被擦除之前很难学习。
一个我没学好的游戏
视频弹球并没有比随机播放好多少。这可能是因为“有很多场景无论动作如何都会进入大量奖励”。
冰球是唯一平均得分为负的竞技体育比赛,重播似乎与随机控制的重播没有太大区别。
在射击游戏中,学习的成果出现的比较频繁,但在Time Pilot中,我很不满意,因为我几乎无法通过第一关。其他方向的滚动拍摄可能具有难以学习的特点。
这次放弃策略的游戏
Pit Fall!、Venture、Montezma's Revenge、Tutankham 和 Private Eye 被排除在外,因为它们太难正确学习。简单来说,原因就是从初始位置很难获得游戏内奖励,也很难人为诱导。
在最近的算法中,似乎主流是尝试通过设置内在奖励来解决它。随机网络蒸馏 (RND)似乎是一种典型的方法。这是如果您过渡到您从未见过的屏幕,您可以获得高额奖励。引入了这样的机制来指导搜索。这次其他表现不佳的游戏可能会因此而获得更好的结果。
游戏方面的问题
以下是我在游戏中发现的一些错误。
- Road Runner 屏幕输出未对齐,并且分数部分未显示在屏幕上。
- 有时您在保龄球比赛的最后一局中不会因罢工或备件而获得奖励。
- Up'n Down 没有定义应该存在的左右动作,所以在道路的交叉口不能改变路线。
概括
我尝试使用强化学习 (PPO) 捕捉各种 Atari 游戏。
通过协助对每场比赛进行参数调整,一些比赛的得分能够明显高于公布的得分。
但是,也有一些游戏是靠积分无法通关的,还有像蒙特兹马的复仇这样毫无用处的游戏。这些游戏是内部奖励看来是有效的,所以我打算用这个机制重试这次不太顺利的游戏。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308626085.html