游戏AI与人工智能发展前景。呃,非常非常感谢大家今天晚上抽时间来到我们来Meetup,也欢迎大家。呃,今天我们非常荣幸的邀请到了田渊栋来给大家聊一聊这个AI围棋等等那些最火的技术和最火的backboard之间的一些故事和一些技术。很高兴有这位老朋友来到今天晚上来到来Offer,跟大家聊一聊这些技术。好吧,大家掌声欢迎。

啊,今天今天非常感谢大家能过来啊,然后听我这个讲座啊。我是田渊栋啊,我现在在Facebook AI Research,呃,其实中国呃中文翻过来就是那个脸书那个人工智能研究院啊。我现在是那个研究科学家和经理。啊,然后呢,今天呢,我想讲呃讲一下,就是我们这边主要的一个工作,就是一系列工作,就是关于如何建那个构建一个就是增强学习的一个框架,啊,然后呢,让大家都能用上增强学习。啊,就是这样的一个题目,

那么首先呢,就是开篇上来说,我们现在大家都知道,呃,AI现在非常火啊,火到不成样子的程度,啊,确实AI呢这个火是有是有原因的,并不是因为说呃AI是那个吹牛吹出来的,很多问题呢现在AI确实可以解决,啊,比如说像那个识别物体啊,像那个呃做那个什么做那个机器翻译啊,啊做呃那个语音识别啊,对吧?甚至是最近Science有篇文章说,我们可以拿这个。图片来识别是不是皮肤癌啊?就是像那个医学图像处理,其实现在有很多呃结果都出来了,甚至有些时候呢,可能还超过呃。那个就是医疗这专业人员的水平,所以那这些东西呢,其实确实实打实的,并不是说是吹出来的啊,确实是有很很好的效果,

啊,然后这个还结合你,比如说传统AI也有很多,呃,像我们现在那个像Facebook上这种,啊,如何给不同的人啊推送不同的东西,那肯定都是用AI来做的,啊,像比如说最近国内也很火的,比如说安防啊,它也是用AI来进行那个筛选,你看什么样的呃那个那个视频可能会有问题。那么AI不仅能做这些事情,而且还有最近还有一些新的发现,就发现AI可以啊用来呃代替人类一部分创造性的工作啊,比如说这边有个这个例子就是那个Smart Design,可能大家都玩过一个叫那个Pixar,而不是叫那个。就是手手机上有一个那个app,就是把你的照片变成各种风格的照片,

啊,这个呃这个东西呢就就就拓展了一些AI的一些应用应用场景,啊,可能大家都觉得梵高的照片非常梵梵高的画非常好,啊,但是梵高一共就画过没几幅画啊。画完之后呢,呃,但你想把你的照片变成梵高照片,以前是不可想象的。啊,以前可能需要一个画家去画它,但是现在呢,你只要给一张梵高照片,啊,再给一张那个,呃,我们真实世界中拍下的照片,那么通过AI呢,可以把它合成啊,变成一张啊带梵高风格的啊那个风景照。那么这样的话呢,就拓展了那个呃人类的这样一个感知的一个一个一个界限。

那么那个另外那个AI在创造性上的体现呢,当然是那个在游戏上的一些体现啊。那个围棋可能大家一开始都觉得就是在我们这一代人的教育里面,就是大家都觉得好像围棋是一个啊,就是AI没有办法战胜人类的一个领域啊,认为呃人的智慧是永远是比AI要高一个层次的啊,所以围棋就是一个例子。但现在不是了啊,现在基本上啊随便一个AI围棋AI都能够啊干掉职业了,现在是这样的一个水平。啊,所以呃,这些呢,其实是AI现在呃做的比较好的啊一些地方,

当然了,就是AI并不是万能的啊,不然的话我们早就进入强人工智能时代了啊,所以AI有很多问题,有些问题,比如说。啊,现在AI还解决不了,比如说一个是叫commonsense,就是常识常识推理,那么这些问题呢,就是目前看起来AI还没有特别好的办法去解决,啊,就是我怎么样去呃回答那个人类回答给的问题啊,怎么跟人类进行自然如的聊天,那么这些问题呢,就是主要的原因是在于就是啊,之前的算法呢,其实都需要经过都需要有大量的数据。啊,让AI呢去学习去吸收啊,然后有了这些数据之后啊,AI才能够模仿人啊,达到人的一个水平啊。但是呢,对对于常识来说啊,这些常识呢,就是有些时候呢是呃很难让人一一句一句的写下来的。

啊一呃一这是一方面,另外一方面呢,就是这样的常识有些时候呢是存在于,啊就是物体的结构啊,或者说那个人在很长时间内的经验积累,所以也很难量化。那么这个问题呢,就是是比较难的问题。那么现在就为什么我们现在还没有一个机器人能跟别人呃进行自助对话,这个是一个很大的原因啊,所以现在还需要更好的算法去做这个事情。那么第二个问题就是说,呃,假设我有呃无穷无尽的那个搜索空间,那么在这种情况下,我怎么样让AI能够真正的去呃得到很好的人工智能的结果?

啊,比如说那个像StarCraft这样的一个游戏啊,那么这个游戏呢,现在就是很多人呃在想做,像我们这边呢也有一些那个。啊,有个团队也在做这个,也这个这个方向,啊,那么这个问题的呃难难点呢,就在于就是呃它的空间实在太大了,就是你可能每走一步呢都有大量的呃选择,那么什么样的选择还是比较好的呢?这个是呃非常难的。人呢可能在在玩过几局之后呢,他会总结出来一些比较大的规律,但是AI现在还做不到这一点。啊,这是一个。

