好,那我们现在就开始吧。现在正好是北京时间九点,然后呃,加州时间晚上六点。呃,今天我讲的题目呢是Planning for Reinforcement Learning and Reinforcement Learning for Planning。啊,这个题目比较绕口。我们现在就是这次呢,就主要是借这个题目呢讲一些我们啊。呃,前一阵子投稿那个 ICLR 的几篇呃文章,把它们串起来变成一个主题,啊啊,现在是这样子。
那么首先呢,就是我们大家都知道啊,那个强化学习现在在很多地方有很广泛的应用啊。强化学习如果大家看呃那个 Sutton 那本书呢,就是你会看到这样一张非常熟悉的啊照片啊,然后这个照片是这样子的。啊,如果有一个那个 agent 啊,它在一个环境里面,呃,做一些探索,那么这个 agent 在每时每刻呢,它可以看到当前的那个状态,这个状态呢叫 s t 啊,然后这个 agent 根据这个状态呢,可以呃 take 一个 action,可以做一个行动,那么这行动本身呢,又会影响啊这个环境的那个呃一些那个内部的变量,那么这样的话呢,这个 agent 呢就可以看到下一个状态啊,如此往复。
那么,但在这在这个过程中呢,这 agent 的可能在某些时刻会收到一个 reward。那么 agent 的目标呢,就是希望呃最大化这个 reward 啊的数字。啊,是这样子。那么 reinforcement learning 跟一般的那个强化,跟一般的那个 supervised learning 有什么区别呢?就主要区别是,就是这个 reward 呢是可以呃 delayed,就说也许你做了很多事,在把这个环境进行了一些改造,那么你开始可能得不到任何的那个 reward 啊,但是呢,你可能在某那个做了很多事情之后呢,获得一些 reward。
那么这个呢,就是那个强化学习比较有意思的地方,因为它这个 reward 呢是 delayed,啊是延迟过的。那么这样的话呢,我们是不是能通过一些比较好的方法呢,能学到呃这样的一个呃那个比较好的策略,让这个 agent 在呃这个环境中呢获得一个比较长期的一个比较稳定的一个一个 reward?那么这个就是呃强化学习的目标啊。
那么强化学习呢,现在在呃很多游戏里面去获得了一个很好的结果啊,比如说啊大力 Games 啊,比如说围棋啊,然后最近 OpenAI 啊五啊,他们搞了一个 Dota 的 bot。啊,是五个,呃,AI放在一起啊,然后呃,他们组队,然后能够战胜人类的比较强的啊玩家啊,当然了,不是特别强,不是到那个完全那个职业水平,但是准职业水平应该是相当不错的了。
啊,然后呃呃,我们也看到了呃,比如说用那个强化学习可以呃做那个。啊,Quick三呢啊,然后可以用来做那个星际争霸这样的一些游戏。那么这些用的方法呢,其实主要还是呃不加那个 planning 的方法。那么什么叫不加 planning 呢?就是说我对于那个将来的那个世界呢,我并不做呃预计,就是说我在脑子里没有这样的一个特别清楚的一个 plan。除了那围棋之外。
啊,那个我可以就是通过训练呢,我让这个神经网络,呃,可以根据当前的状态或者说最近几天的状态,可以马上给你反馈出啊一个呃啊一个一个action出来。那么这个action呢,就是通过执行这个action就可以得到一个比较好的结果。啊,但是呢,其实真的,呃,人类世界呢,就是我们在平时在做决策的时候呢,很多时候并不是这样子,很多时候呢,就是呃,我们要想一想啊,我做这个决策呢,会有什么样的结果。
啊,然后根据这个结果呢,反过来啊去决定我这个决策应该怎么做。那么这个其实是一个 planning 的过程。那么这个 planning 的过程呢,呃,现在那个 reinforcement learning 还没有,呃,有一些文章,但是啊,并没有说啊,在这上面有很大的呃那个那个。集中的反正一个工作啊,现在有一些工作,但是还是比较分散。
那除了围棋之外,围棋我之后会说,它确实是需要通过这样的非常细致的一个推理啊,然后才能知道下一步怎么走。啊,那么我们有很多那个强化学习的算法。那么这些强化学习的算法呢?啊,其实如果你从如何这个算法如何那个能够获得信号来看呢?呃,其实不外乎就这么几种,就是说,啊,我们怎么样才能让强化学习学到一个比较好的那个呃action呢?
就主要是呃我们在每次迭代的过程中呢,我们可能从当前状态s零出发啊,然后呃我们呃先尝试的呃去做一些行动,那么这些行动呢可能会让那个状态从s零变成s一啊,或者变成更多的呃或者或者变成s二s三等等。那么通过这些行动呢,你可能会摸到一些呃奖励,那么这些奖励呢就可以通过啊 back up,就是呃反馈的形式呢回到那 s 零,那么这样的话呢,那个 s 零呢这边的值函数呢就可以得以更新。
啊,那么具体的做法呢,其实有很多种啊。比如说最简单的,比比比如说 DQN 啊,这个是那个 Deep Q Learning。那么 Deep Q Learning 最简单的版本呢,它其实是就是做了一步的 Looking Forward。啊,我从当前的那个状态出发,这状态呢可能是从我过去的历史经验里面随便那个。呃,采样出来了一个啊,然后呃,然后我看它下一步那个是什么样的状态,然后用下一步的状态呢,然后用那个下一步的reward呢,反过来去更新s零的那个状态啊和那个reward和那个Q函数,那么这是一步的,
那么之后呢,大家发现就是一步呢并不是呃特别有效率,我们可以做梯步的啊,looking forward的。那么我们可以一直往前走那个梯步,那么那么在这沿途中的 reward 呢,我们可以都可以收集到,那么这样呢,它的收敛速度会变快。那就确实也有一个定理证明呢,就是通过这种方式呢,我可以收集到更远的,啊更稀疏的那个reward。那么最后那步呢,可能并不是游戏终点。那么这个时候我们往往用那个一个V的函数,啊用值函数去代替它那个最后的那个reward。那么通过这种方式一点点迭代。
啊,那么,那么还有更高一的方法了,像比如说,我们可以用我们的采样啊,从一个时点出发,我们可以采样很多个那个很多个那个那个那个 pass。啊,每个 pass 可以从头到底,或者说走七步,这都可以。然后每个 pass 走完之后呢,你其实呃会有一个 reward 出来啊。然后我用这些 reward 的 average 啊,我们可以用来做值函数的一个估计。啊,像那个 research,那可能是一个更复杂的方法啊。
我们其实我还是做很多很多的那个步,但是呢,我每次在走完这些那个路径之后呢,我下次继续走那些路径。但是如果碰到以前见过的呃状态呢,我们就把这些路径叠加在一起。然后把这个路每个路径上的一些啊关于那个reward的一些statistics啊统计啊慢慢的那综合起来,然后啊在每个node上呢算出一个平均的统计值,然后用这平均统计值呢再去指导将来的呃搜索过程。那么这样的话呢,就是其实它的得到的那个最后得到那个值函数的估计呢,其实是非常准确的,是比之前的方法都要准确啊。当然了,代价最大,因为要需要花时间,需要花空间去计算下一步要怎么走啊。那么就有这些方法。
呃,那么就是说,那个其实 Deep RL 它的一个呃最重要的本质呢,就是说通过种种的去探索将来的空间的一些结构这样的一个方法呢,最后我们对当前的呃状态的那个值呢,对有估计,然后我希望呢用一个神经网络把这个状态这个估计值呢给记住。啊,那么这样的话呢,一点点的这个神经网络就会变得越来越强,然后你不用呃做呃下一步的计划呢,我也可以有一个比较好的呃对于将来状态的估计和比较好的那个下一步的一个呃走法。
那么这个其实是一个呃最重要的,就是为什么现在那个 Deep Reinforcement Work。这是一个很重要的一个原因,啊,那么什么叫 planning 呢?其实 planning 跟呃之前的那个训练过程呢,其实是非常像的,啊,只是呢就是 plan,所谓 planning 就是把这些过程呢放在呃,使用的时候去做它啊,比如说我已经有一个模型了啊,这个模型可能是πθ啊,这πθ呢是给定当前的状态,然后呢它会给出呃那个每个动作的呃概率啊,它可以呃说是哎看见这个棋我要下哪一步比较好,这个已经是作为一个神经网络的一个输出,已经已经可以给你拿出来了,就是不需要再做搜索了。
那么,值函数呢也是一样的。你看到这个图,看到这个棋,你可以觉得就是你会有感觉,你觉得这个是好黑好还是白好啊?这个其实是已经以训练完的模型。那么,在这些模量模型的基础上,你可以呃再继续做刚才我说的,就是或者说我们做蒙内卡洛搜索啊,或者我们说做那个树搜索。那么做这些事情的原因呢,是因为就是我们新的状态,比如说S零,这S零呢是在呃。新的是在那个我们在真的在用的时候呢,呃,用上的就是我们以前可能在训练时候也没有见过,或者说训练时候见过但是忘记了。
那么我们在真的就是实战的时候呢,我们看到这S零,那么我们希望在这S零基础上我们再做一个在线的,呃,那个计划,然后能够呃让这个。呃,输出的那个下一步的那个行动呢,能够有更准确的值。那么这个呢,其实就是所谓的叫 planning 啊,其实感觉上跟那个之前的训练其实并没有太大的区别,只是因为呃。只是因为这个事情呢,是在那个测试的时候做的,或者说是在那个在线上线的时候做的,所以呢,这个时候我们经常叫它 planning 啊。
那么这个其实是一个,这是是一个像 model predict control 呢,是一个非常经典的呃,在以前控制论或者机器人里面呢用的一些方法。那么这个方法呢非常简单,就是一个这是个 planning 的一个非常经典的一个一个一个案例啊。这个案例非常非常简单,我们比如说我们从当前的状态 s t 开始。啊,我们用一个啊,我们用我们当前的呃那个 dynamic model 啊,这个 model 呢就是可以去预测,就是我给定了当前的 s t 和 a t,那么下一步的那个 s t plus one 啊, s t 加一呢是可能是什么?我可以用这个可以做很多蒙特卡罗的那个 rollouts。
啊,我可以得到 rewards 之后呢,我可以找到 OK 哪个 rewards 是最好的啊,我们可以用这个最好的 rewards 拿过来啊,这可能就是我的 plan 啊,然后我就只执行其中的第一步 plan。啊,就是 a_t theta 这一步是执行一下,执行完之后呢,啊,我们就可以呃得到下一个状态。注意,这下一个状态呢,可能跟那个 s_t 加一那个 theta 完全不一样,因为你的那个模型呢,可能并不是准确的啊。呃,然后呢,我们可以呃如此往复啊,这是非常简单的一个做法。那么这个其实也就是 planning 啊的一个一个例子啊。
那么 AlphaGo Zero 呢?其实像 AlphaGo 这一块呢,其实用了另外一种 planning 方法,就是我刚才说的那个蒙特卡洛搜索。那么这一块呢,那个我之前可能讲过一次,那么这次我稍微再再讲一下啊,蒙特卡洛搜索啊,我们 AlphaGo Zero 这一边呢,其实我们根本就不需要呃那个 Zero 的那个,我们不需要那个任何人类知识,就不需要人类棋谱。啊,我们先从一个随机的那个神经网络出发啊,我通过用这随机神经网络来做 planning,那么会得到大量的自对弈的棋谱,然后用自对弈棋谱呢去呃训练这个模型啊,然后让这个模型呢变得更强,然后用它来再做一次自对弈,然后如此往复,一直到这个模型变得越来越强为止。
啊,那么具体来说呢,就是说,假设你从一个空那个棋盘出发,我每次可以用蒙特卡洛树搜索,啊,搜索一些呃可能的那个变化。那么呃,然后用这个搜索搜索出来东西呢,啊,我们可以得到一个呃那个呃 action 的那个分布,就是你下一步要走什么的分布。然后我从里面取一个比较好的那个 action 下下下出来,下出来之后得到下一步啊,然后你在我们的卡路素搜索呢得到一个比较好的一个分布啊,这个分布中去取一个最优的那个叫 A two,然后再下一步下一直下到底为止。
啊,下到底之后呢?那个根据游戏规则可以知道啊,最终是黑胜还是白胜。然后用啊这个信号呢,呃,把它作为一个训练样本。然后呃,你一旦得到了这个路径之后呢,啊,路径里面每一个呃当前的状态和当前的神那个M那个呃搜索出来的那个。呃,policy的那个分布呢,和最后的那个结果,这每个都是一个训练样本,然后把它放在一起,然后就可以做个训练。训练完之后呢,就可以得到更好的那个policy和更好的value,呃,然后用这个,然后再做一遍呃这样的一个啊self play,就是这样子。
那么我们这边呢,其实是呃重新呃复现了那个 Alpha Open Go 的呃 Alpha Go Zero 的这样的一个算法啊,然后我们用两块钱块 GPU 训练两个礼拜啊,然后我们的效果呢还是不错的啊。这个东这个这个项目呢,在半年前已经开源了啊,然后现在呢,其实又是有一个新的模型,最近也上线了啊,效果比原来更好一点。
啊,那么这个是这一页呢,就是呃,就是我们收了一下,就是我们跟韩国棋院合作,跟呃四位呃顶尖的棋手下了二十盘棋,啊,然后每盘棋呢,呃都呃让年轻棋手任何时间用用,让他们以所有以那个无限制时间去思考。啊,然后呃,我们这边呢就用单张的GPU啊,然后去做那个rollouts,所以说就是说呃,我们这个模型训练很强,使得就是就算我用一块GPU,我们只让它想五十秒钟,就是让它plan五十秒钟啊,这个效果也是非常好的啊。最终结果是我们以二十比零全胜啊,获得了呃这次啊。啊,这次比赛的一个一个比较好的名,一个比较好的结果。
那么我们同时也用这个方法呢,就是别人在台湾那边有一个组用了我们的模型,然后只用了两千个那个rollouts啊,就可以二十七比零战胜很多台湾的那个高手啊。然后我们跟呃。那个网上的那个叫 Lilac Zero 的呃软件也比过啊,他们其实是一个通过 Crowdsourcing 的方式呢啊,然后重新开始训练 AlphaGo Zero 这样的一个一个努力。那么他们当时训练大概有大半年了啊,但是我们的效果呢还是比他们要好一点啊,我们的胜率是百分之九十八点二,嗯。
好啊,那么就是说,呃,这边这这些都是算了老道重谈了啊,我也不会再说太多啊。那么就是为什么我们要做这个项目呢?一个原因呢是。呃,我们这边的那个,我们是想知道,就是为什么 AlphaGo Zero 能够 work 的那么好,对吧?那么其实我们其中可以发现,其实它有很多有意思的一些结构,比如说你开始的模型是完全随机的,那么为什么它能够慢慢学会一些比较好的招数,对吧?所以一开始模型非常随机,所以你如果从开局开始做 planning 呢?所以是没有任何意义的,因为所有的那个值函数啊,所有的那个下一步的这些函数呢,这些其实都是随机的。
那么只有在呃游戏快结束的时候呢。呃,这两个函数在开始有意义,啊,为什么呢?是因为呃,我们在游戏快快结束的时候,我们在做那个 planning,那么有一部分的呃路径呢,可能会真的去呃碰到了游戏的底部,那么碰到游戏底部之后呢,这个底部就会告诉你这个是黑黑胜的还是白胜。那么,因为有这个信号呢,所以呃,我们在做那个训练的时候呢,这些值函数啊和那个策略函数呢,就会学到什么是比较好的招数,什么是不是很好的招数。什么是比较好的盘面?什么是并不好的盘面?
那么你会发现,就是说在呃游戏快结束的时候呢,就是呃随着训练进行,你会发现啊有意思的那个招法呢变得越来越多。然后呃这些招法就是被神经网络慢慢慢慢学会了。那么学会了之后呢,呃你下次再做那个 planning 的时候呢,就会碰到那些已经学过的。啊,局面。那么你这个学会的区域呢,就会有一点点的往前啊拓展。那最后呢,就是会呃碰到那开局啊,然后开局就变得呃有意义了。
那么其实很有意思的是,就是说,就算他训练不到开局啊,他训练到一个中局,就是就算你开局他随便下啊,其实中盘已经非常厉害了。啊,所以这个其实是个很有意思的一个现象啊。然后还有呃,另外一个有意思的事情就是说,就算你把神经网络训练很好了,比如说我们现在你开源的版本啊,已经非常非常强了,但是它还是需要呃,还是需要做通过 planning,然后然后来下棋啊。如果你可能在,如果你在一开始。就是你把神经网拿出来,然后裸的跟人下呢,其实是很容易出问题的啊。就是所以就是说 planning 还是非常重要的,而且只要有一点点的 planning 呢,呃,这个呃,对于就是完全没有 planning 的那个
网络,它的胜率就会提的非常非常快,很快就能够上去。所以其实整个过程呢,都是因为有 planning,所以导致,呃,我们这个呃。呃,这个神经网络呢,一点点的学会一些知识,啊,然后变得越来越强。所以基本上可以说,就是 planning is how new knowledge is created。就是我们新知识呢,就是给定个游戏规则之后呢,它已经它里面就已经蕴藏了很多新的知识,啊,然后这些新知识要怎么怎么从怎么抓出来呢?你必须得通过 planning,必须得通过 look ahead,你才能把它抓出来啊。
好啊,那么接下来呢,我们呃可以开始说一些,就是就是我们这边做的一些工作啊。我们最近呃在投稿ICLR的一些工作。那么首先第一个呢,就是我们先要解解释一下什么叫model-based啊 reinforcement learning。就是model-based reinforcement learning,就是说啊,我们过去的之前我说那些工作呢。啊,其实往往我们都是有一个 ground truth 的那个 dynamic model 啊,就是所谓的 ground truth dynamic model 呢,就是比如说对围棋上来说呢,啊,我们知道就是呃,给定当前围棋状态,如果你下完这一步之后呢?啊,你马上就知道它下一步的状态是什么,然后这个状态是完全确定性的,没有任何的呃随机性,这是一个。
然后呢,这个状态,这这个整个那个过程呢都是给定的啊,我们非常知道游戏规则是什么样子的,然后用这个游戏规则,我们想办法去做一个找到一个更好的一个目标。啊,也是这样子。但是呢,很多像现实世界中呢,其实并没有那么完美啊。就比如说吧,我首先第一个,比如说,如果你在玩星际,或者说你在玩一些呃不是有呃那个有一些战争迷雾的游戏呢,你会发现其实你并不知道就是对方在干什么。啊,所以呢,你没有办法有一个全局的一个 dynamic model,然后你也没办法去预测未来,你这样的话会限制你做啊 planning 的这样一个深度和准确度。啊,这是一个。
然后还有一种情况呢,就是说,呃,假设比如说你在做机器人的时候呢,啊,你会发现你的机械臂,呃,有一个那个动力学model,但这个动力学model你并不知道啊,或者说它会发生变化啊。比如说这个机械臂可能一开始空手,那么它的物理模型呢是某某一类公式。啊,但是他一旦拿了什么东西了,拿拿了一个重物,比如说两公斤的重物,那他马上里面的initial matrix就不一样了啊。那么这样的话呢,你其实整个那个training model就不同了。那么这样的话呢,而且这个不同的变化呢,可能还是并不一定是已知的啊。你可能抓了一个二点五公斤的东西,或者说二点三公斤的东西啊,或者说你的机械臂可能因为有老化呀、有变形啊,导致里面的那个物理参数是不一样的。那么在这种情况下呢,其实呃,其实你不能假定你存在有一个就是完全准确的一个啊dynamic model啊,这是非常难的。
那还有一些情况呢,就是说,假设我根本就没有一个呃动态模型可以用啊,我只能我只有一些那个 human 的 demonstration 啊,有一些专家给你一些建议啊,跟你说在这一步呢你要怎么做,那一步你要怎么做啊?但是呢,就是这个其实并不代表 dynamic model,它只是一个呃一个 dynamic model 的采样。啊,这是这这是这些一些问题。那在这种情况下呢,呃,为了我们要能做 planning 呢,我们必须先把那个奖励模型给估出来。啊,估出来之后呢,我们可以用那个之前那个排列的方法去做 planning 啊,就是只要是这样的一个困难啊。
那么, dynamic model 估计呢,其实有这样的一个 dilemma,就是嗯。就是我们只看见那些我们能看见的东西啊,然后忽略那些呢不太能忽略的,忽略那些那个我们看不见的东西。就是我们在估计我们的 latent model 呢的时候呢,我们很自然方法是这样,就是我们可能呃随机做一些动作啊,然后这些动作呢可以告诉你就是给定当前状态、当前 action,然后下一步的状态是什么,然后用这个呢我们可以去训练一个 latent model。啊,比如说你知道 S A 和 S prime,那么你可以去训练,比如说 fit 一个那个 policy distribution,这当然是可以的。啊,但是问题是,呃,问题是在哪呢?问题就是说,就是你这个那你这个 pi 西塔,就是说,因为你要估计,呃,你现在的 dynamic model,你必须用你现在的那当前的 policy 去估计。
那么,当前policy估计呢?那么它生成出来的那个data呢,其实都是沿着当前的policy来进行的。所以呢,就是dynamic model有个天生的问题,就是你估出来的东西一定是在这个当前状态和当前的那个policy附近比较准确。啊,但是出了这个边界呢,就不是那么准确了啊,所以你会发现它就有这样的一个问题,就是它需要有一个对 uncertainty 的这样的估计啊。如果呃它在 policy 里面呢, uncertainty 会比较低,那么在 policy 外面呢, uncertainty 就比较高啊,一般就是这样子。
那么这样呢会导致一个问题,就是说,也许如果你不好好做 exploration 呢,啊,你可能永远都跳不出这个局部小值,啊,你觉得你现在的 point 很好啊,然后你在上面呢训练得到一些呃,就得到一些那个 sample points,而这 sample points 你可以 fit 一个 model,那么这个 model 只有在这这这个这块附近的比较准。那么这块复现标准的那些model呢?反过来你又可以论证说你现在的policy最准啊。那么这样的话就会陷入个死循环啊。这个其实是一个很大的一个问题啊啊。
那么就是嗯。为了解决这问题呢,其实现在有一些方法,比如说呃,我们可以通过啊迭代来进行。比如说我们现在已经有一个啊还不错的一个 policy,还有不错的那个 value function,那么怎么办呢?我们可以用这个 policy 可以得到一些数据啊,把这些数据拿过来去呃 fit 我们现在的那个 dynamic model。fit完两篇model之后呢,这个model会变得很好啊,变得很好呢。然后呃,我们把这个model拿过来,然后继续做我们的planning啊,继续呃得到一个更好的policy或者value。然后用policy value拿过来之后呢,我们可以呃继续的去找到新的training sample啊,以此就这样的形成一个闭环。那么呃,其实之后会有一篇文章介绍,就是说什么情况下这个东西会收敛。
啊,那么接下来我们介绍一下我们这边的第一篇 paper 啊。首先这篇 paper 呢是一个比较有意思的一个 model,就是我们在建我们的 dynamic model 的时候呢,啊,我们并不需要呃建非常细的模型啊,我们想要的是一个比较粗的模型。所以呢,这篇 paper 里面呢,其实我们是想建一个就是比较呃基于语义的模型。啊,假设你有一个机器人啊,在一个呃环境里面,在一个室内环境里面在走动啊,它可以选择呃去各种各样的地方啊,然后呃我们给它的一个命令说,你请你找到一个呃一个一个一个物一个物体,比如说一个oven,啊,大家都可能知道,就oven可能是在那个厨房里面对吧?但是呃它并不知道厨房在哪里啊,它面临的是一个新的环境啊,然后你如何在这种情况下做啊planning?啊,其实是这样的一个问题,啊。
那么在做 planning 的时候呢,我们其实是希望我们里面 build 一个比较 semantic 的一个模型。那么这 model 是什么意思呢?就是说,给定当前的状态,给定当前我们已经见过的啊一些 experience,比如说我们已经见过了 living room,我们已经见过了 outdoor。我们已经见过了 sofa,对吧?关于这些,我们去可以 update 我们当前的一个 semantic 的 model。那么这个 semantic model 会会告诉你,就是啊,也许呢,这个 kitchen 呢跟那个 living room 也许离得比较近,有一定概率呢是能走到的啊。那么 oven 跟 kitchen 呢,那个通过我们的先验知识,我们知道这两个都是非常近的啊。那么如果能走到 kitchen 呢,我们也许就能走到 oven 啊。
那么如果有这样的 model 呢,我们可以用这个 model 呢去做 planning 啊,然后去规划一条新的路线出来。规划完这条新路线之后呢,我们可以让这 agent 去走这条路线。那么这条路线如果走不通的话呢,啊,我们可以呃再规划然后再走,啊,因为虽然我走走不通,但是我们可以通过走这过程呢,我们会获得一些新的新的 knowledge。那么这新的 knowledge 呢,肯本身就可以呃让这个啊 semantic model 呢变得更准确,啊,就主要这个非常简单的一个思路,啊。
那么这边呢就是名字就叫 Learning and Planning with Semantic Model,啊,简称叫 LIPS。啊,那么这边呢,其实就是说了一些,就是刚才我说的这样的一个过程啊。可能一开始呢,就是我们 room 和 room 之间的所有的那个连接到底有或者没有呢,它都是一个比较呃鲜艳的知识啊。我并不没有任何的知识告诉你说这种情况像是这两个连接是不是成功,但是我们有鲜艳知识。啊,但是呢,我们在我们有了先验知识之后呢,我们可以用这先验知识呢,先找到一条trail tree,这条trail tree找到找到之后呢,啊,然后我们就可以用这个trail tree上得到的信息去更新啊这个图上的呃一些边啊,比如说我们从living我们可以走到sofa,我们走走通了啊,那我们就知道这条边呢是是对的啊,那么我们可以用这个知识呢去做更好的planning,然后一直往下走下去啊。
那么然后呢,我们在这个 How3D 上呢做了一些做了一些测试啊。How3D 呢是我们之前呃做的一个 environment 啊,它的数据集呢是从那个 3C Dataset 里面拿过来的啊,然后呢把它变成了一个 interactive 的一个一个环境啊。那么 3C Dataset 里面有四四四万五千个呃不同的那个呃室内的环境,那么这些环境呢都是由人工设计的啊,然后所有的物体呢三三D 的物体呢都已经那个呃已经 label 过了,所以比较好。啊,那么这个环境中呢,我们就可以呃做很多事情,比如说我们可以从环境里面得到,比如说 R G B 的照片,可以得到那个 segmentation 的那个 mask,啊,可以得到深度图,也可以得到 top down 的一个一个 view。
啊,那么这环境本身呢,就是你会发现,就是在这环境里面,不同的房间它们之间的相互关系呢,啊,是呃有一些呃很有很强的语义联系的,啊,就算你去一个新的房间啊,新的那个环境呢,你也可以大致猜出来,也许呃也许我们的厨房里面有有有有微有呃微波炉,对吧?所以这个其实是个非常重要的一个 prior。那么我们通过用使用这个 prior 呢,我们可以做更好的 planning。啊,那么这个呢,其实是呃,我们刚才学,刚才我们说学到的 prior,我们可以在那个两百张、两百个不同的那个环境中做训练。在训练过程中呢,其实我们可以学到一些呃非常呃非常强的一个 prior knowledge。对,你会发现就是也许 dining room 跟 outdoor 呢是关系不大的,对吧?那 dining room 旁边可能就是 kitchen 或者肯定是 living room,所以就是说你会发现就是有非常强的一个 prior knowledge。
然后你用这个 prior knowledge 呢去呃去做那个 planning,啊。然后这边其实有一个呃 case study 啊,这边就是我们可以说,假设这是一个啊一个环境,然后一开始呢,我们这个 agent 在那个红点那个地方啊,然后我们跟 agent 说,我们希望你能够那个出门啊,去那个 outdoor 的 space。那么我们 agent 在什么事情都不知道的情况下呢,就是它其实先可以 build 一个 prior 的 graph。啊,这个 graph 呢里面有一些连接,然后这些连接呢可以,呃,这些环路上所有的边呢其实是通过呃之前的知识训练的时候得到的啊。然后呃在这个过程中,然后 agent 说,OK,我通过这这个 graph,我们可以先做做 planning,我们可以想一想,哎,也许我们从 birth 直接到 outdoor 呢,啊,也许是一个很很好的捷径,我们可以呃 execute 一个 sub policy。我们可以尝试一下,我们是不是可以从 birds 直接到那个 outdoor?
好,然后结果发现,哎。那就发现呢,其实是呃,其实是不行啊,有问题啊。这有可能有很多问题原因。一个原因是呃,也许就是确实有条路,但是呢,我们的policy不够好,所以呢,我们可以乱通过乱走呢,其实是呃走不到的啊。所以这是一这是一种可能。第二种可能是,也许从birth到outdoor呢,确实还挺远的,所以我们的policy呢,并不是特别好。但 anyway,就是我们第一次失败了之后呢,我们可以知道就是从 burst 到 outdoor 这条路不通啊,我们就可以把这条路变成虚线啊,然后上面的那个 probability 上面的那个 value 呢就改改成零点零一。
那么下一次呢,我们可以继续再探索啊,我们可以继续换一条路走,比如说我们可以先从 burst 到 garage,然后再从 garage 呢啊到那个 outdoor。好,然后我们再做一遍,然后发现哎,这个 policy 呢又没有成功啊,然后这条路本身呢啊也也不是很通,所以我们这条路呢又把它去掉了。那么这条路呢就是它的概率降下来了。那么接下来啊,我们可以从呃从 burst 呢,然后再向上走到 living room。啊啊!然后这次发现,哎,好像是成功了。我们从这儿从一点点那个走到里面,我们发现确实可以走到。那么就是我会知道这两条这两个点这两个room中间呢有一个非常非常强的连接,可以走过去。啊,至少以我们的 sub policy 呃的强度呢,我们可以走过去啊。
那么最后呢,啊,我们从啊,我们从那个 living room 呢,我们可以慢慢的走到了那个 outdoor 啊,所以最后就是可以可以出门了,所以就是这样的一个过程,懂。对,那么这是呃其中一篇 paper,然后呢那个这个其实是一个 quantitative 的 results,那么再往回走一点,对,这边是 quantitative results,啊,这边其实就是说那个 h 呢是我们的那个 planning horizon,啊,我们就是说我们就让这个 agent 就走五百步,然后五百步走完之后如果没到呢就算失败了,到了就算成功啊,然后这边数轴呢是 success success rate。
啊,你会发现就是说,LIPS这个算法呢,在呃不同的情况下呢,它效果呢都还可以,而且效果那个performance呢要比其他的方法要好。啊,像那个 random 呢,这个呃算法呢,其实是就是指我们可以随机在那个房间里面走动,然后 pure 这个方法就是说,呃,我们假设啊,我们就 train 一个那个 model based 啊,就 model free 的一个 RL,就是我们没有没有用任何 planning,啊,我们可以达到一个什么样的效果?你会发现这个这个效果呢,其实没有呃我们的方法好。啊,然后你会发现就是 value improvements 呢,就是啊,我们如果以我们的方法呢 success rate 作为一的话,啊,我们就是可以跟其他的方法比,而且效果也比的不错。
尤其是对于就是呃比较长的 path 来说啊,这很准呢。就是说,嗯,如果我们用 oracle 告诉你,就是从当前状态到最后面那一个点,最后那条路的呢,它会有多长啊?如果路很短的话呢,你可以意识到,就是就是如果就是这个问题本身不是很难啊,我们其实没有太大 improvements。特别是跟 model-based、model-free 的 approach 来比的话。但是呢,啊,如果这个路非常长,比如说长到三或者四呃这样的一个
步骤方面,那时候我们就要用 planning,可能 planning 的效果就会更好,因为它能看到这条路要怎么走。行,呃,这边的动画有点问题。然后呢,接下来是再介绍一下另外一篇文章,就是说,呃,假设如果我们用啊之前的那个呃方法,就 iterative 的方法来做一那个 model planning 呢,同时来做那个 policy 的那个优化呢。那么其实之前呃并不是有特别多的文章能够证明说这样这两个优化呢能够让它收敛到一个呃局部极小值。那么这边呢其实我们做了一个方法,能让呃就通过加一项啊 lower bound 的方式呢,我们可以证明就是这样的一个算法呢一点能慢慢的达到一个局部极小值。
那么这边呢,其实呃,model M 是我们现在的用的那个 model 啊,然后呃,π 呢是我们现在的那个 policy 啊,然后我们在优化的时候呢,就是日常方法,我们可能就只优化一πM,就是说给定当前状态啊,给定当前的那个呃 model,给定当前的那个 policy。我们能够找到,就是希望找到一个 policy,能够让这个 v 方 v 函数呢得到那个最大。但是呢,我们这边呢,其实再加了后面那项啊,那项我们希望就是惩罚啊那个 model。
那么这个 model 如果离我们的真实 model 很远的话呢,我们这个 d 呢其实会越来越大。啊,这个 d 呢,如果是这个 model 跟真实 model 越来越近呢,它这个 d 会越来越小。那么这样的话呢,就是说防止这个 agent 呢,就是沉浸在啊一个不切实际的幻想之中啊。如果出现不切实际那个不是成那个不切实际的幻想了,然后这个 d 呢会比较大,d 比较大的话呢,就会让整个 optimization 呢变得差。那么它就会倾向于这个 model 本身要希望能更准确一点。
那么通过这样的迭代呢,我们希望那个 policy 和 model 呢都能做得更好。啊,这边其实有一些比较有意思的 property。啊,因为通过这个方式呢,我们可以证明,就是啊,每次 expected 这个 value v,它会越来越高啊,这个是个很有意思的一个现象。然后你注意,就是说这个 M star 就是最优的那个 policy,那这个 policy 呢本身是我们并不知道的,但是我们能够证明,就是呃,这个 policy,啊,这个 M,这就是 v 函数在这个那个最优的。
啊,就是在现实情况下的这样的一个 dynamic model 下呢,它的效果会越来越好啊。然后呢,最后的结果就是说,我们通过这个算法,这算法本身可以收敛到一个局部极小值啊。然后这局部极小值它对应的 policy 其实是一个 locally 那个 maximum 那个 policy。啊,这个在理论上来说是个比较漂亮的结果,嗯,那么接接接下来呢,就是说我们之前其实提了一个那个 distance function,distance function 呢,我们能不能在现实生活中能够能够找到呢?答案是可以的。
这个 distance function 很有意思,就是它必须呃衡量当前的 model 和那个最优的 model 之间的距离。但是我们并不知道最优的 model 是什么,那么我们怎么衡量呢?嗯,那么现在一个办法是这样的,就是也许呢,我们并不知道最优 model,但是没有关系,我们可以通过采样知道最优的 model 啊,我们可以从某个地方出发,然后我往前走一个 pass。走完这条 path 之后呢,你会发现,就这条 path,因为是现实世界中踩踩出来的,它每一步呢,它都会遵循呃最优的 model。
啊,但是如果我们在每一步用当前的 model 去预测呢,你会发现,就是当前 model 预测出来的下一步的那个状态呢,跟那个现实世界提供的状态呢是不一样的。那么这不一样呢,其实就可以作为这个 distance metric 啊,用这个方式呢就可以做那个 optimization。嗯,然后呢,我们在 mojo 上呢做一些测试。啊,然后你发现呢,就是呃,我们在一些比较难的情况下,比如说那个 Walker 啊和 Humanoid,还有 Ant 上面呢,那个效果呢是比较好的。
然后我们我们的名我们的这个方法名字叫 SLBU,啊 SLBU 呢是我们的呃方法,啊 SLBU,呃杠 MSE 呢,啊也是我们的方法,只是呢我们把啊我们把这一页里面那个 L1 的 norm 啊这个换成 L2 的 norm,啊或者换成平方。啊,这样子一个呃,这样子一个过程,然后你会发现,就是说 L one 呢效果其实会比较好,而且呃超过了啊其他的方法。那么后面一些比较呢,一个是那个 TRPO,啊,因为我们这边呢其实是有一个限制,要求每一步的那个 policy 跟原来的 policy 之间的距离呢不能大于 d,那么这就非常像那个 TRPO 的做法。
那么我们呃用 TRPO 做了一个 baseline 啊,比较了一下。那么最后呢,我们也跟比较新的那个 Soft Actor Critic 啊做了一些啊做了一些比较,啊发现效果也不错,嗯。行,好,然后这是前两篇文章,然后之后呢,我可以讲一下另外一部分。这部分呢,就是说,呃,我们这个这个 talk 的 title 是就是啊,planning for RL and RL for planning。那么 planning for RL 我已经讲了,就是我们怎么样用 planning 呢?然后让 reinforcement learning 效果做的更提得更高,对吧?这是啊啊,这是一个。
那么另外一个方向呢,就是说,呃,RL for planning,什么 RL for planning 呢?我们是不是用 reinforcement 这个方法能够让 planning 变得更好?那么这个是一个很有意思的一个 topic。啊,那么我们先可以看回顾一下我们怎么去做那个 classic planning 的,就是我们在那个上个世纪的六七十年代的时候,我们其实并没有什么 deep model 啊,神经网络当时都没有开始啊,那怎么办呢?就是一般情况下,那时候我们做 planning 的时候呢,我们通常不叫呃 deep learning model planning,我们有些时候会叫 traditional optimization。
就是假设我们从呃某个路径出发,我们就已经有一个路径了,从 S 零到 S T 啊,S 零 S T 呢是知道的啊,我们知道就是假设我们从 A 点到 B 点,我们有一条路径可以过去,那么这条路径呢,我们希望能找到一条最优的路径。那么一般怎么做的呢?我们可以先从一条初始路径出发,然后啊把这条初始路径呢做一些呃做一些那个修改,让它变得越来越好。啊,这是一个非常简单的一个想法啊,就是我们现在一开始有 S 零 S 一 S 二,一直到 S T,那么这样一条路径,那么经过某些算法的迭代呢,我们可以让它变成 S 零 S 一 Prime S 二 Prime 一直到 S T 这样一条路径,那么这样这条路径呢,它的 performance 呢比原来它路径更好啊,这个就是传统上也是意义上来说叫那个 traditional optimization。
啊,那么呃,在这个问题上呢,就是比较经典的方法呢,就是一个叫那个零年 curative regulator,这个方法很早以前就已经呃已经有了。那么这个 regulator 呢,其实非常简单,就是假设我们知道我们 dynamic model,啊,我们知道这个 model 呢是一个线性模型啊,x t 加一呢是等于 x a x t 加 b u,那么 x 呢其实是你的状态,那个 u 呢是你的控制量,就是 x 相当于你的 state,啊,那个 u 呢相当于你的 action。
啊,这边为什么字母不一样呢?是因为呃,据说 S A 这个体系呢是美美国人发明的,然后 X U 这个体系呢是俄国人发明的,啊,所以呃,最后呢就有两套系统。啊,但是现在基本上你看文章的时候呢,会发现可能会用 x 和 u 来代替啊啊代替连续的那个控制问题啊,然后呢让 s 和 a 呢来代替离散的控制问题,或者说那 reinforcement learning 这样的问题,所以这个会啊啊这个就是一个比较经常发现的一个事情。
那么目标呢是希望那个能够能最小化这个函数,啊,这个函数是啊这样一个呃这样一个这样一个形式,假设我们要我们最终目的是要能够达到那个原点啊,那么一开始呢 x t 呢不在原点,那么怎么样通过控制这个呃 x t 能够让它很快达到原点,就是这样的一个问题。那么这个问题本身呢,因为它是线性的,所以呃存在一个最优的呃唯一的一个解啊。然后这个解呢,其实从这个解中你可以发现,就是最优的控制呢啊,其实。呃,是等于那个呃,有一个叫那个 gain,然后这 gain 是 k t,然后乘上它当前的状态,那么就是呃最后的控制方式啊,其实是啊这样的一个方法啊。
那么但是呢,就是这样的做法呢,就是它其实是用 planning program 来做的,那么它最后的结构比较复杂,那需要李卡提方程啊,然后用它来慢慢的就迭代解出来。啊,通过这样的一个过程,啊,那么就是大家可能知道,就是这个是线性的,所以现在有一个比较好的一个最优控制的那个那个那个结果啊。那么其实是个线性的约束和那个二次的那个目标函数这样的一个问题。那么大家知道这是个凸问题,所以可以做。那么现在呃。
那么再往下走呢,就是呃,也许啊,问题不是突的啊,也许那个我们的控制的那个 dynamics 呢是比较复杂的,可能不是线性的。那这种情况下怎么办呢?呃,这个时候呢,呃,有一种方法叫做那个 iterative LQ 啊啊,什么叫 iterative LQ 呢?就是假设呢,我们这个啊,那个 dynamic model 和那个 reward function,虽然说不是线性的,也不是二次的,但是我们可以在局部做展开,啊,得到一堆的那个线性的表示,啊,局部线性表示有了之后呢,我们可以说,哎,局部上来说它是一个 LQR 的问题。
啊,然后呢,我们可以用局部的方法去做那个,我们做迭代啊。我们在局部上有一个线性的那个 dynamic model 和二次的那个 reward function,我们可以得到一个新的 policy。有新的 policy 之后呢,这个 policy 也是一个线性的过程。那么这个跟 LQR 是一样的。那么然后有这个 policy 之后呢,我们可以采样得到一条新的路径啊,然后一条新的路径呢,然后你会得到一条得到一个新的那个呃 local 的展开,然后如此迭代,这样可以收敛到一个局部的极小值。
那么这样的话呢,呃,我们可以解决任何原则上来说可以解决任何的呃非线性的控制的问题。当然了,就是说它的收敛性啊,它是不是会有问题啊,这个都不能特别保证。但是,啊,这是一种可以可行的一个方案。嗯,那么关于这个呢,其实呃有一个例子,这个例子呢就是叫 Pliego,这是一篇呃 ICM 二零一一年的文章。那篇文章呢其实就用了这样的一个思路啊来做。那么他们先用那个高斯过程去建模那个 dynamic model 啊,他们就说我们先随便啊移动这个机械臂或者随便移动啊那个我们现在这个那个 simulator,然后通过移动呢你可以得到很多很多 sequence。
那 sequence 呢?你可以用建模啊,你可以用来做那个高斯过程建模,就是给定当前的状态 x_t,然后我要做的那个 action u_t,然后我们可以算出来。那个下一步的 delta t 是什么?delta t 其实是 x 的一个增量,就是它的那个当前的那个状态会变到什么程度?那么我们可以用高斯过程去去去建模这个单这个线这个 dynamic model。建模了之后呢,因为高斯过程是高斯的,就是它是肯定是那种高限的一个一个 structure,所以呢,就是假设你有一条从原点到最终目目标的这样一条路径,那么这条路径上呢,你所有的那个 x t 这个状态呢,你可以积分积掉的啊,你可以通过一步步的积分,假设我知道了这当前的那个 u t 是什么。
控制量知道了之后呢,啊,我可以把沿路上的所有的那个 x 全部的积分积掉,然后最后呢,就是你可以用这个得到一个啊 J 函数,这个 J 呢其实是在所有的 x 积分积掉之后,它的期望的那个呃 cost,或者说期望的 reward,那么用这个,那么这个 J 函数呢,其实是呃我们控制量的一个变量,对吧?如果我们控制发生了变化,比如说我们的派换过了,换成另外一个派了,那么你整个路径就不一样了。那么你最后的 z 呢,其实也是不一样的。所以 z 呢,其实是这个控制那个参数的函数。
然后呢,我们就可以那个对这个 z 求导啊,对对 z 对那个西塔求导,求完导之后,我们可以得到那个 z 的一个啊变变变量。那么这个 z 的那个对西塔求完导之后呢,你会得到一个就是西塔的一个啊一个一个梯度方向。那么通过修改这个梯度方向呢,你其实就是修改了条路径,因为呃西塔不一样之后呢,你的 policy 就不一样了,所以你整个 path 就不同了。呃,整个 path 不同之后呢,在 locally 可以变化之后呢,我们可以呃让这个 path 变得更好。
啊,然后通过这个方式可以慢慢迭代,可以让这个 pass 变得最优。啊,基本上是这样的一个思路。那么这篇文章呢是一一年的,那么他们在文章里面其实说的是,他只要通过几条大概 handful of trials,大概可能就是十几次的那个呃训练呢,就是我们他就可以得到一个比较好的结果,就是 policy 呢就会比较比较准确。啊,对,但是呢,就是说,你以上方法大家可以看出来,就是它是一个通过局部微分来决定,呃,来来,然后让这个 pass 一点点变好啊,这样的过程。那么这样 planning 呢,是通过这个方式来实现的啊。
那么很自然问题就是说,假设这个过这个这个 pass 是不可微分的,怎么办呢?就是啊,假设呢,就是这个问题其实有很大的呃地方是会有应用价值的。啊,比如说呃,有很多那个组合优化的问题啊,有很多那个算法的问题,那么它会输出一条 path,那么这条 path 呢是无法优化分的啊。这边有两个例子,一个是那个啊,Oriol Oriol 他的一篇啊很有名的文章叫 Pointer Networks。
那么他这里一篇文章里面呢,其实介绍了一些呃怎么样用神经网络来解决组合优化问题的一些一些方案啊,比如说对于那个 convex hull 求解 convex hull 这样的问题啊,这个问题当然是不是 NP hard 的,但是就是也是个很有意思的一个组合优化问题。那么它怎么求解呢?就是 OK,我们忘记我们之前所有本科生本科学到的那些所有知识啊,没有关系,我们就把所有的呃当前数据全往里面塞,然后我用 sequence sequence model 呢直接输出啊那 convex hull 的一个序列啊,那么这样的一个方式,然后解决这个组合的问题啊,然后啊另外一边呢,其实是我们可以用一个简单的神经网络呢去预测呃 job scheduling 啊,我怎么样让这个啊,job 呢那个 schedule 的比较好,让他们这个平均的 slow down 的时间越短。
啊,他这边也是用了一个神经网络来做的。啊,但这个这样方法的共同点呢,就是说我们给定了那个 job 的,给定了这个问题的一个 specification。啊,假设就比如说每个点在哪个地方,然后我可以直接去预测啊,这个最后那条那个路径是什么,最路径是什么。那么这样的话,其实呃,我们想想就觉得,其实这个会比较难,因为呃,如果这个问题非常复杂,或者这个问题里面有很多呃有趣的结构,那么你用一个神经网络预测一遍,要预测的准呢,其实没有那么没有那么容易啊。
所以呢,就是我们这边呢,呃,这是另外一个 assumption,就是说,啊,想要做一个比较局部的一个解决方案啊,也许呢,我们可以从呃一条路径出发,我们可以通过一点点的改进,把路径变得更好啊,就像之前我们说的,就是在 Playful 里面那样,就是我们通过一个梯度下降的过程,一点点的把这个问题,把这个路径做得更好。但是问题是,就是说这个主规划的情况下是没有梯度的啊。但是没有关系,我们可以训练神经网络,然后让这个神经网络呢,把这个梯度呢给啊给给算出来啊。
呃,基本上是这样的一个思路。那么这边就是一框图。那么框图是什么意思呢?就是说啊,假设你有状态状态,这样的状态呢可能是啊某种啊那个 combinatorial 的这样的一个结构。那么我们先从状态里面其实去选一个啊一个部分。啊,这个部分选出来之后呢,然后我们去选一组那规则,然后用这个用一个最匹配的规则去作用在这个呃当前的状态的一部分上面,然后让状态发生改变啊,这样的话呢就得到一个下一状态,然后再那个迭代这个过程啊,这边其实有一个例子啊,这边其实是有 job scheduling 的例子。
呃,假设呢,我们当前出来是这样的一个过程。那么这这个图呢,其实是 job scheduling
dependency 啊这样的一个图,就是说你假设你有五个 job,然后它们之间呢满足一些条件,比如说一一定要在二前面,然后一一定要在四前面,呃三一定要在四前面之类的。那么这个图本身就是你当前的状态,就是我们 job scheduling 的一个解。那么这个解不一定是最优的啊,但是呢,我们可以通过呃这个迭代过程,让它慢慢的变得更优一点啊。那么我们现在先状态这个 s 先有了之后呢,我们先通过一个 train embedding 啊,我们可以用在在这个 diag 上面去做一个那个 embedding 出来。这个 embedding 比较简单,就是从下面往上开始一点点积累那个那个 embedding vector,然后一直到往上,一直到最上面那一层 diag vector。那么这个 vector 有了之后呢,我们可以用这个 vector 去预测。OK,那这个这个 job scheduling 这个当前的这个 schedule 哪一块是呃需要呃改进的?那他会选去它,比如说他选到一个,比如说呃三这个job,也许可以改进一下。那么然后呢,我把这个呃选中的这一块呢放进一个rule selector里面,那么他会选中选择OK,他要跟谁交换啊?他也许要跟四交换啊。然后我们就可以得到下一个啊新的那个solution,solution就是说你可以把三和四换一下,也许它的那个drop slowdown time会变得更短啊。
那么至于这个 starting time 是怎么定义的呢?我看前面这个前面是一个就是呃一个例子啊,就假设你有三个 job 啊,一个 job 它持续时间长是二啊,它这个 starting time 是一啊,它第二个 job 呢它的持续时间是三啊, starting time 是二啊,以此类推,然后每个 job 上的颜色什么意思呢?就是我有两种 resource。啊,也许那个 job 一呢和 job 二呢,它对第一种 resource 呢,它的要求不是特别高,但 job 三的 resource 呢要求特别高啊。但 job 三对第二个 resource 的要求不是那么高啊。那个但是 job 一和 job 二要求比较高,基本上这样的状态。那么这样的话,你就存在两种不同的 scheduling 方法。啊,因为job为一是先来的啊,那它肯定先执行。它先执行之后呢,它执行到那个时间长为三的时候呢。那个这 job 二呢,其实已经来了。job 二在第二时间上时间点是二的时候,它已经来了,但是它不无法马上执行,因为呃 job 二和 job 一它都是要用啊那个第二个 resource,啊用的比较多,所以 job 二就是只能等着啊,等着等到那个 job 一结束了之后,才能开始执行。
所以你会发现,就是说那个首先第一边就是二这边有一块那个 slowdown,啊是长度是一的 slowdown。那么,但是在二执行的在二执行的时候呢,其实三也可以执行,因为三跟二是互补的啊。三可能需要非常多的低用 resource,但是不需要那个。必须要电路 resource 啊,二正是相反,所以呢,二和三呢可以同时执行啊,互不干涉。那么这样的话就会得到一个比较好的一个那个 scheduling。那么这对应的话就是上面那个行那一行的 presentation 就是啊,从零开始啊,我们就先执行 job 一,然后一执行做完之后再执行 job 二啊,然后那个三这个呢就相当于就是它一来啊,我们就可以执行。啊,但是下面那个呢,是一个比较呃,就是比较费力的,或者说不是很优的一个一个方案,就是顺序的job一二那个执行job一二三啊。那么这这个图的那个不同的结构呢,就代表了它的那个不同的执行方案。
然后我们这个来talk,我们这个rewrite的目的呢,就是说通过在这些执行方案中相互的做一些那个修改和做一些那个移动,我们希望那个最后那个job的那个performance能够最好。啊,然后呢,就是这个是一个结果。那么你会发现,就是我们的 Neural Writer 在这个 Job Scheduling 这个问题上呢,其实做的还还挺好的。那么我们跟呃我们跟很多的那个那个比较强的 Baseline 比较,首先第一个我们要跟就是那些 Heuristic 来比较,就假设我每次都选一个当前队列里面最最短的那个 job,啊,然后看看它是要我怎么样。啊,你会发现就是说我们比他们好。然后第二个那个 baseline 呢,就是说呃,我们可以选当前队列里面前 k 个啊比较好的 job,然后我们可以做一些 search,然后看看那个那个 search 出来的有没有更好的方案。那确实更好的方案,但是它确实还是没有我们这个做的好。
啊,然后呢,就是还有一个叫 Deep IM,就之前我说的,就是我们可以直接从 job 的一些 description,可以直接一口气的就把所有的那个 job 的那个 scheduling 的 order 全部都预测出来。那么这个方案呢,其实在那个。那个resource比较少的情况下比较好啊,d这个数字就是resource的数目啊。如果d比较小的时候呢,其实呃这个东西预测出来的值跟我们预测出来的值差不多的啊,像我一样的好。但是一旦那个resource变得越多的话,就是说这个job生成变得越来越复杂。比如说你有二十个不同的resource的时候呢,你会发现就是。你直接去预测啊,这个啊啊这个 job 的 order 呢是非常不准,它还不如呃 shortest bar job 那个发那个 first 这样的一个简单的 heuristic。但是我们的方案呢还是能比较好。就是这样的话,就体现出来了。就是我们这个 local 的 rewriting 这样一个方案呢,其实是对于比较复杂的 scheduling 呢,它都会比较有效果啊。
那么下面两列呢是呃一个 upper bound 和 lower bound,就是啊 lower bound 呢是说就是因为我们这个 job scheduling 其实是一个 online setting,啊,我们有一个呃比较长的一个队列,可能是大小可能是十五。啊,就是一次性能 hold 十五个 job,然后在这十五 job 里面做那个 scheduling 啊。那么 optimum 就是作弊的方案,就是假设我对于所有的 job 的那个到来时间和长度都已经知道了,那么在已经知道所有 job 的情况下呢,就是我们可以做一个最优的方案出来。那么这个呢,效果当然会比啊刚才看到你说的都好,因为它其实提前了预知了未来。那那么,但是我们会发现,就是我们其实跟最优的那个 job scheduling 的结果呢,也没有差太多,说明这个算法还是很有意思。嗯,对。那么下面呢,就有一个 earliest first,就是一个非常简单的一个算法。那么这个其实会给一个比较差的结果。嗯。
啊,注意这些数字呢,其实是都是指那个呃 slowing time,就 slow down time,就是说我们之前这张图里面呃说的就是那个灰的那一块啊,我们当然希望这一块呢是越来越少,越少越好。啊,假设呃,我们当然希望就是所有的job刚刚到的时候就能够马上执行。那么当然,ideally是大概是零,但其实不可能的,肯定还有很多job要等一会儿。那么希望这个数字越少越好。啊,我们还要用我们用同样的方法,同样的那个算法呢,就做另外一个 case。那么这个 case 呢,就是说我们想办法能够呃那个 simplify expression。啊,假设你有一个呃数学问题啊,这个数学这个数学公式呢是一个比较复杂的一个形式。那么我们能不能通过呃这个方案呢,啊把这个数学公式呢化简?啊,那么这个方法也是一样的,就是这数学公式可能很复杂,但是其中有一部分呢可能会比较简单啊。我们先选一个一部分的这个画这个 graph 里面或者这个 tree 里面一部分的那个。一个地方,然后啊这一部分呢,通过找一条一条路把它化解,然后通过这个方式呢,一点点迭代,一直到这个呃这个路呢不能化到最简为止。
啊,像这边就是给了一个 example 啊,这边有里减里这样一个项,那么这一项呢就被呃这个我们这边的 rewrite 给挑出来了,然后发现这一项是可以化简的,然后就把它化简成零。啊,我们可以通过呃这个方式慢慢的把整个表达式一点点的化简,然后化到不能再简单为止。啊,那么这个就是这样的一个过程。那么最后的那个评价标准就是就是跟啊原来的图相比呢,呃,是它到底有有有有有多短啊?它那个 tree size reduction,啊,这个呢,我们其实是跟跟那个啊。跟那个Healide啊这样的一个成熟的工具啊做了比较,Healide呢其实是呃我们呃已经开源的一个呃一个一个一个一个project,那么它的目的是这样,就是呃我只我只写了一些比较简单的一些呃Tensor的一些rule。我们希望呢,就是把这些 tensor rule 呢,直接能够转换成 CUDA 的代码。那么在这过程中呢,就是这些 tensor rule 可能写的很复杂。那么其中有一步呢,就希望啊,我们这个 mathematical expression 能够化的简单一点啊。
那么其实是呃,那他是他们里在里面其实用了一个比较 rule based 的一个 rewriter,啊,就是说我们写了一堆的那个规则,然后嗯,按照这个顺序去 apply 这些规则,然后把这个当前的表达式化简。啊,你会发现,就是说,我们用 neural network 来做一个 RL,它的效果其实比他们现在用手调的那个基于规则的方式呢要好,就是 reduction 数目变变长。对,行,那基本上现在就是这些工作,然后大家有没有什么想法啊?希望欢迎大家提出来讨论。YouTube_search:yuandong Facebook田渊栋:Planning for RL and RL for Planning。YouTube_search:yuandong Facebook田渊栋:Planning for RL and RL for Planning。YouTube_search:yuandong Facebook田渊栋:Planning for RL and RL for Planning。YouTube_search:yuandong Facebook田渊栋:Planning for RL and RL for Planning行,现在开始回答问题啊。
先第一个问题是,如何评价 learning based forward model,比如说呃 visual NPC 是否有合理的评价标准,还是 self play 数据越多越好?呃。这个其实是这样,就是我觉得吧,最优的评价标准呢,肯定还是看,就是说这个 forward model 呢是不是呃有用啊?比如说用它来做 forward model 的最后的结果,一定效果比原来的原来东西要好啊。它它的那个 planning 的结果是不是更好?这个是最终评价标准。但是呢,现在因为这个评价标准可能太难了,或者说比较困难,它有很多间接的评价标准。啊,比如说,啊啊,比如说,你可以预测,比如说下一帧它的那个 forward model 的那个那个它输出的值是什么,它可以根据 observation 去比较,如果比较出来的东西是一样的啊,或者说比较准确,那就说明你 forward model 比较准确。但这个并不代表你的最后的那个 planning 性能会变得更好,对吧?它其中其实有一个问题,就说我的 planning,呃,它到底需要哪些那 information?对吧?
也许就是说我在做 forward model 的时候呢,我只可以完全可以舍弃一些比较呃无用的信息,我只着着重在一个比较重要的信息上面去啊。比如说是这样子,那么这样的话呢,就是那就是那个 latent space 的方式来做 forward model。那么这一块呢,现在是一个 open 的 research problem。啊,这是一个啊,数据越多越好呢?其实呃不好说吧,就是因为如果你的数据呢在一个错误的区域呢,其实是啊其实是没有用的,因为你在错误区域拟合的越好呢,你可能这个 model 反而又不对了。嗯,对啊,所以这个还是就是 ideal 类的,我们当然希望我们的 data 是在最优的那个 policy 附近,然后用这个 data 然后去拟合一个 form model,那当然是最有效率的,对吧?但是问题是你并不知道你最优的 policy 在哪里,所以这个是很大的问题。嗯,好。
第二个问题是,呃,请问第二篇论文对Visual Fault Model是否适用?就是第二篇是指那个Sweatico那篇paper是吧?呃,那 paper 本身的理论呢是跟那个 state space 的 representation 是没有关系的啊,你可以用任何的 state space representation 都可以,所以这个是可以用的,但是我们没有试过,不知道啊。我们在那个 experiment 里面呢做的是呃母猪库,所以那母猪库的那个 state 是比较简单嘛,就是都是 joint location、 joint velocity。所以没有那么呃,没有那么啊啊,没有那么没有那么复杂。但是对visual的问题,就是你可能需要训练一个呃forward model,你可能需要训练一个embedding space,然后在embedding space上再做这个事情,嗯。这个还是比较难的,呃,有一些文章啊,我这里就不提了,呃,第三个问题是,请问能不能讲一下蒙特卡罗树怎么结合到quant交易中?Quant中哪些因子筛选算法比较好?目前只知道PC,我对Quant不是很熟,所以呃我也不知道。
我觉得可能还是需要建一个那个Word Model吧,因为呃,比如说你花了很多钱买股票,你并不知道事件是会发生什么事情。啊,对,所以你没有这个 world model,你没办法做蒙特卡洛数搜索。因为蒙特卡洛这边你一定要那个假设,你知道那个有一个 forward model,你知道就是你做这个 action 之后,就世界会有什么反应啊,这个其实是非常重要的。呃,现在呃,现在估计比较呃,就是说矿的这估计会比较难吧,但我并不是很熟。下一个问题是,请问 DQN 的 policy gradient 与 DDPG 什么上有什么不同?啊,DPPG首先第一个DPPG是一个连续的,呃,就是说它的action呢往往是一个嗯continuous space啊,而且是deterministic的一个action,所以叫deterministic deep policy gradient,所以从这个名字里面就知道是不一样的啊,所以往往是假设我们有一个那个控连续控制问题,那么连续控制问题我们希望这个action和那个 state 中间的关系呢是联系一个非常那个 consistent,是一个那个 deterministic 关系呢,你可以用 DDPG。
那么它有它因为它的 gradient approximation 是比较有效率的。那policy gradient呢?它在离散的那个action space上呢,它的它必须做采样,做采样的问题就是它的效率不是很高啊,你可能花很多时间得到的是一个非常 noisy 的信号,那么这个其实是一个大的问题。所以总之就是说,DQN 是在离散的 action space 上做的,DPG 呢是在连续的 action space 上做的。下一个问题是那个啊,请问 meta learning 是否用在 planning 上?一般与 RL 的结合是哪些啊? meta learning呃,你可以这么想,就是说它其实是一个万能的一个东西,所以什么东西什么都可以干。就你可以比如说,你可以做 transfer learning,对吧?比如说我就现场拍脑袋,我说想出来,我说我可以做 transfer learning。你可能在一些 task 上做 planning,做完之后,你可能就是这个 planning 的一些呃一些函数呢,你可以 transfer 到一个新的 environment
那么你可以用比如说Memo,Memo,比如说你可以在新的task上你做一个做一步gradient descent,对吧?你就可以得到一个适合于那个task的一些函数,啊,比如说这样子,啊,比如说你可以那个在原来那个task上做dynamics model,做dynamics model之后呢,你可以在新task上通过Memo你可以把它transfer过去。啊,比如说是这些,但是这个这个一般这个不太好说,我也不知道到底怎么叫一般。有很多paper是可以做的。
Lips那个算法和用高斯模型的主要区别是什么?我感觉都是利用先验概率算后验概率。呃,离谱那个算法呢,其实是这样,就是我对于房间之间的那个出现的关系是做了个建模的,对吧?那么它其实是一个非常的 high level 的一个 dynamic model,就是说它并不是它并不关心就是具体的就是这 agent 从 A 走到 B 啊,具体你要做什么样的 action。
我们有一个那个非常大的那个,我们有个 sub policy,那么这个 sub policy 就是说,啊,告诉他我要去哪里啊,然后这个 sub policy 呢会自动告诉你哪个 take 哪个 action 可以过去。啊,主要是呃这样的一个呃这样的一个过程。那么上面那个高层的那个 model 呢?这个 model 呢,其实只负责我要去哪些地方。
啊,所以这个其实跟高斯模型呢,其实是不一样的啊。这个是在那个建模的层级上的不同啊。当然了,就是具体要做的时候呢,肯定是用先验概率算后验概率,这都是对的啊。只是说那个建模的层次是不一样的,嗯。
请问有没有将RL用到冗余及操作臂运动规划尝试?目前还没有啊。我们这边啊,刚开始建一个那个Robotics Lab,呃,是在那个Melon Park和匹兹堡都有一些都有都有人在做一些东西。啊,然后呢,就是呃,我们这边就是Menlo Park,就是加州这边呢,其实是更想要把那个 reinforcement learning 啊,用 model-based approach,用这些用在那个一些那个 manipulation task 上啊。
比如说我建一个呃模型,这个模型能够更好的做那个抓取啊,更好的做呃。啊,做运动规划,比如说是这样子。但是呢,目前我们刚刚开始这个,呃,这个这个 lab 刚刚开始建啊,所以现在也在招人。如果大家有兴趣的话呢,可以给我投简历啊。我现在负责呃,在这一块负责招人的。啊,嗯,但是呢,目前我们还没有,呃,没有,没有,没有一些就是我们可以说出来的工作,啊,是现在这样。
然后那个在匹兹堡那边呢,是有原来CMU的那个老师啊,Abhinav Gupta,啊,他是负责招人,也是做robotics。他那边呢,可能更多的并不是做运动规划,更多的是就是用vision的一个思路呢去做那个robotics,啊,把robots作为一个新型的那个数据收集的手段。啊,基本上是这样子。
请问模型设计的时候,一般加入哪里有什么方法?呃,有一些啊,比如说呃。比如说,如果你知道不这个东西是线性的,那么你当然可以做线性模型,或者做近似线性模型可以做,对吧?就假设你知道这个模型呢是有一些 factorizable structure 啊,比如说某些变量和某些 action 之间是有关的啊,另外一些变量和某些 action 是有关的,那么这个也可以拿过来建模,对吧?
比如说我们在做模型设计的时候,你知道这是个 multi-agent 的问题啊,每个 agent 它们有自己的 behavior 啊,那么这个当然也是呃可以呃可以放进去的。啊,就是这些这些结构啊,比如说那个模型设计的时候,嗯,你知道就是你这个模型是呃,就是这个预测呢是一个stochastic的预测啊,你就是它不是非常准确的,不是一个deterministic,你用deterministic的方法。
啊,就是用scikit方法来做,就这就是这些都是一些常用的一些,就是方案嘛。但是最终还是具体问题具体分析,就没有那么简单。
RL目前在Facebook哪方面的应用啊?这个我就不说了,因为这个毕竟不是common的,不是public的啊data啊,不是public东西。但是确实有应用啊,而且效果还不错。呃,后来写了一篇paper,关于预算简化的问题,可以做咱可以用咱们programming做吗?
呃,就要看的,如果这个问题简单的话,可以,因为咱们programming它其实依赖于你的最优问最优子结构这个问这个这个structure,对吧?啊,如果这个structure被打破了之后呢,其实是其实比较难的啊,这个其实没有那么容易。嗯,比如说job scheduling 这个问题,就是其实 job 与 job 之间都是相互有关系的,呃,就是没有一个特别清楚的最优子问题啊,因为 job scheduling 一般情况下是 NP hard 的,是比较难做的,或者说就算你可以用 NP 完美做呢,你的这个 actions 你的那个 state space 是 exponentially big。
啊,这个其实是比较难,就是当然了,就是我们这边就是想要 propose 一个东西,就是希望这个东西能够在比较较比较大的范围里面可以可以把它做出来啊,就是说就算你的 job scheduling 的问题没有那么好的结构,我还是可以用这个方法去试啊,这这是以这个问题的出发点。
请问这个方法在无人无人车路径规划任务中如何使用?呃,这个你可以看一下我们的文章,呃,现在大家看不上挂着。呃,你可以试一下,就是这个文章呢也很简单,就是我们就有一条目前有条比较好的路径啊,我们如何去用这个神经网络去把这个路径变得更好啊?它通过局部的调整的方式把它变得更好啊。
但是无人车路径规划呢,我估计它是个可微的问题,所以可能有更好的解决法。嗯,而且而且,为什么你要用神经网络做呢?可能会更慢,嗯,因为无人车路径规划的话,你要很快,你可能需要,比如说几百毫秒或者几十毫秒,你就要有一个更好的路径规划出来。所以,我不觉得这是一个特别好的一个四点六。
啊,对,你是主要是速度上比较慢嘛,而且对无人车来说,嗯,我觉得G P U是个很稀缺的资源。如果你这个东西上都要用G P U的话,最后的结果就是是,呃,就什么东西都跑不起来。因为最大的问题是你的各种object detection肯定要G P U,那么这个就很占用很大的那个计算资源。不过这个看,如果你们这边是土豪的话,可能可以使用一下。
呃,请问可以讲讲GAN和AI结合吗?啊,我对GAN不是特别熟啊,我也。所以就是我在 blog 里面,我在那个知乎上,我从来不会说 game 的任何工作,因为我不是特别的熟悉这一块。啊,但 game 有一些可以用的东西,比如说我们可以像 language 那边,其实,呃,你可以用 game,然后生成一个比较好的一个判别函数,啊,然后用它来圈一个 reinforcement,比如说是这样子。
嗯,对,或者说那个,在那个,啊。在那个那个 learn from demonstration 里面,就是比如说有那个 goal 对吧?就是说你用 gain 然后然后去学到一个好的 policy,啊,这个 policy 希望这个 policy 生成的那个 trajectory,它跟那个 human trajectory 密不可分啊, gain 这边分不出来就可以了。那么这样的话, gain 就有很好的一个 discriminator。
啊,能够能够让这个push RL,让这个RL生成出来的policy跟那个广义树的policy是一样的。那么这个其实是一篇paper,对。
想用 sequence sequence 学一个序列的 dynamic model 啊,是不是要是不是预测效果不如一步预测?呃,什么叫一步预测?还有,如果看待 Deep Mind 的 TF,我还没看 code,所以我并不知道他们最近前两天刚刚开源了这个东西,但我还没有看,嗯,所以我不好意思,现在不能回答这个问题,嗯。
对,我不知道什么叫用sequence sequence学一个序列的那个model是否效果不如一步预测。呃,啊,这可能是个意思,就是说,呃,你用sequence sequence学一个,就是你可能sequence sequence可以读到之前所有的那个history,然后用它可以去预测下一个啊。呃,下一个seq下一些sequence,呃,这个我不知道。你要看具体的问题,有些可能可以,就是比如说你这个sequence可能并没有那么马尔可夫ian,就是说这个sequence的下一步就不仅依赖于当前的状态,还依赖于很早以前的状态。那么你sequence也许make sense。
对,呃,现在的MDP很多也比较还比较马尔可夫远的,就比如说你在预测下一步的时候,你其实就把当前的state和它前两帧的state叠加在一起,这个state可以拿来做下个的prediction啊,这个就已经挺好的了,对。
呃,投简历要求是什么?怎么投简历呢?呃,我们这边有几个不同的 position,一个就是说,啊,比如说 intern,对吧?intern 的话,那基本基本上要求就是说,呃, PhD,啊,然后呃,就是说他们在那个当前的方向上,比如说有一些比较好的文章,啊,想过来实习的话,你可以投投过来。
呃,然后可能就是像我们这边是做 reinforcement learning 的,那么 reinforcement learning 我们希望这个效果就是可能有一些比较好的文章,有一些比较好的结果,或者也有一些比较有意思的 model,啊,主要是这样的一个过程。然后 robotics 那边呢,就是呃,就是最好你有比较好的那个 robotics 的经验,比如说你最好有 hands on 的。那个robotics经验,你可以你玩过,比如 Sawyer 啊,对吧?给他写过一些 code,然后让他做一些 control tasks,能够做出来。那么这个是一个比较好的 plus,啊,基本上是这样子。
那AI各种方向其实都会有考虑,所以如果对AI有兴趣的或者之前有经历的话,也可以欢迎鼓励投。我们之后可能会在NIPS之前放一个official的一个呃广告出来啊,这样子。
呃,请问可以用A to C做模模型优化吗?什么叫模型优化?我也也是指optimization of,嗯,这模型是指那个dynamic model吗?呃,我相信是可以的。你可以做就是类似 meta learning 的方式啊,你可以说,嗯,我们可以内圈啊是一个呃 planning 的一个问题,那么这个 planning 呢是需要打那些 model 去做的,然后外圈呢是一个 A 三 C A 二 C 对吧?然后外圈就是调那个内圈的那个打那个 model,那这样就可以了。
那么这个为什么要这么做?也许一种可能的scenario,比如说那个model本身是不可微分的,所以你需要用A三A二C去做,啊,这个是可以的。
请问,RL现阶段或近两三年内可以在哪些应用的场景中落地,解决实际的问题呢?嗯,游戏其实是个挺实际的问题,啊。而且解决得很好,呃,但是再往上走的呢,我觉得就不太好说了,因为有很多方向可以走啊,比如说那个 robotics 也许是一个可能的可能的选择,但是现在也不好说,啊,对吧?或者说那个 model-based approach 是不是能 transfer 啊,是不是能降低那个 sample complexity?那么这些其实都是比较 research 的问题啊。那么,嗯,这个其实不太好说,这要完全看具体的情况了啊啊。
然后有没有把将RL和model-based control研究起结合起来做控制的?呃,做控制的推荐的研究成果啊,这个其实有很多文章,像刚才那个,呃,刚刚那篇。其实已经是model-based,因为你调呃你estimate the model,然后你其实是backpropagate through time,然后去找到比较好的policy,对吗?所以这篇已经算是结合起来做控制。
啊,它的那个实验呢,其实是在那个那个actual的robot上做的,啊,做那个cartpole啊,做那个那个double pendulum这样子,嗯。然后最近也有一些,比如说用 model-based 和 model-free放在一起,然后做那个呃 control的,啊,这都是这都是有的。
呃,就是现在用主要问题是就是 model base 呢,啊是对于 exploration 比较好,然后呃它可能一开始能够很快的收敛,啊,但是它最后的结果并不一定有 model free 好,因为 model free 就是它是直接学 value function 和 policy function,它不要通过哪些 model,那么它可能在最后那一部分能够学的更准一点。啊,现在主要这个状态。那么现在最近有很多文章,怎么样去 combine model based model free?
好,那如果基本上就这些问题的话,那就就这样吧。还有什么问题吗?好,没有问题的话,那就那就那就这样吧。感谢大家参加。结束啦。