Sources

望可以看得到强化学习。可以看到它强化信息的,他可能在游戏里面是比较多的。其实这本身也是一种应用,我们知道现在有很多游戏里面是有啊人来陪玩的,有有机器来陪人玩的。所以像这种基本上现在的游戏的厂家,腾讯、网易,还有我像我知道的其他的莉莉丝的,他们都在尝试在使用强化学习在游戏的场景里面去生成一些陪人玩的这一类的AI。但是培训网站和我可能和我们看到的在市面上看到的这些和人对打的,能够打过人的这种还不太一样。我们以往看到的这些能够战胜人类的的标志性的成果,主要展示的是强化学习它的本身的能力。所以在我们看到了消防学习的能力以后,当然我们怎么去把这些能力发挥起来,去创造出让人类具有更多的价值,能让我们的使用者能够体会到更多的价值。这一点其实可能是我们这次举办这个比赛的一个初衷。 很多人都会关心的是强化学习的算法。其实我们觉得算法它肯定是一个基础。但是要能让一个领域能够比较有正反馈的能够发展起来的话,那么这个领域里面的技术能够具体的落到具体的应用上面去,能在应用中发挥出价值,这个是很重要的一步。说到强化学习算法,我相信大家之前也有一些了解,所以我在这里是不会介绍强化学习的算法的。所以我们就认为强化学习是可以解决这一类任务的。 你这个任务是怎么样的一个任务呢?它叫做序列决策任务。我们的序列决策任务就是我们要在一个环境中不断的和环境打交道,然后从这个打交道的过程中能够去学会一个好的策略。什么叫做好呢?就是这个策略他能够收到的回报,要尽可能的把这个回报也不是当下就能够看到的回报,而是整体,我长期和我的环境交互了以后,我看到了一个总体的汇报,这个汇报要尽可能的大。所以这个任务,就是强化学习的这个任务的框架。 在这个框架下面,我们其实可以对应很多的事情。其实我们当年比较愿意去做强化培训这样一个有方向。也就是因为强化学习的这个框架,我们觉得很吸引人,哪怕那个时候的话已经没有被怎么应用起来,我们也觉得这样的框架非常的吸引人。吸引人在什么地方呢?其实其中一个点就是它能够体现我们的智能的主自主性。 也就是说他不是通过人来给他很多标记,也不是通过人来告诉我们的机器看到一个什么东西,你应该输出一个什么东西,这些都不是人给的。而是我们的智能体自主的在环境里面去探索、去发现、去学习。它看起来就跟我们的生物,跟我们自己一样,我们在环境里面和环境去打交道,然后能够希望能够很快的能够学到这些东西。 所以当我们去应用强化学习去解决问题的时候,我们面临的问题也是类似的。我们肯定是一个智能体存在于一个环境中,或者是原来不是那么智能的,但是我们希望它变成一个智能的这么一个智能体,不存在于一个环境中或者环境去打交道,那是不是这个交道道的过程,就跟我这个图上画的一样,我们从一个状态出发,在这个状态下面我们寻找一个策略。这个策略要在这个状态下面去做出决策,这个红色的这个动作就是我们做出的决策。然后这个决策需要去执行,需要去实施,去真的去把这个动作去执行的下去,而不仅仅是我们做一个预测。执行了以后,我们在环境中可能会关系到一些变化。下面就进入了一个新的状态,这个就是我们抽象的来说,强化分析它所面临的任务,他所解决的任务就是这个续。是不是所有的宣言决策任务都可以用现在的强化学习的算法来解决的? 其实我们也看到了,在当下有一些不是那么好解决的任务,当我们的输入,当我们的状态是一个特别高维的。比如说我用视觉的观测,我用图像的输入来作为我们的状态输入的时候这个时候其实是可以做的。但是他有一个条件,就是我们需要大量的数据,能够把我们深度的网络能够训练好。这个是我们的一个运营的一个条件,如果能满足这个条件的话,那么是可以用的。比如说在游戏场景下面,在前面另外所展示的在的这个环,我们可以通过上亿次的采样,可以学会从pixel级的这个输入来理解我们当前的状态,所以我们就可以做这个事情。但是是不是在任意的环境下面,我们都有足够的数据,都能够采集足够的数据去处理这个视觉的输入,这个要看我们具体的情况。 另外还有一个,是我们做的这个决策。这个决策我们是其实因为当我们自己去定义这个智能体的时候,我们的决策的力度是我们自己是可控的。比如说我我们我之前其实接触过一个项目的,他想做的是人机交互人机对话。这个对话就是完全是自然语言的对话。在这个上面我们我们首先要考虑是自然语言的对话,它是不是一个决策问题的?它天生就是一个决策问题,因为它是一个持续的。然后如果我的这个动作,我的决策就是我的说出来的这个话的,就是我们我们要说的这个话,那么它就是一个序列的不断去说话。然后我希望我要达到某一个目的,这个可以用回报来衡量。我说了话以后,别人听到这个话以后他会有反应,那么这里就会形成一个状态。所以我不停的观测状态,不停的去说话,但是当我们真正去处理这个应用问题的时候,说话的这个力度就会需要考虑了。 说我是用一个单词出来,我甚至可以力度小到我去,如果他是中文的话,是每一个字作为我的一个输出一个决策,还是每个词都已经决策,还是我要更高的层级一点。我决策的是我现在要和一个用户,我现在如果是一个人的客服系统用户来了以后,那么我要决策的是他是询问的是哪一个类别的,他是他在讲的这个话属于哪一个类别。实际上我们可以定出很多不同的行动的层面。 我们一开始那个时候还没有像全像今天的这些比较通用的模型,像全是泡沫这样的东西,我们一开始就是希望。看我们能不能直接到悼词的这个层面,就是我们强化学习,直接输出单词出来和人来对话。我们就会发现这个特别难做,因为他的动作空间,如果我们是词的话,这个动作空间会非常的巨大,这个工作空间可能到要到上万维,而且他的每一个动作其实是有明确的语义的。在那个时候,我们去提取这个还没有像这个比较好的预训练模型,没有帮我们去提取这个词的语义,所以而且这个场景会非常的开放。 什么叫场景非常的开放呢?对用户他在提问的时候,他会问什么东西。因为他自然语言问出来他会问什么东西,我们完全没有办法预先假定,预先限定它的范围。而且这个自然语言的表达里面能力其实是特别强的。比如说我就见到这个数据上的游戏,一个他是一个司机,司机问这个客服说我今天在大兴我的优惠券为什么没有起作用?那么就这这就意味着我们客服人员需要有这样的一个常识,就大象是一个哪个地方的一个地名,所以首先需要有场景,我们的这个司机会继续问。 我本来客户打一个车,比如说是100块钱,他用了一个8.5折的券,给了多少钱?我应该拿到多少钱?但是我没有拿到,其实我少了五块钱,请问这个到底是怎么回事?所以他还要能做一个简单的计算,所以自然语言的这个范围其实是特别的宽。而且它的每一个客服的服务它不像那种我生成一个我生成一段文字。这段文字大家看了以后觉得看起来还不错,但是其实没有什么具体的需求。我如果要和那个司机来打交道的话,我要非常准确的回答他,是因为他断错了,是因为我们有其他的这个优惠券这个发送发发送方式,我要非常准确的没有告诉他这个答案,所以在这种任务上面就会变得特别的困难。我觉得我们现在的技术,可能他没有办法能够解决这么开放的人物。 但是如果我们能够限制到我们的决策空间不是那么的大,我们的状态空间也不是特别的到位的话,那么这样的任务在今天可能已经可以解决了。当我们去应用强化学习在一个具体的问题上面的时候我理解的一个应用流程大概是这个样子。第一我们要去理解人,要去理解这个业务,这个业务它到底是干什么,以及这个业务这么干以后它有什么价值,这个是到目前为止只能去做这件事情。我现在没有见过任何的机器能够去做这件事情。所以这个也是我们的可能是比赛的选手们主要可能需要关注的地方。 就我在什么样的业务下面,这个业务有什么样的一个有价值的问题。这个问题我们需要用强化学习来解决的话,我们就会往下走。往下走是什么呢?我们可能需要一个仿真模拟。我们都知道,之前我们看到的论文里面,或者是强化学习的所有的环境,我们去训练这个策略的时候,都会需要有一个仿真模拟的环境去训练,比如说像我们常用的最常用的,现在论文里面出现的最多的就是open I的基本的环节。他用了一个物理学的一个仿真的一个引擎,去构建了这么一个环境,然后在这个环境下面做了很多任务出来,然后我们就可以在这个环境里面去训练强化学习。所以我看到在群里面,其实也有同学在问。 我们以往在讲的这个强化学习的时候,主要是讲了后面的一个算法。但是这个最好要跑,你肯定得有一个环境。那么这个环境怎么去搭呢?其实这个是我们在做应用的时候通常会面临的一个核心的问题。如果如果我们能搭一个和我们的真实的环境非常接近的一个仿真的环境的话,那么我们就有可能接下来训练出来的这个策略就可以去拿去用了。所以其实在应用的时候,最关键的一步,我们认为是仿真模拟的这一步是最关键的。然后当我们有了一个仿真模拟以后,后面就是去进行策略的求解这一个强化学习所做的事情,最后求解出来以后就是部署去应用。我们在进行问题分析,进行这个建模的时候,其实是需要我们的分歧的人员能够了解我们在后续的环节上面有什么样的能力,我们能求解什么样的问题,能做出什么样的仿真。 在前面我们去建模这个任务的时候,建模的问题的时候,就需要对应的进行建模。所以我们可以看到的,像这个自动控制里面了,它其实有一些MPC,有一种叫model predictive control这么一种方法。这种方法它也是有一个model,就是这个呃仿真的模型。然后在这个model里面,我要往前走走几步。然后通过看往前看几步的最优的这个策略,然后我把第一步拿去系统里面去运行。这个是在很多比如说化工的这种场景下面会用的一个技术。所以在这个技术里面,我们常常会看到这么一个情况,就他后面往后走几步,需要有一个优化器去进行优化。大家常用的优化器,可能是一些线性或者是凸优化的一些优化,就意味着我们只能把我们的模型和我和我们的这个策略把它建模成一个线性,最多到二次的这么一个模型。 如果我们就只能做这样一个事情的话,那么前面当我们做这个问题建模的时候,我们必须把这个问题建模成一个二次。这个是对于传统的MPC和我们看到的MPC的应用。所以当我们现在了解到强化学习,其实它并不要求我们的这个模型是有二次的或者是一个什么样的具体的一个形式。它其实能解很多不同的形态的问题,是比较通用的那其实我的第一页给大家展示了一个A点的57,就是地脉的的一个强化学习的算法。在57个讨论的问题上面都能够求得一个比人好的一个策略,就说明强化学习它可以比较好的去适应这种非线性的系统,有高度复杂性的这种系统。所以这个时候我们对前面问题进行分析的时候,我们的空间就会更大,所以这个时候压力给到那些人员,我们需要有更好的想象力,去把我们的问题进行一个建模,这个是强化整个应用流程。所以我们现在现在可以看到其实仿真其实是很重要的一步。 下面我先举两个近期的例子,要强化数据的应用的领域,一个就是这个d mind给出来的这个奥克马克装置的控制问题,托克马克装置是一个核聚变装置,当然他这个文章并没有去解决,并没有去完全解决这个核聚变的这个问题。他只是说我这个装置里面,他现在有一个要求,有一个需求,就是要把我们可以看到下面这个黄色的这一圈,这个实际上就是等离子体。他把一个钙元素害的这个CTTP出来以后,还是哪一个我还记得。他把这个元素,这个物质放到这个里面去以后,他要加把它加热到一度。然后这个时候它会变一块,它会变成这个电子和它的剩余的部分就会分开。这个时候我们要操控磁场,要把它约束在这个范围里面,让它悬浮在空中地坪加热,加热到1亿度以上,这个时候他才开始很多区别。在这个工作里面,其实我们可以看到它实际上是有一个模拟器的,而且这个模拟器是这个工作的核心机遇。对。 所以但是在这个过程中,在加热的过程中,据我所了解的,他这个等离子体在一定的温度上面,或者是应该来说它是发生了一些聚变反应了以后,它会有一个突变,那么会最后会使得它的这个控制会变得非常的复杂,就很难把这个等离子体长时间的约束在那个地方不动。这个是我了解到的一些困难,当然可能还有别的困难所以他们的这个研究就是要用强化学习去做这个控制问题。我们来看一下丁曼的总结。所以他的总结是说,他对他这个工作的其中成功的。 这个总结说的是他们使用了一个具有高的物理保真度的这么一个模拟器,并且你光搞高保真还不行,还要能够算的快。因为有的高保真,我了解的有的高保真,为了它的这个仿真的知名度足够的高,它甚至比一个物理的设备运行的还要慢,因为它计算的东西太多了,可能比物理的还要慢。但是强化学习的在训练的过程中,是需要有反复的迭代,大量的试图。所以你如果你模拟器跑的很慢的话,他就没有办法能够产生大量的数据出来了。所以这个是啊他们总结的需要有一个记忆,反正都要高又要跑得快的一个模拟器。 他们做这个模拟器做了很长时间,他对更多的就总结,他分成七条,七条我总结了三个方面。我们可以看到黄色的这个124,这个是关于模拟器,第一条就我们是要有的塑形乳房的模拟器,足够精确。第二条老符号配置还不行,它要它的计算复杂度还要有一个平衡。第四条其实是我简单介绍一下,第四条是什么意思呢?就是说我在这个模拟器里面要足够的扰动,我要把很多不同的情况都见过。 其实这一条还可以再广泛一点,就是说我们当这个模拟器做了足够的抖动了以后,其实我们训练出来的这个策略是可以跨出模拟器的。比如说我这个模拟器,如果他那个维度不真实,我们可以对我们可以产生多个模拟器,在不真实的维度上面去扰动它,这样我们才创造出多个不同的模拟器。在不同的模拟器上我去练同一个策略,只要这个策略是带着有历史记忆的,比如说你挂了一个RN上去,那么它是可以去识别它是处于哪一个模型,哪一个模拟器里面,然后去适应到这个模拟器上面。所以这样的就我们叫做原策略美好管理去,这种原策略你可以拿到真实的环境里面去,它同样会识别真实的环境。当然前提条件是真实环境的那个差异是被你刻画出来。所以这个是关于模拟器的。 然后我们看到灰色的两条了,三和七是关于我们的这个硬件。因为我这个策略最后做完了以后,你要他要非常高频的去执行,所以他要放到这个硬件上面去执行。然后放到硬件上面去执行的这个策略,通常不能太大太复杂。如果你这个模型太大了,然后你就需要有一个很大的一个设备去运行,然后这样他们的反应也会很慢。所以他在这里,在这个工作里面,专门做了一件这个绿色的那个部分,我们再把它再做,所以他需要这个hardware specific的一个东西,所以他要放到这个硬件上面对这个都是我们通常去和硬件进行沟通的时候,我们要落在硬件上面的时候,要做一些。我稍微换一个地方,就稍微有点。 然后绿色的部分,其实你看第五条和第六条,绿色的部分才是关于强化学习算法。其实他这个强化学习算法没有做太多的事情,那就是一个传统的算法。但是他做了一个调整,什么样的调整呢?就是它的它是一个act created的网络。这个可能大家之前已经了解到了,我们所说的actor就是我们的控制的网络。Critic是在actor学习的过程中,对于我们的值的5G可能是个Q值,可能是个V值,可能是个A值,它是一个5G的一个函数。 最终我们在运行这个策略的时候,只会跑X的网络,我会去跑那个critic网络的,所以其实我们也只是要求他来网络要比较小,这样的保险比较快,但是奎体的网络可能比较大,这个是它这里面特别强调的它的一个创新点。但它是一个不对称的一个一个一个结构,它一个小的X网络和一个大的一个critical。所以他最后就是在模拟器里面训练的,而且他这个模拟器比较保证度比较高。 抱歉,我要显示这个电要没有了,我得找个插座所以上面这个工作就是我们可以看到,他花了很多时间去设计这个模拟器。这个模拟器哪怕他花了很多时间,他其实还有还是有这个不是很真实的地方。对对对,这个工作里面还专门加了一些惩罚。去惩罚这个策略,不要去跑到那些模拟器不真实的地方去。然后最后他这个系统应该是拿到一个物理物理设备上面去做一些实验,然后能看到它确实是可以控制这个物理系统的,这个是第一个也是比较出名的他的一个出名的主要是在于这个啊,这个问题本身很重要,就是如果这个核聚变能够做成,那这个是会改变人类的文明历程。所以这个我问题非常的重要,但是他这里面还有很多很多难关需要解决。第二个例子就是,所以我们在上面这个例子里面,可以看到这个模拟器很重要。但是设计模拟器需要花费大量的精力,很高的成本才能把一个模拟器用的好。 我想讲的第二个例子是这个animal这个机器人,大家可能都知道,就博盛adamic那个四组的机群非常的漂亮。那个博士的四族的机器,我记得应该是在我还是研究生的时候,就已经出来了。然后那个时候出来以后非常的震撼,让很多很多人觉得这个差距非常的大。但是其实ocean gaming s的那个视觉机器,它是基于比较统一的这种这种方程去进行求解的,所以他的动作还是总的来说还是比较机械的一个动作。那么有没有可能我们可以用强化学习去让机器像动物一样去学会走路,这个就是anymore这个机器人是说明是理工他们做的这个机械,他们在这个上面,就是用强化学习来学习他的这个走路。大概是这样,就是因为它有很多细节有很多细节的设计,所以这个设计的它最终跑起来也是有大量的工程在里面。但他这里面的一个关键就在于,他其实觉得那个模拟器他是学不准,他他做出来模拟器是不准的,那么他做了一个不准的模拟器以后,他下面怎么去处理这件事情,其实他这里就用了一个,他先把这个模拟信息的结构打好,然后他有一些很多东西不清楚,比如说重量,他的腿,腿的长度,这些东这些地方是不清楚的。 他为了把这个模拟器能够把它做的很准确,他不是在做手工的调整,而是,就像这个图一样,它第一个是有一个整体的一个模型,但是它里面有很多地方是不确定的。第二个第二块就是实际去跑的数据,就你有一个车,有一个策略,你哪怕是人工的也好,你遥控器操作也好,你让他跑一些数据出来,然后你用这个数据加上在这个模拟器上面去训练这个模拟器。所谓的训练模拟器,其实它也就是训练一个神经网络。只不过这个神经网络的控制,它里面的一些参数,比如说它扭矩,还有它的一些这些参数都可以用我们从数据上把它写出来。这个时候,因为我们的机器人是在实验室里面,有在我们自己的手上,所以我们可以采集各种各样的机器人的运动的数据。然后再从这个数据上面就可以当这个数据足够充分的时候,我们就可以把这个机器它的这个运动的函数给逼近出来。这个逼近其实和我们前面其实和我们讲到的这个我们前面会讲到这个决策任务的过程。毕竟其实主要逼近的就是中间这个环境。也就是说我在一个状态下面做了一个决策以后,下面跑到哪个状态去了。所以只有中间的这个环境的转移的这个部分,是需要我们去学的,实际上他就做了这么一件事情。 然后这个时候学好了以后,他就有了一个模拟器。而且这个模拟器是经过真实的数据的校准的,所以这个模拟器是比较逼真的。它下面就是在这个模拟器里面去训练机器人的走行走,他们这个工作其实发了两篇sense of parties,一个是19年的一月,这个是第一次,那我们把这个工作发出来。 另外一个是应该是20年的年底还是21年的年初,第二个工作主要是让他去在一个基于第一个工作的基础上,让他去在一个复杂的有复杂环境的模拟器里面去训练他怎么去通过的一些复杂的场景。所以总的来说,他还是我们把模拟器做好了,那么我们就可以把强化水滴训练出来。这个模拟器要做好,这个地方展示的是我们可以收集足够多的数据去把这个模拟器把它训练的。所以我们可以看到这两个工作是为数不多的几个。 我们看到强化学习能够用应用在物理世界里面的这个案例。当然在游戏世界里面会有很多,这个我觉得应该都不需要讲了。如果是在物理世界里面的话,这两个是比较公开的两个我们能看到的案例。所以一个是手工设计的很长时间的模拟器,一个是部分的手工做的模拟器。然后在此基础上来收集大量的数据来学它的这个运动的模型。 所以我们如果再往下考虑的话所以我们在建设做的事情主要就是做的是从数据上去把这个模拟器学出来。能不能做到这件事情?如果能做到这件事情的话,那么我们可以看到基本上可以解决强化学习区域应用中的这个以往被遗漏的一个环节。所以这个事情如果做好了,那么我们去落地强化学习的这个过程就会变成如图的这样的一个过程。 我们在一个实际的世界里面的应用场景里面去收集数据。用这个数据我们来把我们的虚拟的环境把它学出来。然后再在我们的虚拟环境里面,就是我们的仿真模拟里面,能够把强化学习训练起来,得到我们的策略。这个过程,其实我们做了在强在南京线上里面,就是做了关于怎么从数据进行模拟的一套工具。这个在B站上面最近也放了几个视频上去有在做教学。这个工具是啊可以开放来使用的,然后我这里也不花时间来介绍这么一个工具,我大概展示一下这个工具它能够做到的事情。如果我们用这个工具来进行开发的话,我们面临的这个过程大概就是这么一个过程。 首先是收集数据,这个数据其实就是我们前面所说的序列决策过程中的数据。你哪怕是人去做的一个行动,还是人写了一个规则去做了一个行动。那么过去我们是怎么做决策的,以及这个决策做了以后会有什么样的影响。这个就是我们的历史数据。然后基于这样的数据,我们会做一个我们会把我们这个系统,我们面对的这个决策的系统,把它描述出来。 为什么会有这么一个描述呢?就是因为我们很有可能会碰到比简单的做状态转移到更复杂的一个环境。这个环境里面可能有很多模块的,才最终形成了它的转移。所以我们如果把这个模块有哪些个每一个模块的依存关系把它描述出来。但是我们并不需要去管每一个模块里面到底是什么,到底是怎么进行转移的。我们会从数据上把它转移,把它取出来,然后下面就是交给SDK去把这个转移给学出来。然后就得到了我们的模拟仿真的环境。 在仿真环境里面,我们设定好我们自己的reward,我们设定好目标,这个要干些什么事情,然后就可以去训练我们的策略,这个策略训练完了就可以拿去用了。这个就是整个应用的一个过程,所以这个过程看起来,其实主要花精力的地方在哪呢?依然是说我们先要在我们的场景下面,我们的业务场景下面,要找到一个什么样的一个业务问题,它是有价值的。然后这个业务问题如果正好是一个强化学习的问题的话,我们就按照这种方式可以来解决。我把历史的一些数据收集起来,然后我把这个业务的流程描述出来,然后把这个数据导进去,它就可以去训练这个模型的。 这里有一个例子,就是我们现在有很多混动的汽车在市面上卖。其实混动的汽车里面所谓的混动就是它有电池有一个电池,电池有多大,有多小,这是它不同的混动模式不一样。有的是有一个比较小的一个电池,然后有这个汽油的发动机,然后这个发动机,可能还有好几个。比如说这个电机,我们这个图上写的电机是有两个,然后这个汽油发动机有一个,然后电机是去是通过电机去驱动我们的轮子。然后这个发动机,汽油发动机,它产生的输出可以输在我们的轮子上面,也可以给我们的电池充电,这是它内部的一个结构。 然后我们看到的一个需求是什么呢?我们拿到这个需求是,我们需要有一个模式的选择。就是在一个具体的时间,具体的速度,具体的这个场景下面,我要选择我到底是用电还是用油,还是用电和油的某一种混合模式,它有串联模式,有并联模式,所以这个需要我们的每一秒去决策,我们当前时刻应该用什么样的一个模式,所以我们会发现,首先这是一个强化学习的问题。因为我在每一秒我需要根据当前的状态去决定我是什么模型。我这个模式的选择的不同,也会影响到我下面这个观测到的状态会是什么,我下面观察到的状态,我包括我的电量都会有可能会发生,根据我的模式不同会发生不同的变化。所以它是一个序列决策,序列的这个现象很明显,就是我每一秒都是去做一个决策,所以这是个序列决策的一个问题。对于这样的问题如果我们能够把这个混动的控制,能够把它做的比较优化,那么它的这个汽车的整个排放就会降低。这个是车厂所愿意看到的事情,他希望做一个排放低的一个车段,所以这个是对他来说的价值。 然后我们来开始来做这个问题的时候,首先我们要把这个问题的模型要把它做出来。所谓的模型首先这个是我们右图上,这个就是我们画出来的这个汽车内部的模块。那么发动机的输出有可能会输到哪个地方去,有可能会直接决定我们的油耗,最右下角的这一个油耗,也会输到其他的电机里面去。电机的输出会做到会改变我们的电池的电量的,这会导致电池电量的变化。然后我们的这个里面,会有些其他的汽车里面的一些部件,它会导致我们的速度的变化。所以整个的这这个里面的结构完全是根据车里面的结构来进行搭建的。所以这个结构的搭建是需要有业务背景的知识的。当我们需要当我们有这样的知识的时候,我们可以把把他的关系把它搭建好。 搭建好了以后我们就可以去采集,用历史上采集过的数据。历史上可能是有某一种混动控制的模式。我们用这种模式来运行起来以后,我们的每一秒的这个观测状态是什么样子的?它的排放是什么样的?它油耗是什么样子,电量是什么样子的。我每一秒的观测数据我都记录下来,然后每一秒的模式的控制我们都记录下来,这个就是我们的所谓的历史数据了。然后我们就用这样的历史数据来把我们右边的这个模型,这里面每一个模块训练。 这样我们就得到了一个虚拟的一个汽车,这个虚拟的过程就是由我们的SDK来完成的,所以就一直把数据交给他他可以把这里面每一个模块全部训练出来。好,那么训练好了以后,我们可以看一下,这个是其中的BC来训练的。BC这个算法就是用监督学习来训练的,这个训练的效果并不是很好,所以用另外一种方法,就是revive的这种算法来训练,它的训练的效果会比较好。 我们可以看到这个上面是啊多组实验的结果,我们这个在多组实验上面可以看到有不少实验。我们的在我们的仿真模拟里面,在我们学到这个环境里面,他跑掉的数据,把历史的这个控制策略重放以后的跑掉的数据和我们真实的数据是贴的很紧的。那么我们评估完他的是贴的很紧的,和我们的数据比较像。这个只是我们评估的一种,可以说是我们评估的第一步。 还有后面的另外的评估,这个其实在那个视频里面有讲,就是我们怎么去评估我们学到的这个仿真模拟环境会和我们的真实环境会比较接近。主要的原理两个方面,第一方面我们要和我们的历史数据要比较接近。如果我们和历史数据都不接近的话,那这个模型肯定是不太准。但是如果只是和历史数据接近的话,我们这个模型也不一定有用。那是因为我们要去优化我们的策略的时候,我们肯定会和历史数据不一样。所以我们是希望我们的模型能够支撑我们去做其他的决策,去评估其他的决策做的好不好。所以他一定会离开我们历史上的那个数据。第二个原则就是希望我们的模型有泛化能力。这个泛化能力不是那么好评估的,一种评估方式就是在验证数据上面来跑我们的这个来回放,看我们的这个模型在我们的验证数据上面是不是足够的准。 这个还是在数据上面,我们会第三步会拿验证数据来再选一个环境出来。这个时候我有训练和验证两个环节。然后我会拿训练环境里面训练出来的策略,拿到验证环境里面去做验证。这样来看我们的两个环境的稳定性是不是足够高。如果我们的稳定性足够高了,那就说明我们既可以拟合数据又比较稳定。那么这样的一个模型它就具有办法能力,所以当我们把通过历史的数据把我们的模型学好了以后,我们就可以在我们的模型里面去优化我们的控制策略。比如说这里我们这个红色的是老的曲线,就是它历史上数据上面给我们的一个控制策略所表现的曲线。 上面这个是变量,下面这个是油耗。然后我们可以训练我们的策略,就是每一步我到底用什么样的混混动控制的一个策略。这个就是你强化学习可以直接上,但他这里有一个约束,这个有实际问题,给了更多的约束。他要求的是我起点的电量和终点要差不多。我们得把这个约束放在强化学习的过程中,要让强化学习能够满足这个约束。因为你不能把电耗光了,耗光肯定是啊排放最少的,它比的是在电量不变的情况下面,谁的排放更少。所以这个电量在过程中可以用作缓冲,但是你得把它充回去。好,我们可以看到右边可以是通过real shipping是可以做的对,比如说也是其中一个比较好的一个方式。我们就可以在我们的模拟的车上面去训练我们的这个控制的策略。 然后蓝线就是我们训练出来的一个其中一个结果,可以看到它和我们原来的这个红色的一个线的表现的不一样。从第二张图上面可以看到,它经常会比红色的线要更低,所以它的油耗就会更低了。从上面这张图上来看,它大概是更多的去在过程中去消耗掉它的这个电,然后在有的时候把它补回来。然后后面这一段,其实我这里没放它的运动的速度,后面这一段是比较高速的,所以它基本上会在比较低速的时候把电消耗掉,高速的时候把它充回来,这样它的整个的油耗就会减少。对这样一次在模拟器里面去运行的这个策略,在实际测试的时候大概能减少两个百分点的友好。 并且因为我们有了模型,有了这个虚拟的环境,他能做很多有意思的事情。比如说他能解释我们的策略什么地方选择和原来不一样,这个是速度曲线,这个速度曲线是不一定死了的,就你必须开到这个速度,开到这个速度的情况下面,我们来看你的油耗,所以老的策略和新的策略这个速度曲线是一样的。但是,在不同的速度曲线上面,我们选择的模式是不一样的。比如说这个啊红色这一块,它就实际上是在靠电池。但是在我们新的策略里面,当他速度提升到60以上的时候,他都是在充电,所以这样它用高速来充电,更好的去利用高速充电,低速来充电。所以这个是我们可以对我们的决策到底干了什么事情来进行一个解释,所以我们也看到这个所谓的解释,它也不是说有一个统一的一种做比如说这个深度学习做解释可解释性,解释性的这个场景和业务是相关的,他得和业务他的解释给业务的人听,所以他一定要用业务的语言来解释。所以我们认为是不存在一个统一的这种一种可解释模型,在不同的场景下面解释是不一样的。 好,前面这个是做一个车的节目,第二个应用其实就结构上来说就比较简单了,它可以做一个用户的建模,我大概先描述一下他做的是什么事情,这个是我们和滴滴去合作的一个案例,具体有合作什么事情呢?就是我们给给司机要发一个奖励,但是我们发什么样的奖励比较好的,就是发什么样的奖励司机的这个主动性能够更高的。这个是是关于关关系到这个奖励如何去设置的这个问题。然后首先他是不是个决策的问题呢?它肯定是个决策的问题,因为我们设置奖励不一样,我们司机的积极性肯定是会受到影响的,所以这种就是决策的问题,我们做出来的决策会影响这个世界。 第二,他是不是个虚拟的决策呢?他在每一天的时候都会去投放一个奖励。我每天开始的时候,我会告诉这个司机今天有一个什么样的奖励,你你可以自己选择要不要去完成这样的一个任务,完成了就会有奖励,所以每一天都会去做决策,所以它这个是一个序列决策。他决策完了以后,他还会去看啊你这一天下来心机的表现是什么样子的这是我们的状态。那么这个就是我们的任务了,我们这个任务它的目标是什么呢?是让我这个小地方这个是结果结果有两列,一列是完单的数量,就是是不是有更多的订单被完成的。 这一列关系到的是打车用户的体验,如果有更多的订单完成的话,那大家的订单待的时间就会少。第二列是这个司机的收入,这个司机的收入会增加,当完单更多的时候,实际的收入肯定会增加。我们就希望用这个奖励来优化这两件事情,所以我们的做法其实和上一个案例是一样的,只不过我们这里是对人来建模,但是对人来建模我们就没有办法去深入到人里面有哪些模块,所以我们把人就当成是整个一个模块。所以我就没有画前面的一个模块图,因为它就没有拆解,这就是状态。然后我们一个完单奖的一个基地以后,然后到了第二天的状态,中间没有做任何的拆解。如果我们理解,比如说我是做假设,如果我是做心理学的,或者是做这个神经脑神经科学等等。如果我知道这个东西该怎么拆解,拆解成人对这个东西的感觉会分成几个模块那更好。如果我们不知道的话,我们就把它当成是整个一个整体,第二天做了一个整体的转移,所以就是这么一个模型。 然后我们历史上收集的就是历史上对这个用户的激励的决策和我们说到的这个状态这么一个激励状态。激励状态就只有这么一个序列的数据。我们用这个数据还是用刚才的方法一样的,我们可以把状态是怎么转移的把它学出来。这个学科其实学的就是用户的行为是怎么变化的。 我们比如说我们给的这个用户有一发放一个优惠券,一个激励券。这个用户他这个司机他今天表现的就是他完成了更多的单,或者是他接单的时长变得更短了,或者是他有一些行为上面的一些刻画。这个都是对于司机的建模,所以这个司机的这个维度,它会发生一些变化。这个就是我们所学到的这个用户模型,是对人的一个建模。然后有了人的这个模型以后,我们下面就可以去优化人的这个模型,去优化对于用这个人的模型来优化我们的这个策略。 这里这个图上右边这几个图显示的是什么呢?就是不同的算法,因为这个当时做的是一个学术的研究,不同的算法在这个问题上面,它产生的这个模拟器和我们真实的数据的分布之间的差异。我们可以看到后面的这个算法,它的差异会更小。 其实我们今天前面介绍的这个revive工具包,前面这些科研工作产生的成果都会都积到这个工具包里面去。所以我们今天可以把这个模型学的更好。产生的结果就是我们在几个城市进行了实际的测试,实际的投放。根据AB测试出来的结果,它订单大概增加了11%,有10%以上,实际的收入也随之增加,所以这个是对用户进行建模,是对这个是在美团里面,我们也做了相似的事情,也是对人进行了建模。然后我们要看这个给什么样的价格让大家的这个反应体验会更好,然后我们希望不要用花太多的钱,能够把这个体验能够优化的更好。所以我们模型上面是一样的,因为它是一个人是一个有人的状态,只不过状态描述可能会不一样,人的状态到第二天会发生变化,所以我们看到这种这个图上也可以看到,这边是监督学习的,这边是我们现在的这种建模的方式,能够更加的去匹配到我们真实的这个数据的分布。 下面三个城市,实际这里有个竖线,数的这个线呢就是我们去投放的那一天前面是两个区域,然后我们可以一直在对比那两个区域,然后投放在蓝色的这个曲线的区域上面。然后绿色的这个曲线的区域是作为这个对比用的。我们可以看到基本上投放了以后,比如说中间这个图,这个蓝色的在左边,经常是在绿色的下面的。但是从投放这一刻开始的,蓝色的就会跑到绿色的上面,这个体验就会变得更好了。所以在所有的城市上面,到目前为止投放的这个机会我都是正面,都是产生了实际的应用的。 好,我再讲一个这个和用对用户的建模。这个是一个天猫的超超市天猫超市的一个仓库。所以我们在天猫上面下的单,他都会在这个超市里面,在这仓库里面,然后他把它打包到一个一个包里面去。他一单一单的拿到你一单东西其实没多少,所以他一般来说是很多单一起出去拿。所以大家可以看到的,在他在他这个推车上面有很多小袋子,每一个袋子就是一个单子,所以他要同时去去拿很多很多很多单子。但是我们同时把,因为这个时候系统会给。 因为这个时候,我们的系统会同时来很多单。来很多单的时候。我现在还是在共享的是吧?对的,我们系统来很多单的时候,把哪一些单给一个工人出去拣货,可能会检的效率会比较高。 这个事情是原来就是按照右上角这个图是一种拍脑袋这个方式来进行优化的。这个拍脑袋主要拍在什么地方呢?就是我们觉得靠得近的就是这个人走路走的比较少,它的效率会比较高。所以我们就看靠近的这个商品放在一起,给一个工人这种做法实际上是把工人当机器。因为我这个人不一定是持续强高强度的劳动,他的效率是最高的那有可能同学需要休息一下,他的这个效率反而有可能会提高。 所以在这个任务上面,我们是对这个工人进行了一个建模。把什么样的一个订单给一个虚拟的一个功能。这个虚拟的功能其实就是和我们前面那个两个案例里面做的是一样的,它是一个用户的模型,然后我们给他做一个决策,它会转移到这个新的一个状态上面去。这个决策,其实就是我们把哪些单给他。他的这个转移就是这个用户,这个工人看到这些单来捡这些单以后,他会花多少时间,这个时候他变成第二个状态。所以我们把历史上面给这个工人给了哪些单,他的反应是什么?它中间每每两个货物这个物品之间花了多少时间,这个也是我们历史的数据。 用这个历史的数据就可以把这个用户模型把它训练出来。然后我们就可以针对这个虚拟的功能来给他看还怎么带会比较好。所以在这个上面,其实我们并没有去使用强化学习,而是用了他现有的这个基于一个贪婪的一个算法,就是说一个商品一个商品的往里面加。原来的他的评估是说我们走的这个路线也比较短,走的比较近。我们只是把它评估改了,改成这个虚拟的工人他需要花多少时间,这个是用模型来给出的,所以这个后面都不一定是要用强化学习来进行求解,用这些传统的OR的方法也可以进行求解,就是看我们用哪一个比较方便。所以在在这个上面我们测试了也是测试了测试了好几天。 那么中间这个就是我们的结果,上面第一行,最上面这一行是第一个就是第一天,但是写的是十天后,十天后是什么意思呢?就是我们用十天前的数据来训练的,要训练的那个工人模型,我并不是用实时的这个数据来更新的,所以这个是第一天,然后测了六天。那么测了六天下来的,看到的效果还是比较好的。每一天都是这上面的数字,是每一个工人去捡这个货的时候,他用了多少秒平均下来,一天平均下来,可以看到它这个效率是提高了,其实工作量没有变,但他效率提高了,我们只是改变了他去捡货的这个顺序。好,这个是这个用户建模。 然后这里有一个其实并没有实际的使用了。但是我觉得还是比较有意思的一个东西,这个是砍价机器人,这个是可以闲鱼做的,协议之后也没有上。所以因为这个会涉及到很多业务上面的东西,所以这个也是大家去考虑的。如果我帮卖家做了一个砍价机器人,买家会不会不高兴?所以他的这个应用价值技术本身是中立的,技术并没有一个特别的一个价值取向,但是应用上面的会有。所以我这个应用起来以后,它对于我们的这个价值到底是什么样子的,所以这个是需要我们还是需要他们来考虑的事情,需要大家一起来考虑的事情。所以在这个上面,当然我觉得这个事情比较有意思,它是一个砍价的一个过程。我们可以看到。 这个上面是这个是当时在云栖大会上面做了一个现场demo,所以它现场噪音比较大我是拿一个话筒讲的,对它里面会有这个识别的语音识别错误,这看起来是一个人机对话,对吧?实际上是拆成了好几块。语音识别是一块,文字处理是一块,然后决策是一块。我们做的是决策这一块,前两块不是我们做的。 我把这个过程都写到右边了。一开始我报的是110,开始他报的是149,然后我还价了,还了直接还到100,他也说不卖了,那肯定就100,那就是149。如果我退让1点110,那么他也会退让一点,然后到128。如果我再退上115,那么他就会说这个又不卖了。然后我120以后,他就还到125,121就成交。这个里面这个决策我前面说了,如果我们是直接引导语言的每一个字,就会显得特别的困难。但是这个地方我们决策的是啊比较高层次的,我们只决策了里面的砍价的是不是要还价,是不是要继续继续还价,是不是可以,是不是我要还多少,还的比例是多少,这个都是需要去决策的,所以这个是我们的决策点。 好,reward是什么呢?这也没有讲reward是成交率。在这个任务上面,他成交完了以后,最后有没有成交?成交率那你其实可以定成别的,比如成交的价格,在这个系统上面他们给我们的是成交价格不低于历史价格的情况下,它的成交率要尽可能的高。实际跑出来的结果,在我们自己的模拟器里面能看到的结果是成交价格不变的情况下面,成交率高了一倍,但是没有做线上的测试。这个就是这么一个案例。 对,约束就是成交价格不低于历史的成交价格。因为我拿的是数据,数据上面是有历史成交价格的,平均的成交价格我不低于这个成交价格的情况下,我就我要成交率尽可能的高。如果我低于这个成交价格的话,就会有成长。对,这个就是一个旅游协议性讨价还价。 好,还有的就是我们比较关注的是工业控制,因为这个是和我们国家的生产力是有关系的,当我们把强化学习能够用在工业生产里面,会提升我们的生产力效率。那么这个是对于特别是我们在像江苏这样的制造大省,特别看重于工业生产。所以在工业生产方面也有很多控制的问题需要去解决。 我们也看到了有很多传统的控制比较难解决的任务。比如说这里有一个控制任务,其实并不是很复杂,但是它的控制目标很复杂。他的控制目标是全是啊是全局的省电的一个效率。所以他在他的控制的这个环节上,他是看不见这个控制目标,但是我们可以有历史的数据上面,它会有一个很复杂的公式去算一个全局的省电的效率是什么样子的,省煤省电的这个效率,这个东西可以直接来作为我们的reward,但是我们也拿不到它的这个reward的计算公式,但是可以从数据上面来学出reward函数是什么。它和学这个转移不一样的。因为reward函数就是每一步这个状态上面的一个review。所以reward函数是一个比较容易学的一个东西,所以我们没有特别去强调。 这个函数的学习和或者是设置,因为它有的时候就是直接可以设置。有的时候我们可以从数据里面去学,从数据里面去学也能学的比较准。这个比较容易,这个直接用监督学习就行了。 因为它并不涉及到我要做序列,所以这个是一个比较简单的事情。所以这个事情对于强化学习很简单的。我给我的函数直接学出来,我直接就控制了,我并没有并不需要再做其他的事情。所以在工业控制上面我们也可以也是基于传统的用数据的方式。 然后我们从数据上面把这个模型,把这个仿真把它搞出来,很多工业控制做起来是工业控制,它其实它也没有仿真,至少是没有一个可以用的一个房子。那现在有很多做这个数字孪生的,按理来说,其实数字孪生应该后面有一个所谓的机密模型来做仿真。但是这个做大家都会发现,这个看起来好看的数字完整,都会去做这个东西。那后面的基本模型的缺失,所以这个没有办法来做一个很多工业场景其实无法做一个好的一个方面。因为做机理模型其实就会和一开始那个任务一样,成本会非常的高,所以大家都不愿意做这个事情。我们可以从数据上面过去的数据上面把这个模型把它学出来,这个去用的效果也比较好,可以看得到是能够有一些节能。好,那么更多的工业控制,其实可以在我们专门有一个做工业控制的一个网页上面。 现在有一些大滞后的,或者跨度比较大的,或者是噪音很大的,数据缺失的这样的环境,都比较适合于用机器学习的方式去解决这种可以强化学习的。在这种情况下面,在工业控制上面能做的比较好,大概1个小时的时间,我就讲这么多,下面也是希望和大家一起来讨论这个问题。我们现在能看得到的强化学习除了在工业在对人进行建模,这个是用在一些营销,用了今天做用户的服务,像这个方向上面。还有在医疗,在娱乐这个方面,其实都可以来考虑他的这个对发电系统这个我们也自己也是在电厂里面在做这样的系统对你可以包括这个车辆里面的这个也是我们在做的。所以这个方面的希望大家也是一起来来考虑有什么样的有意思的应用。好,我就先讲到这儿。

Podcast Editor
Podcast.json
Preview
Audio