牺牲睡眠、耽误论文,三周开发出「斗地主」AI,他们拿下了今年 DeeCamp 最佳团队奖

2019-08-27 17:29:24 浏览数 (1)

8 月 16 日,由创新工场主办的 2019 DeeCamp 人工智能训练营正式结营。

今年,来自海内外的 600 多名学生参加了训练营,学员们完成了由 22 家企业发起的 50 个 AI 相关课题。其中,「挑战快手小游戏」项目获得了最佳团队奖,队长是北京大学在读博士生张天昊。

如此短的时间之内,团队是如何从 0 到 1,打造出一款成熟度较高的斗地主 AI 产品?近日,雷锋网 AI 开发者与张天昊同学进行了一次交流,讨论了关于本次训练营的经历和心得。

随机组队,三周完成项目

问:你参加训练营的初衷是什么?

其一,去年我舍友参加了 DeeCamp,当时是在北大举办的,近水楼台,我就蹭了不少专业的课程,尤其是开复老师的课程让我印象特别深刻,让我从产业的角度思考人工智能的发展。后来全程关注舍友的课题项目,是关于机械臂抓取,让我感觉到学员确实可以从项目中学习到很多东西,于是我关注了今年的报名情况,发现有关于游戏 AI 的项目,这与我群体机器人智能控制的科研方向比较贴近,都是关于智能体在环境中做决策的,于是想来学习一下。

其二,目前关于游戏 AI 的研究特别火热,比如王者荣耀的「绝悟」以及 Dota 的「OpenAI Five」, 越来越多的 AI 都开始去解决不完美信息下的多人博弈问题,这与机器人大部分情况下面对的情况是相似的,也是将来机器人走进人类生活必须要去解决的问题。DeeCamp 提供了与产业导师交流的平台,我抱着一种很大的学习心态,想要多了解产业端游戏 AI 到底是如何工作的,希望能为今后的科研换一种思路,找一些交叉点。

问:项目中你们是如何组队和分工的?

我们是随机组队的,组队之前我们彼此都不认识。队长是后面自己去推选的。

我们组很幸运,大家都有自己擅长的技术领域,并且都是抱着学习的心态来的,都想要在这个夏令营中有所收获。我们通过对论文的研读与讨论,找到了每个同学在三周内比较适合去突破的研究方向,并从一开始就高效地进行讨论与尝试,我特别感谢组员对于我项目规划的信任。

宿舍讨论交流

举几个比较有趣的例子,有的同学从没打过斗地主,但是其中一个算法模型 (规则模型) 比较考验编程人员的斗地主能力,于是我们购置了一本《斗地主高手必胜攻略》,传阅着看,同时在快手斗地主上对局,积累自己的经验,提高判别算法好坏的能力。

我们只有三周的时间,要从零开始做出一个大家还比较满意的项目,在时间上来说是非常紧张的。因为这个项目除去算法方面外,还有很多工程上的东西要去解决,比如游戏的引擎,游戏的服务器、数据库,游戏前端,游戏界面、音乐等等。

在那段时间里,我们大概平均每天的睡眠时间就五个小时。甚至还有可能存在一些轮岗,一个同学干完一个通宵之后,他去休息五个小时,另外一个同学起来之后接着他的进度去做一些调整,然后两个人再做一些讨论。除了创新工场提供的开放日之外,大家基本上都没有出去玩。

从产品上来讲,这个过程是很花时间的,要不停的去做对接。所有东西都是并行的,不同算法之间有各种各样的接口,最后再把它们整合起来。为此,我们制定了四个「五天」计划,在第一个五天要完成算法的初步模型,第二个五天完成游戏开发,第三个五天完成算法与游戏对接,第四个五天完成整体融合。

问:项目面临的问题有哪些?

面临的问题主要有两类,一类是算法,这类问题比较烧脑,相当于是在做研究;另外一类是游戏开发,这一类由于工程量比较大,又涉及到用户体验,细节比较多,比较累人。

首先是第一类问题,和其他大部分的项目不同,我们的项目不是简单地拿深度学习做一些应用,并且关于斗地主 AI 的研究难度比较大,所以相关论文特别少,基本上没有什么开源代码。除此之外,公司端由于要依靠其自主开发的算法获取利润,故而关于斗地主 AI 的研究也都是保密的。

由于这个问题确实比较棘手,我们也不确定三周是否能做出来,于是就和产业导师们进行交流,在最初开始时,老师们对我们的期望也只是能做出来一两个简单的模型,并且模型有一定的胜率即可。

我们设计了很多模型,在每个模型中都遇到了问题,其中有一个问题基本上是每个模型都会遇到的,就是在设计最初的时候,我们也不知道他们到底能不能行,这个问题在我们尝试使用监督学习模仿人类打牌行为时体现的比较明显。我们在前期搜索关于斗地主 AI 的解决方案时,有一篇使用深度学习解决这一问题的论文比较热门,这两年很多博主也关注过它,于是我们对这篇论文做了复现,但是效果并不好,我们做出的模型疯狂做出「不要」这一动作。