那么然后呢?最后一点呢,就是说,嗯,就是AI在呃没有几乎没有那个训练数据的时候,或者说非常复杂的环境的时候呢,这个问题也是很大的,也是很难做的。啊,大家都觉得知道无人车现在呃确实很火,大家都呃很希望哪一天无人车能够真正成为现实,然后大家能不用开车上班。啊,但是确实无人车是很难做的,啊,这个呃无人车的一个问题呢是是在于是这样,就是你可能一开始呢做的还比较好,你可能每每一迈啊会有一个呃问题,然后把这个问题整合起来,你会得到一个数据集,然后在数据上你可以改进,然后做的比较好。

那么你的无人车改进了之后呢,它现在每十迈出一个问题,那么你继续收集数据,然后把这个数据拿过来做训练,那么这个问题就在于就是你的无人车越来越好了,那你数据训练数越来越来越少。选出越来越少呢,然后你的提高速度越来越慢,啊,就是这样的话呢,就是导致一个恶性循环,到最后就发现,也许你的水平已经啊,已经挺高了,已经很不错了,但是还没达到人的水平,啊,但是你的数据已经非常少了,这个时候呢,就是非常难做。那么你这个之后,你会发现,就是人的能力是非常强,他可能会通过啊非常少的例子呢,就能够达到啊非常好的那个效果。那么这一块呢,其实现在AI还很难做到啊,现在还有非常大的一个gap。

啊,就是这个是一张那个一张非常形象的图。你开始可能大家都对AI非常非常狂热,大家都觉得,哎呀,我往里面塞点数据进去,AI就能告诉你一个很很好的答案。啊,但是后来发现,往里面越往里面塞数据越多,但是AI确实在进步,但是它进步的速度呢,会变得比较慢。那么到最后呢,就是可能还是达不到人的水平。啊,但是呢,就是呃,用的effort的已经非常非常多了。那么这个其实就说明了,就是我们还是需要更好的算法。所以 AI 现在还是不是万能的,还有很多问题要解决。

啊,那么一个算法,一个可能的那个有希望的算法呢,就是呃,叫 reinforcement learning。啊,这个叫强化学习。那么强化学习这个算法呢,就是呃,它的基本的思路非常简单啊,就是说呃,在一个环境里面有一个机器人或者有个叫 agent 啊这样的一个智能体啊,然后这个智能体呢,它在每时每刻呢,呃,它从环境中呃收集到呃一个当前的状态,比如说它看到什么样的图片啊,啊,它周围闻到什么样的味道啊,或者说它触摸到什么东西。那么用这个呃用这个状态呢去做一个决策啊,这决策可以说我可以往前走,或者说往上跳,或者说往往左往右转。

那么这个转动呢,或者说这些动作呢,可能会会影响到那个它下一步看到的啊一个一个状态啊。然后同时呢,就是如果那个智能体呢做到了一些重要的那工作呢,就是啊它达到了某个目的呢,那么外界呢可能会给它一个啊奖励。那么这样的一个非常简单的一个一个设定啊,有这个设定之后呢,呃,我们可以让智能体呢在这环境中自由的活动啊,然后去找到一条呃最优的能够呃最大化它的奖励的这样一条道路。啊,其实就是这样的一个啊一个设置。

那么这样的话呢,就是你发现就是那个强化学习跟呃一般的那个呃有监督学习,它们之间是是有很大的区别。啊,比如说对有监督学习来说呢,它的设置非常简单,就是呃,我就告诉AI,我就告诉机器说,哎,我有呃很多呃材料让你去学,啊,学完之后呢,然后请你把这些答案给背出来,或者说请你把这些答案呢,呃,请你在那个新的那个问题上呢回答出来对应的答案,那么这就是那个叫有监督学习,那么这样的话就是问题和答案呢是一一对应的。

啊,那么对于那个强化学习来说呢,那个不是这样子啊。强化学习,呃,对于AI来说呢,我就是对于人类可能就给AI一个啊一个目标。跟就跟人家说,OK,你要实现这个问题,比如说对围棋来说,我你就要赢,但你具体怎么赢啊?你是通过什么方式赢的啊?然后那个这样的话呢,其实是需要让呃AI自己去在空间中去找啊。那么就所以说你会发现,就是同样达到一个目标,也许那个强化学习的智能体,它的它能够找到一些呃,就是通过增通过那个啊监督学习呢不能找到的这样一条路径。那么这样的话就会看到这个AI就会有创造性。

啊,那么这个是一个呃例子,就是说对于那个啊监督学习来说呢,就就是可能就是相当于就是你可能是朝九晚五的一个办公族啊,然后每天都让老板跟你说你要做什么,然后你把它做完了,然后就下班走人。啊,强化学习呢,可能更像一个是儿童在一个植物呃,在一个游乐场里面去玩,啊,他会自动他会去探索各种各样的那个空间,然后找到一个好的那个呃那个结那个结果。那么这样呢导致的一个好处呢,就是说它有创造性,它会找到一些呃有意思的方向啊,然后呃去给你一个更好的、更有创意的答案啊。

但是呢,反面呢来说呢,就是它需要更多的计算资源啊,它可能对数据呢有更多的要求。啊,就是这样。那么现在那个强化学习的那个应用呢,有一些,当然不是特别多啊。现在这些是列举了一些工业界的可能性应用啊,比如说我可以拿来做呃那个实时的那个啊那个 at speeding。啊,就是说我去竞标,去找到什么样的那个呃 ads 是比较适合呃这个用户的啊,比如这个时候呢,你可以把那个啊用户当成一个环境,然后呃我作为一个那个竞标的一个呃主体呢,我想办法去给用户推送不同的那个 ads,让他们能够啊让他们让这个 ads 的那功能达到最大化啊,我可以给用户呢做那个推荐,对吧?甚至说我可以用用它来做那个啊优最优化。

