來源
各位线上的老师同学,还有各位朋友,大家晚上好。今天我们boss是特邀报告的形式,进行我们今天的webinar。今天我们非常有幸请到了南京大学的俞扬教授,来给我们带来数据驱动的强化学习及其工业应用。今天我们的web主要分成两个环节。首先第一个环节是大概1个小时左右的,请于洋老师给我们带来精彩的特邀报告。第二个环节就是我会在B站上去挑选一些比较有代表性的问题,进行一个简短的QA。好,我先把这个屏幕结束共享,然后请于老师共享一下屏幕。然后在这个时间我来介绍一下俞阳老师。 好的,我来介绍一下俞老师。于老师是南京大学人工智能学院的教授,主要从事机器学习强化学习的研究工作。入选国家万人计划青年拔尖人才计划AI turn to watch或CCFI triple e青年科学家奖,首届亚太数据挖掘青年成就奖,并受邀在国际人工智能联合大会依俊凯2018做青年亮点报告研究工作,获四项国际论文奖励和三项国际算法竞赛冠军。 好,下面我们就把时间交给于老师带来精彩的报告。非常感谢孟老师的话邀请,很高兴有这个机会。以往这些其实都是做了半个小时的报告,就是给了这么长的时间,能够向大家能够比较细致的汇报我们的工作,非常荣幸有这个机会。 那么我的方向是强化学习,强化学习这个方向,其实在以前的新闻上面,其实大家可以看得到,像这个围棋,这个里面都有强化学习的很重要的成分在里面发挥作用。其实关于强化学习,在像这个下棋上面的一些历史,可以追溯到很早的时候,早在1992年。其实机器那个时候机器学习的研究就开始,有大量的成分是和强化学习有关系的,因为强化学习的整个设定是非常是类似于人在环境中去学习的这样一个设定。那就是让这个A型的自己和环境打交道,然后能从中学会如何去获得一个高的奖励。像这样一个过程,其实是非常可以说是比较容易直接能够想到的一个学习的过程。也就是说模仿人的学习过程。 其实如果我们再早一点的话,其实在早在这个图灵当时对于机器是否能思考的论文里面,其实就能看得到他对于这种模拟人的学习过程的这个想法,就写在他的论文里面,他说的是啊与其我记得他的原文,与其去直接去设计一个具有智能的这种成年人的智能,不如设计一个有像小孩一样的能够学习的技能,然后让小孩自己在环境里面进行学习。所以这种想法其实是早就有了的。然后我们可以看到1992年的一个标志性的事件,就是在这个比较简单的家门这个游戏上面用比较经典的叫TD家门这样一个强化学习的算法,可以获得和人类的顶尖专家差不多的水平。但是当时由于算法特别是算力的局限,就只能在比较小的规模的游戏上面来发挥作用。那后面我相信我们的王老师的听众,都会对这个桥深度学习的发展比较熟悉。一个是关于网络的学习能力的发展,一个是关于我们配套的算力的发展。 到了2014年的时候,实际上是2014年的历史的workshop上面demand就提出了叫DQ network。其实把神经网络放在强化培训里面,是一个很多年之前就开始有了技术。但是在d man的推动下面,这个deep的这个叫法就会变得非常的流行。而且他们在做了这个deep q network以后,也是第一次把深度的神经网络,具体来说,它是一个卷积的神经网络,能够用在强化学习里面。达到的效果就是在塔瑞这个游戏上面,我们可以实现的是从游戏的屏幕的像素级的观测来学会怎么去打这个游戏。它的这个算法其实骨架是和经典的强化学习,叫做q learning的算法是一样的。里面加入了很多技巧,能够使得比较深的神经网络的训练变得稳定。 后面可能大家都比较清楚了,像2016年的阿尔法狗,这里面是最开始的版本,是用强化学习来学习训练这个后半部分的。到后面的阿尔法zero的时候,就越来越多的是强化学习的成分起了主导的作用。到了阿尔法2019年阿尔法师大,这个是在星际这个任务上面,能够取得比较好的接近于人类顶尖选手的水平,但是还没有超过。因为星际争霸这个游戏非常常的规模非常的庞大。 那么我们可以看到除了强化学习的发展,在这些在比较有新闻效应的例子上面除了他本身的能力正在增强以外其实我们还可以看到它的通用性也在变好啊。比如说像阿尔法zero是和阿尔法狗比起来,它除了了一下围棋以外,它还可以下其他的棋类。像到2020年的muz,又拓展了他在像阿塔瑞这样的游戏上面的能力。像这个agent 57,实际上这是第一次说把agent把atari上面57个游戏全部都超越了人类的一个baseline,但是这个人类的baseline也不代表他一定是最强的。人类的baseline就是一个比较比平均水平的,所以可以看到强化学习它是一个比较通用的一个框架,那么这个框架能够取得比人类要好的决策的能力,也能够具有通用性。 在不同的任务上面自己去获得,去学的怎么去解决问题。但是我们这一路下看下来,大部分的应用其实都是啊大部分的这种成功的案例,其实都是发生在游戏和围棋这样的情况下面的,这个是有它的原因的。如果我们来看这个阿尔法狗里面的结构的话,它的这个结构,其实这是一个以一个蒙特卡罗树搜索为它的一个主干的结构,其实强化学习本身的定义是基于任务的定义,就是我们要解决一个延时的多步决策的问题。这个是强化学习的领域。所以不管是竖还是神经网络,其实都是一样的,都是这一个领域里面的技术,所以像蒙特卡罗树搜索也是发表在机器学习的会议上面的。然后最早方案表在ECMS会议上面。 我们就以这个数搜索的过程中,我们来看,虽然我们说它是一个通用的算法,那么大家可能更关心的是它后面或者算法的设计。在这里其实是有一个先验的经验是要被编码。在这个数搜索的过程中这个先验的经验看起来非常的简单,所以很容易被忽略的那就是我们如果在一个棋盘上选择走一步棋以后,这个棋盘会变成什么样子,但是说这个很简单对吧,我们把这个棋盘上多录了一个子,那么这个棋盘要么就多一个字,要不然就是在吃掉了别的,但是实际上这个就是我们所说的叫做状态的转移。在围棋上面,这个事情非常的简单,容易被我们忽略。 在游戏上面,比如像星际争霸这样的游戏,实际上整个游戏引擎主要在做的事情,就是在算我的这个转移函数是什么样子的。在当前的状态下面我做了一个操控,那么它下面游戏会变成下面一个状态会变成什么样子。所以游戏和游戏外面的这个世界的一个巨大的区别就在于这个转移函数是已知的还是未知的。游戏就是已知的,我们甚至可以把这个规则,像下棋的时候,我们就可以把它写在这个搜索书里面,甚至就不当做它是我们的一个经验知识写进去,像这个更复杂的情况就没有办法直接往里面写了。像有像这个星际争霸的情况,我们就不可能写在这个数上面的。 但是我们在训练强化学习的时候,还是在游戏里面训练的时候,相当于我们把真实的场景就是放在计算机里面的。我们的所有的转移函数,我们想知道它是怎么转移的时候,我就立马可以算得出来。所以所谓的游戏的环境,其实我就是我们知道转移函数是啊我们自己构建的,我非常的清楚它的转移函数是怎么转移的。 我们为什么要清楚这件事情呢?就是因为我们在做整个强化学习训练的时候,虽然他的名字叫做学习,但是和他的另外一个同胞,就是监督学习训练的时候,有一个很大的不一样的地方就是其实就像刚才的阿尔法狗的这个树形结构一样,我们是要进行树搜索的,我们需要有大量的搜索在我的学习过程中发生。所以如果画出数出来了,就像这样一个这个是D麦的话的关于围棋的展开的这种树形结构。这是一个非常庞大的数,中间从当前这个状态到下一个状态是怎么产生的?这个中间需要我们用转移函数来计算。所以在这个上面我们虽然强化学习也是我们从数据中去更新我们的模型,但这个数据需要我们自身的agent去采集,自己把这个下棋把数据下出来。所以如果我们知道了转移函数,那么我们获取数据就变得非常的方便。所以我们可以等同的来说,知道了转移函数就知道了无穷多的数据。 所以在游戏这种情况下面,我们相当于是有无穷多的数据的那虽然没有可以没有人给的数据,但是在这个环境下面,我们自己可以去生成无穷多的数据出。但是真实的情况就不是这样的,真实的我们面对的业务情况,很少有这么一种业务,我能够非常清晰的,我们到现在为止几乎没有遇到过这样的情况。实际业务的发生过程中是指我们做了一个决策以后,下面会发生什么样的事情,能够非常清晰的刻画出来,几乎没有这样的情况。 所以我们怎么去解决一个实际的任务呢?以今天的强化学习的技术来看,虽然算法本身一直在朝着减少数据的需求量,减少我们去在环境中采样的数据的数量的这个方向,是啊一直在朝这个方向发展。但是依然是需要有大量的在数在我们环境里面去采样的。也就是说我们今天做的最好的强化学习的算法,也都是更聪明的进行了搜索。但是无论如何,这个搜索还是要清晰的。我们所谓的搜索也就是要在环境里面进行试错。我要试过很多的不同的参不同的决策以后,我才能找到最好的觉这个行走的路径,能找到我的这个目标,就做出最优的决策出来。所以如果我们想把强化学习跑起来的话,一种方案就是我们自己人工的去把这个模型仿真,把它做出来。 实际上有很多,特别是在工业应用里面,做仿真是一个非常普遍的一个事情,实际上我们在工业里面,工业控制领域,像metal lab这样的工具,其实里面最重要的一个工作。还不是说我拿my up当成一个编程语言来用是my tab里面的simul link这个功能,新闻link这个功能做的其实就是仿真,它有各种控制的仿真,有动力学的仿真,有很多很多的仿真放在里面。所以说如果make up是一个卡脖子的技术,其实不是主要卡在它的这个编程语言上面,这个语言完全可以被排成替代掉,主要是卡在它的CPU link的这个工具上面。所以在做大量的仿真的时候,我们的历史上的工这个工业工具就做了大量的对于仿真的支撑。 目前能够做的比较好的这个仿真我们能看得到说的非常准确的仿真,主要是关于流体动力学的这个方面的仿真,可以做的比较好。但是我们还面临大量的这个任务,我们可能没有那么现成的仿真,这个是第一第二,我们发现做仿真也是有很高成本的,我们几乎所有的工业仿真软件,都是啊不像机器学习的这个领域,有大量的算法。我们都是开源的,甚至现在模型也是免费可以下载的。工业仿真里面几乎没有哪一个仿真的模型是可以免费获得的。所以在工业场景里面,做仿真是一个已经是很常见的一个事情。如果我们有了一个准确的仿真,其实是可以用强化学习在仿真的环境里面去训练出来,我们怎么去做一个最优的一个决策,或者叫做最优的控制。最近的一个新闻这个也是do man的特别擅长于做这种新闻。 最近的那个新闻,也就是用强化学习来做这个等离子体的控制,这样有有有这样一个装置,是把这个等离子体通过磁力把它悬浮在空中,然后我们就可以又通过就像微波炉一样去加热这个等离子体。然后等当这个等离子体高到一定的程度的时候,它就会发生密度足够的大,温度足够的高的时候,它就会发生核聚变。发生聚变以后,它就会放出这个就会产能出来。所以这样一个装置也是最近我以我有限的知识而言,这样一个装置是一个最近各个国家正在进行核聚变放电实验的,这么一个比较主流的装置之一,这个托卡马克的装置。还有另外一个装置,就是叫做仿晶体装置。两个装置的其实原理差不多,主要都是通过磁力去把这个等离子体把它束缚在空中,然后进行加热。你是要加热到1亿度,那么它一亿度以上,它才会产生核聚变。 在这个工作里面,其实我们可以看到它整个流程,这个图形转换的流程的,它的第一步是设计了一个强化学习的一个算法。其实这个算法里面没有太多的新的东西。对于我们做强化学习的同学来说,他他看完这个以后就觉得比较说这一轮发没事。其实主要不是强化学习的方面,主要是在这个具体的应用方面。 B的这一块其实就是在做一个模拟器,所以它的强化题是运行在一个模拟器里面的。这个模拟器我们听说是做了三年的时间才能把这个模拟器做的比较比较保证。但是即使是比较保证的,我们来看这个D慢的在这个论文中自己给出来的这个总结。所以他说他自己的总结就是他要用了一个有足够的物理仿真度的模拟器,然后才能进行等于字体的束缚它的并且控制它的这个形状,以及足够便宜的计算的设备。然后他对这个工作能够取得这样的一个结果做了七个方面的总结。 这个文字比较多,我把它分了几个类别。灰色的这个类别就第三和第七条是关于我们要在物理的设备上去运行最终得到的这个策略网络的时候,要能够运行的快。所以这里有一个他们做的这个是关于物理的边缘设备,相当于是一个快速边缘设备的一个总结。那么绿色的这两条是关于强化学习的,所以它是需要一个高效的强化学习。并且他所谓的不对称的学习,意思就是我的策略网络要非常的小。以保证我最后在物理空间去设备上去执行的时候,效率非常的高,速度非常的快。 还有三条就是124,这三条是关于黄色的,这三条就是关于这个模拟器的。所以它第一它要有一个足够准确的,并且它在数值运算上是鲁棒的一个模拟器,这个是关于模拟器本身。其次他会发现如果这个模拟器非常的保真,保真度非常的高,通常这样的模拟器本身的运行也会非常的慢。所以他第二条讲的是需要在模拟的准确度和计算的复杂度之间要取得一个平衡。有在强化学习里面经常碰到这样的情况。比如说在强化学习群里面经常用的一个benchmark,就是某九口这个物理物理引擎,它的设计的初衷就是为了让物理的模拟既要准确,又要在不需要那么准确的地方能够足够的快,所以这个本身也是一个很难的一个问题。第四点他说的是我们需要在把这个条件,就是我们的初始条件要能够有足够的变化,使得我学出来的这个策略能够见过很多不同的情况,这个是为了它的方法性。 这里面其实还有一点是关于它的其中一个contribution之一,是关于他们会发现这样一个设计了三年的模拟器,都有很多地方是不准的。所以当他面对有很多地方不准的时候,他还要专门去避开那些不准的地方。所以这个是按照人在做这个测试的时候,会感觉到这个模拟器的不准的地方,并且要把它避开。所以我们看到了这个工作本身很有意义,它可以有更好的来控制这个等离子体在这个托卡马克装置里面的这个形状的控制方式。 但是这个里面的强化学习的整个的应用的流程,我们可以看得出来,这个是一个比较传统的流程。也就是说我们去人工去设计模拟器,最终用的效果的好坏几乎是由这个模拟器来决定的。所以这个模拟器设计的好,这最终就用的好。这模拟器设计的不好的话,就会产生不好的结果。所以我们看得到这个模拟器在整个强化学习,现在的这种应用里面,是有很重要的关键的环节。所以如果我们都是沿着这样一条道路来做的话,我们就会发现我们需要花大量的时间去设计模拟器,而且是需要有非常专业的人来做的一个事情。那么有没有其他的途径能够实现,就像游戏里面我们看到的强化学习的智能体,能够实现它的超越人类的决策。同时有通用性,它能够自己去解决很多问题,而不是需要人现在花大量的人力物力,花大量的成本去把这个模拟器设计好了,他才能解决问题。所以另外一条可能的途径,就是从数据上去学习。 从数据上去学习对于监督学习的或者是现在大量的深度学习的应用来说,是一个非常自然的事情,也是很很默认的事情。我就是从数据上来学的,但对强化学习来说,这个是一个非常新的一个议题。因为历史的数据,它一定是在历史的决策条件下收集的。那么当我们要去寻找新的决策,我们能不能找更好的决策,更优的控制的时候,我一定做的这个控制会和历史的数据是不一样。像监督学习,我们经常说这个经典条件的监督学习,就是未来和过去的数据是一样的。所以我拿到过去数据的标记,我就可以去通过这个数据的分布去预测未来。强化学习要做的事情,我要寻找更优的决策,我也肯定会和过去的数据不一样。这个放在机器学习里面,目前也是一个out of data dispute,也是一个比较火的一个话题。 所以如何从数据上来把强化学习训练出来?如果能做到这样一件事情,我们就觉得因为数据的获得性从各个领域来看都是比较好的,比模拟器的获得性要好很多。如果能做到这件事情,我们觉得它是强化学习能够进行广泛应用的一个关键的一个技术途径。 现在能看起来最近这几年有这么一个方向,特别关注于从数据上面来学习策略。这个方向叫做一开始叫做批量强化学习,叫batch reinforcement learning。这个batch指的是什么呢?指的是我有一个batch的数据,所以这个名字听起来比较奇怪,所以后面的大家都换成了另外一个名字,叫做offline reinforcement,那里叫离线强化学习。这个离线离的这个线呢指的其实就是在线的环境,游戏环境,所以这个离线意思就是走出游戏环境。 那么走出游戏环境,我们能有什么呢?就是过去的数据,过去玩游戏的数据,或者是度过去做决策,过去做控制的数据。在这些研究里面,他还是用这个环境来进行研究的。所以它是过去打游戏的,可能打的不是那么好的一个数据。然后希望从这个数据上渠道怎么去打游戏,然后在游戏的环境里面验证一下你这个模型渠道好不好,大概是都是这么一个奔驰mark。 现在的这个技术主要我们可以把它分成两个方向,一个是model free,一个是model based。这里的model指的是什么东西呢?不是我们的测不是我们的最终的神经网络模型,它指的是环境模型。所谓的model free的,就是我们需要直接从数据里面去得到策略。这样一类技术会和这个off policy,就是这种我们叫做E策略的强化学习算法。它是可以从过去的回放数据上面来更新我们的策略,但是这种这种所谓的off policy的强化学习算法,它本身并不能直接从过去的历史数据上一次性的能够学到一个好的策略出来。这是因为off policy的它的算法设计的初衷是为了更高效的利用数据,而不是直接从数据上得到一个策略。所以基本上已有的off policy的强化学习算法,是没有办法从数据上面能够得到一个很好的策略的。 但是主流的这个offline的强化学习算法是基于off policy,然后在数据上面来做。所以他做的一个主要的一个思想是保守性的策略,就conservative的一个去从数据中去学策略的一个方式。也就是说我们不仅要从数据中学,而且不能超出这个数据太多,所以就像右边这个图一样,我们如果知道有一部分数据在这个范围里面的话,那么我们可以用管理性的方式能够更新我们强化学习的这个策略。但是这个更新不能离现有的数据太远。这样的做法能够保证我们的策略,我们学到的结果不会非常的坏,也会有一些提升。但是很明显的你可以看得出,当我们不要要求他离这个数据不要太远的时候,那么我们的提升的范围也会非常的有限。 另外一类方式,就是这个model best的方式。所谓的model based就是我们希望从数据中先把我们的环境还原出来。换句话说就是我们从数据里面把模拟器给学出来。然后有了模拟器以后,我们后面的所有的做法就跟有了有了仿真,有了模拟器以后可以直接训练强化学习是一样的。所以这里的关键就是在于我们能不能从数据里面把模拟器给学出来。其实我们最近几年一直在这个方向在做,希望能够有效的从非常少的数据里面能够把模拟器给学生。 如果来回顾一下我们做的这个历史,其实很早的时候。我们是17年的时候就和淘宝的一个搜索的团队来找到我们。他们给我们的一个需求就是因为阿尔法够火了,很多互联网都希望来尝试一下这个新的技术,其实强化学并不是新的技术,只是说阿尔法过火了以后带进了大家的视野。然后希望再看看在业务上面能不能用强化学习来帮助我们取得更好的效果。 当时,我们去做这个尝试的时候就会发现,即使是在像这个。像淘宝这么有这么大的数据量的存在的情况下面我们想去训练强化学习都非常的困难。就是因为他做搜索推荐这个是没有模拟器的,甚至在那个时候还大家都并不认为搜索推荐是一个决策类的问题。直到我们18年把论文发了,并且是把放了好几篇论文了以后来阐述。其实像推荐搜索,它应该是一个决策类的问题,因为它会影响到我们的这个用户的认知,会产生很多关于用户心理行为心理学的这种现象出来。所以这个到后面,像19年、20年的时候,包括google的团队都开始对在这个推荐系统上面都开始做模拟器了,大家开始把推荐系统当成是一个决策系统来看待。 回到这个最开始的时候其实我们做了一些尝试以后就会发现,一开始我们在训练强化学习的时候,直接拿一小部分用户来真实的用户来和agent的交互来学。很快就发现了,即使是像推荐搜索这样成本不是特别高,风险不是特别大的这个领域,都会发生巨大的损失。所以我们就觉得那个时候就觉得强化学习想要真正的应用起来,没有一个模拟的环境,没有一个仿真的环境,是几乎是不可能真正的有一定能力。 所以,当时我们也提了一些proposal,说我们来做一个模拟器我们就把用户放到这个模拟器里面,把它模拟出来,当然用户的行为我们是没有办法写出一个规则出来的,所以我们需要去从数据上学出用户的行为出来。所以这里学的用户的行为,是非常细腻度的行为。比如说这个用户,我们可以给他展示一个商品,然后展示商品以后,他要看到这个商品是啊我就浏览就过去了,还是会点击一下,还是会购买一下。这个力度非常的细。而且我们希望是啊针对不同的用户,针对很细腻度的每个用户都进行还原。所以当时这个proposal是受到了很大的质疑的,认为要做这样环境的simulating environment of e commerce is unable able chAllenge。 这个是我们当时说到的这个comment,我们当然今天回过头来想,说到这样的comment,也我们也非常的骄傲,说明我们在做一个很困难的问题。后面也包括和跟团队发发表了后续的一系列的论文。里面有些工作也是做了一些权衡,比如说我们后面用的一些技术过于的复杂,可能是对于这个计算量的消耗也会非常的大,所以这里面有一些权衡的技术。 抛开这个不说,回到我们想做的这个事情,其实我们想做的事情是把从数据里面把环境,计算环境是什么东西呢?环境其实就是关于我当前一个状态。我你做了一个行动,做了一个决策以后,它下面变成什么状态。如果我们收集一批历史上我们去做决策,做控制的数据的时候,我们就会发现,在数据上面我们是看得到这个输入和输出的。我们可以看到状态零时刻的时候,因为我们收集到的数据它就是一个序列。所以我们看到状态临时刻的时候,这个状态是什么样子的。然后我们做了一个什么样的一个角色进去做了一个影响,然后下一个时刻这个状态变成什么了,就是因为有这么直接的一个数据的输入输出,看起来都在数据上。这么直接的一个对应的就会使得我们最直接的想法那就是用监督学习。 我们去学这个模型。也就是说我给你这样的输入,那么我希望你这个环境模型给的输出和我这个数据上给出来的输出要一样,这个就是最经典的一个想法。基于这样的想法能得到的结果是什么呢?如果我们的学到了这个转移的这样一个模型,它的误差是一个的话,那么我在模拟器里面和在真实的世界里面去评价同一个策略的时候,它会有一个误差。这个误差是和我们在模拟器里面走了多少步的平方有关系。 这个上面写的一减伽马平方分之一,这个一减伽马分之一其实就是走走了多少步。通常我们可以走100步,一千步,然后它的平方再乘上这个误差,所以我们经常会走到1000步以上了。所以1000步的平方再乘上这个误差,哪怕这个误差非常的小,0.0001,那么乘完以后我们都会发现这是个超出一的一个数字,这是一个非常大的一个误差。所以这个现象叫做compounding l叫做符合误差。就是因为我们是在做决策,我们每走一步都是站在我们前面的那一步的基础上再往后走的。所以它的误差在这个过程中会积累起来,而且是以您方的速度积累起来。所以一直以来我们可以看到这样一个结果,是2002年发表在某些能力上面,应该是第一次得出来这样的一个结果。所以我们可以看到它的误差是非常大的,哪怕是我们的这个我们这里写的这一是个繁华误差,繁华误差总是有的,所以它被乘上这个,那我们走的数量的平方就会是一个很巨大的一个数字。 2002年发现了这样一个证明的这样一个定理以后,这个定理叫做militating代码,就模拟盈利。有了这么一个结论以后,我们一直都会认为我们要去学这个模拟器是一个非常困难的事情,包括里面的大家一致公认的问题,他都没有解决,那么导致的现象是什么呢?后面就是大家不是这个是一个新的一个棒。其实说的意思是一样的。我们如果模拟器的误差是if的话,那么它会在这个里面是以平方乘以步数乘以在一种上面,那么它的这个误差就会非常的大。 那么产生的结果是什么呢?就是大家觉得不要去用这个模拟器,因为这个模拟器不是那么的准确。比如说像我这里举的例子是19年的lips的这个工作,他的这个工作带来的就是在很多model best上面是这个state of the art,都是沿着这个工作的思路来做的。所以他的思路就是我们不要用很多的模拟器,我们就在模拟器里面走个一两步、5三四步啊不要超出五步就好了。我们如果走长了,它最右边这个图可以看到,如果走到100步以上,那么我的这个轨迹很容易发散出去。所以当我只走小K步的时候,那么我的这个误差就会控制在小K,刚才平方变成了其中一个,就变成了一个小K,误差可以控制在这个范围里面,看起来就比较小。但是我们就会失去对于我在这个模拟器里面的这个效用,就会减少了很多。 有的时候我们需要在模拟器里面走很长,就是因为我们要做整体的评估,比如说像如果在托克马克装置里面要做这个控制,我们希望它是控制的越长越好。如果我们只是控制三步,然后用就把这个数据拿出来做一下数据的监管,其实我们不知道我们控制到后面到底会发生什么事情,只能是做实际的物理的验证,再去采更多的样本去了。这样的话,这个模拟器对我们的效率实际上是非常低的。 我们回过头来看,我们为什么会产生这种屏障的误差呢?在2 2020年的这个工作里面我们给出了一个比较系统性的一个证明的路径。从这个证明的路径上面,就是一步一步的从上面得到下面的这个结论。在这个中间我们可以看到做了好几次转化。其中有两次转化的时候,引入了我们这个长度。引入了这个长度以后,就会变成了平方。所以很自然的一个想法就是如果我们想去掉这个compound error,那我们就不能从他原来的最上面的监督学习的损失你往下走,我们只能从中间往下走。 中间说的是一个什么东西呢?说的是它的数据的分布。从右边的这个箭头指出来的,这个是数据的分布之间的误差,分布之间的差异如果足够小的话,那么下面就会得到它的这个我们的这个value gap会比较小。所以如果我们只直接看中间的这一块能不能做,我们发现是可以做的。实际上这个做的就是数据分布的匹配,而不是在每一个间每一个标记样本上面做这个标记样本的学习。所以数据分布的匹配放在这个深度学习的领域里面。 其实大家都知道现在做如果我们想匹配数据分布的话,其中一个比较顺手的一个工具,因为你比较流行的工具就是对抗生成网络。只不过这里我们要去做的数据分布的匹配,匹配的不是这种标记数据。我们匹配的是真实世界收集的过去的控制的数据,和我们在模拟器里面一直控制下去产生出来这个数据。希望这两个数据的分布要能够匹配的上,所以我们把监督学习的目标改成了分布匹配的目标。这个修改在我们图像的这个里面其实从理论上它它的这个区别没有体现的那么非常的巨大。但是在强化学习这个里面我当我们去学这个模型的时候,这个上面就会有巨大的区别。主要的区别就在于我们的compound error的平方消失了,而且这个平方消失以后的这个界是达到了它的理论的下界的,所以不能再进一步的进行优化,所以这个是我们把它的compound err这个问题给消除了。 除了compound l one以外首先关于这个分布的匹配,我们可以看到,这个地方虽然我们同样写的是一批这么一个变量。但是稍微了解一些的同学可以知道的是我把两个分布匹配到一个一批龙和我把监督学习的老师做到一种他需要的难度,看上去好像是不同的,确实是不同的。如果我们直接做这种对抗生成的话,如果我们要做分布的匹配,我们需要的样本复杂度是更高的。所以有最新的一个工作就是我们已经放到up上面。这个工作是把需要做这种分布匹配的一部分的区域和不需要分布匹配,可以直接用监督的区域把它分开了。得到的结果就是我们可以用相同的样本复杂度的情况下面,我们能达到把compound error给消除掉。所以这样的一个理论就会使得我们认为把一个模型学出来,并且在这个模型里面走很多步这件事情觉得是可行的。所以我们就一直在沿着这个方向在做。 那么这个问题,compounding l这个问题只是目前的这个领域里面,认为我们去学模拟器,去学这个环境模型所面临的一个主要问题。其实,它只是问题之一。在我们后面的更多的实践里面,我们发现了更多的问题。 比如说我这里做一个非常简单的一个toy example,来阐述这个问题是长什么样的。左边这个图我们可以看到这个是一个状态,要转移到下一个状态。那么在S这个状态上面,我们会做一个决策,就是A然后S和A一起决定,我们下面会转移到这个SEP是什么样子的。我们用个非常简单的例子,就是这个S一撇,我把它这个转移关系这个方程直接写出来,S1撇等于S加A然后这个A是什么呢?A是负的,这个0.1乘以S那就是一维的。好,如果我们S从一开始,那么我们首先执行的这个决策是-0.1,然后得到了S1撇是0.9,这个就是我们中间收集的这三步数据,这个就是我们执行下去的三步数据,这个数据上面,你说我们把用监督学习来学这个等于函数,实际上做的事情就是把前面的S和A当成输入,当成X把后面的最后这个S一撇当成是我的label,那么我这边是输入,这个是输出,来学一个映射。好,如果我们我们知道中间的这个函数写出来就是一个线性的方程,对吧? 那么我们能用一个线性回归,我们来看看线性回归能不能学到这些,能不能把这个方程给学好。得到的结果是什么呢?得到的结果是我们下面列举了三个,我直接从这个软件上面截下来这个线性回归的结果,这个就是我卡上面直接做信息回归,然后左左中右三幅图是不同的。 他的这个正则系数给他的结果,我们可以看到的,得到的结果是什么呢?是我们的这个S一撇,下面就是SS它和A的关系之间是负的A而且是一个很大的一个负数,它和我们上面给出来的这个方程是不一样的。我们上面给出来的方程是S一撇等于S加A,S和S是一撇和A之间是一个正相关的一个关系。那么下面学出来的,你不管用什么样的正则系,数学出来的都是啊这个A前面的系数是负的。所以为什么会出现这个现象呢?其实我们看到这个数据和compound ever没有关系,和我们前面讲的那个compounding符合误差还没有任何的关系。因为我们只走了3万步。 然后我们学到的一个模型,我们可以看到最左边的,因为我们的正则系数选择比较小,可以看到最左边它的error是0,它的全年err是0,完全拟合到数据上面。所以看到完全拟合到数据上面,但是拟合的结果是错的。这样的一个错的结果就会导致什么呢?我们这里做的是一个模拟器,也就是说如果他来做预测的话,他往下走预测是对的。但是我们这里作为一个模拟器的话,我们下面要做的事情去寻找更好的A这个时候我们就会发现A的关系是完全倒过来的,那么我们寻找的optimal的A就一定是错的。 为什么会产生这样的一个事情呢?主要的原因是因为我们当时在采样的时候,我们最左边看从S到A这个过程,我们用的虚线的话。为什么用虚线的话呢?如果这是一个图模型的话,那么S和A之间是独立的,应该是独立的。但是因为我们要去做采样,所以我们在采样的时候就导致了S和AEC是不独立的。而且这个采样就是过去历史上做的决策,在很多应用里面在历史上做的决策是一个确定性的一个策略来做的,也就是说我们肯定是找到某一个比较好的一个,比如说我做一个比较好的推荐或者比较好的控制,去做了这个动作出来。就会导致我左边做采样的时候,它会是一个确定性的一个采样的策略。 什么样的情况才会使得,大家肯定觉得这个呃,我之前给很多同学讲的时候,大家觉得这个地方有点想有有点难受。因为我觉得这么简单的一个东西,然后用线性回归回归出来,它的结果居然是不对的。什么样的情况下他他才会回归队呢?就是使A这个动作和我们的这个状态两个之间呈现一个独立的关系的时候,他才会呈现的对那么如何独立呢?就是这里我们采样的时候加入大量的扰动,加入大量的随机。可以看到最右边,当我们的加了这个随机的量足够大的时候,才会回归的对。但是这个随机也就意味着我们要在环境里面做大量的试错,这个在很多时候是不可行的那你说我们一定要去做一个负相关的一个采样的策略,这个A一定要是和这个S前面是一个负号在很多情况下都都是这样的。 我们在做控制的时候,离目标越近,我的这个控制量就会越小。所以它会和我们的目标之间会成为一个负相关。右边这个图是在某一个实际的数据上面,这个还不是控制,这个是做激励,给这个人做激励的时候的一个数据激励也是一样的。当表现比较差的时候,我们会给比较多的激励。这种数据拿下来,如果直接做监督学习来学的话,那么很容易学到一个结果,就是你的激励越多,他表现越差。 这个里面的因果关系是错乱的,但是如果我们发现如果我们用这个分布匹配,我们会发现分布匹配得出来的结果是对的。也就是说如果直接用金融学习,这个上面是一个真实的一个数据,黄色的是真实的,它的这个函数。如果我们用监督学习得到了这个点,在零这个点上面,也就是说在数据的这个点上面它是对的,监督学习的误差是很小的这两个小曲线是重合的。但是你一旦超过原来的数据的点,那么它就会它的方向都错掉了。所以我们如果要用学到的这条函数来找它的最大点的话,那么监督学习学出来这个模拟器得到的结果就是完全错掉。但是如果用分布匹配的方法,我们发现它的结果是对的。这个是一个我们正在投稿的一个工作,我们会发现用分布匹配的方法,它会一定程度上会等价于一个反事实风险最小化。这个就是在实际上在做因果推理的,所以他能够把他的因果结构能够考虑进去。 所以除了前面说的compound error这个大家共识的问题以外,我们发现还有好多问题是还没有被认知到的。也会影响我们传统的方法,用的全传统监督学习的方法,用在这个学习模型上面的一个问题。所以我们还后面还做了很多事情,包括我们把这样的一个技术路线把它走下去。我们现在做了一些工具,能够希望能够更快的更方便的去实现从数据上来学模型这件事情。所以我们现在建立的整个技术路径,就是从数据上的一些有限的数据上去还原我们的这个虚拟的或者叫模拟器或者虚拟环境。然后用强化学习的在模拟环境里面来求解,来得到它的这个结果。在这个上面的每一个环节里面,其实都介绍了很都做了很多工作,希望以后也是有机会能够向大家汇报里面的每一个具体的工作。 做一个演示就是如果我们有的东西控制的还不是很好,但这个时候我们可以收集到他的数据了。然后我们要做的事情用这个工具的话,我们要做的事情就是把这个数据匹配到我们的这个图上面。我们用上面的这些这幅图来表示说我们对他的一个时间片的控制是什么样子的然后我们把哪些是观测,哪些是角色把它匹配上去,然后我们就会得到一个虚拟的环境。然后在这个虚拟的环境里面训练,就会能够得到一个更好的一个策略出来。 这样我们就可以从数据上来获得一个更好的一个策略,更好的一个决策,或者是更好的一个控制。这里有一个简单的演示,就是把在我们这个系统里面的这个工具里面我们可以把数据上传上来,然后把数据对上去,我们就可以做这个环境的学习了。我们最近刚结束了一个比赛,这个比赛也是我们希望来看一看我们做的这个工具,如果大家来用起来的话感觉如何,所以这个是一个用了一个促销的一个数据,给很多用户做促销。但是现在要做平等的促销,是不能对用户有任何歧视的。我们历史上有一些个性化的促销的数据,怎么去做一个平等的这样的一个决策出来,在这个上面,我们也反复的对一个工具进行了一些修改。 其实最关键的一个地方当我们应用在不同的业务里面的时候,关最关键的一个地方,和业务相关的一个地方,就是我们怎么去把数据对到我们现在做的这个模拟的里面的流程上面来。像是这个是比赛上面的一个图,我们可能会对我们的业务场景有不同的认知。比如说我这个发券是直接发给是直接导致了用户的变化,呢?还是里面会有一个用户的模型,导致了用户的变化,这个是我们对业务场景的具体的认知。有了这个认知以后,我们就可以把数据导进去。这里面的每一个模块其实都是一个神经网络,然后他就会把这个模型学出来。然后我们用在一些工业场景的里面的时候,我们已经像这样的一个几十个节点的学习都已经变成可行的了。所以下面我想简单介绍一下,我们把这样的一个,我们也是很多小伙伴把这样的一个工具去运用在工业控制里面。 首先我想讲的是我对工业控制其实并不懂,因为我也不是学控制出身的,然后对于很多工业的场景也是一窍不通。那么我们来做这个问题的时候,你这里有一个例子,就是左边是一个现有的叫做PID控制器去控制的一个一个场景里面的产生的一部分数据,有2万部的数据。然后这个数据就是我们所有的数据,从左边这个数据里面,我们要去学出一个模拟器出来。然后在这个模拟器里面,我们要去学要去用强化学习去学会如何做最优的控制。在这个任务上面,是比较简单的一个任务,就是我要把温度控制在520度这个X轴上,我这个Y轴上越稳越好啊。 那么在工业控制使用之前,他会做一个拉片测试。然后我们就发现这个拉片测试其实就是在考验我们这个测试控制模型它的泛化能力怎么样。左边我们可收到的一个数据,它上下浮动的时候,只有十度的温度的浮动。但是后面做拉片测试的时候,是上下会有60度的浮动。但是我们也可以看得出来,这个蓝色就是我们学到的强化学习,学到的控制策略在这个拉片测试上的表现。所以当大幅的拉开的时候,他还是能够表现的非常的稳定。所以我们在工业的场景下面是希望用这样的技术能够产生一生产力,能够将能够把我们的生产力进行提升。下面就几个案例。 第一个案例是应用在是汽车的控制上面。简单的来说,就是如果我们开过这个混动的车的时候,所以他我们这个车里面是有一部分是要是可以燃油,有一部分可以给燃电。那么什么时候去用油,什么时候去用电,它有一个模式切换。如何控制这个模式,使得我们的这个排放是能够降低的。那个油耗能够降低,这个是一个关心的一个问题。所以这个上面中间的这么多连线,实际上是把汽车里面的内部的结构,把不同的模块把它标了出来。我们把历史上对于车的里面的它这个模式切换的数据把它灌进去,把里面的每一个模块,这个神经网络就会整体一下把它学出来。 那么我们学成什么样子的呢?我们可以看到在这个上面,我们会对比它的电池的消耗,这上面每一幅图都有两条曲线,一条是真实的曲线,一条是我们模拟器里面产生的曲线。这个是1800秒里面产生的,这两条曲线几乎是能够重叠在一起的,以及它的一些里面的发动机的一些控制。我们可以看到这个是模拟器里面产生的数据和这个真实数据的对比。然后我们在模拟器里面优化了油耗。我们可以看到这个能产生的结果,能比原来的策略的油耗能够提升,能够有比较显著的一个油耗的下降,这个是在汽车里面的这个混动控制上面。 我们还得出了一个还得出了一些经验性的东西,比如说这个到底是怎么去哪一部分烧油,哪一部分烧电,我们从因为有我们有虚拟的这个车的模型,所以我们在这个模型里面就可以总结出经验出来。而且在这个问题上面,一定是说我们把1800秒全部跑完,1800步全部跑完以后,我们才能够知道它的整体的性能怎么样。所以这个对模拟器的要求是很高的。只要你只能有一个足够准确的一个模拟器以后,才能做到这么长距离的一个推断。另外我们还这个是几个一个电厂里面的控制,说老实话,这个电厂我是从来都没有接触过的,然后这个里面是原来是怎么做的控制? 其实我是也是完全不知道,但是我们拿到的是它历史控制的数据,像这个案例,它是在其中的一个点上面,就是控制它的温器的这个温。这个蒸汽的一个温度的一个过热器的一个控制点。在这个点上面,我原来是用PID控制的。在右边可以看到这个绿色就是PID控制的这个效果,右边的红色的这个线呢是强化学习控制出来的效果,所以可以看到它的这个控制的更稳定。像从上面的分布上面来看也更集中在我们的控制目标上。这个是我们完全从数据上去学到了这个控制的方法。然后说传统我们要建一些什么模型,是做一些设计,去列一些方程,这个都在我们的过程中都不需要。所以在这个点上面就已经可以做到节能。 然后这个是另外一个点,这个是一个它里面的一个水泵的一个电厂里面一个水泵的一个控制,它叫循环水的一个水泵控制。在这个水泵控制里面,也是非常会涉及到它的能耗。然后我们也是通过历史的一些控制的数据,右边这个蓝色的就是历史的控制数据,然后我们进行它的这个水泵的优化。 我们可以看到的是,仅这么一个点的优化,可以节省这一个机组的430吨煤,我们还用在了其他的一些地方,这个是电厂的。他把煤粉吹到这个煤炉里面的时候这个叫做一个会会用一个风把它吹进去。这个风如果温度太高了,那么这个煤粉在进入燃烧的炉膛之前,就会开始燃烧了,那么这个就会损耗煤。如果风温度太低的话它又会导致你进去的会降低炉膛的温度,那么也会带来比较大的能耗的开销。所以在这个地方是要做一个比较准确的控制。但是对于风的温度,风的流量,这种流体的本身的感知就是很不稳定的,没有办法能够做到一个很准确的一个监控。而且它是一个长常反馈的,就是在最左边,我们在吹这个风到最右边的时候,他才会进这个炉,所以这个是非常滞后非常大的一个任务。所以在这个上面我们都发现我们可以做到比传统的控制要好很多,所以我们讲控制,我来讲控制的话,就没有办法讲到这个控制里面的一些机理上面。 因为其实我们在做的时候,那就是看数据,数据放进来,然后我们得到一个结果,所以这个机理我们也不是很清楚。但是从我们的应用上面进行总结,就是我们这样的一个数据驱动的方法比原来的知识启动。也就是说我们自己人工去构建一个模拟器的话,能够它的效率会快很多。因为数据来了,我很快一个星期的时间就可以把这个模拟器做好,这个策略求出来。如果我要去人工大模拟器的话,会很长的时间。并且由于我们的虚拟的环境,能够很好的在虚拟环境里面走到全场。 所以在上线之前,我们就能够知道我这个控制的策略,它的性能是怎么样的。而且一上线检查基本上差不多。所以我们对于控制系统要上线的是一个很重要的一个一个能力。因为如果控制不好会产生很大的问题。所以在上线之前你的性能到底怎么样,要给一个稳定的一个评估出来。我的这个介绍就到这个地方。 其中对于这个应用的场景,其实我们了解的其实不是特别的深入。因为我毕竟不是干这一行的,我们能看到的结果就是我们去去做了这么一个策略产生的效果,然后我们可以用在各种不同的控制点上面。这种各种不同的控制点,以往它是要分别进行设计的,现在我们可以看到一定的通用性,最后,像最近国内也有很多托卡马克装置开始上线了,开始在做了。我们也在寻求一些合作,我们也是希望能够在能源上面做出一些贡献。好,谢谢大家。 好的,我们感谢于老师精彩的报告。然后如果线上的老师和同学有问题的话,可以在B站上这个弹幕进行提问。好,首先我先请教于老师的问题。因为我不做这个强化学习,所以是一个比较初级的一个小白的问题。因为刚才您提到这个模拟器和learn from data,对吧?这是其实是一个两种解决的方案或者两种途径。是不是可以理解成模拟器是一种更直接的强化学习的一种基础,那有没有根本造不出来模拟器的这种场景,就是倒逼我们必须要learn from data。 我们最开始在这种互联网的应用场景下面,在和很多用户在打交道了。包括在这个做配送的时候,在这种仓库里面做这种规这种这种分担然后向客户打交道,像这个工人打交道的时候,像这种场景里面,如果我们要做一个模拟器的话,都会把人这个因素包含在里面。所以对于人有人存在的这个场景,其实刚才在做这个驾驶的时候,在车上驾驶的时候,它里面其实也是有人在里面的,是有个司机在开这个车,这种场景如果我们靠写规则的话,我觉得是很难去把它写出来的。这一类的问题就是包含有人的行为在里面的问题。 另外一类就是非常明白复杂的这个系统。比如说像车这种系统的,他如果做一个发动机它可以做的很准确,他如果做一个变速箱也可以做的很准确。但是他把所有的这些东西拼在一起,变成一个大的系统的时候,他就会发现有一点误差。一个部件的一点误差会在其他部件里面被放大。所以这种比较复杂的系统的时候,也很难去构建模拟器。 其他的情况,我们还接触到包括比如说化学反应,比如说电池的这种放电。如果是有化学反应的式子的话,是实际上是个理想的试纸,所以所有的化学生化反应都是在理想的这种条件下进行的。但是实际的条件比如说这个电池的它实际上是两个固体,然后接有一个接触面,实际的反应会很理想的反应很不一样。所以很多这种情况,我们都会发现,从数据里面来进行学习是啊非常有必要的。 明白,好的,我还有个问题,因为于老师在很多的工业应用上,已经有非常成功的成强化学学习的应用了。刚才一开始也提到,就是最近谷歌也在nation上?相继发表了以强化学习为技术核心的这样的一些大的工作。所以可能于老师能不能根据您的这个经验来给我们指导一下。比如说怎么样去在nature上或者是在这种子刊都进行一个相应的一个突破。这个我也没有经验,我也只是看像丢曼的他们经常做这个。 我我我说一下我的感受,第一他对于这个问题的把握是比较好的,他一定是找一个大问题。这个对于我们来说也是希望去学习的一个方向。因为回过头来看,如果是把一个很小的问题解决的非常的好,那么它的整体的contribution来说它还是这个小问题的contribution。如果把一个很大的问题,像这个可控核聚变,实际上他做的并不是他并没有做到去真正的去放电,真正的去产生电能,他并没有把这个可能和预变这个问题给解决了,但是他只是在这个装置上面进行了一些控制,那么带来的影响也非常的大,所以我的一个感觉就是关于你这一项研究的本身的价值。很多层这个问题本身决定了他的上限。然后我们在这里面你不管是解决一个小的问题,解决一个大的问题,可能是我们付出的这个劳动可能差不多,但是大的问题它可能带来的这个上限会很高,那么得到的收益也会很高。所以这个是可能是我们需要学习的一些地方。好的,好,谢谢于老师。 然后我们看这个弹幕上有一个问题,这位朋友问学数据就是学习数据分布吗?学了数据分布就可以不学模拟器了吗?可能我没有讲清楚,我们是通过分布匹配的方式,就是我们希望模拟器里面我们学出来的这个模拟器。什么叫做学好了呢? 就他们的分布,它在里面产生的数据的分布和我们历史上看到的这个数据的分布要一致。这种情况下面,我们就认为这个模拟器就学好了。如果它足够的一致,那么他就会消除前面说到的符合误差的问题。那么在这种有需要有因果处理的这种上面也会起到作用。 好的,应该回答的很清楚了。好,那我们看还有没有其他的问题。然后这位朋友就是有个追问,就是说和过去的数据分布一致,但还是依赖于采样效果是吗?对,说我们还是需要有一部分从实际的场景里面采样的数据才能做这件事情。 所以我们也在讨论的是,比如说我们如果完全没有数据能不能做?那完全没有数据,我们现在又做了一些探索。比如说我们有一个人造的模拟器的,这个模拟器是很不准的,那么怎么办?或者是说我有一些相似的其他的领域的其他领域的一些数据,那么我能不能让这个策略,我渠道的这个策略能够迁移到我的这个目标领域里面来。所以这个也是可以尝试的路线,并且迁移这件事情是在强化学习里面是非常有效的。 好的,我看那个问题基本上差不多了。那今天李老师给我们深入浅出的带来了强化学习的一些背景知识,包括一些核心的一些技术上的一些进展,还有比较精彩的工业应用。我们今天再次感谢于洋老师带来的精彩分享。好,我们今天的外面就到此结束。好,各位再见。
Podcast Editor
Podcast.json
預覽
音頻
