行,那我们现在就开始吧。呃,这次非常感谢将门邀请我过来,呃,做一个直播。然后我先会给大家讲一下我们最近做的工作,然后呃,我可以回答一些问题。那我们现在就可以开始了。
好,那今天我们讲的内容是那个 building scalable framework and the environment of reinforcement learning。呃,这里你就主要是讲一下我们在那个呃强化学习这一块所做的一些工作,嗯,就主要是有一个叫 elf 的这样的一个框架,然后呢在这框架上呢做了一些呃比较有意思的工作,然后同时呢我们可以也要呃介绍一下其他方面的框架的工作,比如说我们最近有一个叫 house3d 这样的一个 environment,啊,然后在这上面呢有一些初步的结果。嗯,基本上是这样子。
首先呢,就是说大家可能都知道,AI 已经呃在很多地方获得了很多的应用啊,比如说呃在那个物体识别啊,在那个医疗图像处理啊,在那个计算机。呃,翻译机器翻译啊,和那个语音识别啊,这些问题上呢,其实 AI 在这些问题上呢,只要通过深度学习的方式啊,能够获得一个比较好的模型,然后能够把这个问题解决了,啊,所以呃,不说解决吧,只能说呃,它但它效果呢已经非常好啊。
像那个物体识别这样的一个内容啊,你就会发现呃,它的那个识别精度和呃区那个。区分那个每个框的,就或者说是那个给每个图片做那个 segmentation mask 这样的精度呢,其实有很多时候其实甚至已经超过了,呃,手工标注的精度这样的水平。
那么,呃,呃,机器呢现在也可以去识别一张图片是不是啊癌症图片啊,是不是在在图在你皮肤上拍一张照片,你就可以知道这个那个孔是不是啊看起来像那个皮肤癌。啊,那么还有像那个机器翻译这些问题啊,那么这些问题呢,其实呃,你用现在可以拍张照片,我们可以翻译一些比较简单的句子啊。
那么呃,语音识别呢,现在已经用了。我记得之前我回北京的时候,有一次呃,我看到出租车司机基本上是拿着微信。啊,在那边那个吼一下,说我要去哪里,那个微信就会自动识别说我要去哪个地方,啊,所以在这些方面上呢,其实 AI 已经做得非常好了,然后已经有非常好有意思的一些工作出来,啊。
那么最近一个一些更有意思的工作呢,就比如说一个呢是呃叫 Smart Design,我想大家已经知道这个呃比较有意思的方向,那么这方向呢是说啊如果有一张图片啊是梵高画的,那么还有一张图片呢是一个比较现实生活的一个呃一个场景。啊,那么这两个图片合起来之后呢,我们可以通过一个模型让它变成用呃梵高的风格来绘制现实生活的场景,这张图片。
那么这样的话呢,其实让大家觉得比较耳目一新的地方是呃。那个 AI 呢,其实是可以呃生成啊一些以前没有见过的图片的,就是给 AI 来一个想象力。那么这个是最近呃我们看到了一个比较新的成果啊,当然这也不是很新了,已经是一年多以前的工作了啊。
那么还有一个 AI 就是出乎意料的地方呢,就是呃围棋。那么在这种传统上来说,人类认为是呃秒杀 AI 的这样的一个。方向上呢,啊,我们发现你用神经网络的一个方法,你可以呃有一个比较好对盘面会有比较好的估计,啊,然后有盘面比较好的估计呢,就可以下出啊比人类的下法更好的啊围棋。
所以呢,这些在 AI,AI 在这些方面呢都已经做得可以不错了。当然了,就是 AI 其实并不是万能的啊,不然的话我们早就呃解决了所有问题啊。AI 还有很多地方是需要呃有呃需要有改进的啊。
一个问题就是,嗯,我们怎么样去建模那个人类的常识啊?那么这个就涉及到就是我们怎么样去做那个 Chatbot。怎么样去回答呃一些常见的问题这样的一个方向?那么这两个方向呢,其实现在已经有很多人在做了,但是呢,现在进展也不是特别大,有一些进展,但是没有特别好的进展。
那么主要一个原因呢,是因为呃人类有很多先验知识,或者说人类有很多常识。那么这些常识呢,呃是非常难用,用笔和纸一点一点的写下来,把它变成规则的。那么很多时候呢,就是呃,人类通过常识的推断,很快获得到达到那个结论,啊,但是呢,计算机因为没有常识,所以有很多低级的地方犯了错误。
那么让计算机得到的那个啊,聊天机器人呢,就没有这种啊,人类的这种自如灵活变化的能力,啊,这个目前为止呢,还是很难做的。啊,那么还有一些还有一个问题呢,呃,就是呃数据量少的这样的问题啊。
首先,因为呃我们之前的成功呢,其实很多时候是因为有没有大数据,然后有没有比较复杂的啊深度学习的模型。那么这两者放在一起呢,啊,最后呢我们能够训练出一个非常好的呃结果啊。但是呢,在一些场景下,比如说呃那个数据量很少啊,然后呃在这种情况下呢,同时环境又非常复杂。
那么这种情况下呢,其实是非常难做的啊。比如说像无人车呀,啊像家用机器人啊这些,这些方向其实,呃,因为有很多 corner case。那么 corner case 的意思是,呃,也许你可以修掉呃之前看到的所有的各种例外情况,但是你在将来呢会发现更多的例外情况啊等着你。
那些意外情况呢,可能并不是一时半会能够修好的,啊,所以这个其实是一个非常大的一个问题啊。那么还有一个问题就是说,呃,对于 reinforcement learning 来说,我们有一个叫 exponential space 的问题,就是假设空间特别复杂,那么如何有效地去探索这个空间,然后得到一个好的解?那么这些呢,其实都很难做啊。
那么,那么这样的话就导致这样的一个曲线啊。这个曲线是非常有意思的,就是一开始呢,我们在用 AI 的时候呢,呃,可能大家会发现,就是我们现在用深度学习啊,用一些比较好的机器学习的算法,一开始它的 performance,它的那个性能上升呢是比较快的,啊,一开始大家都非常非常非常狂热,觉得 AI 可能解决所有问题。
但是随着时间的流逝,我们愈加更多更多的那个数据进去之后呢,啊,你就会发现就是那个效那个性能它这个增长的速度呢是跟不上数据增长的速度,那么到最后呢,就是呃这个数据呢就会平下来,然后就发现你怎么样在增长、在增加数据呢,那个性能就提高不了了啊。
在这一块呢,其实谷歌是有之前是有一篇文章的,是他们发布了一个更大的一个数据集,比你力量大很多。然后在这个数据集上呢,呃,他们做了那个图像分类这样的算法,然后结果发现呢,就图像分类这个算法呢,就是如果呃数据集太更多的话呢,就会发现就是数据集每增大一倍,那个分类的准确性呢,其实是增加一个固定的百分比。
啊,所以就是说,这时候你会看到,就是这个增长开始变慢了啊,就是数据量的取个 log 啊,它基本上和啊分辨和那个准确率的那个提高速度呢是成正比的。那么这个呢,其实也就意味着,就是说,呃,我们的训练呢,其实进入了一个瓶颈啊。
那么这个在这个时候再训练呢,基本上和最近零啊这个差不多,因为最近零,如果你要算呃它的那个。啊,那个样本复杂度的和呃准确率的关系的话呢,其实也是取指数的关系,啊,所以就是到这个程度呢,基本上就是说明我们的神经网络基本上是在背东西了,啊。
所以那么这样怎么办呢?就是说很多时候呢,我觉得就是与其去增加那些数据量呢,我还是需要有一些比较新的算法啊,然后能把这个问题解决,能够 close the gap。啊,那么一个可能的算法呢,就是目前看起来比较有意思的算法呢,就是叫 reinforcement learning。
那么 reinforcement learning 嘛,呃,如果你们一开始看书的话呢,其实非常简单的一个算法啊,有一个 agent 在一个环境中呃做探索,那么 agent 在环境中呃首先观察到一些状态。那么这些状态,呃,拿过来之后呢,那个 agent 会决定,啊,先做一个一个决定,然后做一个行动。
那么行动做完之后呢,这个行动会影响这个环境。那么这环境呢,会给 agent 更大的,呃,更不一样的状态,然后如此往复,啊,然后就让形成了这样一个轨迹,啊,是非常简单的一个一个算法。
那么这个算法呢,有意思的地方是它跟那个一般的那个 supervised learning 呢其实是不一样的。为什么不一样呢?就是说对 supervised learning 来说呢,非常简单,就是老师跟你说什么你就学什么。老师跟你说你要往这边走,这题要怎么答,然后呢你就得啊沿着老师方向走。那目的呢就是最后呢学生能够学的跟老师是一样的。
那么这样的算法的优点呢,是它比较简单。那比较难的地方呢,就是说,呃,它每一步呢,其实都需要一个老师去指导你。那么,reinforcement learning 的不好有意思的地方呢,就是说,其实对 reinforcement 来说,它并不需要告诉 agent 啊,我每一步需要怎么走,啊,我就告诉这个 agent 说,哎,这这是我们的目标啊,希望你达到这目标。
至于怎么达到这目标呢?呃,需要让那个 agent 自己去空间中探索。啊,慢慢探索出来一条新的路。那么这些至于这条路是怎么走的,是沿着常规走呢,还是不走常规路呢?这个完全由 agent 来决定。啊,因为有这样的一个灵活性呢,所以强化学习呢,有些时候能找到一个比啊监督学习更好的解。
那么,呃,做一个比较好的、有意思的比喻呢,就是说,那个强化学习就像是孩子在一个幼儿园里面,在那个,呃,公园里面去玩耍啊,然后,呃,他目目标目前不是很明确,也许将来有个远期的,啊,一个一个奖励,但是现在呢,你可以随便探索。
啊,但是强化但是那个呃 supervised learning 呢,那就是说你相当于是上班族,你天天坐在办公室里,啊,每天就对着老板给你的一些文件,做完这些文件下班,然后第二天再过来,啊,就是这样的一个一个区别。
那么强化学习这样养成一对比嘛,就觉得强化学习肯定更有生气啊。然后它可能对于它能可能能找到一个问题更优的解,但是呢也有一些问题,比如说它需要有大量的数据啊,它相对来说呢需要更多的资源。那么这个之后呢,我会简要的提一下。啊,这样子。
那么在强化学习中呢,游戏呢是一个呃非常呃重要的一个方向啊。因为什么游戏是重要重要方向呢?其实呃主要原因有很多个啊。首先第一个呢是呃游戏它能够提供大量的数据,而且这些数据呢是呃完全啊精准的标定过的啊,所以这个是非常重要的。
因为大家知道那个监督学习很大的问题就是没有数据,没有数据的话,你什么样模型都训不出来。啊,但是强化学习因为有大量的游戏做后台,呃,有大量的那个模拟环境呢,那个数据本身呢,可以是不成问题。啊,主要是有数据就可以,啊。
另外一个强化强化学习这样的环境呢,其实速度呢是呃可以超过实时的,啊,就是也许你一台机器不够呢,我可以开很多台机器,每台机器速度只要够快,啊,我可以积累大量的经验,那么这些经验可以拿来做训练。
那么啊,游戏的另外一个有意思的方向呢,就是呃,它这个游戏本身这个环境呢是可以可以控制的,啊,而且可以重复。那么这样是非常好的,因为我们做科学实验的时候是非常想需要重复啊,可重复性要非常好,然后可控置性也非常好。
那么游戏本身呢,也没有那么多的那个安全性的约束,可以在里面呃做一些比较大胆的实验。那么等到那个算法成熟之后呢,再拿过来用来别别的做别的地方。嗯。
当然了,就世上没有免费的午餐。呃,游戏本身不能解决很多问题。首先,我们有了游戏之后呢,我们还是需要呃算法。我们现在的算法还是非常慢的啊。我们现在用 DQN 去训练 Atari Game。那么我们可能需要几百万张照片、几百万帧才能慢慢慢慢训练出一个比较好的啊一个 AI。
但是对于人来说,其实特别对于小孩子来说,可能看个一眼,或者说玩个十分钟就全部都会了,啊,所以这个在呃这个相比那个人类来说,强化学习还有很大的一个呃路要走。
那么另外一个呢,就是那个用游戏呃做平台呢,好的地方是我们不需要那个有人标定数据,但差的地方呢,就是我们需要大量的资源,啊,这这一点上呢,其实大家都可能深有体会,像啊谷歌的 AlphaGo 啊,他们当时是用了有一千呃用了可能超过一万块的那个显卡来训练。
啊,甚至还有可能还不止,啊,这个是他们第一代呃的版本。那么第二代版本嘛,他们写的比较明确了,是呃像 AlphaZero 呢是用了五千块的 GPU 来进行训练,啊,那这个还包不包括就是呃之前就是那些探索的成本啊?
可能你需要大量的探索,你才能慢慢的知道什么样的算法是有效的。在那之前呢,其实还是。啊,还是很难的啊。然后最近 OpenAI 又有一个比较新的呃一个 Dota 二这样的一个 Dota OpenAI Five 这样的一个 AI 出来,那么他们是用了一百二十八啊一一十二万八千块的 CPU 来训练的啊。
因为呃我们需要大量的那个 CPU 去模拟这个 Dota 这个环境,然后用模拟环境呢输出大量的那个数据。那么这样的话呢,就是呃,确实是非常烧钱的呃这样的一个活动啊。
那么还有一些问题就是呃,假设如果你能够在那个虚拟或者比较抽象的游戏中呢做做一个比较好的结果,那么能不能把它放在一个现实世界中?啊,那么这一块呢,其实现在是有一些思路了。
比如说,呃,我们可以,呃,通过 domain randomization 啊,然后,呃,用一个比较好的那个模拟器,再加上大量的那个噪音,然后在里面学到一个比较,呃,鲁棒的一个训练算法啊,比较鲁棒的一个模型,然后可以拿在,呃,在现实世界中啊做做出来。
那么,但是呢,就是对更复杂的情况呢,其实大家还没有特别好的办法,还需要做探索。对,呃,那么最后呢,就是强化学习目前还是一个比较年轻的方向。虽然说它已经呃发展了大概三十多年了,但是之前呢,基本上是都是在一个比较简单的环境下去做的。
那么现在把强化学习搬到呃比较复杂的环境下呢,其实这个时间还是比较短的。啊,那么在这种情况下呢,其实现在强化学习有大量的呃各种环境可以供使用。那么现在主要的问题是,呃,还是是比较难呃做这个事情的。
啊,因为呃,相互之间的算法都不能相互比较,啊,因为这个是一个比较大的问题。这个就像呃,因为现在像那个图那个计算机视觉,大概十五年前左右的情况,啊,十五年前基本上也是 Caltech 幺零幺啊啊,像各种各样 dataset,他们到处乱飞,大家都觉得自己的算法在某数据上比较好。
那么,我相信以后这方面呢会有所改进,啊。那么,针对这些情况呢,其实呃,我们这边的工作呢,一个是啊,然后能够有更好的那个 AI 做出来,然后另外一个是能不能设计出更好的算法,还有更好的系统。
那么这边呢,就先讨论一些,就是我们最近的,呃,也不是最近了,就是近最近两三年的工作啊。首先呢,第一个就是啊,我们最近呃有一个呃叫 ALF 这样的一个那个平台啊。这个平台呢叫 Extensive Lightweight and Flexible Framework for Game Research。
那么这个平台呢是去年 NIPS 的 oral。呃,在这个平台上呢,我们搭建了一个 Open Go 这样的一个围棋的引擎,然后我们复现了那个 Alpha Go Zero。呃,这样的一个算法,用两千块 GPU 可以训练,呃,两三个月得到一个非常强的一个模型,啊,这个是呃,这个是一个工作。
然后呢,另外一个工作呢是呃,我们在这之前,我们用了那个。啊,强化学习的算法呢,可以学习出来那个 Doom 的那个 AI。那么 Doom 是一个非常呃老的游戏,那么这个游戏基本上是反恐精英的前身啊。
然后在这个游戏上呢,就是这样的 AI 呢,可以训练出一个比较强的一个算法,然后可以在呃前年的一个比赛中获得了冠军。那么除此之外呢,然后我们还呃。那个最近又发布了叫 House 3D 这样的一个平台,啊,那个这个平台呢是呃一个呃,那就是这个平台里面有一个 3D 的环境,然后里面所有的家居啊的方式呢。
啊,家具的那个摆放方式呢,都是比较自然的。那么在这里面做那个机器人的一个寻路的一个算法是比较方便的。然后在这上面呢,我们有一些比较有意思的结果。
啊,首先我们先说一下,就是如何去搭建那个呃强化学习的一个平台啊。虽然说强化学习在概念上来说非常简单啊,它就是一个简单的一个 for loop,但是呢,它真的你要把它写下来或者把它做出来呢,你需要需要大量的那个 design 的 choice。
啊,比如说你是用 CPU 呢,还是用 GPU 呢?啊,你是用呃呃是用那个 simulation 呢,还是呃用 replay 呢?或者说呃你还你或者说你还是用那个 human 的 imitation
learning呢之类的?还有呢,就是说呃我们到底是用什么方式进行并行化?那么这些都是一些很大的问题。啊,就比如说我们对CPU来,我们用那个我们做那个游戏的游游戏的模拟呢,其实可以用CPU啊,但是我们对神经网络的一个前向操作呢,我们需要用GPU来做。那么这些这两个东西怎么样结合起来啊?然后我们有很多的呃各种不同的设计,有些设计像单单线程的设计呢比较简单明了啊,但是呃问题就在于就是有很多时候我们需要大量的那个GPU能够一起GPU能够一起就过来计算。那么,另外一个就是说,呃,多进程的这样的一个方法呢,其实更为灵活啊,我们可以用很多进程同时开始计算,那它们之间通信又成了很大的问题,啊,那么再往上一步,如果有多机同时在做协作的话,那问题会更大。
啊,所以在这一块呢,其实呃,我们首先有一个 Alpha这样的 platform,啊,这个 platform 呢是去年 NeurIPS 的 paper。那么这个思想很简单,我们希望能回归本源,我们能够,我们希望把这个问题呢变成一个呃真正的 for loop。啊,我们把所有的那个乱七八糟的呃设计和细节呢,全部都放到C加加里面啊,然后呢,我们在C加加基础上呢,在Python上放一个呃比较简单的干净的一个一个单一个一个for循环,那么这for循环就复现了那个呃那个reinforcement learning的这样的一个算法。啊,这模型非常简单。
我每次呃,希望有呃,我们有首先第一个就是我们要等待呃有一个批次的一个状态。那这个状态拿到了之后呢,我们用现在的模型呃做个 forward,做完 forward 之后呢,把这个状态的那个 action,或者说那个这个状态的一些属性呢,再送回去。啊,然后就没了,就是非常简单的一个一个情况,啊,那么 ELF 呢,就是这是一张就是非常简单的一张图,就是告诉你就是这个平台是怎么样 work 的,啊,其实非常简单,假设你有八个不不一样的那个游戏的那个 threads,啊,他们在同时在进行,那么他们同时会输出大量的那个 replay,啊,大量的那个游戏的经验,那么大部分情况下呢,这是八个 threads 呢是可以一直往前走的。
嗯,对,呃,然后呢,就是但是有些情况下呢,我们需要某个suite说我要我需要调用神经网络了啊,这个神经网络会告诉你下一步要怎么走啊,但是呢,你只用一个suite去调用神经网络呢是非常慢的啊,因为神经网络这一边呢,因为是GPU的缘故,所以呃前向那个forward这样的一个操作,呃是需要batching啊,batching的意思就是说我有大量的数据放在一起。几个sample放一起往自我前向操作会效率非常高,啊,那么白屏要怎么做呢?那么在这儿的话,我们就是动态的呃把不同的那个游戏的那个slide放在一起啊,然后把这些游戏slide的那个states也放在一起,放在一起之后呢,我们可以把它一起放到那个Python那边去,然后Python那边直接一个forward就可以做到,然后把这个reply送回去。
然后这样的话,这四个 thread 可以重新开始啊,继续下一步的操作。那么与此同时呢,其他的 threads,其他的计算层呢,他们不受任何影响,他们可以继续往前走。那么这样的话,你又保证了它的那个 throughput,的同时呢,我又能保证就是 batching 这个操作呢是可以实现的。啊,现在基本上就是这样一个思路,非常简单。啊,那么 elf 这个框架呢,其实有三个比较有意思的一个点啊,比如说一个是呃它的。啊,它的框架本身呢是呃比较 extensive。所谓 extensive 的意思就是说我可以放任何的游戏进去,只要它家的那个接口就可以了。
那么第二个呢是说,呃,这个平台本身比较轻量级,我可以放一个简单游戏去,然后它的那个吞吐量和它的那个模拟次数是非常快的。啊,像我们呃之前去年发布了一个 mini RTS,就是微缩版的一个星际这样的游戏。那么这个游戏呢,我可以在这平台上做到四万帧每秒,呃的速度。那么这样的话是足够用来训练了。啊,相比之下,如果我们在里面跑标准的StarCraft一或者说StarCraft二,基本上可能就只有一两千帧每秒的速度,这是最快了。大部分情况肯定都达不到啊,所以这个是一个比较好的一个个性。
那么另外呢,就是App本身也比较flexible,比较灵活。啊,那么F目前为止呢,放了一些有兴趣,比如说围棋啊,然后整个那个 Atari Game的模拟器啊,叫A L E,叫那Arcade Learning Environment。所以说它可以做到跟呃,在这个方向上呢,可以做到跟那个 gym 相相似的性能。那么之后我们也比较了一下呢,跟 gym 的速度的那个比较。那么我们在里面也放了一个叫是那个 mini RTS 这样的一个引擎啊,在上面可以做一些 AI 的一些一些测试。
啊,那么,那么至于速度上来说呢,我们其实比 OpenAI Gym 要快。啊,为什么会快呢?呃,是因为 OpenAI Gym 呢是呃是按照那个 Python 的那个线程啊 Python 的进程来来组织的。如果你要同时开很多很多 OpenAI Gym,然后一起送数据进去呢,问题就在于就是说呃 Python 的多线程啊 Python 的多进程呢它是有 overhead 的,那么这 overhead 呢会降低整个东西的速度。但是Elf呢,因为它是用C加加的多线程写的,所以它的速度不会降低太快,啊。
然后那个灵活性呢,是Elf的一个比较有意思的一个方向啊,因为呃,因为我们做强化学习平台,其实需要有大量的那个不同的。呃,啊等大量的不同的那个呃不同的那个设置啊,比如说吧,一个是假设我们有一个已经有已经训练训练好的那个AI,那么这AI怎么样去呃怎么样去做那个evaluation?非常简单,我们就让AI在环境之中啊进行那个进行做出reaction,然后每次要靠神经网络的时候呢,就靠神经网络就可以了。那么同样的方法,你可以拿来做训练啊。训练其实只要多一路的那个输出就可以了。那么你可以拿来做 self play 啊,self play 可能是就是为什么 AI hard go zero 能够那么牛的一个原因啊。
那么我们在做 self play 的时候,其实也非常简单,我们只要把那个输出的结构分成两组啊,放在那个 loop 里面就可以了。那么这些agent也是一样的,非常简单。那么最后呢,就是我们甚至可以拿那个alpho来做那个蒙特卡罗树搜索,啊,这个也是呃我们为什么能够很高效的那个重现Open呃AlphaGo Zero。呃,算法的原因啊,虽然说单个那个蒙蒙特卡罗蒙特卡罗树,呃,它的那个前向呢,只是有一个呃状态,但是我们可以通过把很多游戏放在一起执行,那么这样的话呢,f会自动的把呃时间上相近的状态放在一起。然后呃做个forward,那么这样我就极高极大的提高了效率。
那现在基本上你用门卡数搜索,呃做那个自对弈的时候呢,用elf这个平台可以做到百分之,啊八七十到八十的那个GPU的利用率,啊但是如果你用单张卡用跑单个那个game的话呢,问题就是这个利用率非常低,啊这个是一个比较好的地方。啊,后面说一下蒙特卡洛树搜索,呃,这一块呢是这个是之后呢围棋的一个比较基本的一个算法。那么这个方法其实呃其实是一种比较呃有意思的那个搜呃搜索的方法。啊,我们可能一开始是有一棵树,那么树的根节点呢是你当前的状态啊。
那么每次呢,我在呃做一个 rollout 的时候呢,从根节点出发,然后根据当前每个节点的胜率,决定我哪个呃 action 是要走的。然后沿这个 action 走下去之后,一直走到一个那个没开创、没有看过的节点,但是把这个节点拿出来,然后做一下那个 evaluation,啊,决定就是呃黑棋胜还是白棋胜,然后把这个胜率的呃一个信息再啊回传回去,然后去更新整棵树,啊,它就是这样的一个过程。那么这个算法的有意思的地方呢是呃。呃,它是一个 anytime algorithm,就是说我可以随时随地停下来,然后呃,给你一个呃,当最优的那个呃下一步的走法,这是一个比较好的地方。
那么第二个比较好的地方是它的那个深度本身呢是呃是不固定的,有一些那个有一些那个木呢它可能非常的呃就是说并不是非常好,所以呃在这个深度不会很深,可能搜两层就可以了。有些木呢很有意思,可以值得探索,它会搜非常多的层,比如说搜到啊二十层、三十层,甚至是五十层,所以这个是一个非常有意思一个东西啊。之后呢我可能还会再说啊这一块。那么接下来我要介我我要我要介绍一下,就是说那个对于呃我们的呃AI game AI呢,就是它是怎么样work的。
啊,首先第一个我想说的是,说就算啊,我们用一个超级的计算机,嗯,这个你要搜索全空间呢,也是不太可能的。啊,所以如何才能搜索?如何才能把这个AI做好呢?一般来说,把它分成两部分。啊,第一部分是呃,我们怎么样去做搜索啊?我们从当前的树出发啊,我们怎么样呃找到一个呃一些比较有意思的那个呃move,让这个树呢比是看起来比较有意义,然后把那些比较错误的那个。action呢给去掉啊,这是一个。第二部分呢,就是说你不可能把整个树都呃都展开,这样的话你需要花指数级的时间啊,所以呢你在树展开到一定程度之后呢,对于每个根节点,你需要有一个值函数去估计这个根节点是黑好还是白好啊,那么这样的两个步两两个步骤。
那么这个框架呢,很早以前就开始用了啊,但是呢,就是呃,主要的问题是在于,就是对不同的游戏呢,它这个每个框架的它这个做法是不一样的啊,比如说那个对于,呃。呃,比如说吧,那个对于那个呃不同的游戏,比如说一个呃,比如说check或者或者说chess。那它每一步的呢,可能的那个那个 move 呢是比较少的啊,所以说呢,传统上来说呢,我们用的是 alpha-beta pruning,啊,加 iterative deepening,那么这个是现在那个 chess 引擎都在用的用用的方法。但是呢,如果那个像围棋这样的一个游戏呢,那么这个游戏本身那个每一步所所需要的那个步数呢,所可能的选择是非常非常多的,所以传统上来说,呃,这个方向呢是很难做的,啊,那么呃。
那么最近呢,为什么我们会有进步呢?是因为呃,我们的那个卷积神经网络,这个神经网络本身是一个非常呃,对于直觉的建模非常好的呃,这样的一个一个算法。所以呢,我们能够找到一个比较好的那个那个木。因为这个呢,我们现在的围棋变得非常强,啊。那么关于那个至于像StarCraft这样的游戏呢,因为呃,每一步可能就是指数级的那个那个木,所以这个反而变得非常非常难。目前为止还是没有没有特别好的办法可以做。那么之后呢,我会提供一些比较有意思的一个想法,啊,另外一部分呢就是我们怎么样去做那个值函数的估计啊,值函数的估计呢,就是对不同游戏同样也是不一样的。
像围棋啊就非常难,因为围棋的估值往往是从感觉来实现。那么对于那个国象呢比较简单啊,我们可能就把两边的数字改点一下就可以了。两边那个大家你少你比我少了局,可能差不多就要输了,啊。但是呃围棋就没有没没有那么简单。像很多呃就是 incomplete information game,比如说像 poker 啊,像 Starcraft 这些游戏,那么这些游戏,呃,因为你并不知道对手的牌是什么,所以这个值函数也是非常难估计的。那么现在,呃,我们的算法跟以前的算法的那个比较呢?为什么我们现在做的比以前好呢?就是因为啊,我们现在用了 Deep Learning 这样一个呃很非常强大的一个函数逼近的一个方法,所以呢,我们可以用大量的数据,然后呢,用极少的那个呃领域知识。去学到一个非常优优秀的值函数或者说策略函数,啊,这是这个。
而以前呢是通过大量的那个人工的呃步骤把这个那个值函数和目标或者策略函数慢慢慢慢调出来的,那么这个效率啊和精度呢是不可同日而语的。那么我们这边呢,其实一开始我们在那个做 AlphaGo 之前呢,呃,我们有一个以前有一个引擎,引擎,围棋引擎叫 Dark Forest。那么这个引擎呢,其实在呃 AlphaGo 之前三个月发布的。啊,当时是我们用了只有就九十块级PU训练出来的啊,所以还是啊还是一个比较省能源的一个一个引擎。当时我们能达到就是非常强的业余的段段位的那个水平,当时是被一些媒体报道了,因为确实是一个比较大的突破。
啊,我发现用神经网络这样的一个方法做围棋呢,是一个比较好的算法,而且呢,就是这个呃方法呢,有意思的地方是它不仅去预测将来一步,还可以预测将来三步的那个那个move,啊,那么通过这种方式,你可以稳定神经网络的训练。啊,当时是用了这样的一个一个一个方法,啊,当然了,后来因为AlphaGo一六年年头出来之后呢,它确实是声势非常大,所以我们把我们这个工作给淹没掉了。呃,那之后呢,我们就没有继续做这个方向啊,因为确实没有看到特别好的做法。那么直到呃去年AlphaGo Zero出来之后,啊,我觉得这个方向很有意思,因为看渐渐你看到就是不用神经。啊,你不用那个人类的棋谱,你就可以学出来,啊,那么这个就很有意思,而且它不需它跟那个具体的那个游戏是没有关系的,所以接下来我们就有第二波啊,第二波就是说,呃,我们把这个围棋战再再再拾起来,啊,然后我们去看一下,就是究竟 AlphaGo Zero 这个算法是为什么能够 work 的。
啊,所以就有了这次O Alpha Open Go啊这样的一个呃这样的一个A I,那么 Alpha Go Zero这个算法呢,其实是呃非常有意思,非常简单。啊,简单到就是不会想象,就是很简单,就是你可能从一开始完全不需要人类知识,啊,我们完全是从呃随机模型开始,然后我先让随机模型自己跟自己对下,啊,获得一些啊那个那个棋谱,然后你把棋谱拿过来去呃去更新你现在的模型,然后把这个模型拿过去再生成更多的棋谱,啊,以此就这样循环,一直到最后就能得到一个非常强的AI。啊,这个听起来非常不可思议啊!但是呢,我们在重现之后呢,我们知道其中有很多地方呢,其实是呃是非常有道理的啊。
那么具体他怎么做的呢?就是说,你从呃第一个空棋盘出发啊,你先用我们的卡普搜索啊,就刚才我们说那个搜索算法,可以找到一个比较优的下一步的走子,然后把这个走子拿过来啊,把走这个走子那个拿过来作用在S一上,会得到S二啊,然后S二再照此,然后一直下下到整个棋盘全部结束。那么结束之后呢,就是按照围棋的规则,你可能会最后你会最后得到一个谁赢谁输的这样一个信号。那么这个信号呢是唯一的啊那个监督信号。那么有这监督信号之后呢,然后我们可以呃把棋盘之前的那每一步都拿过来,然后做成一个监督学习的样本。
啊,像那个S一的话啊,状态第一状态的话,就把第一个状态和呃这个对应的那个最优的招法和最后游戏的那个进展放在一起。啊,变成一个训练样本。那把这训练样本放在一起呢,就最后呢就呃可以用来训练。然后它的训练目标函数非常简单,啊,就是希望我有个神经网络,这神经网络它输出两个头啊,一个头是呃做那个策略网络啊,一个头是呃那个值的网络。那么希望策略网络的输出策略的分布啊和呃蒙特卡洛输出得到的策略分布呢是一样的啊,这就是这里面第二项。啊,然后第一项呢,就是呃,我们希望那个值函数得到的结果呢,跟你最后的那个呃是就就是游戏的那个最终的结局是一样的,就是它的第一项,啊,你希望这样子。
然后最后一项呢叫regularization,那么这一项就是说我希望这个整个模型不要overfit。呃,当然了,其实后来我们实验发现,呃,其实模型 overfit 有其他原因,并不是因为这个,啊,这个 parameter,啊,然后我们然后输出的那个特征呢,其实是一个非常呃简单的特征啊,它不想要放进任何的领域知识,啊,它就放了就是当前的盘面的那个 x,就是黑的和白的子的位置,啊,但是还要把历史的盘面的子的位置也一起放进去,啊,然后这个作为特征。啊,那么这个效果呢,其实是相当不错的啊。
效果的话,他们有两个版本,一个版本是三三天的版本,他们训练了三天,用了两千块TPU,啊,然后呢,基本上已经呃能够战胜AlphaGo Zero力,AlphaGo力,就是跟李世石那个版本。啊,而且这战绩呢是一百比零啊,就说双方各用五秒钟,然后下棋,然后发现就是 AlphaGo Lee 这个版本永远下不过啊他们三星训练出来的版本,啊,所以大家可以知道,就 AlphaGo Lee
这个版本当时训练了几个月才达到这个水平,现在完全就可以碾压它了。之后他们花了更多的计算资源和更久的时间,训练了一个更厉害的版本,这应该是目前为止最强的围棋程序,当然现在没有公开。为了让这个过程变得有意思,我们当时想要分析为什么AlphaGo Zero可以工作。于是我们启动了这样一个项目,希望重新复现AlphaGo Zero的结果,看看到底是什么让它变得那么强。
还有一些问题,比如这个算法到底是不是通用的?是不是大家都可以用?比如我们是否可以在任何问题上应用这个算法?目前并没有特别大的定论。我们试下来觉得它其实并不是那么通用,还是有很多限制条件的,这些问题还需要继续讨论或解决。
为了这个项目,我们把Alpha平台重写了一遍,变成了2.0版本,同时加了很多分布式处理方案。现在的开源软件既能训练AlphaGo Zero,又能训练Alpha Zero。Open Go当时用两千块GPU训练了两个礼拜,效果很不错。我们已经把代码和预训练模型都开源了,现在围棋界基本都在用我们的开源AI,它应该是目前为止最强的开源AI。
测试时我们与韩国棋院合作,与四位非常强的棋手对战。我们只用单张卡,每步固定五十秒,而人类棋手有无穷无尽的思考时间,有些棋下了五六个小时。其中还包括世界排名第三的金志锡。最后我们赢了所有棋,这个版本远远超过了当年与李世石对战的版本。
台湾那边也有一些测试,发现即使只有两千次搜索也能战胜非常多的台湾棋手。我们还跟当时最强的开源Bot Lilac Zero做了比较,Lilac Zero是通过众筹复现AlphaGo Zero结果的。比较后发现我们的版本比原来的开源Bot强不少。
这是一个视频,大家可能看不懂在下什么,只要看到左上角的Black Value在不停下跌直到负一,就说明我们赢了。我们整个东西都已经开源了,最近写了一些简单的教程,大家可以拿来用。这个教程跟围棋没关系,完全是个分布式平台,大家可以放入其他想法和思路。
在Elf平台上,我们可以做其他工作,比如迷你RTS。这是一个比较简单的累积战略游戏,我们能否在上面训练出较强的AI?这个游戏跟真正的星际争霸复杂度不能比,还是比较简单的,但模拟了星际的一些主要工作,比如怎么造兵、造建筑、何时防守进攻、最后推掉对方基地。
算法用的是Actor-Critic模型。我们一边用大量游戏模拟得到数据,然后用这些数据训练神经网络,希望它变得更强。我们没有用任何奖励塑形,奖励只在最后告诉你这局是赢还是输。并没有鼓励AI前期先造农民或兵,这些东西都是通过它自动摸索学出来的。
因为星际的Action Space非常大,为了让难度简单点,我们自己定义了九个高层的战略Action。AI只需选这九个Action达成战略目的,整个过程可能需要做一百到两百个决策。训练时我们跟基于规则的AI下棋,规则AI很简单,要么建五辆坦克进攻,要么建两辆坦克骚扰。
你会发现AI训练完后能有效对抗这种固定策略,达到比较智能的结果。左上角是训练出的AI,右下角是写死的固定AI。固定AI会固定传五辆坦克进攻,而训练出的AI知道何时防守、进攻,用各种战略达到目的。
当对方进攻时,我们的AI想方设法挡住进攻,基地只剩一点血也没关系。建立两到三个坦克后,通过游击战术把对方基地推掉。这些都没有交给AI,AI只是选择大战略,找到有意思的战略组合达到目的。这是另一个演示视频,AI发现造绿色坦克较有效率,推进时集火攻击有效,最后推掉对方基地。
注意这两个视频演示时开了全地图,但训练时并没有开全地图,所以AI有些地方不知道,需要推过去才知道对方发生了什么。我们在上面做了一些消融研究,看到一些比较有意思的Trick确实可以Work得比较好。
比如,如果我们不仅把当前状态放进去,还把过去四帧状态全放进去,胜率会变高,甚至跟AI联的胜率不相上下。如果再加更多信息,胜率会更高。这是两个基于Alpha的工作。之前我们还探讨能否在第一人称射击游戏中训练AI。
这个解决方案的主要亮点是Curriculum Training。因为直接从单张图训练AI,希望它在非常复杂的地形中达成目的非常难。如果只把它丢到复杂地图里,很难获得大量Reward Signal,有效训练非常没效率。
我们可以先把AI放在比较简单的地图上训练,这些地图是我们自己设计的。简单地图上有大量敌人和物品,敌人比较蠢,走路慢或一枪就死。AI慢慢学会如何移动、如何杀死敌人并获得分数。
当AI在小地图上做得很好后,再把它放到大地图上继续训练,最后得到较好的训练结果。最后我们在比赛中拿了第一名,比第二名分数高百分之三十五。接下来有一些视频,大家可以去看它是怎么样对战的。
这里有一个简单的演示视频,说明AI学了哪些东西。你会发现AI在跟别人对战时,开火瞬间会向左或向右稍微平移,这是一个很有意思的技巧,可以帮助它躲过敌人炮火。像这次是失败了,但这个技巧本身我们并没有告诉AI,只是让AI在环境中自由探索,慢慢学到什么样的小策略是重要的。
这边是一个对于值函数的演示。你会发现AI训练后完全知道什么情况下对它来说非常好,什么情况非常差。最好的情况是我开了枪,马上就能射中敌人,你会得分。最差的情况是我开了枪没射中,而且没子弹了,敌人知道你在哪里。这种情况对人来说也是非常愚笨的薄弱情况。
接下来我们介绍另一个平台叫House 3D。这个平台跟打打杀杀没有关系,有一个3D环境,我们希望给机器人一个任务,让它从当前位置一路走到某一个房间。通过这种方式,可以训练AI在复杂环境中自动导航的能力。
这个平台脱胎于Sensei Data Set,由普林斯顿的研究者们积累起来。里面有四万五千个人工设计的场景,所有物体都标定过,你知道桌子和椅子在哪里,床是什么颜色。我们在此基础上建立了House 3D环境,现在已开源,大家可以下载使用。
这是一个简单的视频,可以看到简单环境包括很多东西,比如RGB、深度信息,还有右上角的Segmentation Mask,因为它包含各种物体的信息。最后我们还可以提供Top Down View,当然训练时并没有用到这一点。
我们在上面训练不同的AI Agent,看它们能否完成指令,比如“Go to the kitchen”。这篇文章有意思的地方是,虽然有很多不同环境,但其中有一些共同的语义信息,比如“厨房”都是一个语义信息。
这些语义信息在不同环境中表现不一样,但总有一些共同点。我们可以挖出这些共同点,想知道AI对着共同点能不能学出来,这也是这个项目的目的。初步结果发现确实可以学出来。我们测试了一种情况,AI在一个环境中训练,看在同样环境中的测试结果。
它确实能得到一个比较好的成功率,达到目的。不仅如此,如果我们在一百个不同环境中对AI进行训练,训练完后把它放到新环境中,新环境中物体关系仍满足那些语义关系,但放置完全不同,AI还是可以找到目的地,成功率还是比较高的。
这是一个非常有意思的现象。另一个现象是,用Segmentation Mask的效果其实比RGB要好。因为Segmentation Mask包含高层语义信息,有了之后比用RGB效果要好一点。
这些视频显示它会在附近做一些探索,找到一个比较可能的位置。比如让它去厕所,它会找到厕所位置然后进去。另一个视频是去厨房,它会过过道一点一点走过去。这显示出了相当程度的智能例子。右边是Top Down View,这是另一个视频,就不展示了。
现在主要是这些,之后我们会更着重在算法上。目前我们关注的一些重点方向,比如怎么做Hierarchical Reinforcement Learning,即层次强化学习。人类思路是先考虑大问题,再考虑小问题,但强化学习目前似乎没有特别好的算法实现这一点。
还有怎么做基于模型的强化学习。意思是我们对世界建模,用这个模型去做Policy Network的优化。这样可以避免在线生活中到处乱撞,撞了几百次才知道问题。对人来说可能撞一次都不用,脑子里想一想这么做一定是错的,就可以改变策略。
怎么样模拟这种学习方式,就是Model Based Reinforcement Learning的目标。还有一些应用,比如强化学习怎么样用来做Optimization?对于非常复杂、高维的优化问题或组合优化问题,怎么样用强化学习方法达到更好效果?
我们还可以做Multi-Agent,有很多不同的Agent,它们之间怎么样做交流、通信,怎么样合作完成一个目标,这也是一个方向。我们之后还是会继续完善Elf平台,希望它成为分布式AI平台的一个较好选择。
最后我要讲一下,大家可能对AI Reinforcement很有兴趣,但怎么样才能让自己进入这个领域?这个领域需要挺多不同方面的技能。它有很多符号,整个框架有一套比较理论的说法,你可能需要较强的数学基础才能看懂算法中的奥秘。
另外,现在大家主要抱怨是不能复现,或者算法的可控变量太多,可变的东西太多。为了让事情做出来,就需要大家有较强的调参能力,对问题有深入了解,知道通过什么方式调节能让算法做出来。
RL现在是非常吃计算资源的方向,如果你对分布式系统、系统底层有较好了解,能搭一个很大复杂的系统,那其实对Reinforcement Learning会有很大帮助。
就是啊,那能够做得更好一点。啊,这也是一个很大要求。那么最后呢,就是,呃,RL这边其实C加加和Python都都是比较需要的。啊,Python是一个比较重要的语言,那么可以用来训练很多。呃,那个reinforcement agent,网上有很多开源代码也是用Python写的,啊,但是这并不意味着你可以不用C加加,因为如果真的要把速度提上去,或者真的把东西,呃,用在现实生活中,那其实C加加是必不可少的,因为发现C加加比Python快很多。特别是在多线程啊,在这样的在一些分布式的一些操作中,啊,所以呃,要让自己在AI啊这个方向上呢做的比较好呢,你可能需要这些方面的能力啊。
好,那这次的那个直播我们就就到这,这是我们的演讲。那么之后呢,我们可以呃想办法回答一些问题啊。我对,呃,小袁谢谢大家。那我看一下啊,现在有一个问题是,呃,Alf支持搭建自己的game系统吗?对比OpenAI的game有什么优势?呃,Alf呢,其实是因为它是CI幺的平台,所以呃,它比较适合那些有CI接口的游戏。啊,如果有这些游戏能够放进去的话呢,它的效率是比会比较OpenAI的Gem会比较会比它要高一点。啊,这个是我目前的一个经验。
啊,当然了,如果这个游戏本身是个Python接口的话,啊,可能比较。啊,可能比较呃,可能比较麻烦。但是呢,我们现在也在写一个那个写一个接口,就是说,我们可以在那个Python那边,呃,在F这边写一个adapter,然后这个adapter呢可以接收,呃,从任何地方来的信息,并且再把它打包变成那个F的一个batch。啊,那么这样的话呢,就是不管你的游戏是什么样的平台或者什么样的语言写的,我们可以通过比如ZMMQ这样的一个啊communication,先把它接到Elf里面去。那么这是一种可能,那么这个可能还在实现中。
啊,对,啊,然后还有一个问题是,那个复现别人paper的时候有哪些经验?呃呃,还记得您在知乎上写过一个Pytorch梯度计算的bug,所以比较好奇类似的呃复现的问题。那那个bug呢,其实是因为呃啊,其实是因为我们在复现AlphaGo Zero的时候碰到的问题。啊,因为这个报告,所以导致整个项目延后两个月,应该可以可以这么说吧?如果没有这个报告,可能两个月之前就出来了。
啊,那这种报告你要去查呢,其实是比较难的,因为它不会让整个训练出现问题。它可能只会训练训练变慢,变得非常非常慢,啊,当然那个bug是因为呃,就是让这个policy network在学习的时候,它的速度比原来要慢两百、三百倍,那么这个就会导致问题,你可能发现你训练不出来啊,或者说训练效果比那个文件里文文章里面差很多。啊,所以,但这种调这种bug呢,其实需要很大的那个需要经验的和需要一些呃深度的思考啊,这个其实非常重要的,因为这个也是调一般的那个呃那个强那个积学系统的一个必要的一个一个一个要要素,你得去想一想,就是为什么会出现这问题,可能是什么原因啊,然后原因之后还有什么原因啊,然后在上面做各种各样的logging啊,然后去想一想原因是在哪里,然后才能才能找到。
啊,这个其实是一个可以说是,呃,做machine learning那个那个人的一个比较核心的竞争力,因为有些人就能跳出来,有些人就跳不出来,啊,所以这个还是挺难的啊。就我看到,就是有有工程师,比如说你在调的时候,可能就非常简单的,就是用什么Git bisect,我们把那GitHub的那个commit拿过来,一点点的二分法算。但这个效率就要比较低。有经验的人呢,都会去想深层次原因,然后把深层次原因想通了之后呢,就知道怎么调了。
嗯,这个是嗯,行,呃,然后还有问题是,我看一下啊,呃,还有就是复现别人paper有什么经验?我觉得经验还是我觉得先要看懂,啊,你要先要这个理解这个文章在干什么,然后想一想你值不值得复现这篇文章,因为很多文章就是有一些问题,就是这些问题呢,可能让你觉得你并不相信这篇文章的结果。或者这篇文章的结果本身不是特别好,或者说这篇文章虽然这么说,有了结果,但是明显有一个实验他没做,然后导致呃比较不是很公平。那么这个时候你就不用去不用去复现了啊。
真正要复现的是那些,比如像AlphaGo Zero这样的,就是首先第一个它确实有很好的效果,那么第二个是说有一些就是有意思的那个。啊,一些哦,观察呢,你其实你不能通过自己的思维实验找到的。那么这样的话,你可以去复现。那么你复现的时候,因为这个复现本来就是一个比较苦的活,嗯,但是复现完成之后呢,其实对自己会有比较大的一个帮助。
对,呃,还有问题是,就是样本利用率低,有什么好的建议?啊,我不知道这个是什么意思,就是说,呃,样本利用率低。嗯,有就是说,你可能QPU,比如说你的那个,你可能整个系统没有没有写好,然后你导致你的GPU利用率非常低,呃,然后你可能有大量的样本进来,但是你真正在训练的时候,样本用的比较少,这是一种可能。那么这个时候你要提高这个整个系统的效率,啊,这是一个。
然后另外一个可能是这个问题本身是表示它的算法上有问题,比如说,呃,我们做那个model-free的reinforcement,它的样本呢是sample complexity其实比较低的,啊啊,因为像特别是比如说on-policy的approach。有很多样本你可能用过就丢了,呃,丢完之后你去用那个simulator生成新的样本,然后如此往复,啊,那么这个其实是算法本身的问题,就是需要呃需要做真正的研究,然后把它解决,啊,这个是这个就需要更深层次的这个思考。
啊,有一些可能是通过通过工程方式解决的,比如说像DQN,DQN的样本率、音率应该是很高的,因为有一个replay buffer,你可以从里面不停的采样。啊,那么如果利用率低的话呢,有没有可能是因为,比如说你的那个数据输入数据的那个样本的收集速度比较多啊,比较慢啊,或者说样本那个覆盖率比较小啊,像这这些问题,那么这些都是因为现在那个强化学习还是一个比较实验的科学,是是比较难的,嗯,啊,然后是那个。
呃,Hierarchical reinforcement learning,Hierarchical reinforcement learning是呃,现在就是说,其实Hierarchical reinforcement它它的本来的那个想法呢,是就是人类在分析问题的时候,是从大处着手,然后着手完之后呢,然后把每个小步骤一点点分离出来,一点点去做啊,那么。现在问题是,就是说,虽然说我们在是呃,我们在直觉上有这样的一个感觉,说我们要先从大的出发,然后有些有一些小的,那个任务一点点去完成,然后完成之后才可能完成大的任务,呃,但是呢,就是现在还是没有一个特别好的一个能用的框架。
我觉得主要问题还是因为大家对于那个hierarchical reinforcement learning的本质还是没有想得特别清楚。啊,为什么我们要把一些呃小的那个action结合起来啊?对,这是一个问题。然后那个把小的问题怎么样结合起来呢?这个是就是说,如果我们问整个世界的那个。那个action sequence是没有任何结构的话,其实根本就不需要做hierarchical reinforcement。那么,只有在那个我们对整在整个世界里面,就是这些action sequence自然的形成一个结构,那么才能hierarchical reinforcement才是有意义的,对吧?
呃,但是什么样的结构能够让这个hierarchical reinforcement有意义呢?这个其实是一个问题。啊,这一块呢,其实我们内部也在做一些工作啊,只是现在还不便透露。啊,因为这个其实是很有意思的一个问题,目前我们现在并没有一个好的办法可以做。呃,下面就是说我很好奇那个Minecraft的战略性动作是怎么连向具体单元动作。那么这部分是手写的,就是说战略性动作可以把就是给定战略动作之后呢,我们有一个固定的rule把它变成那个具体的每个单元的动作啊。
那这部分确实现在还没有训练啊,但是呃,我们最近是有一个新的版本出来啊,然后呃,我们可以做一个更细的一个规划。那么再往下,因为我们我觉得吧,就是对于那个啊,对于Mini RTS这样的游戏啊,对于就是星际这样的游戏呢,你可能先要定一些比较大的操作,然后大操作上面work了之后,然后把这个大操作呃跟下面手写的规则的这样的一个边界往下去推。啊,然后推到你做不出来为止,那么一点点往前走,你最后你能够能够让这个AI能够从头到尾全全部自己训练,那么这可能是一个比较好的办法。
对,啊,后面说起来,Alf主要是游戏吧?有没有其他领域的应用嘛?因为Alf现在其实只是一个平台,所以你可以往里面装游戏,你可以往里面装任何其他东西。呃,它其实没有,并不一定在游戏上,呃,定在游戏上面可以做别的事情,因为这个分布式平台其实现在是个通用的平台,你可以拿来做任何你想做的。呃,工作啊,你只要是呃,只要是有分布式的呃需求,你比如说你要做大量的呃样本生成,然后把它放在一起,然后做训练啊,那么这个过程本身就可以用LFS做,跟跟游戏没有特别大的关系啊。其实我们内部已经开始用它做一些别的事情啊,当然我会不会我这个我不会说得很细。
对,啊,Alpha Ray相比有什么差别啊?是否关注关注过那个Meta Reinforcement Learning的计算啊?这个问题问的很好,因为呃,Ray的作者我当时也聊过,呃,当时他也是呃在ICML,当时还有包括在Berkeley的那个Retreat,那么他们也展示过他们的工作。啊,Ray基本上是呃用的是就纯Python的接口。啊,然后呃,他们把问他们把那个抽象层写的很写的非常细,非常好啊。然后比如说,我们可以就是可以在本地做一个Monte Carlo Tree Search的Rollout,也可以把它代理到那个其他机器上做啊。就是然后有这些比较好的抽象层接口。
呃,但是我没有比较过他们两边的性能,啊,从文章上来说好像没有Alpha那么快,呃,因为有一些简单的benchmark,比如说他们用它来做分布式的那个呃Atari game的训练,呃,当时我记得他们说能做到,比如说一两千帧每秒的一个呃一个速度,就是那个Atari game的那个游戏的帧率的速度。但是其实,如果你用alph或者说你用裸的那个C加加版本去跑的话,你才能做到五六千帧的每秒,呃,所以这个其实还可能还是会有一点区别。因为毕竟那个瑞是那个Python写的,呃,对。
然后那个是否关注过Meta?呃,哎,我不知道什么叫那个Meta Reinforcement Learning,啊,这个可能需要解释一下。啊,对,啊,然后后面还有问题是我在美国读博,请问去你们组实习有什么要求?刚才会看重什么?去菲尔做SD有什么要求吗?第一个问题是实习有什么要求?呃,实习的话,我们一般是找PhD啊,博士阶段,然后已经发过几篇比较有意思的文章,一般是这样的一个门槛。嗯,对,所以其实一般要找的是博士三到四年级。啊的同学,那么但同时也需要英语比较好,然后有肯有很强的那communication能力啊,主要是这些啊。当然,如果你非常厉害,你的本科阶段就已经发了很多文章啊,那博士一两年级过来也是也是比较正常的。
嗯,去FA有什么做SD有什么要求?呃,我们这边就是,如果是有那个research engineer的,我们是有两个不同的职位,一个是research scientist,还有一个是research engineer。那么scientist的职位呢,主要是呃相当于faculty呃这样的职位。那么我就是research scientist啊,但我现在其实也是manager。嗯,那么这个职位的木雕目标是,就是怎么样去呃,在scientific这个方向上呢,做做advancement,就是怎么样发明发现新的那科学事实。那么这主要是目的啊,这是一个。
那么engineer这边呢,它的要求呢,就主要是说你能不能做的很好的。呃,能不能那个实现很好的那个呃呃那个那个工作呀?啊,然后呢,能不能把那个idea变成现实啊?能把东西调出来啊?这样的一个一个要求可能比较多一点,啊,那么有什么要求?很很多时候可能。呃,要根据不同的组呢,还有不同的特别的要求,那么代码写的要比较好,那么最好你有比一些比较有名的,或者说做的比较好的那GitHub的一个呃一个开源的一个一个工具,呃开源的一个一个项目,那么这样子是可能是个比较起码的要求,啊,主要是这样子。
啊,reinforcement是不是图像问题?呃,对这块其实是一个好问题,因为确实,呃,RL这边。呃,我是看到过有一些用reinforcement learning做图像问题的一些方法,比如说你把图像切成很多小块,啊,然后你每次只能看到其中一小块,然后通过reinforcement learning就是去解决就是什么样的那个采样是最好的,就是我们可能说我们只要采比如说很小的一部分的图片,我们就可以知道这个物体是什么。啊,比如说这样的一个呃,一个一个一个一个是一个是一个设定,呃,这个设定呢,其实一定程度上是有道理的。
就比如说啊,我们计算资源不够,不可能把所有图片都这张图片的所有信息都读进来,那么你可能先读一张比较粗的图片,然后分析一下哪些地方需要重点考察。然后再用RIL的方法去找中间考察的位置,一点点往下走,啊,这个是一个一个这个做法。当然了,就是现在计算资源那么丰富,然后GPU又是需要就输入是非常uniform的,所以这个方法其实也许没有特别大的用处,但是可能对视频有点用处,因为视频里面你并不需要知道每一帧是干什么的,啊,对,嗯。
呃,所以这块其实现在还在做,嗯,后面问题是,请问有一些研究说啊,有policy的方法本质上是很不稳的,呃,我不知道什么叫本质上很不稳,这是什么意思啊?可能意思就是说那个on policy的方法不是很稳定吧?呃,不是很稳定的话,其实可以通过各种方法去解决,比如说all policy policy network,啊,然后或者说你呃加一些那个regularization。啊,或者你在训练的时候,呃,你用TRPO这样的算法,然后保证你每次只移动一点点那个呃policy,那么有很多方法可以让它变得比较稳定。
啊,其实没有特别没有说特别不稳,因为像A3C这样的算法其实用了很多,然后大家都知道,就是也可能算法实现方法不同,结果会不一样,但是至少还是知道,呃,还是有效果的。对,呃,计算资源有限的话,如何做reinforcement learning方向的研究啊?我觉得这个确实是一个很大的问题。一个一个办法是这样,就是你可以在方法上做创新,因为现在其实还有很多阿里的阿里的文章,虽然说环境比较简单,比如说是个二维的一个一个一个grid啊,然后二维的一个格子啊,你在迷宫里面走,但是你可以用一些新的方法去做这个事情,然后你只要研制成立,或者说你能够通过呃一些实验找到一些别人没有找到过的一些一些东西、一些思路啊,或者说给别人一个启发,那其实也就很好。
因为RL并不是一定要拼计算资源的,你可以拼计算资源,这是一种做法。那么还有其他不同的玩法,你比如说你那个那那个搞一个新的框架或者新的设计啊,比如说RL有什么那个Primal和Dual的这样的一个Formulation。然后在这foundation上是不是有一些有意思的一个结论可以推出来啊?那么这一部分呢,其实也挺有意思,对吧?或者说你可以证明RL的一些有趣的性质啊,或者说你设置一个新的算法,然后在某些情况下可以证明它收敛的比原来更快,或者说稳定性更高,这都是一些比较有意思的工作。
啊,甚至是你有一个更好的formulation,能够有一个大的框架,把原来不相干的两个东西放在一起,那么这些都是有可能可以变成非常好的工作,所以并不是说你一定要跟别人拼算法、拼性能,啊。对,呃,入门RL大疆分布式系统有什么学习资料推荐吗?我当时也,我其实之前也不是做分布式系统的,我只是乱入了一下而已,呃,就是,所以其实我也不知道有什么东西推荐,这帮自己自己动手吧,呃,动手了一下之后,我相信可能会有更深的了解,对,然后可能多用一些开源的软件、开源的平台,你可以学得更快。嗯,对,基本上是这样。
然后可能本科的一些基础知识要扎实一点,然后可能会少走一点弯路。呃,还有问第二个问题是GPU少了AI的发展方向,AI在分布识别问任务有什么应用建议?呃,其实说实在的,就是Reinforcement里吃的不是GPU,吃的是CPU。呃,因为像围棋是个特例,因为围棋的那个呃,围棋模拟这个游戏非常简单,所以GPU用的不多啊,CPU
用的不多。但是如果你看DOTA,你看啊,Open AI的,比如说那个最近有个Manipulation啊这样的一个呃这样的演示,就是我们怎么样我们在虚拟环境中。训练那个 manipulation,然后能够能能能能够直接转到现实生活中去。那么这些任务呢,其实都需要大量的 CPU,可能需要几万块、几十万块的 CPU,所以这个其实是 CPU 吃的比较多啊。像新机也是一样的,呃。对,这个是呃,这个是一个一一个一个区别,所以 reinforcement 其实吃的 CPU 比较多,呃,如果你 CPU 也没有的话,就刚才我说的,就是其实啊,你可以想想其他的方案,就是没有必要跟别人去拼那个计算资源,你可以有很多方案可以做 reinforcement 又可以是一个非常 open 的一个 direction。有很多东西可以可以拿来做,你可以做理论分析啊啊,你可以做一些算法的设计啊,对吧?啊,你可以在一些特定问题上做得更好啊,或者说你可以在你可以发现 insights 啊,你可以呃分析一下问题啊,或者说数别人的不足啊,这都可以,没有必要跟大家拼 performance,对。
后面有个 L 可以用来做 R 的 Chatbot,这这肯定可以。呃,对这一块没有什么特别大的问题,就是它本质上来说是一样的。就对 Chatbot 来说,啊,你可能需要一个 simulator,往往是有一个 user simulator。啊,他会模拟那个用户的反馈,你把这个用户反馈塞到 Alpha 面去,你就可以拿来 train model,这个没什么问题。当然了,就是目前,呃,你可能需要一个 C 加版本的 simulator,嗯,如果是呃 Python 版本的话,我们可能需要加一个 adapter。呃,后面问题是那个 Alpha 对呃语义网络支图方有结合吗?目前还没有。啊,这块我不是很,不是不是,目前还不是特别熟。呃,我们没有往这方向走。
嗯,对啊,室内家居的布局问题可以通过什么设计什么样的模型和网络来搞呢?呃,这个其实是一个 planning 的问题,就是说或者说 optimization 的问题。呃,这一块呢,其实有一些工作,就比如说那个之前有个 pointer network 啊,对吧?然后你可以用 LSTM 去生成呃一个那个是旅行商问题的解。那么这些这这这些这是一个可能的可能的方案啊。所以这些文这些文呢,你可以去看一下,然后看看他们是怎么做,用什么样的网络去设计啊,然后看到就是可以得到一个比那个平时的那个 optimization 方法更好。那么另外像这种优化问题呢,就是第一的就不要去想 reinforcement,你先去想一想啊,怎么样用传统方法去做,由于传统方法可以做得很好,这个也不好说,因为那个像优化问题,其实很多人已经做了几十年了,有很多很有意思的结果。
有监督做预训练,呃,这个肯定是可以的。就是你用监督学习做预训练,就是你先预训练一个那个策略网络,啊,然后用策略网络,呃,在强化学习中做那个 fine tune,就是完全没问题。这个叫 imitation learning。所以如果你有兴趣的话呢,可以去查 imitation learning 的文献,有大量的文献是做这个的。啊,对,这边我就不展开了。对。自动驾驶的端对端强化学习训练有比较好的推荐的方法或论文吗?啊,自动驾驶,我觉得强化学习是有的。我知道那个普林斯顿那边有一些有有一个人在做,他现在去应该是去了 Nvidia 了。对他们有一篇文章是做强化学习自动就自动驾驶强化学习的那个算法,但是自动驾驶可能现在端对端做强化学习没有那么还不太好做,不太容易做。因为可能现在还是主流的方法,还是说把问题分成很多子问题,然后每个子问题自己找一个 team 来做,然后把它们结合起来,基本上是这样会比较安全。呃,但是我相信最后肯定是想往垂直端端做的,啊,只是现在还是还没有成熟。对。
啊,我看一下还有什么?有一个什么可以多说一些 hierarchical reinforcement 里面可以是多多久让它够?呃,还要说 reinforcement 是一个非常大的一个,我刚才说了,就是它是一个非常大的一个 general 的一个一个一个一个 concept。呃,其实有很多的细节,就是你可以说,呃,我们已经有一些 micro action 了,那么这些 action 已经写死在那里,或者说做好了,那么怎么样把这些那个 micro action 组合起来?啊,变成一个比较好的一个 policy 的那个组合,那么这个也算 hierarchical reinforcement,对吧?啊,如何同时训练那个高层的那个 micro action 和底层的 action,底层的那个 sub policy,那也是一个 hierarchical reinforcement learning 的问题。啊,所以其实这个方向很很复杂。
还有比如说,呃,Sheldon 他们提出来的就是 option framework,对吧?啊,一个 agent 可以选择去做一个 option,做完 option 之后,它一定概率从这个 option 退出,然后可以去另外一个 option 再做一些事情。那么这样的话,其实模拟人类在工作的时候呢,先做事件 A,再做事件 B 啊,这样的一个过程,啊。但是这个方法虽然说看起来分割会挺好的,但是也不是那么有广泛的使用。有一些文章,像去年那个还是前年,Triple AI 有一篇 best paper 是 option from option critical model 是怎么样去 train option,嗯。
请问,对于复杂游戏奖励矩阵怎么样设定啊?复杂游戏一般来说呢,就是我们想要做的,其实我们不希望奖励矩阵设置特别复杂,就希望最后奖励只有一个,就是你赢还是输了,然后希望它能够学会一些东西。那么,如果这个搞不定的话呢,就是你可能可以想想怎么去做那个 reward shaping。那 reward shaping 这是一个非常 tricky 的问题,因为它跟其他游戏、跟一般游戏、跟游戏的具体的细节是完全有勾有关系的。嗯,所以到时候就具体分具体分析,就是看这个游戏是什么样子的,然后我们把这个呃 reward shaping 给做好。这个问题没法回答,你只能说根据游戏的性质去去去分析这个东西。对。
搭建多 CPU 硬件框架有什么建议吗?呃,这个太太宽泛了,我也不知道怎么回答。呃,一般就是很多机器,然后放网放挖着网络,它们连起来了,呃。然后机械臂可以用 reinforcement 做吗?当然可以。嗯,机械臂传统方法是有 robotics 的方法做,你可以把那个物理,把物理算出来。之后用物理的结果,你可以呃得到一个啊得到一个非线性模型。那么用非线性模型,你可以做什么呢?你接下来可以拿来,比如说你做那个 Q-learning,你把线性你把非线性模型局部展开成线性模型啊,然后把线性模型用 LQR 那个跑一遍,你可以有一个最优的那个那个 action。把 action 放进去之后呢,你可以把那个最优的那个 trajectory 那个迭代那个优化一下,优化完之后你可以再继续那个重复这个过程,这可以,这是可以做的。嗯,对。
那么还有还有就是说,比如说你可以用 demonstration,比如说你已经有一个人,呃,握着机械臂,跟他说要要怎么走啊,从 A 点到 B 点,它有一个过过程,那么这过程你已经救下来了,然后可以用这过程你可以做那个训练,这样子,这个都是这个都是可以的,呃。对,然后那个像那个 Berkeley 那边,Sergey Levine 啊,那个 Peter Beal,他们其实,他们其实有很多工作是可以用呃 reinforcement learning 做的,而且他们的工作可以在呃现实生活中可以跑出来,就是可以在真正的那个 robots 上跑出来。那这个方向呢,其实是需要有大量的数据,嗯嗯,去做一下,需要至少有一些数据吧,不能说大量,但是需要有相当的数据做,嗯,因为像这样的方法,一般呃。那个神经网络不是特别复杂,一般就是两三层的 FC layer,所以还好。
就之前有篇 paper 是说,其实像这样的工作,嗯,其实也不用什么神经网络了,你可能你甚至可以用 SEM 啊,或者用线性模型啊,或者用 RBF 来做。这我是相信的。呃,我觉得呃,在这些问题上,基本上神经网络就像是一个简单的那个函数逼近器,你可以用任何函数逼近器来做。嗯。你觉得现在从事 A G R 研究,应该从更 science 的角度去探索,还是从工程实践的角度去探索?啊,我觉得吧,就两边都要有啊,因为从 science 角度去探索呢,你可能有一定概率呢,你没有呃,你什么都达不到;但是呢,也有一定概率会获得很大的东西。工程角度上来说呢,比较平稳,但是工程上我不我相信工程可能会有瓶颈的,最后还是要靠算法突破,然后去完成。嗯,所以 ideally 就理论上来说,你两面都做,呃,但是呢,就是看你个人的兴趣,你喜欢什么样的方向去做,就沿着什么方向去做就可以了。
嗯,我觉得就是本质上来说呢,还是要从科学角度上去去研究的。啊,对,工程师是个辅助,或者可以这么说。但是就是现在也发现,就是如果你没有特别好的工程能力,或者说你整个系统搭得不好的话呢,你肯定会错过很多呃科学发现的契机啊。就比如说 AlphaGo Zero 这样的一个东西,因为它本身有一些那个 scientific 的一些 achievements 在里面。对,但是如果你没有特别好的工程能力的话呢,你根本完完全没有没有办法去实现这个想法。那么这个想法就算实现了之后呢,你会发现它效果不好,今天可能就放弃了。对,所以这两者是相辅相成的。嗯,所以就是其实真的很难说应该从哪方向入手。我觉得还是看你自己的兴趣,你想要做什么就做什么,你特别开心就行了。对,呃,有几个和 reinforcement 不直接相关的问题。那第一个问题应该已经回答了。对,啊,就是还是更偏工程实践一点。对,呃,那么这个问题其实还有附带了一个新的问题,就是说我是怎么做的?呃,我其实两边也是,我就是两边同时做的,嗯。
因为工程上来说呢,就是说有些重要的问题需要去解决。那么你去就是现在重要的是去解决。那么我有两个方向,一个方向是做 reinforcement learning 的那个呃 platform,这是一个。然后 reinforcement learning 一些那个算法的设计和改进,对吧?然后在游戏中应用,那么这是一个。呃,然后呢,就是说我有空的时候会去做那个 deep learning 的 theory 相关的方向,那么这是另外一个。那么这一块呢,其实呃,我还有个完全不相关的那个 presentation,但是我今天就没有时间去再说了。那么,那么 learning 这 theory 这边是完全不一样的一个风格,呃,就是说我们怎么样去研究问题,去思考这个问题本身啊,然后呃。啊,然后去想有什么样的 fundamental 的思路可以去可以去做的。
那么 Siri 这边呢,我现在主要是呃做就是在数据有结构的情况下啊,我怎么样去分析那个神经网络的收敛性,分析神经网络的那个一些性质啊。因为我相信就是像这个方向呢,其实跟我博士论文是一脉相承的。就是如果对一个优化问题来说,如果你不考虑任何的呃数据的结构的话呢,那么只有一些优化问题呢是可以做的,比如说凸优化,比如说矩阵分解啊,那个比如说什么特征值问题,那么这些可以可以做的,那么这些问题只就这些问题就是任何数据进来都能做出来。啊,但是现实生活中呢,往往不是这样。现实生活中呢,往往是数据有结构,但是呢,问题也很复杂啊。比如神经网络就是这个非常典型的例子。那么这一块呢,其实呃没有特别多的工作啊。大家都可能在做机器学习的时候呢,会忽略这个问题本身的领域的知识。但是如果有一些领知识的话,也许呃问题会变得更简单啊。这是我这个目前的一个思路,这也是相当于我整个博士阶段的一个思路。也可以说这是我 long term 的一个问题的关注点。对,嗯。
所以在博士阶段的时候呢,就是有一些工作,比如说如果呃数据有一个类似于群的呃那个变换结构,比如说那个图像的那个 alignment,图像的那个扭曲,那么在这种情况下,你做一个优化问题呢,其实可以把它转换成。啊,另外一个比较特殊的问题来解决啊,最后呢可以得到一个呃那个样本复杂度是呃比较低的一个算法,同时又能达到局部全局最优解。对,那么一般的优化算法呢是到局部最优解,因为图像的结构可以非常复杂。啊,那么,那么这在这一块呢,我们做一些工作,而且其中有一篇是拿了那个马普奖的荣誉提名,啊,就这个是一个方向。那么在深度学习时代呢,那么同样的思路也可以用,就是如果我们的数据输入是有结构的,然后这个结构呢,你可以自己假设。那么在这种情况下,啊,我们是不是有更好的算法,或者说我们能不能解释已有的算法啊,然后能解释他们的高性能啊,这个是一个比较 long term 的一个一个一个方向,嗯。
呃,呃,您觉得 AI 在智能系统中,影响?您觉得 AI 在智能系统中理想存在方式是什么样子的?哪些好的方法可以将现有的一些 perception 相关的工作和 action 更好的 couple 起来?呃。理想存在方式,我觉得最好的方法就是 end-to-end training 嘛,就是说一个智能系统有很多参数要需要调节,有很多那个决决定,有很多决定需要做,那么最好它能够都是用 reinforcement 去做的,啊,这个是最终的解解决方案了,就是,嗯,但是其实没有那么,现在没有到那一步,现在还是比较难,就是说可能 reinforcement 能够帮一些参数的进行调节,嗯,这就可以了,现在觉得是这样子。
最后是您在呃快速迭代的人工智能这一篇文章的结尾提到了平衡外部期望的问题。您觉得去平衡外短期目标和长期目标这两种两头兼顾的做法会不会影响长期目标执行的质量呢?您在平衡呃关于平衡个人目标和外部期望上还有哪些建议?呃,我觉得这个确实是一个很好的问题。嗯,就是说你肯定是要平衡两边的期望的,因为外部期望往往是非常短视的啊。也许有些时候并跟你的目标其实不完全一致。啊,比如说我们在做围棋的时候呢,很有意思的是,就是说总是会有人说:“哎呀,你这个算法太慢啦,你这个 model 什么什么能更新的更快呀?那能不能那个能不能有更好的效果呀?”那么大家都是有越来越高的期望的,对吧?我们开源了之后,大家都会讲,哎呀,什么时候能够做得更好啊?什么时候能够超过 AlphaGo Zero?那么这些大很多只是就是大家的大家愿意想的,并可能没有时间,或者说没有这个精力去做下去啊。我们可能还是需要花很多时间去做一些我们自己愿意做的,而且什么这样下一个,啊下一个大的 project 这个东西。
所以对研究员来说,很重要的一点是你要知道自己想要什么。呃,有些东西你你别你别没有必要去碰,对吧?有些东西呃可以选择放弃,所以这个是非常重要的。呃,有些时候你就不一定要听别人的话,嗯,而且但是我们组比较好的地方是我们整个 fair 呢,其实提供这个环境,就是你可以不用听,呃,你可以追求你想做的东西,所以你也没有人管。那么这个也是相当于整个美国也是有这样的一个大的氛围嘛,对,呃,这个其实是一个比较呃重要的一个点。因为很多时候你并不知道将来,嗯,什么样的方向是会有突破的,也许你想那个像那个 Young 当时坚持这个方向也坚持了很多很多年,之前肯定是没有任何办法证明啊这个方向是有前途的,啊,大家可能都在做 SVM 啊,大家都在做 Kernel Method 啊,大家都在在 Feature 上做 Engineering,没有人相信那个 Deep Learning 这个方向是能做出来的。啊,那么终于还是有几个全球,总有几个研究员,他们是坚持到底,然后最后能做出来。嗯,所以这个其实要看,就是你自己想做什么就做什么。对,啊,当然这种就是要求你能顶住外部压力啊,然后有这个。也有自己,有心里面有一个有一个有一个方向,心里面有道,对吧?有沿着这个道去走,嗯,而不是说是跟着别人走,呃,比较热的东西,呃,这个其实是挺重要,这可能是呃比较这个可能是比较深层次那个东西,对,嗯。
对,其实很多时候建议就是你想一想是什么样的东西你愿意去做。假设,呃,你没有多少时间了,但是你有没有什么什么事情是你要去完成的?那么这个就是你想要做的事情,对吧?因为很多时候,呃。可能有很多事情可以做,然后你做着做着,你可能就迷失了自己想要做的东西啊。这个可能是一个比较经常发生的事情。所以最好的办法是,就是不停的反省和总结自己到底想要什么。嗯,时间长了之后,可以就是知道自己到底想要什么,然后能在嗯应付外部的压力和完成事情的之余,还能够坚持自己想要做的事情。我相信这个还是比较重要的,就是,就是在那种千军万马中能开出一条路来,主要是这样。呃,请问您最您对最近 OpenAI 用简单的 LSTM 训练出 Delta
Two AI有什么评价?啊,这个其实有很多很多话可以说,呃。对这个呢,就是说,最近其实还这个还是挺暴力的,就是他们确实做得很好,呃,然后当然了,就是说你从他们训练的这个逻辑中来说,你会发现,呃,其实基本上就是用以前的方法,然后基本上到了尽头了,就是有很多参数要进行非常精细的调节,啊,比如说你一开始那个 team spirit 这个东西,你开始先要调成零,让每一个 agent 自己把啊,手头的事情做好,然后慢慢慢慢把它调成一,让agent之间能够有协作。那么,那像这种其实是已经加了人为的知识在里面了啊。
那么还有,比如说它的那个discount factor啊,一开始是非常非常的接近一的。啊,接近于零的,啊,不仅就是接近于比较小的值,那意味就是这个每个 agent 他们先 focus 在自己 short term 的事情上,然后呢,short term 做好了之后,才把这个那个 center factor 调到接近于一,那么这样的话,它可以做一些 long term 的事情。那么这些其实都是一些比较经典的 trick,然后他们 trick 确实可以用,确实可以 work,效果也有啊。但是我总觉得就是因为再往上做呢,用这种方式做呢,可能就比较辛苦了,可能还是需要有更好的方法。
嗯,但是本身这个效果也是还是不错的,就是你看他打那个人类还是非常有意思的,嗯,但是我们我觉得还是需要有更好的算法。请问一下,R L reinforcement对于NLP的切入点是什么?嗯,序列化的生成和调配。呃,reinforcement在NLP上其实就用了很多了。比如说,呃,blue score,你怎么样去优化这个blue score?blue score是一个比较嗯不differentiable,就不不不可微分的一个一个目标函数,就是人类定的。那么你怎么样去reinforcement做啊?
比如说,你完全可以通过policy gradient去优化一个不可微分的目标啊,这是一种用法,对吧?还有NLP另外一个问题就是说,比如生成句句子,呃,这个有点像序列化,就是按照顺序生成。你可能第一步错了之后,后面全错了。但你在训练的时候,你可能拿到的全都正确句子,所以你从来没有错过。你不知道怎么从错的地方搬回来。那么这个RL会有帮助,这些就这这样的一些idea。
那么还有比如说,呃,你怎么样对对对话系统做评价?你可以在上面train一个GAN这样模型,那么GAN就可以成为,比如说reinforcement learning的一个那个critic model,critic那个方式,这样子。为什么要用RL解决组合优化问题啊?哇塞,那么多问题吗?嗯,组合优化问题,我觉得吧,这个,呃,这个其实很有意思,因为传统的组合优化问题,组传统的优化解法,其实他们并没有考虑数据的分布。
呃,大量的数据就是说,他们就是这样,就是我这个算法,我可能只对某些数据分布有效,啊,但是呢,就是这个数据分布和算法的选择呢,啊,这个是完全通过经验进行的,啊,但是如果用RL的话呢,也许RL可以帮你选到一些比较好的算法,这是一个,然后另外一个就是说,就算一个组合优化问题,它的算法,呃,是全局最优的。那么它也是处于这种在所有情况下都能做到全局最优,那么它是不是会牺牲一些性能?
就比如说在一些比较 common case 下,它是不是能做得更好?那么这个都是一些可能的做法,对吗?因为总之一句话了,就是基学习的方法去做传统问题呢,基学习方法有优势,就是它能够利用数据的分布啊,然后做一些取巧的事情。那么这其实是人人最擅长的做的事情,但是,一般的算法呢,如果他们对数据的分布都没有特别大的一个呃那个假设,他们都是假设数据是任何情况下都是呃它可以是出现任数据的分布可以是任何情况,那么这样的话,其实呃,在某些情况下可能会没有那么好,这是一个。
强化学习又是有可能用来提升传统 supervised 的观察问题,比如说检测和分割,呃,其实是可以的,很简单,比如说那个。假设你的label是不对的,就比如说你让人去标定,总是有几个是标错的,对吧?那么在这种情况下,是不是啊能够做得比较好,对吧?还有就是说,你可以定一个比较模糊的goal,那么这个模糊的goal呢,你并不需要supervision。啊,你比如说你在那个 label 那个 edge 的时候呢,你并不需要说你最后的 edge 要生成出来 edge 要跟那个标准 edge 一模一样,完全可以说我生成 edge 要跟那个图像上的那些 edge 它的那个梯度方向上是一样的。
那么这样的话,你其实定了一个目标,而不是定义一些 label。那么这样的话,因为强化学习可以做。呃,可以我介绍一下House 3D的相关应用场应用前景。呃,House 3D呢,它的有意思的地方是它有它的。它的语义的结构呢是呃是统一的,就是大家可能都都知道,就是造房子,你不管你怎么放,对吧?你的卧室可能会有一些固定的一些朝向,啊,你的门和厨房和卧室还有什么客厅的一些那个相对位置,都是有一些规矩的,有章可循,啊,所以就是说这一块呢其实是可以啊利用的,用它来做那个强化学习的一个训练。
啊,这是一个应用这边呢,其实因为我们组是做那个比较偏那个科研的,所以你要说具体的落地应用呢,我们一般不会考虑特别多。那它是一个很有意思的一个平台,可以用来做呃各种实验,啊,是出于这个目的,嗯,啊,若在 reinforcement 中定义高级抽象的复复合 action,如何让计算机 record 下来用作监督学习?这个应该应该比较容易吧?你就直接把它记下来就可以了。啊,这个我不知道他怎么回答。
呃,下面一个是那个 reinforcement 在 human robot interaction 啊方面的应用。啊,比如如何用少量的 interaction 来训练 agent model 和 human 的 model。呃,这一块我不是很熟,HCI你可能不能问我,呃,可能可以这样,就是说可能是可以的,你可以用少量action来训练,我不是很熟,HCI你。可能不能问我,呃,可能可以这样,就是说可能是可以的。你可以用少量 action 来训练,然后 agent 去对人类的模型进行建模,然后你可以用 reinforcement learning 加一些 principle,比如说 agent 跟人之间必须保持良好关系啊,agent 不能伤害人类啊,同种方式然后进行训练就可以。
但这个就是看纯粹是看脑洞,我不知道这一块的呃这一块的文献是什么样子。没有研究过,嗯,Alpha是否可以应用在Superise的物体检测分割问题?啊,这个我也没有想过,不知道。呃,就是说,之前我们说了,就是R L这边如果能用检测和分割的话,呃,如果这个idea能够用 reinforcement实现的话,那我还elf是可以用的。啊,但是首先我们得好好的定义一个 reinforcement的问题,那么它能make sense。对,如何看待?如何看待 learning by playing 中的 policy schedule 以及不同 curiosity driven exploration 策略的研究?哪个对 AI 来说更有前景?
啊,这是一个很有意思的问题。嗯,怎么说呢?我觉得这些都是挺有前景的。比如说,你怎么样去做 explore?因为 AI 现在其实还是一锅粥的状态,呃,各种各样的方向都是可以试的。因为每个方向都可能又会有一些新的想法和思路,嗯,所以你现在说哪个对他有前景,其实为时过早了。我如果说 Q L C 这边有前景的话,那难道大家就不做人类百步千里吗?这是不可能的。所以我觉得现在还是以百花齐放为主吧。对,如果我说哪个有前景的话,可能另外一边就不做了。嗯,那我觉得没有必要,因为其实我自己也并不知道哪个方向说将来能通向最后的那个AGI。
嗯,对,因为previous追问其实是挺有意思的,但是现在previous追问的问题是。就 curiosity 的定义,可能对于跟现实生活中的那个跟那个具体的测试场景是高度相关的啊。比如说 Berkeley 那个 Mario 那个 work,他们的 curiosity 定就是说,我们看到以前没看到过的场景。那么这样的话呢,就是说就逼着 agent 必须得 survive,不然的话掉到坑里面去了就看不到了。对,所以呃,这两个真的是其实这这样的工作就是比较就是比较局限在这个具体的这个环境上。那么有没有一个更好的就是universal的curiosity的这样一个定义呢?现在还没有,呃,所以这个其实是一个一个问题,对。
呃,对,其实这个还是很难的,因为其实 curiosity 本身没有特别 well defined 一个东西。你现在往往是这样,你要 maximize reward,然后你又要 maximize curiosity,那么就有两项,那么知道一下怎么调又是个问题。嗯,所以像这种其实没有那么 principle,现在大家都在试。如何评价 OpenAI vs Google Brain vs OpenAI 啊?好吧,这个这是不是会说说说错了会被打?嗯。因为这样就是Fair呢,其实是个比较研究的机构,它相相当于相比较偏academic,然后希望大家不要受什么限制,就做一些呃研究方向的工作啊,主要是这样子,然后大家都会比较support,然后合作上来说比较随意。
呃,也没有特别跟产品有关系的,啊,也没有说一定要跟产品有关系。当然,如果你跟产品有关系的话,或者说你做一些比较好的、你产品上直接用的东西呢,当然也很好。但是这个并不是一个强制的要求。对,OpenAI现在可能比较集中在一些大的项目上,比如说那个 Dota 2,对吧?对,那个这个其实是他们的一个特色,他们可能所有人都是做 reinforcement learning,然后具体把这个啊 Grid China 的给做了,那么大家会比较开心啊,是这样的一个一个一个设计。那Google Brain就是非常分散,有些人是做 reinforcement,有有些人是做项目的,跟产品有关系的,有些人是做研究的,有些人是做系统,比如说TensorFlow的group,呃,所以非常diverse,嗯,就不太稳。我现在就就基本上是这样子,就是完全看你去哪个组,你去不同的组,它的风格就是不一样。
因为RL for optimization方面有什么建议?我觉得建议就是尽量去试吧,试一下用什么样的方法可以跑呢?可以试一下。对,呃,没有特别多的建议,就是可以。一般来说就是调各种各样的参数啊,然后设计各种各样的模型啊,然后那个试验一下,看有没有什么结果。那更深层次的问题是,就是对于optimization,也许每一个optimization它有一些特定的结构,这个结构呢能够被reinforcement learning所抓住,那么这样的话就能够学出来,对吧?那么这个问题现在没有定论,因为说实在的,那个 D Deep Learning 没有没有什么理论,Reforcement Learning 加 Deep Learning 更没有什么理论。
呃,而且 Optimization 这边也有很多问题没有解决,所以这都现在都是一些大家都摸来摸摸人摸象的状态。嗯,很多时候可能还要靠经验去做的。然后啊,如果是负反馈环境中,如何稳定学习呢?呃,就是说是指那个reward比较少,对吗?啊,这个是个世界性难题了,呃。一个就是说你加一些 reward shaping,对吧?或者说你想办法,嗯,换一些算法去去跑,呃,或者说你每次做 policy 迭代的时候呢,迭代的步骤短少一点啊,或者说你用 human demonstration,然后做一个好的 initialization,啊,这些都可以。
嗯,请问田老师对 model-based reinforcement 有什么建议吗?嗯,我们最近是有一篇文章在 arXiv 上,是讨论了一下,就是有一类 model-based reinforcement with policy optimization,那么这样的一类算法什么时候能够收敛?然后收敛性怎么样?然后我们当时是呃做了一个 framework,啊,能够保证收敛,而且在某个任务上做了一些啊实验。那么这个是那这个片文章是腾宇跟我合作的,还有呃他们合作的。那么呃这这个方向基本上就是我们做的方向,就是说可能我们现在偏理论,我们可以做一些分析,看看有什么结果。对,那么实验上来说还是。
呃,ModelBase基本上实验下来还是比较tricky的,呃,还是有很多坑,可能会跳进去,啊,对,具体细节我现在就暂时就不说了,因为还在做一些东西,啊,对。嗯,发一下刚说的自动驾驶端到端论文的地址或者名字啊,你可以查,你可以查一下Princeton陈晨毅和肖建雄,能找到,呃,你们可以可以看一下啊,然后那个,请问田老师对RL机器人导航有什么建议?呃,导航有一些文章嘛,就是所谓导航应该是navigation吧,就有一些文章。那么我们内部也有在做,嗯,这个基本上还是有一些想法的,啊,但是我这里就暂时不说了。
啊,GAN和reinforcement learning结合有什么建议?嗯。跟一般来说,那个用NLP,呃,质量可能是不一样不一样的问题。对,呃,前一部分问题就是对用RL用于NLP序列问题给一些分析建议。呃,这个应该我已经说过了,所以我就不说了。然后下一个是那个GAN和强化学习结合有什么建议?那么有些理论文章啊,我记得好像是Oriol写的,就是那个。Actor-Critic model和Game其实是其实是有个一个一样的framework啊,这个是一种一种想法啊。
那么Game本身你可以拿来做很多事情,比如说那个Goal啊,你可以拿Game来做那个Reward的方式。啊,你可以找到一个通过那个 human demonstration,你可以知道什么是 human 喜欢的,什么是 human 不喜欢的。你可以拿着它来做,你可以就是用来分析,就是什么样的 path 是类似于 human 的,什么样的 path 是不类似于 human 的。你可以拿它来做判别函数啊,然后用它来做 reward,然后训练 reinforcement model。啊,比如说是这样子。
如何评价LeCun认为predictive learning比reinforcement本身重要的说法?呃。我觉得predictive learning肯定是一个更大的一个框架吧,因为它并不一定,呃,因为RL本身就是像predictive learning,我觉得可能就是呃,像model base的这种问题,可以需要用到predictive learning,可以predict下一个step啊,或者说下一个states。那么,这就是model-based reinforcement的一个核心啊,就是如果你能predict很好的话,你可以做非常好的planning。那么有非常好的planning的那个结果就是呃会会比较好,就是reinforcement很多问题解决,比如sample capacity啊这样的问题。
呃,但是如果评价这句话,我也没有什么说法,没有什么评价,我觉得。嗯,我觉得这可能大家都有自己的想法吧,所以啊,不好说。那我差不多了吧?还有什么问题吗?没有问题的话,我们就可以就到此为止吧。好,那就结束吧。那非常呃,呃,非常感谢大家今天能过来听我的直播啊。然后呃,也非常呃感谢将门给我们这个机会啊,做这样的一个交流啊。嗯,那先先先这样了,那个那就先说到这儿吧。嗯,下次我们再讨论。嗯,拜拜。