首页 科技

OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

时间:2018-07-13 16:47:33 栏目:科技

OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

阿里妹导读:近日,OpenAI举办了首届强化学习竞赛Retro Contest,比赛主题就是“用AI玩《刺猬索尼克》游戏”,吸引了全球数百支队伍的竞技追逐最终,由阿里南大的联合团队Dharmaraja(法王)队以压倒性优势获得了冠军。


今天,我们邀请了团队的核心成员达卿,全面还原本次比赛背后的技术思考及理解(文末有彩蛋,请看到最后哦)。


前言

OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?


这个竞赛的目标,是评估强化学习算法从以往的经验中泛化的能力。具体说,就是让AI玩视频游戏《刺猬索尼克》(世嘉公司开发的一款竞速式2D动作游戏),其基本上模拟马里奥的游戏方式,玩家在尽可能短的时间内到达目的地,索尼克可以通过不停加速来快速完成关卡,最后可能需要对抗BOSS。

之前也有外部的媒体对此进行过报道,但大多是直译OpenAI的blog。这里我将从我们的视角分析一下此次比赛,希望可以抛砖引玉,不当之处还请大家批评指正。

OpenAI的弦外之音


OpenAI是断然不需要靠组织各类学科竞赛来博取关注和扩大影响力的,这次破天荒的组织了这个OpenAI Retro Contest的比赛,其根本目的既不是类似商业公司寻找最优算法方案,亦不是扩展自己的人才库,而是试图立这样一个flag:强化学习的强泛化性是通往通用人工智能的关键路径之一。


我们首先来看看强化学习研究中如何评测这件事。不同于监督学习是从监督样本中学习,强化学习可以自主地跟环境交互,并通过环境反馈的信号不断调整策略得到自我提升,这个跟人类自主学习的模式非常接近。


但正是因为有大量的固有的标记样本存在,使得监督学习在评估这件事情上的机制非常完善,类似CIFAR-10这样的数据集,都非常明确地划分好了训练集和测试集,算法只需要在这样的划分下测试算法的精度,就可以和其他算法进行公平的比较。如此简单、成熟而又公平的评估方法,促使了上一个十年的刷榜竞赛,把语音识别、图像检测和识别以及自然语言处理等任务的精度提升到前所未有的程度。


反观强化学习,由于没法在固定的测试数据上评测,所以通常是需要研究者自己实现一个环境,然后汇报算法在这个环境中的性能,其不确定性要远远大于在固定数据上的测试精度(如果环境实现的有问题,可能会导致完全相反的结论),使得早年很多强化学习论文中的实验结果被认可度,相较监督学习而言,其实要低很多。


幸运的是,领域内的学者很快就关注到了这个问题,共建了类似RL-Glue、RLPy、Arcade LearningEnvironment公共的环境库。在这些库中,研究者只需要实现智能体学习部分的代码便可以完成评测。其中的集大成者,是后来居上的OpenAI的gym。除了公共环境之外,甚至允许研究者将其在gym框架下的评测结果上传到gym的网站,从而自然地形成了每个任务上的算法排行榜,从而使强化学习评测更加趋于成熟和公平。


即便于此,对于近年来的强化学习的进展仍然存在不少质疑。其核心观点大概有2个:深度强化学习并不work,真正work的可能仅仅是深度神经网络;强化学习在简单游戏上动辄上千万的训练帧数,其本质上可能更接近在memorizing搜索到的解,而不是学到了真正的知识。


对于第一点其实没有讨论的必要,举个例子,深度神经网络只是一个建模工具,强化学习是一大类学习问题,而NLP则是一个更上层的应用问题,当你使用底层是神经网络表示的强化学习算法,很好地解决了一个NLP中的一个具体问题时,你能区分是神经网络、强化学习算法和NLP建模方法谁最重要么?


但关于第二点的质疑,其实是致命的。我们先看看计算机视觉领域,我们现在可以实际使用到的人脸检测,照片场景识别等应用都是基于算法工程师在训练数据上得到的模型,这些模型在我们实际使用中(训练数据并没有我们的数据),仍然可以比较精准的检测人脸,识别场景,其根本原因就在于,监督学习在训练阶段可以以相对比较容易的方式控制模型的复杂度,从而获得较好的泛化性能。


然而这样的结论在目前的强化学习研究中并不成立,甚至没有能引起足够多的重视。以下图为例,一个在《极品飞车》游戏中训练的自动驾驶策略,如果直接应用到《QQ飞车》,99%的概率要扑街,类似的现象在Atari 2600游戏中也可以观察到。

OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

这个现象其实并不难解释,我们在评估强化学习算法时,常规的做法仍然是在同一个环境训练和测试,这种模式在单个环境学习到最优策略仍然很困难的历史时期是有意义的,其至少可以比较模型类似监督学习中的“拟合逼近”能力,但可能并不适用于现在或者未来的强化学习研究中。


此外,很容易发现,类似的问题在人类学习中并不存在:一个极品飞车玩的很好的选手,一般也可以非常轻松的上手QQ飞车并很快也玩的非常好。基于以上所有的观察和思考,我们不禁得出这样的结论:一个更智能的学习算法,不仅可以在一个陌生环境中自主学习到最优策略,而且可以将知识总结泛化,使其在类似的环境中仍然可以表现良好且迅速适应。


因此,OpenAI此次参照监督学习中常规的模式“训练样本->验证样本->测试样本”,设立了“训练环境->验证环境->测试环境”这一前所未有的方式。当然,类似监督学习中所有的样本都要满足i.i.d.假设,这里训练环境、验证环境和测试环境也是满足于一个环境分布的,具体地,也就是索尼克游戏。