啊,这是一些呃那个强化学习的一些目前的看起来一些应用,啊,当然我相信之后呢会越来越多,啊,目前看起来还是一个比较呃初步的一个阶段,啊,希望以后呢就是会看到更多强化学习的一些那个应用。啊,那么这边呢,就是呃,我这边在Facebook呢,主要是做强化学习在游戏中的应用的,啊,所以呢,就是为什么要做,为什么要用游戏呢?可能大家会觉得,哎,游戏这是一个小孩子玩的游戏啊,好像大人不需要玩这些东西。但其实不是这样,因为游戏呢,其实呃,对于那个强化学习来说呢,是一个很重要的,是一个很有意思的一个平台。

啊,主要原因呢,是因为首先游戏可以给你大量的数据,而且每个数据呢都是完全标定过的,啊,那这样的话呢,其实就解决了一个那个数据荒的问题啊。你可能在现实生活中,你可能需要大量的数据,然后当然标定完的数据。那么这些数据呢,可能需要通过啊,就是比如 Mechanical Turk 啊,或者说会要花人工去标定它。那么这个过程非常漫长,而且会有很多错误啊。但是呢,游戏作为一个平台,就可以提供你大量的数据啊,这是一个比较好的地方。

那么第二个地方呢,就是游戏好的跑起来可以比实时还要快啊,但是现现实生活你只能跑一个现实生活是一样快的啊。那么大量的数据呢,就可以通过呃快速的那个模拟来得到。那么还有一个好处呢,是游戏是一个比较可以控制的一个环境,然后它的时间也可以也可以重复做,那么这样呢,对科学研究呢是有非常大的好处的。啊,那么还有那个游戏的,呃,它里面对于安全性的要求呢,和伦理上要求呢,不是特别高。啊,你如果在游戏里面,如果比如说极品飞车里面你不小心翻车了,没有关系,重新再来。

啊,但是在那个现实生活中,你就不能这么做。当然,游戏不能解决你所有问题啊。虽然说游戏给你提供了很好的框架啊,很好的一个平台,但是你还是需要想办法去设计你的算法啊,还是需要大量的数据、大量的那个资源去呃去模拟这个平台啊。然后呢,就是还希望呢能够把游戏环境呢一点点的那个做出来,那个呃AI呢能够transfer或者说能够转换到现实世界。那么现实世界可能是啊有很很多很多坑、很多的问题。啊,这个问题也是很大的。

那么最后呢,就是游戏环境呢,因为现在比较多样,所以现在还没有办法说,呃,一个AI在一个游戏环境中训嗯训练的很好呢,能够呃转移到其他游戏环境里面去。那么这些都是呃现在比较前沿的一个研究课题。啊,那么针对这个问题呢,就是呃,我们这边呢主要是在这两个方向,呃,就是做了一些努力啊。一个是啊,我们希望设计出来更好的一个环境,能够呃在上面做呃那个更好的算法。第二个呢,就是说我们在这上面能够希望有更好的算法,更好的系统能够做出来。

啊,那么这边呢,就是说说了一下,就是我呃我们组现在的一些工作啊,比如说,呃围棋是其中的一个啊,之前我们有一个叫 Dark Forest 这个引擎啊,那么最近呢,我们又开源了一个叫 Open Go 啊,叫 Open Go 的这样的引擎,那么这个引擎呢,就是呃,就会看到它它效果非常好啊,它现战胜了很多职业选手。啊,然后那个到了就是呃平台上来说呢,我们开源了叫F的这样一个平台。那么这平台呢,能够让大家呃都用呃用强化学习去做一些呃有趣的实验。

啊,那么同时也开源了一个叫那个 House 3D 的这样的一个平台,那么希望大家能够用它呢,能做那个 navigation,就是做啊在三维环境中呃做一些呃移动啊,然后呃希望让机器人在这环境中能够做一些有意思的事情。那么通过这种方式呢,就可以啊就可以学到让那个机器人能够学到一些呃那个人想让它学到的东西。啊,那么首先第一个就是我们介绍了一下我们那个 F 车平台啊,那个平台为什么我们要做这平台呢?

啊,首先第一个就是说,呃,对于强化学习来说,呃,这个呃这个有这个强化学习那个设定呢是非常非常简单的啊,就是一个智能体在环境中随便走动,然后获得奖励啊这样的一个非常简单的一个平台啊,非常简单的一个算法,但是你真正要把它写下来,或者真正把它做成一个可以用的。呃,是说或者说性能非常好的啊,一个真实的一个系统呢,其实有很多呃的地方要考虑的。比如说什么地方你要CPU啊,什么地方用GPU啊,什么地方你要用simulation,什么地方你可能用就是人类棋谱啊,或者说用人类的啊replay啊,或者说用那个计算机自己生成的replay啊这些。

那么还有很多 concurrency 的问题啊,什么是用多线程,什么是说用分布式系统,那么这些呢其实是很大的问题,因为呃强化学习这个呃啊这个方向呢其实呃跟那个一般的深度学习还不一样,因为它有很多的要求,它可能对系统设计啊、对算法呀啊都有很大的要求,所以呃这些呢其实是会阻碍呃大家在这上面做各种啊研究。那么,所以我们就提出了这样的一个平台,叫那个 Extensive Lightweight and Flexible Framework。