由于这篇论文没有更多地细节,我们也不知道到底是不是我们的方法出了问题,还是说因为整个斗地主游戏的游戏树大小大概是 10 的 85 次方,我们的 35W 条游戏数据太少导致的问题。不过幸好 DeeCamp 有产业导师制度,我们和我们项目的快手公司的刘霁老师做了沟通,他给我们提供了几个思路,我们根据这些思路去做了检验,发现在真实的玩家样本中,最多的样本就是「不要」。于是我们根据老师提供的论文尝试使用新的思路解决了这个问题。所以说产业导师真的特别重要,我们导师在整个项目中给了我们很多方向上的指导,由我们去做尝试、思考与探索。

与产业导师讨论问题

而我们整个算法当中最难的一个部分在于,它融合了多人不完美信息下的博弈。大家也都有关注今年 7 月份德州扑克 AI 在多人游戏中取得了重大突破,单纯使用其核心的 CFR 算法思想来解决斗地主问题的研究,我们没有找到一篇相应的论文。我们从最简单的库恩扑克开始理解,看了大概有百多业的论文,才将相应的算法移植到斗地主问题中,效果非常显著。

问:能否向我们详细解读你们的模型实践?

我们创新性地提出了一个多模型融合的斗地主 AI 框架,首先设计了多个斗地主 AI 模型,并通过离线学习的形式使它们各自都有一定的斗地主能力,最后再通过强化学习来做多模型融合,最终选择其中一种模型的决策结果。

算法框架如下:

具体来说,使用了 5 类模型。

首先是规则模型。规则模型是通过人类经验的方式,人为设计每一种打牌方式的好坏,并选择一种使剩下手牌评分最大的打牌策略。我们通过经验性地加入基于局面的惩罚与奖励,使 AI 之间存在配合。该类模型的优点在于可以利用人类经验,难度低,缺点是缺少灵活性。

其次,我们还设计了蒙特卡洛树搜索模型,该模型是 AlphaGo 算法的核心。通过模拟仿真的方式来获得最佳出牌动作。我们在王咏刚老师的建议下,使用规则模型对蒙特卡洛树进行扩展时的宽度剪枝,以及模拟时的深度剪枝。

我们如何在暗牌的信息下去做这件事情呢?我们花费了将近两周的时间去研究德州扑克论文,并成功地基于其核心思想构建出斗地主 CFR 模型。CFR 的算法的结构与蒙特卡洛相似,但其核心思想是通过加入信息集的概念解决暗牌问题。在暗牌的情况下,通过输入当前手牌信息以及记牌器信息和每位玩家的手牌数量,即可输出理论上获得胜率时的动作概率。我们通过将「信息集」采用静态存储的方式实现了计算量减少,存储量减少以及可扩展性强。

除了 CFR,我们尝试使用监督学习,通过模仿人类玩家的打牌行为来实现斗地主。

除此之外,我们还对 Value-based 的强化算法进行尝试。选用 Double DQN 作为框架,创新性地通过将状态与动作配对,生成 batch 个合法的输入,batch 的每个样本代表了当前情况下的一种合法动作,从而使网络输出 batch 个 Q 值,通过选择最大 Q 值的方式解决了输出动作不确定的问题。

问:你们的模型效果如何?

我们的每个模型都取得了一定的斗地主能力,其中我们提出的强化学习模型在于相同 baseline 对抗的情况下,取得了比现有论文还要高的胜率。其次是监督学习模仿人类玩家出牌行为的模型,在测试集上也达到了 76.5% 的预测准确率,这还只是通过黄金分段的 35W 条数据训练的模型,如果拿到的数据更多,效果是否会更好,我们不得而知。但是可以明显地感觉到这个 AI 确实存在一定模仿行为。

其实我们只是提供了一种解决不完美信息博弈问题的方式。可能我们的方案未必就是最理想的方案,但是可以告诉大家,这种方式是可解的,我觉得这是我们的尝试比较重要的意义之一,这与单纯使用深度学习去做回归或分类是不同的。

不仅仅是算法,团队配合很重要

问:这一次你最大的收获和感受是什么?

我的收获超出了预期。

最开始,我的预期是算法,怎么去解决决策问题。

但是,DeeCamp 不仅仅只是涉及到算法,它让我们知道大家应该如何一起分工去完成一个项目,完成一个真正的产品。

我很庆幸我们团队中有各种各样的人才。我们需要每天进行讨论交流,巧合的是,我们的队员正好都在一个寝室。于是,每两天晚上我们会开一次小会,五天一次总结,看进度,找结合,然后安排队员做一些交叉和技术上的对接。这个可能更像是在团队在做一些事情。项目开始之后,我们需要明白其他人在做什么。我觉得这些东西对于将来进入企业工作非常重要,你要知道怎么去和人配合,他们想要什么,你能提供什么,你想要什么,你需要他们提供什么,这也是很重要的。