索尼克游戏是一个系列游戏,按照在不同的场景可以细分为多个独立的小游戏,在每个小游戏中也存在多个不同的关卡,但其核心元素都是相似的,因此非常适合作为一个元环境进行评测。需要指出的是,在此之前也有一些零星的研究在做类似的事情,但这些工作要么是在非常简单的toy domain上进行(换言之其对算法比较的结论可能是完全不置信的),要么是在ALE环境中进行的(ALE中不同游戏的相似度并不大),所以并没有一个里程碑式的成果。


OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

如果你想深入了解强化学习,可以参考我们之前推出的电子书:《强化学习在阿里的技术演进与业务创新》。本书首次在工业界系统地披露强化学习在实践应用的技术细节,其中更包含了阿里算法工程师对强化学习的深入理解、思考和创新。此书共有12个章节,作者跨越了多个阿里核心算法团队,希望能和你一起交流、探讨。


OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

如何下载?


长按识别以下二维*,关注阿里技术官方公众号,回复 “强化学习”,即可免费在线阅读、下载此书。

OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?

参赛团队


OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?


本次比赛,阿里南大队以压倒性优势获得了冠军(优势从public leaderboard一直延续到final private leaderboard)。这支胜利之师成员包括达卿(笔者)、冷江、仁重、波克、胡张广达(即将入职阿里)以及南京大学机器学习与数据挖掘研究所的俞扬副教授。其中冷江、波克和胡张广达是今年暑假即将从学校毕业入职该团队的“准员工”。一方面,考虑在他们入职前2个多月的闲暇时间,我们将这个比赛作为其在强化学习上的实战演练课题,并在达卿,仁重和俞扬副教授的指导下,远程合作(横跨杭州-新加坡-南京)完成这次的比赛;另一方面,由于这次比赛的重点是强化学习在相似多场景中的泛化性和可迁移性,而这个问题在阿里多场景的背景下则尤为显得重要,例如AE就有这样的相似多场景:众多的海外站点。因此,我们组织这3位准阿里员工,在我们的指导下,系统性完成了这次比赛。


同时,也非常感谢阿里临在团队和九丰团队的大力支持。


赛题简介


在这次比赛中,OpenAI开放了3类索尼克游戏:Sonic The Hedgehog,Sonic The Hedgehog 2和Sonic 3 & Knuckles。其中每一种游戏存在着若干的关卡(level),3个游戏总计有58个关卡。每个关卡的画面和任务都各不相同,在所有的关卡上,对刺猬的动作控制是相同的(当然存在某些关卡上存在某些特殊的动作组合,即所谓的技能,但我们并没有对此进行特殊建模)。


此外,关卡之间是共享部分元素的,即使一个新的关卡你完全没有看过,但其中的元素A在某些训练关卡上见过,某些元素B在另外一些关卡上见过等等,因此,是存在泛化的可能的。


OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?


跟以往的监督学习算法类的比赛不同(通常只需要提交在测试样本上的预测结果),此次比赛需要提交算法。具体地,将算法依赖的代码和数据打包成docker镜像,然后上传至OpenAI的网站。在收到评测请求之后,OpenAI会针对每一个评测关卡(public leaderboard上有5个评测关卡,而final private test上则有11个),在配置有K80显卡的aws instance上以独占GPU的方式运行我们的算法(感慨一下OpenAI的壕气,毕竟有上百个团队在比赛期间不停提交评测请求),学习时间被100万个游戏帧和12小时物理时长同时限制,任意条件满足则程度退出。


在这个过程中,算法在评测关卡上的平均episode reward作为最终的分数,而总分则是在所有评测关卡上的平均。对于每一个这样的关卡,任务是学习到一个从原始的游戏的RGB图像到游戏手柄的12个物理按键的映射,以尽可能短的时间,让智能体通关。对于这次比赛而言,任务是通过在训练关卡上的预训练,尽可能地让算法在由专业的游戏设计师重新设计的关于索尼克的全新关卡上,迅速(100万帧)学习到最优通关策略。


技术方案


根据OpenAI提供的技术报告,针对这个问题,他们内部进行算法调研的结果显示,取得性能最好的方案是joint PPO, 要远胜于DQN的综合改进大杂烩版本Rainbow。同时考虑到ppo对内存的要求要小很多(不像DQN类的算法动辄百万的replay buffer ),且其样本利用率要高很多,所以我们计划首先从joint PPO开始,在训练游戏上得到一个全局策略,然后以此作为初始化权重,在测试游戏上进行100万帧的学习和测试。


具体地,我们采用了Deepmind在其Nature paper中描述的网络结构:原始灰度图像->3层卷积->1层稠密层->动作映射,并且结合在Atari2600上的一些训练trick(帧随机跳动、帧堆叠、奖赏缩放等),并在策略的输入输出上做了些微小的改进:


● 状态空间:灰度图像->RGB图像。因为Atari游戏相对简单,所以灰度图像提供的信息就足够了,但索尼克游戏所有的元素要丰富和复杂许多,所以我们直观上觉得,灰度图像提供的信息应该是不够的。


● 动作空间:直接学习原始12个按键的组合显然是不靠谱的(OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?个动作),结合官方提供的baseline和我们的经验,抽象了如下10个离散动作(actions),其中[]表示的不按任何键,对应的就是在游戏中等待,对应的操作在需要原地等待的关卡中非常有用。

相关文章