那么这个平台呢,呃,现在已经开源了啊,呃,然后,呃,它的基本原理是非常简单的,就是呃,我们希望我们能回到啊这个非常简单的那个 for loop 这样一个一个时代啊,我们不用考虑那么多的啊那个呃那么多的那个什么并发性啊,什么 CPU GPU 的这样用法这样的一些问题。那么我们希望就是,呃,我们写就想写 Python code 的时候,我们希望就是个很大的 while loop,啊,这个 while loop 里面就是说,哎,我们就呃。从天而降有一个那个 states 有一些状态,那么这些状态拿下来之后呢,我们通过我们现在手上的模型,呃去,啊做一个 forward,就可以得到我们给定这些 state 之后呢,呃下一步我们要做什么,然后把这一步呢返回啊给呃所有这些游戏啊,然后我们这个平台就能跑起来,

那么这个非常好的一个梦想啊,然后我们希望把所有的那个啊乱七八糟杂事呢扔给 C 加加做啊,这个是这就是我们这平台一个设计。那么啊,它的一个设计具体怎么设计的呢?就是我这里讲,简单讲一下啊,我不会说的太细。那么这设计很简单,就是呃,我们希望这个每个游戏呢。啊,都有个单独的一个呃线程啊,这个线程就往再往前走。那么每隔一段时间啊,这些游戏线程呢,可能需要呃用一个神经网络去决定它将来要做什么事啊。所以,但是神经网大家都知道,就是如果你用一个样本送进去的话呢,神经网络效率是很低的。所以形成神经网络是需要一个叫batching的这样的过程。那么它需要很多呃游戏啊,很多的那个呃状态放在一起,然后一把就是那个。啊,做个前向,那么这样的话效率会更高。那所以呢,就是说 f 怎么设计呢?就是我们希望这个 batching

这个过程是动态的。然后比如说每次可能有四个,那个有线程,特别线程是四个线程说,我需要那个神经网络的支援了。那么他们会停下来,然后把他们的状态捆绑在一起,然后送给那个 Python,然后 Python 这边说,哦,我有这样一把状态之后呢,我可以直接做一个 for 做个前向做 forward。得到一个返回值,那么这返回值可以返回给那四个线程,让他们继续往前走。那么每一次呢,就是这个 batching 的过程呢是完全随机的,是动态的。那么这样的话呢,其他的线程它就不会影响到啊,他们还会继续往前走。那么这样的话就是兼顾了 CPU 和 GPU 的利用率,这是一个它的基本设计。那么具体的细节呢,我就不讲了。

然后那个那 L 有些比较有意思的一个特性,比如说一个是 extensive,就是它可以里面放任何游戏,任何游戏只要有 CI 平台都可以放进去。还有一个就是它速比较快啊,它我们在里面写了一个微缩版的星际啊,我们通过这个微缩版的星际呢,我们可以去研究,就是我们怎么样去训练一个可以打星际争霸的一个游戏 AI。那么这个微缩版星际呢,可以跑起来非常快,它可以跑到四万帧每秒啊,这个速度是可能是比那个实时要快个几百倍了。那么通过这种方式呢,可以在很短的时间内获得大量的数据。

那么最后呢,这个平台本身也比较 flexible,就是比较灵活,可以放里面放很多不同的强化学习的一个设定,强化学习里面很多不同的算法,那么都可以往里面放。那么这个是首先在我们可以放很多东西,那么这里面就是我们可以包括比较流行的,比如说 Atari Game 就是做那个研究的一个经常的一个平台,里面有很多七十年代八十年代的游戏,这些游戏当时非常风靡,包括打砖块啊、乒乓啊,那么这些游戏呢就是当时是人来打,那么现在因为这游戏的模拟速度非常快,我们机器已经比一九七几年、八几年的时候快了不知道多少倍了。

那么可以用这些游戏作为模拟平台,然后做,然后去研究 AI 的一些特性。那么另外就是我之前说的,就是放了一个微缩版的星际。你之后可以看到一些有意思的视频是 AI 自己能学出来的,那么还有放了就是比如说我们这边的一个围棋这样的一个项目。那么速度上来说呢,我们都比那个我们之前的一些那个比如 OpenAI Gym 这样的一个平台要快,而且在高核的情况下呢,现在速度会更快一点,而且更稳定。

那么灵活性上来说呢,就是啊,这个平台可以支持很多东西。比如说啊,我如果只想我不想去做训练,我只想说啊,估计那个那个评估一下我们当前那个 AI 的水平,那么可以做。如果我们不仅想评估当前 AI 水平,而且还想做训练的话,我希望通过 AI 不停地、不停地在那个平台里面在做那个 action,啊,会让它让 AI 做得越来越好,那么这也是可以的。

那么我也可以做那个 self play,啊,就是当年的 AlphaGo 是怎么做的呢?它希望通过两个 AI 相互之间左右互搏,啊,他们之间把水平提上去,那么这个也是可以实现的。那么也可以通过,也可以同样同样的平台来做,比如说 Meet Agent 啊,假设你有很多个 AI 在里面啊,相互做作用,那么它们之间应该怎么样去处理?

那么当然了,就是最后还是讨论一下我们那个 Monte Carlo Tree Search。那么这个其实是那个 AlphaGo 或者和我们这边用的一些比较重要的技术。那么这个技术呢,我们也可以在这个平台里面实现,而且效率会比较高。啊,那么基本上就是这样的一个一个比较好的地方。