除此之外,我认为还有一个比较好的点是,前期的课程确实准备得很不错。虽然北大是一个比较高水准的平台,我可以接触各种各样的知识。但是这些知识不集中,导致我们有时候会偷懒。打个比方,我不了解 NLP,我就不去听 NLP 的东西。但是在 DeeCamp 里面你会轰炸式的接触到各种各样的东西,包括图像处理,包括 NLP,包括模型与压缩,包括无人驾驶等等等等,这种情况下可能会产生很多交叉式的灵感。

产业合作的方式也是 DeeCamp 一大亮点,老师们给我们提供了很多帮助,不管有什么问题去找老师,都能得到很好的解答。我在答辩前,老师帮我反复校对和修改 PPT,这些指导也特别重要,它确实是一种全方面的能力提升,不仅仅是算法算法部分。同时,我认识了很多志同道合的朋友,我们整个组还开玩笑说之后要不要一起打 kaggle。

小组团建

问:你是怎么平衡学业和参赛时间的,导师支持吗?

这件事情挺难的,因为博士生的科研任务是比较重的,老师也会担心我去参加 DeeCamp 的收获不如在实验室科研。

这一个月时间耽误了实验室一个项目和两篇论文的进度,除此之外,由于北大本科生暑期的时候会在实验室科研,我只能远程和跟着我做科研的本科生进行项目讨论。

我们现在的研究算是一个交叉的方向,数学、物理学、自动化、机械和计算机我们都会一些,老师希望我不要走到纯粹的计算机方向去,他认为这会丧失我的优势,我也比较认可老师的观点。所以说,我特别感谢我导师谢广明教授对我的支持,并且感谢实验室同门来帮助我分担原来实验室的工作。

最后,我参加了 DeeCamp,并学到了很多。结果方面比较意外,我们也没有想到会拿到冠军。在此,特别特别感谢我的队友们,王澎,于俊,任震,刘永强,张博林,孙致波,刘文景,余冠一和孙海耀,希望大家前程似锦!

答辩后小组合影

问:接下来你的研究计划是什么?

我做的是多水下机器人群体控制,这里面涉及到水面和水底的感知与控制,与 AI 结合的有水面物体识别,水下图像增强,机器人传感器数据处理,机器人鲁棒性控制等。现在陆域资源开发得差不多了,海洋还没有大开发,除此之外,国家还提出了「海洋强国」的口号,所以说水下机器人的研究关乎到了生活与国家多个方面。我们实验室研发了很多水下机器人,这些机器人也协助过国家科考人员去南北极做一些勘探,还可以在渔业、水质监测、救援等方面有特别多应用。

抱着学习的心态,准备充分才能收获更多

问:对于未来想参赛的同学,你推荐他们参加吗?

我觉得挺好的,但是在参赛之前一定要想清楚自己的目的。有的人是真的是仅仅是为了一个结业证,证明自己是从 1 万个 AI 人才里面选出来 600 人,帮助将来找工作。这反而浪费了另外一个真正想去学系统学习的同学的机会。在 DeeCamp 能学到很多东西,入营的前期一定要做好准备。

DeeCamp 是一个大宝藏,它包含很多西。你不仅是在做自己项目,你也可以去了解其他项目。它里面还有很多沙龙,可以听到很多人的科研和工作经验,能学很多东西,对本科生来说尤其如此。

我认为在结营之前,你要形成自己的体系,这样才会获得最大的收益。我推荐同学们参加 DeeCamp,但是在参加前一定要想好怎样尽可能地在这里多学一点知识。

问:你认为在参加之前应该如何准备,才能收获更多?

我觉得在去之前的时候要做好两件事情。

第一件事情是你要对 AI 有一个基本的了解。我们不一定要很深入的了解,但是要大概知道图像是什么,自然语言处理是什么。入营之后,老师会从基础的知识点一直讲到最新的研究。如果没有准备好,很可能就会在课堂上睡觉了。

第二件事是,你要对自己的项目负责。在去之前的时候,要看一些文章,为项目做准备。我比较擅长强化学习,在去之前,我把强化学习相关的一些教程和资料都共享在群里了,大家一起学习和讨论。

每个同学都要知道自己的特点和特色是什么。比如我们组有个同学前端很强,前端这个事情就交给他了。另外一个同学数据方面比较厉害,他负责做引擎。游戏引擎是一个很复杂的东西,它包含了特别多的可能性,脱离游戏引擎去研究想法是完全没有意义的。如果大家都去做算法,这个项目不可能成功。

抱着学习的心态,在去之前好好想清楚自己的目的。如果是单纯的就为了一个结业证,我觉得意义不大。

0 人点赞