OpenAI训练强化学习通过转移学习提高人工智能刺猬索尼克游戏水准
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
原标题:OpenAI训练强化学习通过转移学习提高人工智能刺猬索尼克游戏水准
penAI举办了一场挑战赛,挑战参与者创建最佳代理人,玩游戏刺猬经典游戏Sonic的自定义关卡,而无需在开发过程中访问这些关卡。本次比赛的目标是提出一种元学习算法,可将学习从一组训练水平转移到一组以前看不见的测试水平。这是非常有趣的,因为大多数RL算法都是在它们被训练的相同环境中进行测试的,因此完全忽略了代理是否可以推广到以前看不见的环境的重要问题。
人工智能训练强化学习代理通过转移学习提高玩刺猬索尼克游戏水平,希望能够在RL学习更多关于转会学习的知识,我决定参加本次比赛,并且能够创建一个能够合理地发挥定制水平的代理商,在9000分中以5522分的成绩夺得第五名。在这篇博文中,我将详细介绍我的方法。但是在我们深入之前,让我在增强学习的背景下谈一谈元学习的含义(或简单地转移学习)。
1. RL中的元学习
通过利用过去的经验,人类能够很快地学习新的任务。我们的天生智慧使我们能够从极少数的例子中识别出物体,并且学会以极少的经验完成一项外部任务。理想的情况下,我们希望我们的智能代理也能够做同样的事情,利用先前的经验来更快地掌握新技能。但是,这并非易事。在典型的RL研究中,算法在相同的训练环境下进行测试,因此具有许多超参数和记忆能力强的复杂算法,但无法适应新的情况。相比之下,元学习的目标是在各种学习任务上训练一个模型,以便仅使用少量的训练样本即可更快地解决新的学习任务。
ImageNet类比。对于那些以前用深度神经网络完成图像分类的人,我们通常使用在ImageNet上训练过的预训练网络,并在我们自己的数据集上对模型进行微调以加速训练。类似地,在RL元学习的背景下,我们希望有一个“预训练”的代理人训练各种学习任务,并“调整”我们预训练的代理人,以便快速适应我们自己的任务。
人工智能训练强化学习代理通过转移学习提高玩刺猬索尼克游戏水平,如果您想更深入地研究这个主题,OpenAI引入了几种众所周知的元学习算法,例如MAML,RL ^ 2和Reptile等,这些算法都展示了很多适用于极少数示例的新任务的强大功能。我强烈建议您检查一下并了解最先进的技术。现在,在简单了解元学习想要达到什么的情况下,让我们来谈谈竞争的细节。
2. OpenAI复古比赛
在这次比赛中,我们得到的训练集来自3个不同的游戏绘制的58级水平,刺猬索尼克,声波Hedgehog2和索尼克3和指节。粗略地说,清除关卡的方法是找出前进的路线(即向右)并到达预定义的目的地。
奖励包括两个部分:水平偏移和完成奖金。水平偏移奖励在每个级别进行标准化,以便如果代理达到标记级别结束的预定义水平偏移,则代理的总奖励将为9000。即时达到关卡结束时的完成奖金为1000,并以4500次步进线性下降到零。通过这种方式,我们鼓励代理商尽快完成等级。
我们的目标是利用这些训练水平来训练一个元学习模型,可以在一组秘密测试级别上快速学习。虽然我们可以在培训级别上尽可能多地进行培训,但秘密级别的培训仅限于100万帧和12小时的挂钟时间(在OpenAI机器上)。因此,我们想要提供一个元学习快速学习者,可以利用培训级别的经验快速学习秘密级别。
3. OpenAI基线实施
OpenAI慷慨地提供了两个众所周知的RL算法Proximal Policy Optimization(PPO)和专门为此次比赛设计的Rainbow。
在最近推出的所有花哨的RL算法中,PPO尤其以其稳定性而闻名,因为它正在优化削减的替代损失函数,以避免策略在每次梯度更新期间发生太多变化。因此,每次迭代允许多次梯度更新,这使得它不仅比像Advantage Actor Critic(A2C)这样的类似算法更稳定,而且样本效率更高。
另一方面,Rainbow则是基于DQN的一系列方法的组合,这是DeepMind 在2015年推出的着名RL算法,可用于从像素输入中播放Atari游戏。它结合了几种最先进的方法,如分发哨兵,优先体验重播,嘈杂网络,双DQN,决斗,多步引导整合到一个单一的算法中,该算法效果非常好,并在Atari中设定了记录基准 一般来说,它不在政策的事实使得它比采用PPO等策略算法更有效率(理论上讲)。因此,它更适合用较少的培训例子解决问题。另一方面,与其他DQN方法一样,Rainbow带有许多超参数,因此它很难调整,并且不如PPO稳定。
4.第一次尝试:设置一致的本地验证
与我之前参加过的许多其他ML比赛一样,首先要建立一个与公共排行榜一致的本地验证方案。首先,我将基准PPO和彩虹模型提交给排行榜服务器进行评估。然后,我通过将58个培训级别分为47个级别的训练集和OpenAI推荐的11个级别的测试集来建立本地验证方案。我发现本地验证集比排行榜测试集略难,但分数差异通常是一致的。凭借100万帧的硬限制,PPO在排行榜中的得分大约为3200,在本地验证中得分为2500。
接下来是本次比赛的有趣部分:使用培训级别创建一个元学习快速学习者。我阅读了OpenAI的技术报告,并发现在 PPO的47个培训级别上进行联合培训,并利用联合模型初始化排行榜测试集的PPO模型的权重,可获得非常好的结果。相比之下,适用于Rainbow的联合训练方法并不适用。考虑到这一点以及彩虹需要更多时间运行(比PPO慢3倍)的事实,我决定把大部分时间花在PPO上。
5.与PPO多层次联合培训
人工智能训练强化学习代理通过转移学习提高玩刺猬索尼克游戏水平,大多数RL问题涉及培训代理人只掌握单一环境。联合培训的目标是培训能够同时掌握多种环境(例如47个培训级别)的单一代理人。有多种方法可以在多个层面上进行联合培训。为加速培训,我决定使用分布式培训方法,参考基于OpenAI基线实施的Batched A2c。给定的高层次 N环境下(即47个培训级别),我创建了N个分布式工作人员,以从每个环境中收集经验(即观察,行动,奖励,终止等)N级别T的时间步数。然后将这些体验汇总并发送到GPU以通过PPO算法执行渐变更新。
另外,我采用了几个技巧来促进PPO培训。
1)行动空间
在游戏中可用的12个按钮(B,A,MODE,START,UP,DOWN,LEFT,RIGHT,C,Y,X,Z)中,大多数按钮无用。因此,我只用了8个按钮组合作为动作空间({{},{LEFT},{RIGHT},{LEFT,DOWN},{RIGHT,DOWN},{DOWN},{DOWN,B},{B}} )。
2)奖励缩放
我把这个奖励乘以了0.01的因子。这对于让PPO正常工作至关重要。
3)大批量
我使用了非常大的批量(> 25,000)来执行渐变更新。从经验上讲,我发现大批量(适合GPU的内存)可以比联合培训的小批量更好。这可能是由于这样一个事实,即对于小批量大小,每次梯度更新只呈现少量级别的经验,并且这将导致梯度估计中的严重偏差。
我在拥有12个CPU和一个Nvidia 1080 GPU的家用机器上进行了2亿帧的联合培训。训练曲线如下图所示,我们可以看到平均情节奖励稳步提高并稳定在5000左右。
6.通过联合代理转移学习
然后,我利用在47个训练水平上训练过的代理联合作为预训练权重来初始化另一个PPO模型,以在排行榜评估的秘密测试级别上进行训练。我还添加了以下技巧来进一步改善座席绩效:
1)奖励塑造
有时代理可能会卡在关卡中间,需要向后移动以探索另一条路线(如下图所示)。三角洲x(向前)方向的奖励将阻止代理人过度向后探索。相反,我用delta max(x)作为奖励。如果没有办法提高水平的正面率,这将鼓励代理商向后探索。
请注意,我在联合训练阶段没有应用这种奖励塑造技巧。根据经验我发现,在联合训练阶段不包括奖励塑造技巧会导致更好的验证分数。我怀疑这是因为落后的探索是非常具体的,在联合训练期间从落后的探索中学到的经验更可能在测试评估阶段混淆代理。
2)较小的熵常数
由于预训练模型用于启动训练以进行测试评估,因此使用0.001的较小熵常数(对于PPO损失函数)为0.001,以便代理将更好地利用预训练模型的经验。
避免过度配合。为了防止联合代理人过度适应训练水平,我在联合训练的各个点采样了几名联合训练的代理人,并对当地验证水平进行了交叉验证分析。下图显示了在联合训练期间不同点处采样的不同联合代理初始化的几个PPO模型的训练曲线(在本地验证集上)。采样点分别为2M,6M,20M,60M,100M,130M,170M和200M的总时间步长。还包括没有预训练(底部橙色)的PPO的训练曲线用于比较。
我们注意到,使用预训练模型进行初始化的PPO试剂比没有预训练(橙色底部)的PPO试剂效果好得多。然而,在大约20M时间步长后,本地验证分数的改善停止了。通过超过2000万次步行训练的联合模型进行初始化的特工不会转化为局部验证评分的改善。这可能是由于过度训练集。因此,我简单地选择了3000万次左右的模型作为初始化排行榜测试级别的PPO代理的联合代理。
正如预期的那样,使用训练有素的47级训练水平的联合训练者来启动PPO训练,显着提高排行榜的得分。排行榜得分从3200上升到4000以上。尽管OpenAI的技术报告中有这样的改进,但能够复制结果仍然带来了极大的满意度!但是,尽管得分显着提高,但我的分数和6000分左右的最高分之间仍然存在明显的差距。渴望解决这个差异,随后我尝试了几次失败的尝试来提高分数(下面将会介绍),但没有一个他们工作。
那时候,我退后一步,想尽办法让PPO代理学得更快。如上所述,47个训练水平来自3个不同的游戏(Sonic the HedgeHog,Sonic HedgeHog2和Sonic 3和Knuckles)。虽然他们的高级规则是相同的(即发现前进道路并清除关卡),但许多关卡具有独特的“特征”,如草皮纹理,角色精灵,障碍类型,甚至可用的移动类型。例如,“Spindash”动作({Down + B})仅适用于Sonic HedgeHog2和Sonic 3和Knuckles。我想知道我们是否可以利用这些信息来加快学习速度。事实证明,我们可以!
7.使用“专家”预训练剂
如前所述,不同级别有不同的特征,例如草皮纹理,角色精灵,障碍类型和可用移动类型等。如果我们可以训练可以识别任何给定级别的这些“特征”并且具有相应的“专家”预训练RL代理人,以启动PPO培训以进行测试评估。
7.1根据相似性分组水平
实现第一部分的一种方法是根据各自的“相似性”将各个级别组合在一起,并训练一个分类器,该分类器可以将来自给定级别的采样帧作为输入,并标识该级别属于哪个“组”。将级别组合在一起有很多方法。为了简单起见,我决定按照相应的“区域”来分组。对于索尼克游戏,关卡分为不同的区域,每个区域有1到3个“行为”。来自同一区域的等级具有相似的特征,如草皮,背景图像,角色,移动,障碍物等。训练等级共有27个区域。我训练了一个ResNet50分类器,该分类器将输入从水平采样的随机帧和属于特定区域的水平的输出概率作为输入。
我使用从47个训练级别随机采样的帧创建了一个训练数据集,并使用Nester优化器和Nesterov加速训练了ResNet50分类器。经过3个训练阶段后,验证数据集的准确率达到99%以上。去年我曾参与过几个 关于图像分类/对象检测的项目。我很习惯取得很好的成绩,所以我认为他们是理所当然的。具有讽刺意味的是,只有在我开始进行强化学习 项目之后,我才意识到这些结果真的是“非常棒”!
7.2专家预训练员
所以现在我们有27个组,每个组代表一个独特的区域。如上所述,对于每个组,应该存在相应的“专家”代理,其专门设计用于在该组的级别上快速学习。培训这种“专家”代理人的一种方法是采取上文第5节中讨论的联合代理人,并进一步“微调”它(即联合培训),只在其专业水平上进行。此外,我运用了第6节中讨论的相同的转移学习技巧来培训专家代理人。最后一件事,为避免过度配合,我只调整联合代理100万次的时间步长。这条路,由此产生的专家代理人能够保留从训练水平的联合训练中学到的经验,同时能够从专业级别组中快速学习。从某种意义上说,这样的程序等同于允许PPO代理人训练超过在测试评估阶段施加的100万帧限制(即提高数据效率)。
以下是测试/评估级别最终算法的示例工作流程图:
对于特定的测试/评估级别 L,算法第一个样本N级,将它们送入ResNet50分类器,根据多数投票将该级别分为27个组中的一个。然后分配相应的专家预训练员来初始化要在等级上训练的PPO代理的权重大号。培训各个专家代理人花了相当长的时间。训练完成后,我使用这个算法提交了一个投稿,排行榜得分跳到5525,并且翻译成第五名!
我想用这个方法的几个想法来结束这一部分:
1)在比赛结束之前的几天,我只能尝试这种方法,因此没有时间来完全弄清楚训练专家代理的最佳迭代次数。也就是说,有空间来验证并进一步优化上述过程。
2)除了“区域”以外,可能有更好的方式将各个层次组合在一起。例如,不同地区的水平可以分享“古代遗迹”,“水下”,“工业”,“熔岩”,“热带岛屿”和“丛林”等类似的“主题”。在索尼克游戏官方网站。我们可以训练一个分类器,根据主题对水平进行分类,与分区分组相比,这可能会带来更好的结果。
8.我尝试过的其他方法,但没有奏效
1)好奇心驱动的探索PPO
好奇心驱动的探索是一种方法,其目标是鼓励RL代理人在环境仅提供稀疏奖励信号时探索新颖的状态。对于声,我还以为在代理陷在水平的中间,需要探索新的途径来绕过很难通过障碍来获得,这将是在案件有帮助的。我将好奇心驱动的探索结合到PPO中,以提交多份意见书。然而,分数并没有明显的改善,所以我放弃了它。
2)Rainbow代理联合培训
正如前面部分所述,使用联合培训模式来在测试级别上启动PPO培训可大大提高其性能。我们期望Rainbow能够发生同样的事情。为了验证这一点,我在47个培训级别培训了一名联合Rainbow代理人,并进行了200万次总计时间分布式培训。然后,我使用联合代理来初始化Rainbow代理的权重,并在测试级别上进行训练。出乎我的意料之外,评分变得更糟(从4000左右没有预训练到2000左右)。
我怀疑这是因为当我们使用Rainbow联合代理来初始化权重时,体验重播缓冲区主要只填充“良好”的轨迹。结果,训练严重偏向对的一小部分。为了检验这个假设,我给Rainbow 增加了epsilon贪婪的探索。得分确实有了明显的提高,但没有超过彩虹模型的预训练。同时考虑到Rainbow的实验周转时间太慢(比PPO慢3倍),我决定不再继续使用Rainbow,而是在比赛的其余部分关注PPO。
9.最后的想法
1)分数的变化
我注意到,在相同的验证/测试级别上,多次提交相同代理的评分存在巨大差异。我试图对排行榜进行多次提交相同的算法,并观察到分数的变化可能高达+/- 1000.这实际上是强化学习的一个已知问题。例如,当一个特工在一个困难的等级上接受训练时,如果有足够的幸运来发现一个秘密路线以在最初的探索阶段绕过一些难以穿越的障碍物,那么可能会有一个好的分数。然而,大多数情况下,代理人只会注意最可能的路径,而这只会导致平庸的分数。这与图像分类不同,其中每个训练样例都存在一个基础真实标签,因此如果给予足够的训练时间,模型可能会收敛到相似的结果。想办法减少分数的这种变化并不容易。它可能需要某种新的勘探时间表或使用人类演示数据来指导初始勘探阶段。
2)没有以前的世界模式,很难达到人的水平表现
OpenAI的技术报告报道了人类受试者只有几个小时的演奏得分的7300分的基准。相比之下,即使在训练水平上有无限的训练时间,顶级计算机代理只能在简单的排行榜测试级别上获得6400左右的分数。这使我相信,如果没有先验的世界模型和进行因果推断的能力,由RL培训的人工代理只能走得太远,而且还远远缺乏人类从极少数例子中推广和学习的能力。
3)从比赛的角度来看,首先要争取低挂果实!
比赛结束后,我意识到只需调整基准Rainbow模型的2个超参数即可获得6000分,而不涉及预训练。要吸取的教训是,为了竞争的缘故,首先要努力争取低下的成果。并不是超参数调整很容易,但与实施更复杂的方法相比,它确实更直接。我很惊讶一个调整好的彩虹能够取得如此高的分数。我确实尝试调整PPO超参数(例如小批量大小,时期数量,熵常数,奖励缩放因子等),但找不到比默认组合更好的组合。
10.确认
最后,我非常感谢OpenAI组织这场精彩的比赛。对于我来说,深入研究RL中的元学习主题是一个很好的机会。我还要感谢在论坛上参与并分享他们想法的参赛选手。我