那么之后呢,我们讲一两个 case study,就是首先第一个呢是呃,当然是围棋了,我相信大家会有比较有兴趣。那么在讲围棋之前呢,啊,我先说一下,就是围棋的这个 AI 是怎么样 work 的,啊,就 game AI 是怎么样 work 的,啊,就是说,首先第一句话是大家因为大家希望能大家能记住的是,呃,就是说 AI,呃,计算机就围棋或计算机那个象棋,它并不是说是穷举所有的可能啊,然后达到一个目的,就是就算是计算机也是达到不了穷举所有的状态这样的一种啊最终可能的。所以呢,这个是不用想的。

所以最终呢,其实我们的 AI,呃,我们的游戏 AI 是怎么样实现的呢?还是分两个部分。啊,一部分是说,呃,我们先通过一个搜索的过程,我们从当前的局面出发,啊,这个局面呢,那个搜索一些步,然后得到最后的那个得到几步之后的局面的情况。那么这个搜索呢,不可能完全做搜索到底啊,那这样的话就是把全部空间都穷举完了,那个这样的话就非常慢。啊,所以就是说,缩到一定程度之后呢,就需要有一个呃函数叫估值函数啊,去估值它到底是呃谁黑棋赢还是白棋赢,啊,就主要是这样子。

那么这样的话,就相当于就是我们有两个地方,呃,需要去设计的,一个是说啊,我们怎么样去啊,怎么样去做这个搜索,怎么样展开这棵树。那么第二块呢,就是说我们怎么样去评估最后的那个状态。那么这两块呢,其实根据不同的游戏呢,会有不同的呃设计的思路啊。那么这边呢,我就不跟这不展不展开说了,就是呃,比如说嘛,我们对于不同的游戏,像围棋啊,像国象,那么他们之间他们可能用不同的方法来做树的展开啊。

然后那个对于呃评估的函数呢,其实也是呃呃跟游戏有很大的关系的。啊,是不是游戏是不是简单,是不是复杂啊?这游戏呢,是不是呃完全信息的,还是不完全信息的?它们之间是有不一样的结果的。那么呃一般来说呢,这些函数呢其实比较难呃估计啊,一般来说它们都不是那么 smooth 啊,或者就是说不是很光滑,可能差了一步呢就差太多了啊。

所以呢,传统方法呢就主要的呃办法是这样的,就是如果你要设计有一个围棋 AI,你可以找一个呃非常懂围棋的人坐下来,跟他说啊,我们要做围棋 AI,你能不能把经验传授给这个计算机?那么呃,这个围棋高手会说,呃,我们把这些又说下来时候写一下来说,啊,我们在这个时候的时候我们要怎么样写,怎么下?在那个时候要怎么下?那么把这这个那个一条一条输计算机里面去啊,这个传统的做法。

传统做法的好的地方呢,就是说,呃,这个写出来没规矩,大家都懂的啊,都知道是什么意思。但是呢,就是不好的地方就是,呃,一个是你需要一个很强的围棋高手,那么第二个呢是围棋高手肯定给你写一百条不同的规矩,那么每条规矩之间,呃,可能会有冲突。就是说有些时候呢,围棋高手说,哎呀,这个我可能凭感觉,这应该就往这边下,但是感觉是什么,没有人知道,所以这个时候呢就会打架了。

打架的时候呢就很难去,呃,去去去去提高它。这是为什么?就是在神经网络出现之前,在深度学习出现之前,啊,那个围棋这个程序做做不上去的原因啊,主要是因为就是很多职业高手他有这种感觉,但这种感觉很难被量化。啊,那么现在为什么做得好了呢?就是一个是因为呃,我们现在换种方法做。

我们现在说,我们不需我们不需要围棋高手了,我们要的就是说,大量的计算资源,让机器自己跟自己玩,或者说让机器自己去学啊,学这些围棋高手的棋谱,让他们让让计算机呢自己去找呃那个棋谱里面的一些规律。啊,那么有这些规律之后呢,让计算机去举一反三,去找到新的那个呃新的新的招法。那么这样的话呢,其实我们就并不需要围棋高手,那么同时还得到更好的那个效果。那么这个就是为什么现在会有突破的原因啊。

那么这边呢,就是我们这边有一个之前有一个叫 Dark Forest 的这样的一个微信引擎,啊,当时呢是呃这个方向本身是我们我是我自己发现的,啊,然后当时是看了一些文章啊,当时还是那个二零呃。二零一五年的时候,那时候围棋还没有起来,那时候大家都觉得做围棋是没有前途的,啊,确实是一个。当时我记得是二零一五年十一月份的时候,我们基本上已经我们已经做出来了,然后快 release 之前,呃,国内还有个比赛,围棋比赛,当时是那个大家是用的是上一个时代的围棋程序,跟比如说顶尖高手下,然后顶尖高手让你们六个子,只能他们程序还是不行,然后当时的结论是说,可能还要再过一百年。才能达到这个水平,结果三个月之后就被打脸,呃,所以呃,这个是一个很有意思的一个现象啊,这是说明技术有时候变化的是变化非常大的。

啊,然后呢,我们这个围棋程序呢,当时是三个月,在三个月前,AlphaGo 三个月前是 release 的,啊,当时用了大概九十几块 GPU 吧,啊,当时后来那个呃,AlphaGo 的团队跟我们说,我们用的数目应该是他们的百分之一寸都没有。他们可能用了一万块以上的 GPU,嗯,对,当时是这样子。那么当然就是这个这个故事呢是还是挺有意思的,就是至少我们能够知道,就是我们还是能够发现一些有意思的方向,啊,那么最近呢,其实我们在这个基础上呢在做了一些呃工作,就比如说呃我们最近呢是搞了一个叫 Alpha Open Go 的,就是作为那个 Alpha 平台的一个应用,啊,用它来重新复现那个 Alpha Go Zero 呃这样的一个算法。

