Sources
非常感谢上海人工智能实验室的邀请,也很高兴有这个机会能和大家分享一下我们最近的一些进展。然后我们主要在强化学习这个方面,考虑的是怎么样让这个强化学习能够用起来。我们其实像刚才乔老师所讲的,在整个人工智能这个方向上面这个智能的部分可以有啊不同的阶段。可以有感知的部分,可以有认知的部分。那么关于强化学习这一个方向上面,它主要针对的任务是做决策的这一部分的任务。在决策这个任务上面,我们可以看得到的。不好意思,我的摄像头没开。 好,那么在决策这一类任务上面,我们可以看得到的非常著名的案例。就是前几年在这个围棋和游戏上面能够取得比较好的结果。在围棋上面应该是说可以战胜所有的人类了。在像星际这样的游戏上面可以达到了人类的顶尖高手的水平,虽然还有很多局限。 另外一方面,我们还可以看得到的一个很有意思的事情就是在决策的这个领域里面,在游戏上面同一套方法,同一套算法,它可以在很多不同的环境下面能够取得比较好的结果。也就是说这样一个方法,它可能是具有一定的通用性的,这个也是我们特别看重的一个通用的一个能力,所以强化学习在这样的一个场景下面,主要他的学习的这个方式,他所在的去做多步决策的这样的任务里面。他的学习的方式,他的环境的设定,主要是我们的这个我们把它叫做智能体,就是我们自己的要去做出决策的这一段程序,我们把它叫做智能体。这个智能体就像生物一样,它存在于一个环境中,如果我们下围棋的话,那么就是我们下棋的这个人就是我们的智能体,然后它存在的这个环境就是我们和要去交互的这个棋盘和我们的对手。我们在环境里面可以做出决策,可以选择我当前要走哪一步子,或者在游戏下面,我们要去控制我们现在每一步应该怎么往哪个地方动。然后在环境收到我们的决策以后,这个环境实际上会发生变化,当我们比如说我们这个棋盘会发生变化,或者是说我们这个游戏的状态会发生变化。那么我们会在环境中不断的去观测环境的状态的变化,然后来找到来做出下一步的决策。所以这样的一个决策的任务,我们叫做序列决策。 这样的序列决策的它背后的一个数学的模型,可以很简单的把它描述成一个马尔可夫决策过程。如果同学们只了解过马尔可夫过程的话,其实像决策过程,它其实就是在马尔可夫过程的技术上面,多了一个我们可以做决策的变量。在马尔可夫过程一个典型的一个马尔科夫的过程,就是说我们比如说天气的变化,这个是一个可以描述为一个马尔可夫过程。但如果现在我们有一些能够去控制这个天气变化的一些决策的量,比如说有一个有一种这种炮可以去轰掉天上的云,那么我现在要用还是不用,这就是我们可以决策的东西,我们可以进行的选择。有这样的一个选择以后,我们关注的是我们在每一个状态上面做了选择以后,我们能拿到什么样的一个长期的回报。那那对于这样的一个数学模型来说,在这个模型里面,如果这个模型我们全部都知道了,那么我们去求解最优的策略这件事情会变得非常的清晰。简单来说就是我们今天所看得到的像动态规划这样的一个算法,可以用在马尔可夫决策过程上面去一步一步的去迭代,帮我们去求解这个最优的策略应该是什么。在这个求解过程中,我们可以看得到的一个简单的一个方式,就是说这个策略迭代。 策略迭代,他要做的这个过程其实就是两步。第一步就是你扔给我一个策略,这个策略在我的这个马尔可夫决策过程上,他能拿到的长期的回报是多少?这个回报它的这个计算的式子,就像我们这个屏幕上所显示的这个V值或者是Q值的这种等式,进行不断的迭代。在这个式子上面,我们可以看得到,它上面有一个求和的符号。 实际上它表达的意思就是把整个马尔可夫过程的所有可能的路径,全部把它求一个期望。那么这个期望就包含了我们所有可能的路径的。但是在我们的真实的世界里面当我们想去知道一个策略做的好不好的时候,我们不会像数学模型这样把所有的路径这种信息全部收集到。我们只可能收集到一部分的信息。所以对于强化学习来说这个强化学习在工作的时候可能并不清楚我们的背后的这个完整的数学模型是什么样子的。 假设我们这里把这个多步决策的这个决策树的这个模型画一部分出来,每一步每一个状态上面都有很多动作可以进行选择。那么选择了一个动作以后,进入到下一个状态,也有很多动作进行选择。对于强化学习来说,我们没有办法看得到所有的可能的情况。我们只能通过和环境的一些交互,能够看得到的是一小部分我们交互得到的结果。所以这样的数据通常来说它的覆盖面是不可能完全的。我们只能找的找一些,特别是在一些具体的应用里面了,我们只能找一些不是那么危险的动作来进行执行,然后能看得到我们得到的结果是什么。 但是如果退回到我们做强化学习的这个目标上面来说,我们要找的是最优的决策。那么最优的决策和我历史上已经尝试过的这几个决策之间是一个什么样的关系呢?基本上可以说他们的关系就是我们一定要跳出原来我们已经看到过的数据,这样才有可能去找到更优的决策在什么地方。 所以强化学习要面临的是和我们以往做监督学习,做感知这种这一类的算法有很大的从根本上来说有很大的不同。这个不同就在于它的数据是没有独立同分布的假定的。也就是说我们希望找到的最优的策略,他所面对的数据和我们的可能历史上尝试过的这些决策,它所面对的它所产生的这个数据的分布是可以有很大的差距。另外一方面,如果我们看这个一步一步的往下走,那么往下走出来的这个数据,它前后也是关联的。因为我们后面的数据是在前面的行走的结果基础上产生的,所以前后上面来说,它也不是独立同分布的。所以对于强化学习来说,我们面临的整个学习的难度会大很多。 那么退回来,我们为什么会在游戏上面能够表现的比较好呢?能看到的强化学习的很多优秀的案例都是在游戏上面发生的?就是因为在游戏的环境下面,相当于提供了一这么一个完整的数学的模型,完整的马可夫决策过程。这个过程下面,我们就可以进行免费的试错。我们所有的代价,所有的开销,也就是计算的开销。 但是当我们想走出游戏环境的时候,我们真实的业务场景里面是没有这样的一个完整的模型的。所以可以说很多时候我们人类的知识想去去把这个业务场景搞清楚,搞明白。很多时候就是在构建这样一个马尔科夫决策的过程,是这么一个模型。所以面对这样的情况,我们就没有办法完全用是基于试错的方式,在真实的环境下面去使用。因为有很多决策可能带来的是灾难性的后果,一旦试到这样的决策以后,那么就没有办法挽回,我们的成本可能就太高。 那么以往的强化学习的算法,虽然这里已经列了是一个比较老的区块,已经是五年以前的这么一个,我们这边是随便找了一个这样的一个达摩DQN的一个经典的一个算法。那个时候,他可能是需要的是上亿次的和环境的交互,才能学到一个比较好的这样一个策略。今天哪怕是最好的一些算法,可能也是需要有上10万次的和环境的交互才能取得一个比较好的结果。所以基本上没有哪一个真实的场景是允许我们做这么大的试错。所以这里我们面对的一个强化学习落地的困难就在于我们的游戏场景和我们的真实场景之间有本质的不同。这个不同会使得我们今天的强化学习的算法是没有办法直接拿到真实的场景上面去用的。 没有办法去做试错的这样的学习,我们有什么样的一个学习的信息的来源呢?这个信息的来源上面,在真实的世界上面有可能存在的,在很多场景上面都可能存在的那就是我们历史上做过一些决策,这些决策可能是人设定的一些规则,或者是人直接上来做的这个决策。这个决策产生的一些数据我们是可以收集到的。当然这样的决策很多情况下它不是最优的,甚至是你最优,有很大的差距。下面的问题就是当我们只有这么一些数据的时候,我们能不能从数据上面去找到更好的决策。 第一个方向其实在国际的这个研究领域里面我们能看得到的。一开始是叫batch reinforcement learning,就是批量的。这个批量指的是我们的学习材料只有一批数据,现在叫offer enforcement能力比较多。这个offline就是离线,这个线指的就是游戏的环境,我们要离开游戏的环境要去做这个决策,所以这个是一个研究的领域,研究的方向。 这个方向下面,目前我们能看得到的比较多的,占主流的这个地位的算法,主要是基于值估计的这样的算法。那么所谓的值估计,那就基于像这个DQN或者是这个q learning的一些改进的方式。这个改进的一个主要的思想目前的这几个我们能看到的工作的主要的思想,就是我们不要让我们的这个值函数或者是我们的策略偏离我们的数据太多。我们希望他能够待在我们的数据的附近。因为我们的数据只有很少的一部分的覆盖,超出了这个数据的范围。这些工作认为可能是泛化的不太好的,我们不要离这个数据太远,这个是目前的一些看起来比较主流的一些方式,他的主要的想法。但是同时这样的一个想法也会使得实际上我们能获得的策略离我们的去收集数据的这个策略差别不会太大,因为它已经限制了我们去进行策略提升的这个范围。 这一方面,实际上最近出现了一些benchmark,这个benchmark之所以会出现,就是因为大家觉得这个方向首先是比较重要的,另外是比较难的,所以需要做一些辅助性的工作,比如说做一些分析mark来验证,来对比。那什么样的算法会比较好。但这些benchmark的建设,基本上还是基于游戏的这样的场景。基于游戏的场景,只是说不让我们在游戏里面来直接进行训练。而是说从历史上的一些在游戏里面去跑起来的这些策略产生的数据。然后能不能只从这样的数据上面来进行这个策略的训练。然后回到游戏环境里面去验证这样的数据,验证我们学到的策略。一方面我们能看得到的是目前的这些方法,目前在主流国际研究领域里面去对比的这些方法,看起来并没有特别大的一个提升。 同时我们可以看到是benchmark的设定也会有一些问题,有什么样的问题呢?比如说像这个DFRL这样的这样一个奔驰mark,他一方面他提供的数据是来是特别大量的,而且是有很多探索性的策略产生的数据。这种数据在我们真实的环境下面基本上是很难碰到的。因为我们真实的环境下面去收集策略的时候,也不太可能去做大量的探索性探索性的尝试。另外还有一些问题,包括我们在在把这个策略上线之前,实际上是没有办法能够去了解这个策略它现在的性能到底怎么样呢? 在以往的分析mark里面,他只是说我这个策略训练好以后,直接拿到游戏环境里面看一下他跑出来多少分。但是在真实的场景下面是不不可能是这样的,不可能是说我得到一个模型以后,这个模型我还不知道它的性能怎么样,我就上线去试试看。所以针对这么一些分析马克的不足,我们也做了一些新的分析。马出来,这个新的分析mark上面用的一部分也是游戏的环境。另外一部分是我们去寻找的别人做的这种更接近于工业场景的这种环境。采了一批数据出来,这里的一个一些修正就包括我们的对比的基线。在以往的bend mark里面,它会对比当时采样的这个策略。但在当时采样的策略加了其实加了很多扰动,我们在真实的环境里面去真的跑这个策略的时候,不会加扰动来跑的,所以应该对比的是像这种determent policy,所以我们可以看到,当这个背心态换掉以后,普遍的性能都发生了衰减。 另外我们还特别强调要做线下的验证,也就是说就像我们去做这种感知的模型一样。比如说人脸识别的模型,我们把这样的模型拿去线上跑之前,一定是要有个验证集,能告诉我这个性能好不好的。如果我们做不到这一步,那是不可能上线去试的。但是今天的这个强化学习的验证,还是离线强化学习的验证,也是直接拿到环境里面去试,所以我们这特别这边特别要强调在上线之前要能够知道我们的性能怎么样。所以这边也是我们开源的几个,我有点挡不住了,开源的几个包括offline enforcement learning的算法,包括这个offline policy evaluation的一些算法库和这个数据集,也是为了做这么一个benching mark来产生的。 那么这个benchmark也能够我们也能够看得到对于以往算法的评估的时候,存在一些在实际上很需要的地方。比如说如果我们需要去训练一个更好的,能够走得更远的一个策略的话,只有数据可能比较难做。那么我们想验证这个策略它的性能怎么样的话,只拿历史的数据来也非常的难做。所以我们的一个观点就是为了让我们能够把强化学习的试错的这种训练的方式能够把它发挥起来,能够让策略进行足够好的评估。 我们可能需要走的一条路径是去还原这个模型,去做model出来。这个model指的就是我们对环境的一个建模。我们现在能有的所有的信息就只有数据,所以如果说我们想要做model,而且在offline的这种条件下面,我们要做的事情就是从一些历史的数据上面把mode还原出来。如果我们能做到这一步,一方面我们可以从数据上能够使得我们学到的环境模型和我们真实的环境之间是有能打通的。我们做决策的效果在模拟在我们的环境model里面和在实际的这个环境里面,这个效果我们希望它是一样的。另外另外一侧,当我们有了环境model以后,我们今天就可以把所有的state of art的强化学习算法都可以把它运行起来。这样就提供了一个算法的学习的便利,同时也能够把控我们的真实的环境,做到这一步,我们觉得这个强化学习的技术就是可以是一个走出游戏环境的这么一个技术了。 但是学model这件事情,学环境模型这件事情,并不是今天才来想着来做。实际上整个强化学习里面的一大分支就model best enforcement in这个model base想去学这个模型这件事情已经做了很多年了,但到目前为止包括我们刚才在我们的奔驰mark里面测的几个算法,其实也有model base的这样的一个算法。我们能看得到的就是这些model贝斯的算法效果也不那么好啊。这里的主要的原因就是model的学习非常的困难。 这个model从数据里面进行学习的时候,其实我们主要关注的是这个环境的转移这一部分。我们的环境模型其实主要告诉我们的就是两方面。一方面是这个reward是什么,另外一方面是一个状态下面我们做了一个动作以后,它下面会走到哪一个状态去,reward这件事情相对来说是比较容易学的。因为他他和我们的这个数据上面的,和我们的这个决策的过程是没有符合的。我们来看,当我们这个状态在状态上面去选择策略,去做决策,这个时候这个状态是由上一个时刻的决策的结果来生成的。所以它是一个逐渐的符合的一个过程。这个过程会导致他的学习会很困难,但是对于review来说没有。 另外一方面就更实际的,这个原因就是因为在很多业务下面,reward是直接给出来的。所以并不要并不需要我们真正的去学习,所以我们这里需要学的主要的就是这个状态的转移转移函数,所以我们的环境模型里面主要关注的就是这个状态。我们做了一个决策以后他下面到哪个状态去了?这件事情我们可以看到,在我们收集到历史策略的一些数据的时候,很自然的就会想到。我们的输入输出在我们的历史数据上面都是有的。我们看到了哪一个状态,做了哪一个决策,下面转移到了哪一个状态。在这个历史数据上面都有一部分这样的数据。很自然的一个想法就是我们用监督学习的方式把这个数据当成是有标记的数据,因为他有输入有输出了,然后用监督学习的方式来把这个转移模型还原出来。 使用监督学习的方式来还原的话,就会有面临的一个已知的一个问题,就是会有compound error放大的问题。也就是说我们前面说的,我们每一步的决策,都是在我们的前一步的基础上面来继续往下做的。如果前一步有一定误差,那么后一后面这一步它的误差就可能会在把前一步的误差还积累起来进行进一步的放大。所以这件事情,我们把它起一个名字就是这个累计误差。所以累积误差这件事情,我们在这个理论上面,其实您可以看得到理论的一个结果。这个理论的结果就是当我们的模型有一定误差的时候,就是我们去通过监督学习的方式,把我们的这个转移模型他们之间有一定的误差,这个误差也是M同时我们还有另外一个量,这个量就是当时我们去采数据的决策。 策略模型。它对应的数据分布和现在我要评估的一个策略,它的分布之间的一个差异。有了这两个差异的刻画以后,我们在真实的一个世界上面去评估我们的策略。任何一个策略和我们在学到的环境模型里面去评估这么一个差这么一个策略得到的这个值的差异,就由这两项来把它放得住。 这两项里面,我们现在主要关注的是前面这一项,也就是和model error有关系的。那么这个IPO m是model error,但它前面有一个一键码平方分之一一减伽马是什么东西呢?是我们在这个环境模型里面,我们走出去多少步。如果伽马是0.99的话,它的有效的相当于走出去100步。如果我们走100步的话,我们可以看到这个地方它的系数就会有就会变成1万。所以1万倍的放大我们的模型的误差,那么就会使得我们的这个误差会变得很大。所以这个地方我们可以看得到我们的模型的误差在我们的模拟器里面,在我们的环境模型里面是被平方级的放大了。 那么有没有办法去克服这样的问题呢?很多年以来的这个研究得到的结果就是认为这样的一个compound error是很难去克服的。其中一个像这个euro 2019的一个工作这个工作也导致了目前的这个model best的for art这样的方式,这样的方法,他的一个想法就是我们就是认为我们的环境模型是没有办法很好去克服它的compound内容的。那么他的做法是什么呢?我就不要那么去相信我的环境模型,我不要在这里面走很多步,我就在这里面走K部很少的部署。得到的结果就是可以看到,当我们在环境模型里面不要走很长的步数,走K步的时候,它前面的系数变成了一减伽马分之一乘以K,所以这样就会使得我们的compound error的问题会得到一定的缓解。 但是我们这样的一个做法,就会使得我们的环境模型的优势没有能够充分的发挥出来。我们在环境模型里面只走几步,所以我不知道走了长远以后会发生什么事情。如果我们面临的是一个space reward的一个情景,我们要走了很长以后才知道结果是什么,那么这样的方式就很难去使用。所以我们想做的是尽量把环境模式给做好。那么有没有办法能够把这个事情给做好呢?其实在我们之前的这个工作里面,我的这个头像正好挡住我们这个同学的这个照片,这个工作是徐天同学和刘李子游同学我们来合作的。 然后我们首先对于以往的compound l怎么产生的,有这么一个分析的链条。从这个链条上面来看第一步是我们的策略的误差,然后我们要通过策略的这个误差要这个地方是对于它是一个union的一个问题,我们一开始我们可以认为就是一个model的误差,这个误差要还原到我们这个分布的误差上面。然后整个推理的链条,我们可以看到有两个地方出现了。一减伽马分之一,一个是啊这一步,一个是这一步。实际上我们如果可以从中间就开始推理起就开始做起,那么我们只要跳过第一步就可以取得意见,伽马就把这个平方给消掉。能不能做到这一步呢?新的理论上面如果我们去做直接做分布的匹配,那么我们就可以做到把把我们的compound error由平方级变成线性级。而且我们已经证明了线性级是logo绑的,也就是说没有办法进行进一步的降低。 好,那么这个目标是怎么来实现的呢?实际上这个时间有限,所以说你没有特别详细的讲,实际上这个目标的实现就是在做分布的匹配。分布的匹配这件事情在今天可以用像对抗生成这样的方式来实现。所以我如果当我们这里用对抗生存的方式来做分布的匹配的话,我们就可以得到一个compound l可以消减的一个方法。所以这个得到了一个新的一个方法。 那么这样的一个方法,其实并不是我们先把理论推出来,然后再得到的算法,而是我们回顾一下其实我们做这个方向的一个历史,在16年阿尔法狗把这个人工智能这个方向引爆了以后。很多公司也很关注强化学习的这样的一个算法能不能用。所以那个时候,我们和淘宝这边一个搜索的一个团队,就已经提出了这样的一个需求了。那就是我们直接在真实的环境里面去训练强化学习这条路是走不通的。所以一定要有一个offline data上面能不能把这个策略训练好啊。所以当我们考虑这个问题的时候实际上是已经是啊比较早的一个时期了。所以那个时候大家都认为,我们觉得没有办法,一定要学一个环境模型出来。但那个时候我们提交了这个pro project proposal以后,得到了这个评价,就是认为这个是unbelievable的chAllenge,所以很难做这件事情,但是我们的团队非常包容的让我们把这个事情给做完了。 然后这个事情做完了以后,我们下面又进一步在和滴滴出行这边进行了合作。然后把方法又进行了进一步的扩展。然后后面又在菜鸟的仓库的一个配送等任务上面,进一步验证了这样的一个技术。所以我们才发现了这样的一个技术,它是可以有一定的通用性的,而且是都是能够走出游戏的环节,在一部分数据的情况下面能够发挥作用。 今天我们也在构建一些做基于数据来做决策的这个平台,这里做一个演示。就是我们现在能做到的一个程度,就是一个不是那么好的一个策略,他可能去控制一个东西,然后我们收集到了数据,这个数据上面就是我们观测到什么样的变量,然后我们做到了什么样的一个,当时做的一个决策是什么样子的。然后有这样一个数据以后,我们就可以直接从这样的一个数据,通过一个我们正在构建的一个工具,把这个数据上传上来,然后把这个数据的维度描述出来。哪一个维度是干什么的,哪一个维度是观测,哪一个维度是决策,这个就是在对应这个数据的维度。然后我们把这个维度对应上以后,就可以去训练我们的这个环境的模型了,环境模型训练好了以后,我们就可以在环境模型里面去训练我们的策略,这个时候我们才会把我们的reward函数把它标明上去,这个时候我们会设定我们的reward的是什么,这一点其实对于应用来说非常的方便。 因为很多业务情况下面,大家想做什么样的目标是很不确定的,经常会变。但是如果我们训练我们的环境模型的时候,其实并不需要考虑。我们只需要在训练策决策之前,策略之前,能够把reword能够设定好就可以了。好,我们可以看到一次这样的一个迭代,可以将这么一个控制的机器人能够让他行走更长的距离。 如果我们把新得到的这个策略,得到的结果数据进一步的返回,还可以进行进一步的迭代。今天我们也是在基于这样的一个技术,在和很多不同的场景,不同的任务来进行合作。然后来从营销的任务,和这种智能制造的和能源的方面都在进行落地的尝试。我们也认为像强化分析这样的基础,你未来一定是一个word前景的这样的技术。好,我就汇报到这里,谢谢大家。
Podcast Editor
Podcast.json
Preview
Audio