AlphaGo Zero 呢是 AlphaGo 的第二个版,那么这这一版呢是说,呃,假设我们并不需要任何的那个领域知识,啊,我不需要那个人类高手给你提供任何知识。啊,第一版的 AlphaGo 呢其实是需要的,它需要大量的棋谱去训练。那么第二版的 AlphaGo 呢我们就不需要了。他们说,哎,我们就说我们从开始学起。假设呢,我们这个一开始呢,我们可以随便乱下。乱下之后呢,慢慢慢慢就能够学到一些呃一些知识,然后用这些知识呢,让自己的那个围棋程序变强。变强之后呢,用这个变强程序再生成大量的数据,然后再去训练。

那么这样的一个啊,这样一个这样的一个循环。那么这样的循环呃做了之后呢,嗯。因为慢慢慢,他们说慢慢慢会变强,然后变强之后会会超过人类水平,而且不需要那个人类的那个棋谱。那么这个这个问题很有意思,就是因为这样这样算法呢,其实可以用来做很多别的事情。啊,就比如说他们后来又发了一篇文章,就是叫 AlphaZero。那么,这同样的算法可以拿来做呃国际象棋啊,拿来做将棋啊,就是这这样的话就会比较有意思。

那么后来我们就决定,哎,要不我们可以试一下,看看能不能把这个东西复现出来。因为像呃 AlphaGo、AlphaGo Zero 呢,其实他们代码是不公开的,他们就更给你给给你一篇文章,然后呃就跟你说,哎,我们把这个做出来了,啊,就是也不会跟你说,我们把这个东西放在网上给大家下,不是这样子。啊,那那其实对于科学科研来说呢,呃,我们是希望那个有公开的代码、有公开的那个呃模型,能够把它做成做出来。那么为了这个目的呢,所以我们把它重新再做了一遍啊。

那么就是我们通过这个方式呢,我们可以把我们的 F 的平台呢也提到了更高的更更深的高度。我们可以把这个平台变成分布式的啊。我们这平台呢,同时可以用几千台机器去做训练啊,然后做测试。那么这样的话呢,其实同时也也是提高了我们这个平台本身的利用价值。啊,那么我们训练完之后呢,呃,就是我们现在已经开源了啊,然后这个开源这个 link 这连接在下面,大家可以放上去可以用一下。

然后呢,我不仅开源了代码,也还开源了那个那个预训练的那个模型。这模型是非常强的啊!这个模型现在水平是这样,就是跟那个呃几个最强的那个韩国的职业高手,呃下都是赢了,就基本上都是没有输过棋啊,就二十比零啊。然后呢,就是最对我们现在目前开源的比较强的那个 bot 来说,有非常高的胜率。啊,就主要是这样。这是一盘那个可能啊,可能是一个,就这个是那个金智熙啊,是当时排名第三的,现在变成第五了啊,被连笑打下去。

啊,对,然后就是基本上就是我们的值是我们的那个 game value 一直在一直在往上升啊。对,因为我们是指白的嘛,所以白的是那个负的越越越高,就是对我们越好。对,那么现在这个东西已经开源了,希望大家呃,大家有兴趣的话可以拿来玩一下啊。那么在 F 上的另外一个平台呢是那个叫 Mini RTS,就是一个微缩版的星际啊。大家知道星际是一个很难做的一个问题。啊,那么那么嗯,就是说,因为它的空间非常大,然后呢,它还有个问题,就是说它是有一个 foggy wall,就是有很多信息呢,你并不知道,你要通过侦查啊,你要通过呃呃,你要通过反复跟敌人交锋,你才能专门知道一些情况。

那么那么这个问题本身就是更接近真实人类的一个博弈的呃一个或者真实的决策的过程。我们会很有意思,而且确实也比围棋要难很多啊。那么,当然我们这边没有完全用星际来做,因为星际本身比较慢,然后第二个呢,星际可能跑起来比较麻烦。所以我们自己写了一个呃类似星际的一个小版的游戏,那么这个叫 Mini RTS,那么这个游戏本身的运行速度会比较快,比如说四万帧每秒,那么在上面可以放一些比较简单的 resource 啊,然后在上面训练一个 AI,那么训练完 AI 之后呢,啊,你会发现它的它的很有很有很很有很有意思的结果。

比如这个右下角呢是那个我们手写的 AI 啊,这个也非常简单,我们造五辆坦克然后去打对方。啊,非常简单。然后那个左上角呢是训练出来的 AI,你会发现训练出来的 AI,它知道什么时候会那个开始造兵营啊,什么时候要造坦克,然后它还是呢,有些时候还能挡住别人的进攻啊,到最后呢还能把把还能把对方推掉啊。所以这是一个很有意思的一项,比如说对方进攻了啊,这时候我们把那当对方挡住。啊,不让对方来进攻。

那么过一段时间之后呢,那他就发现就是有一些有一些的策略可以拿来去去去打对方的基地,对,所以就是说你会发现就是他最后能够赢,这是另外一个另外一个呃另外一个演示。对,一开始是他会发现,就是造那种长城攻击的坦克呢,相对来说比较有经济一点啊,他会发现这个现象,然后他造一些坦克之后呢,就会直接去啊,就要去打退对方,而且会集中火力去打。啊,这个是一个比较有意思的一个啊,一个一个视频,就是说就是这样的话,就是呃,当然了,就是我们训练的时候呢,还是用了一些呃,适当用了一些人类知识的,啊,比如说呃,这边就是用一些人类知识,因为你要真的要让 AI 去具体去操作,去点鼠标,去点每一个那个。单位单位,然后做那个事情呢,其实是很难的。

所以呢,就是我们就让 AI 去做战略上的决策,啊,我 AI 说我们什么时候要进攻,什么时候防守,什么时候要造兵,什么时候要那个要骚扰,啊,让它去做这样的一串决策。那么让下面那个战略上之之下那些事情呢,让那个啊让手写的规则来完成。那么这样的话就减轻了 AI 工作的难度,啊,同时也可以让它训练出来。啊,这个是一个啊,这是一个另外一个应用啊,那么还做了一些那个 analysis 啊,那个做了一些分析,一些新的模型。

那么呃,相似的来说,那个这个接接下来我们介绍两个工作,这两个工作呢跟那个之前也有关联啊。一个是就是之前的一个是那个我们可以拿来做那个呃第一人称射击游戏啊。这个游戏就是说呃这个是叫毁灭战士这样的游戏。那么这个游戏呢其实是那个反恐精英的鼻祖了,反恐精英是二零零二零零一年还是二零零二年搞出来的。然后这游戏一九九三年,呃就已经有了啊,当时是非常简陋的一个画面。那么现在用它呢,可以拿来做平台啊,可以因为它的游戏速度比较快。

那么现在目标呢,就是说啊,我们可以训练一个 AI,通过这张图片,我们可以用来啊用它来玩游戏。那么这个这个里面的一个技术呢是说我们怎么样让它训练的比较快啊?那么这里用了一个叫课程学习啊这样的一个训练的技术。啊,如果你直接把 AI 丢到一个非常复杂地图里面去呢,它不会学到任何东西,因为大部分情况它就站着不动,呃,不用它也不用干任何事,对吧?直到被敌人干到为止。啊,那么怎么样才能让 AI 能学得更快呢?就是我们可能要把它先放在一张比较简单的图地图里面,那么这张地图里面,然后让它自己跟自己跟那些敌人去打。

那么这些敌人一开始可能比较弱,然后移动速度非常慢。啊,那么通过这个方式呢,让 AI 很快的能获得啊奖励。那么奖励完之后呢,啊,一点点的让 AI 适应更难的啊更难的地图。一到最后呢,就把它放到那个啊最难的地图上去。我们当时是呃拿了呃一六年的那个比赛的第一名,啊,然后当时这分数呢其实比第二名高百分之三十几,还是挺挺高的。那么这个是一个演示视频啊,这视频就是说这个训练出来的 AI 呢,它其实学到了一些人类没有教过它的一些东西,啊,比如说它在跟跟跟跟那个敌人对战的时候呢,啊,它会呃它会下意识的往左或者往右移动一点,躲过敌人的炮火啊,这个是很有意思,因为我们从来没有跟 AI 说过你要这么做。

啊,那但这次失败了。啊,对,就是说它其实可以通过自动学习呢,发现一些有意思的一些一些策略,啊,然后这些策略呢,能有效的那个给它那个提供一些啊一些有意思的那个那个结果。那么最后呢,我介绍一下那个我们这边的一个 House 3D 的一个一个环境。那么这个环境呢,就是比较和平了啊,没有等再没有打仗了。呃,就是呃这个环境呢,就是说我让机器人放在一个啊那个 House 3D

和那个一个那个带有房屋的一个环境里面。我希望呢,那个给机器人下一个指令,说你要去哪里,那么它就能够通过一些巡航,通过一些那探索,能找到那个位置。啊,那么这个是呃,像这个数据集呢,其实是脱胎于呃普林斯顿的一个叫三CG的一个数据集。那么这数据集里面有四呃四万五千个啊不同的那个人类设计的啊一些建筑环境啊,这些都是真实人类设计的啊,这些那个房屋看起来都像真的一样,里面还有很多东西,比如健身房啊,还有游泳池什么的,所以还是比较真实的啊。

然后它里面所有所有的那个呃物体呢,都是呃都是那个完全那个label好的,就是他们的名字都已经有的。那么用这个呢,我们可以建一个数据集啊,用建一个环境。那么这个环境呢,其实提供很多东西。那么它提供了,比如说,呃,真实图片的那个颜色的数据啊,比如提供了那个每个点上的物体是什么类型的这样的数据。

提供了那个深度数深度的数据,然后最后呢,我们他还知道就是那个整个 top down,就是从上往下看下来那个 view 是什么样子。啊,那么呃,这个环境,然后在上面呢,我们做了一些深度学习的一些实验,然后发现呢,就是如果我们在呃两百个啊屋子里面去做训练,训练出来的那个呃AI呢,其实可以可以做的,可以在第两百零一个它从来没有见过的环境中的那个做的比较好。

啊,这个是很有意思的事情,因为这相当于一个泛化能力,就是就比如说你下了两百盘不同的棋,它能够泛化到第两百零一盘,然后它能做出像同样的应对,啊,这个是挺有意思的一个啊,一个一个一个一个东西。那么这个是一些呃演示,比如说呃,我让它去那个 bathroom,啊,就是它会从它会慢慢走走走走到一个过道里面去,然后哎往这边一看啊,这边有一个啊,往这边一看,哎,这边有一个那个 bathroom,找到了,对。

然后这边也是一样,就是跟他说我们要做,我们要我们要我们要去 kitchen。那么这个环境呢,它是在训练的时候,它是它是并不知道的啊。他在训练的时候并没有见到过这个环境,然后把它扔到一个新的环境里面,新的家里面去。然后他在里面进行一些搜索啊,进行一些探索之后呢,就知道啊,也许这边是一个啊比较类似于厨房的地方啊啊。这是另外一个演示,对。

那么单链路我们就是说我往这边走过来,看到一个楼梯,然后再往那边一走就是一个单链路。那么接下来还有很多方向啊,就是嗯,我们最近呢就是呃,我们现在这这这只是其实只能说到就是强化学习的一个皮毛啊,因为还有很多方向其实是很有意思的,比如说呃那个层次式的那个强化学习。

啊,因为对人来说,人的指令呢其实层次式的,啊,可能先有个将军或者元帅跟你说你要做什么,然后下面有很多比如具体的船员,啊,去执行这个任务,啊,然后把这件事情做完。那么这样的一个呃层次式的那个过程呢,其实现在还没有完全体现出来。啊,那另外一方面就是很多人其实,在对这个层次式的这样的一个呃强化学习提供很多框架,但是这框架呢并不一定比现在的方法要好啊,所以这两边你怎么样把它放,怎么样把它能够 match 起来呢?是这是一个很大的问题啊。

还有就是说,呃,假设呃,如果我们对这个世界呢有个建模啊,这叫 model based 啊 reinforcement。有的是有建模呢,其实呃我就可以呃不用真的去试啊很多次,而且我可以在脑里面反那个想象一下,说哎我如果做这件事情之后会有什么后果。那么这个后果呢,其实能够让你学得更快。那么这个能力呢,其实人呃计算机目前呢还没有,现在我们需要用那个 model base 的方法去做它。

啊,就是也许我人类在开车的时候呢,不用撞马路啊撞那个路牙一百一百次才知道这个地方是有问题的。他会在脑子里想一下哦,我如果往左边打的话就会撞上去,啊,那他就下一次就不会再去做这个事情。那么这样的话,其实提高了他的那个啊,叫 sample efficiency。啊,提高了它的那个那个尝试的效率,啊,那么还有就是啊,比如说那个强化学习那个系统啊,我要怎么样做得更好?

那么现在我们用 Alpha 这样的平台了,那么接下来我能不能啊做得更好一点?啊,那么还有大量的 application 啊,比如说也许我们可以用 reinforcement learning 用强化学习做推荐啊,用强化学习呃做那个呃做优化呀,这这样的一些问题。那我相信这个将来空间还是很很广阔的,啊,也有很多很多问题还没有解决。

那么最后我说一下,就是说,如果大家有兴趣的话,那么强化学习需要什么样的技能?它是需要挺多技能,因为呃,强化学习是一个一个挺有意思的学科。它首先第一个,它有很多的那个数学,啊,所以呢,数学上呢,说数学呢可能要功底比较好。然后呢,第二个呢是说,因为强化学习并不和那个监督学习还不一样啊。

现在可能监督学习,呃,相对来说比较成熟了啊。比如说大家想训练一个呃那个图基图像的模型啊,训练一个 image net。也许你并不需要改太多代码,你可能网上下载一个开源的软件,然后你改一些参数跑一下,然后就可能会有结果。但是强化学习来说呢,这个这块还还远远达不到。现在强化学习的这个这个这个层次呢,基本上就和比如说十年前,啊,比如说监督学习层次差不多。

啊,所以就是没有那么方便,有很多地方需要自己探索。那么因为有因为有些有些要求呢,所以就是你对各个系统的那个要求那个经验就必须非常高,啊,然后它同时也需要比较强的那个写代码能力,啊,因为强化学习因为需要大量的。那它需要比较非常有效率的那个代码,因为它的计算量非常大,你不能说所有的代码都是用 Python 写,那是非常慢的,所以你必须有一部分用 Python 写,一部分 C 加加写,然后把它们拼起来啊,所以它需要比较强的工程能力。

那么最后呢,就是强化学习现在还没有,还是处于是一个比较玄学的状态啊,有很多呃有很多参数性需要调,所以需要调调参的能力,所以这些东西都需要的啊。这个其实让我想到一个笑话,就是一一年的时候,当时深度学习还没有起来啊,当时我在微软实习。嗯,实习我们当时就听说过有传言说,哎呀,听说你那个那个Hinton的组,Hinton是那个强学习三巨头之一嘛,他们组有人把那个那个神经网络给调出来了。

啊,但是呃,但是大家都不不相信,因为大家传统上认为神经网络是一个非常糟糕的模型啊,是用上去大部分情况还是不不管用的,啊,但是他们说,哎,他们那个组呢,里面有个小条子,这小条子是所有的参数,如果你照着参数条件调出来,不然的话你调不出来,所以你必须先得去他们那组实习三个月,才能知道这里面到底怎么调的。呃,当时这么说了,但是现在大家都知道了。

现在因为有那个很好的开源包啦,现在有那个各种各样的教程,大家都知道这个调起来没有那么难了。啊,你可能随便呃下载一个PyTorch啊,或者说一个什么某模型,你直接网上搞一个东西跑一跑,基本上能跑出来。对,所以就是说,强化学习目前也会经历这样的一个过程啊,我现在还是处于那种需要小纸条才能调出来的阶段,呃,呃,所以希望大家如果大家有兴趣的话呢,就是大家可以前往探索这个方向。好,这就是我今天讲的东西,谢谢大家。