Sources
如果一个MDP已经给出来的情况下,我们如何去导出它的最优策略?调化学就是这样的,给你一个环境,当然这个环境有可能是白盒环境,MDP有可能是黑盒环境。你只能跟他交互出数据,但不知道他的transition的具体的数学形式是怎样的。最终经过强化学习的这个过程,最后再导出一个最优的策略,这就是它的一个输出。 如果说我们是基于NDP本身,也就是说这个tradition和review function都是知道的话,那我们其实也是一样的使用策略提升的整个价值链。首先对于策略本身的价值去做出一个评估,也就是policy evacuation。基于这个policy evaluation咱可以去导出一个更好的策略,不断的迭代,最后我们可以让这个点去完成一个收敛。所以说这个时候,我们可以首先再去review一下这个状态价值和我们的动作价值。这个状态价值也就是基于当前的这个状态,我们policy会选择一个action,看到了相关的reward,以及转移到接下来的新的状态去看转移过去的概率,以及新的状态下它的这样一个价值。 有这样一个贝尔曼等式。在糖化学当中其实有两种等式。我们现在讲的这种贝尔曼等式其实叫做贝尔曼1 expectation equality,这个是叫做贝尔曼期望等式,也就是说我并没有去直接对于action去做一个选择,而就是follow当前policy。我去evaluate的就是当前policy之下我的state,它就是贝尔曼期望的是没有对action直接去做出一个选择。如果对action去做出一个最优选择的话,就是贝尔man opportunities这个equation,就是最优的贝尔曼最优迭代式。 另外一部分就是动作价值,我们强调学当中,其实所谓动作价值并不是直接只定义在一个action之上的,而是定义在data action上的。只是说我们的为了对其说法,我就不叫他状态动作价值就叫动作价值。只要你提到的是动作价值,它不可能是无状态下的动作,肯定是在某个状态下的选择了某个动作的价值。刚刚我们已经基本上review过了,一方面Q可以和V相互之间去对应,另外一方面下一步的Q和下一步的V也可以去根据transition和real function去定义当前这一步的Q和这一步的V这是一个学习当中的一个对于价值函数的一个基本的一个数学定义。 有了这个之后,我们回过头来去看看MDP当中我们策略优化的目标。我们策略优化的目标就是在当前的gent policy和环境交汇过程当中能够获得的价值。我们希望能够最大化对吧?当然这个价值的话,我们还是会有伽马T次方的这样一个衰减,以及我们有的时候为了写作简单,或者说为了环境本身定义就比较简单,它的reward只定义在状态之上,我们就RS。如果说你们找了一条定义在状态和动作的pair上,我们就是RSC。我们可以根据具体的task去变化,但是它几乎协作的方式都是一样的。我们的value function和我们的q function也是基于之前的定义直接写在这边。 有了这个之后,其实我们就可以看到寻找策略的方法其实分为两类。一类叫做策略迭代,另外一类叫价值迭代。根据之前的这样一个policy improvement这个框架定义的话,其实我们首先应该去更多的去看看策略叠他应该是怎么做的。我们再去看他策略迭代的一个special case,一个非常快的一种实现方法叫价值迭代是什么?因为我们之前其实已经讨论过了整个策略提升的框架。就是我们先去评估在任何一个state这个位置到底有哪些action可能会带来更大的价值。接下来我们基于更高的价值的位置策略提升点,我们去更新我们的策略就可以了。所以在这个时候,我们可以看到很自然的就可以去得到第一种算法叫policy iteration或者迭代算法。 大家可以看到基于一个有限动作空间的MDP,我们可以首先初始化我们的一个策略派。基于这个派,我们就可以重复的去做以下迭代的算法。第一步计算V等于V派。这个公式非常短小,它其实它会花很长的时间。因为我们在给定一个pad的情况下,就要去计算到V派。得到这个V派之后,其实等于做完了policy evaluation。我们知道每一个stage下policy它应该有价值是多少。 接下来我们就开始去寻找策略提升点,有了策略evaluation之后,我们就去找策略的提升点。VI等于的是在每一个状态等于的是这个值最大的action,选择一个最大的action,在当前的state下,哪个reward加上gma乘上state这么一个期望它最大,我们就选择哪个点去更新。更新的背后的理论知识就是策略提升定理。找到了一个QAC大于当前的VS点,那咱就直接把质量move过去就可以了。这种更新方法就是要greedy of v的形式。大家可以看到相当于是我我评估清楚了V派,咱接下来就可以直接基于V去做一个策略的分析,都是greedy。 但这种greedy的方法咱知道,就是说因为我们收集到的数据有限。其实在这个位置真的是想去做一个评估,还不太好评估。因为我们现在做的是MDP下的问题,整个MPP咱是展示出来的。所以说没有所谓的数据的问题,它往往就直接基于grade的方法就更新了。如果说我们后面讲的基于无模型强化学习方法,没有这个MDP的这个tradition probability refers要去收集数据,去recover这些东西的话,我们就一定要去兼顾到探索与利用这两者之间。 现在因为是MDP,所以说咱直接就ready求解是没有问题的这是基于V价值函数。如果是咱基于Q价值函数的话,那么更简单。我只需要每一次迭代过程当中,不断的去把当前的Q值计算出来。Q等于Q派,这个写的很简单,但因为什么呢?因为我们的Q这里的q table其实是一个我们计算过程当中维护的一个结果。Q pi其实不是那么好得到的,我们只是通过这个计算方式去把它recover出来。 有了这个Q派之后,它就是策略提升点的本身。就是说你完全可以看到在当前这个位置下,我的VPS是你可能之前的某一个Q算得的那我现在有了QPS a我当然就可以去找一个最大的A去替换这个位置。很简单的策略提升点,就是说在每个stage下我找QSA最大的那个值,去去take去更新我的策略就可以了。策略一旦更新,我所有的value又要重算,对吧?因为策略已经更新了,我价值当然会更新,这样不断的去迭代就可以了。这个过程大家可以看到,就是完全严格follow整个policy general policy iteration的更新方法。 首先我去评估这个策略好哪坏,当然找到策略提升点之后,更新我相应的策略。如果你是MDP,你就可以直接通过greater方法去更新。因为你所有数据都是明透明的。如果咱以后是更新的黑盒环境,不知道这个position等等的概率,我们就需要去baLance好探索数据和利用当前信息两者整个策略迭代的方式就是策略评估,然后找到策略提升点对策略进行一个改进对吧? 好,我们提到这个策略评估,它其实这个过程将公式写的很短,V等于V派,你其实相当于是计算出这个V派这个table或者q pi这个table,我们怎么去计算它的。因为我们其实讲了,我们要知道这个V派或者q pi,但是怎么去计算这个微态或者q pi或这个state,或者q pi q派更难。因为你要你其实要知道QSA,所以说你需要对所有的S和A都要去做出一个计算。 我们做一个简单的例子,就是在这走这种简单的格子不算迷宫,就是格子在这样一个十6格的环境当中,有0到15状态,1到14是非终止状态,0和15是终止状态。每走一格它stay tradition。你如果撞墙他就停在原地,如果不撞墙就走到接下来这个格子上面。当你走到0到15这个格子的时候,这个episode结束。没有走到episode结束的这些状态下,你获得负一的reward。其实很简单,就是在当前policy下,我们要尽快的走出这个迷宫或者这个格子。 因为我们是做策略评估,我并不是要提升我的策略,我现在就先评估一下我的策略。如果这策略是一个非常简单的一个上下左右均为4分之1概率的随机策略的话,我们可以评估一下它的每一个格子上的VPS是多少。我们怎么去做它呢?我们其实是使用了贝尔曼迭代的这种方法去做它。第一点,我们首先去随机策略,我们去初始化每一个格子它的值都为零。当然我们对于基于这样一个v value function v value table的话,我们可以去导出在每一个state下对应的最好的弹性策略是多少,对吧?因为在每个格子当前都是为零,所以说你上下左右都是一样的,所以说它拥有一个上下左右皆为可以的这么一个策略。 当然我如果做了一步迭代,但是啥呢?就是我们去寻找一个value function。比如说在当前的VS的情况之下,我要去找的是我走哪边,使得我获得的reward,再加上伽马乘上接下来的VS plan。当然我可能会有tradition,因为我们这个环境它没有tradition,没有概率,它是termini tic我可以去找这个去更新我现在的新的value。 在这个时候大家可以看到除了银河15号状态以外,其他所有状态。我上下左右走都是走到了一个价值为零的新状态下。因为我还会再加上一个这一步transition的一个负的负一的reward,1到14状态下的更新都变成负一只有0和15当场结束。所以说它的价值仍然为零。在这个时候大家可以看到,我在每一个位置上我就已经可以看得我应该走哪边了。在这两个状态下我肯定是往零这个方向去走,而在其他位置上我还是保持为零。这个时候中间的这部分的状态下,我仍然是上下左都是不一的。只有这两边30 pro state的这两个状态,总共四个状态,他已经找到了相应的更新方向。 这样我可以继续去寻找,我应该去往哪个方向去走,这边为什么是-1.7呢?它其实是往上走为负一往左走为零,往下走为负一往右走为负一。这四个值加在一起除以4,再加上这一步的reward负一得到了-1.75这样一个保留,两位小数-1.7就更新出来这样一个操作,要不断的去迭代。因为我这个时候我的策略其实是没有变的,不断的去迭代。其实最后得到的结果是数字上永远是上下左右都是0.25去做更新的。 但是我基于当前这个table,往右边去达到一个基于当前table的一个提升,或者说我导出最优策略。其实要迭代到最后,你会发现K是迭代到近乎无穷的时候,它会收敛到这样一个格子。这个格子之下它就已经完全收敛住了。他得到的这个策略即使在K等于三的时候,这个策略它d table虽然没有收敛。但是v table它对应的策略提升得到新的参与策略,就已经收敛到最优策略了。这个过程其实就motivate我们去设计一个更快速的迭代方法,叫做价值迭代。 在一个16个格子的小世界当中,我的策略又是一个上下左右都是0.25的这样一个均匀策略。我们去计算它的过程当中,其实我们会发现说计算它本身是一个比较耗时的一个过程。因为我们目标是计算微派对于任何一个格子的这么一个价值。因为在这个位上我们其实已经定义了,其实是一个submission of a派会去选择每一个可能的A当前state下会选择这个A我就会有一个RSC,而且RSC其实是这RS,就可以把RS先提出来。我再加上是接下来的这个伽马,因为伽马等于一,这个在这里面我们也就不用太管了。 那么具体的V派到SI我这边没有加transition的原因是因为它transition是固定的,所以说我选择了一个A之后,那么接下来的这个s line是什么?固定下来了,这样不断的去迭代它就可以了。所以说我们可以发现就是我我等式的左边其实是把等式右边的当前的表格整个计算了一遍等式左边的表格,然后再去替换所有的这个VOS。然后接下来这一轮,K从一比如到2,我又把这个等式左边的这个表格放到等式所有右边去,再去计算了这个公式,然后再去得到一个新的表格。 大家可以看到在这个时候,如果我们要举一个例子的话,比如说在这个K等于1到K等于二这个例子当中,比如这个格子-1.7是怎么计算的?因为这个位置它所获得值都是4分之1,因为我们policy上下左右它都是4分之1。所以说在这个位置,我们就直接写4分之1。 我们接下来我们把这个formation放在里面,因为它是完全一样的这个架构,所以说其实我们不写这个formation,写成是这个括号相加的形式往上走。比如说我们这边大家可以看到往上走就是负一,整个负一都可以提出来。因为它都是往上下走的,都是负一的情况。往上走的话,我们可以看到接下来的价值是一,被停在原地往左走是零,于是就是减0或者加0,往右边走是负一,往下面走也是负一。这样一加的话,大家可以看到就是-1.75,这边他写了两位小数,就是1.7的形式。你可以不断去迭代它,最后发现它会收敛到这样一个位置。 而这个位置为什么大家看到就是这么大一个数字呢?如果是一个上下左右都是4分之1的random policy的话,虽然我这个格子如果我出发点在这个位置,我距离这个出口点只有一步之遥。但是我往上走,往下走,往左走,往下走,走的概率是一样的话,我expectation是要十四步的情况下我才会走出这个迷宫,因为我是上下左右胡乱走的。所以说大家可以看到它最后得到的这个p value应该是V派value function,它是这样一个挺大的数值。 因为我这个policy派不好迭代过,如果说你要是让他收敛的话,其实你得迭代很多步。因为我们这个里面它仍然还是一个伽马值为一的这么一个环境,所以说你的迭代是更复杂,会迭代更长时间。如果你的伽马是一个0.1很小的这样一个脂肪坑,很快就可以在一定精度内收敛。 我们要算的这个V派本身,其实它的计算量可能会很大。它的本身其实是基于它的数值的,而不仅仅只是基于这个袋子有多大,而是数值上它有可能有多多适合收敛。但是我们可以看到在第三步的时候,虽然你大家可以看到这个v value function,它其实距离最终收敛真实的V派还有很长的路要走,对吧?但是这一个K等于3的时候,被拍table就已经对应上,最终我的V已经收敛到了真实价值函数的时候,对应下的这个policy improvement之后的这policy。所以说我们就会想说,有没有可能我就只是在前iteration之下,我就优先更新我的策略,不要去做这个非常繁琐的但是精准的计算,这使得我的计算过程能够提速。如果是拿图示来表示的话,就是这样一个过程。就policy的iteration本身是我要我得精准去计算一个价值函数,是v pi的价值函数。我计算完之后我再精准的得到策略提升点,我再去基于策略提升点去更新我这个策略。 但是在这边的话,我们可以看到新的箭头下,只用往这个方向去计算一定的计算量。我得到了一些新的信息量之后,我就直接可以去做策略提升了。那么我们仍然可以去最终让它渐渐的收敛到这个位置上去。 我们可以看到基于价值函数本身的话,我们其实要去计算价值函数本身,要计算到精确是一个非常繁琐的过程。而我们如果是在中间就已经去提升我们的策略了。它其实是一种是讨巧的,或者说是一种greedy的方法,一种proxim ate的方法,但是它往往效果更好。就好比说我们机器学习当中的batch gradient。你要把整个训练集的所有grade全部算完,你再更新一次你的模型的话,其实这个往往代价太高了。但是如果我们用mini bh或者甚至是stockists great design一个数据去更新,它仍然能够取得优秀的结果,但是它速度会更快。 于是这个价值迭代就是策略迭代的一种加速版本。它牺牲了是每一次我们去评估价值函数的精度,但是它换来的是非常快速的一个更新。我们可以发现我们名字也变成了叫做value iteration。它的整个迭代的根基就是完全基于当前价值函数。而在这个时我们就没有一个所谓的一个policy存在了。大家可以看到我们变成了说对于每一个状态初始化,我们的价值表格为零。 对于我们的策略迭代,我们首先初始化一个策略派,它是random policy,这是完全不同的一个出发点。我对每一个状态我都会去算得这样一个,其实这个叫贝尔曼的U迭代式。也就是说在当前我应该选择哪个action使得我的这个value值能够提升的更多。这个时候大家可以看到,我其实没有一个显示的去定义。因为一旦我定义policy我就会要问V2派是多少。在这个时候大家可以看到,我们几乎是第一次没有把这个V上面去带上一个派的角标。一旦因为一旦带上派的角标,它就一定会对应上这个policy之下的价值是多少。如果我不带角标,它就是一个中间计算的变量,它并没有对应任何有用的policy。 我们可以不断的去基于当前的v table更新完了之后,我就不断的使用这个更新方法。我只要在v table之下去选择一个action,使得接下来我看到的V最大。其实背后它就是一个当前基于v table它诱导出的policy,这样我们可以不断的去去计算它,这个叫做贝尔曼。最优迭代是每次在选择的时候,不再是follow当下policy distribution去计算一个价值的expectation。而是说我就是在当前状态下去选,在所有的action当中选择一个最好的action,使得我的一步transition,这之后的这个价值是最大的。 叫贝尔曼最优点的是在讲q learning的那一节,我们再会去讲说这种贝尔曼最优点的是它是收敛的,并且收敛到全局最优点。在这里我们是首先去介绍这样一个方法,后续的话大家可以看到我们的辅助材料当中的这个浮动点的病理。大家可以看到说它是一收敛,二是收敛到最优点上,它有一个非常棒的这样一个性质。 我们来简单看一下价值迭代的最优这个例子。这个例子其实就比刚刚那个例子更简单一点。在这个格子当中,左上角是唯一的出口,每走一步它是一个负一的reward。这个时候我们就没有一个所谓的adm policy在这边放着了,它就是完全基于当前的value function。去算得我应该怎么去更新我的value方式。 更新的过程就是贝尔曼最优点的是,也就是说我只选择一个能让我的价值最大的这么一个方向去去更新。所以刚开始的时候,我们让所有的这个table它都是设为零的。接下来的大家可以看到,我们除了原来的这个零以外这个格子以外,其他所有的格子它因为往往上下左右都是0,选择一个最大的还是零。比如说零加上一步的负一的reward,它就是负一。 接下来不断的让更新在一的这个位置,它发现它肯定只选左边的。因为它是什么最优迭代,而不是我们刚刚说的policy上的一个迭代,都是要take 4分之1的average。这样的话就变成了说我只要有一步走能走到0,我肯定这一步我就自己肯定是只有负一,因为我只有一步的reward是负一。这样叠加几次之后马上就会收敛,其实最后收敛到的值就是这个格子。以最快的速度走到左上角这个位置的一个格子数量步数就是一个最短路径的一个做法。大家可以看到我们在算法当中最熟悉的这种动态规划的这种做法。 于是我们可以就会去思考说,我这样不断的迭代我的价值函数,它到底会收敛吗?收敛到什么样的位置呢?就在这个时候,我们可以首先告诉大家一个解,这个解就是最优价值函数。 这个最优价值函数是什么呢?我们可以定义一下这个V星S因为所有的V价值函数它它如果是真的valid的话,它就一定要对应上一个policy。所以我们很简单,我们只要将所有policy全部枚举一遍,然后选择A拍S最大的这个位置就可以了,叫V星S这是一个最简单的定义。 我们有一个贝尔曼最优迭代史,大家可以看到刚刚我在这个过程当中写到的贝尔曼最优迭代史。它没有stay transition。因为我们的环境本身它是一个决定性的。你往这边走它就只有一个下一个状态。是什么?下一个状态可能tradition的话,我们其实会在这边加上这个PSCSI的这样一个定义,做一个expectation。 贝尔曼最优迭代是叫贝尔曼optimally question,它跟expectation equation的区别在于说,我们在做expectation equation的时候,是一定是follow当前policy分布去选择action并且求期望。但是如果是optimistic equation的话,那simply就是gradually选择带来价值最高的那个action,其他所有的action的概率都为零。如果说一部定义了reward,那么接下来transition下我们直接选择max下,它的value是最大的那个action去take,当然获得的价值就是求max这样一个操作。得到了这个微星S之后,我们对应上得到了这个最优策略就可以算得出来。如果我的微星S就是这么计算的,我的policy它又完全是基于这个价值表格去算得了最优action。那么这两者就耦合在一起,正好这个微信S就有一个适合他的策略,正好对应这个v table,于是它就变得有意义了。 所以说什么呢?我们在做价值迭代的时候,中间的没有收敛的时候的中间的v table它可能根本就不合法。他没有一个合法的策略去对应这个be table,这是完全有可能的,但是我们可以保证的是它收敛之后,收敛到最优的价值函数之后会有最优的策略正好符合它这个v table,于是它就变成合法的了。中间这个过程咱就是计算的过程,我们没有办法保证它的合法性。所有的策略我们可以通过迭代式就可以看得出来,所有的V派星S都会大于其他的策略在拍下的一个价值。原因是因为一旦有提升的空间,我就可以通过贝尔曼自由迭代史再去更新我当前的v table。如果没有收敛的空间了,那它就收敛了,就被定义为V星了。 所以说这个迭代是它首先第一点,我们有一个不动点的定义,可以证明它一定收敛。并且它每次都是bearman opportunity的一个更新方式,它最后收敛的位置也是最优的。那么在这个时候,我们可以去对比一下价值迭代和策略迭代两种方法它的一个区别。价值迭代的话,它完全是按照价值表格为中间的垫脚石,在不断的往前去推进。这个过程当中,它其实中间是没有任何的合法的意义的。它只在收敛之后,这个价值表格它对应上价值最优的策略,它会有意义。 第二点就是说如果策略迭代的话,它中间的每一步都是有实际意义的。因为它是完全一个合法的策略再去计算这个策略。接下来的在这个策略之下,它的价值的table,永远是每一步都有意义。你随时导出这个table,它都对应上当前的这样一个policy。但是因为他每一次都在计算这个值,它会非常耗时间。所以说policy iteration它其实是更具有理论性质的这么一个好的方法,但是更实际的方法,往往我们会使用价值迭代的方法去计算。它所价值迭代其实是策略迭代的一种贪心更新的方法。如果说策略迭代当中的每一步,我们不再去精准的去计算V等于V派的这一步操作的话,其实它将会退化成一个价值迭代。 另外对于空间比较小的MDP的话,如果我们是希望能够计算的更精准,我们完全可以去通过policy iteration ation的方法,很快的它就可以收敛。原因是因为我计算清楚被派之后,我提升一下。因为MDP不大,所以说他很快就会收敛到最优的策略。但如果对于空间较大的MDP,比如说state比较多,action比较多这种情况的话,我们做策略迭代就往往会花更多的时间。所以在这个时候,我们可能会挑价值迭代,往往效率更高,更实用一些。并且如果没有循环的这种状态转移的话,我们其实使用价值迭代它的速度会非常快。 如果你有循环的迭代的方式的话,其实你使用策略迭代它往往会更稳健一点。因为你完全严格按照当前策略的分布之下,我的这个方法去计算,它不会拥有一些奇怪的循环计算这种结果。所以说我们基本上如果一句话概括的就是当你的环境比较简单的时候,你完全可以使用策略迭代。当你的环境很复杂的时候,你几乎只会选择价值迭代。其实大家可以发现说这是tabular reinforce learning基于表格式强化学习。我们去做的很多策略迭代的后续的方法,我们都是在深度强化学习或者说proximately的强化学习方法当中去直接使用它。 其实为什么这次课要专门先讲策略迭代,原因就是在于它其实背后有更加直接的理论意义。而价值迭代更多的是在一个加速的一个greedy的求解方法。我们这节课因为讲MDP和dynamic program,最后我们还会再讲一个非常简单的一个延伸的一个讨论。当我们的环境本身可能没有不是一个给定的白盒MDP的情况下,我们怎么办?因为之前其实大家已经看到了,我们给定了这个环境的所有state tradition和real function。那我们在这个完全给定的情况下,我们去求解option of policy。所以说在一个MDP已经给定的情况下,我们去求一个policy,这个过程我们叫diamond program。 为什么叫program?叫规划?相当于它他在reinforce learning面,它是这个样子的那如果在suber file learning里面,我相当于直接给了一个p of XY的distribution,我直接去求一个最优的方式,对吧?这过程也叫规划。 比如线性规划,我们如果是求一个线性规划器,那么其实你是完全知道数据本身长什么样,然后你去直接去求得最优的函数。在强化学习当中也是一样的道理。如果说你是完全写出来了这个conditional probability,写出来这个pansies,那他和你在有监督学习当中,整个把数据分布的白盒函数形式写出来是一样的。在这种情况下,你压根不需要任何数据采样了,你就直接根据分布本身去求期望,然后去优化,这个期望就结束,对吧? 我们往往会说强化学习,或者说as a learning process,他自己一定是基于有限的experience data,比如说有限的data instance去做学习。如果咱是基于完全答案式的这种expectation去做学习,它更像是一个规划问题。好,你在很多情况下其实就没有这个MDP,而更多的是交互出了相关的data,我们这个data叫episodes。其实上节课我们已经给大家讲过了,10出发往后去走,take action或者reward往后去走,直到terminal state或者terminal time step。这个过程当中,我们的episode一就叫做第一个周期的轨迹数据。我们会收集到第二个周期的轨迹数据,这样不断的收集下去,我们会获得相应的。 因为data本身,我们能不能从这个data本身去学习,比如说option policy这个过程怎么去做?当然最简单的一种方法,因为我们刚刚才讲完MDP之下的dynamic programing。所以说我们最简单的方法就是从数据当中先去学习一个mdb模型。然后在基于MDB模型,我们去做dynamic programing policy trade或者做alliteration都可以。 这个方法其实很直接很暴力。于是我们可以通过数数的方法就可以首先的去by to recover每一个PSAS pride这么一个transition probability。分母就是我们看到的子和A的pair,分子就是在SA pair之后看到了s Price的次数对吧?这俩次数一除就是这个概率值。还有另外一个就是奖励函数,奖励函数就是我在S这个位置我看到的average?Reward就可以了。但有了环境,它完全就是直接定。我们就只有一个值,只要你看到一个RS那么RS就是这个值本身它没有the casting,你就直接去计算就可以了。 于是在这个过程就很简单,我随机初始化一个策略和环境进行交互,得到相关的经验数据。基于这个经验数据。我们去通过数数的方法,当然也可以通过machining的方法去构建PSA和reward function。构建完了之后,我们基于这个MDP对于我们的说无论是价值迭代还是策略迭代,我们去得到一个新的策略。基于这个新的策略,我们又可以真实环境进行交互,去产生新的经验数据。然后我们再去构建MDP的环境,MDP的模型不断去做。但是大家可以发现这个过程一定会有很强的隐患。 原因是因为大家如果做过这个动态规划的这个实验,你就知道我如果环境建模和真实环境,哪怕差了那么一点点。因为它中间的迭代式是贝尔曼最优迭代式,它有一个max操作。所以但凡你有一个max操作求错了,选择是错的,那么接下来的错误将会往前去传遍所有的state。接下来你进一步的去求解的时候,你会求解更错。那么你得到的policy是错的那polis在和环境进行交互,得到的数据是远离于最优的这样一个分布的。这样不断去做的话,你会发现说你有可能获得的策略就是偏离于最优策略的。 所以说构建一个MDPMDP当中去做dynamic programming,这种思路它虽然看起来很正确,但是in practice效果不是很好。而是我们需要去直接去探索一种不使用MDP当中的动态规划的方法,来直接去学习最优的策略和相应的价值函数。这种方法我们统称叫做model fried reinforce letting,也叫做无模型的化。学习上就是我们对于MDP本身的一个内容的讲解。下一节的话我们会讲解模型的强化学习当中的价值函数的部分,对吧? 如果一个MDP已经给出来的情况下,我们如何去导出它的最优策略?调化学就是这样的,给你一个环境,当然这个环境有可能是白盒环境,MDP有可能是黑盒环境。你只能跟他交互出数据,但不知道他的transition的具体的数学形式是怎样的。最终经过强化学习的这个过程,最后再导出一个最优的策略,这就是它的一个输出。 如果说我们是基于NDP本身,也就是说这个tradition和review function都是知道的话,那我们其实也是一样的使用策略提升的整个价值链。首先对于策略本身的价值去做出一个评估,也就是policy evacuation。基于这个policy evaluation咱可以去导出一个更好的策略,不断的迭代,最后我们可以让这个点去完成一个收敛。所以说这个时候,我们可以首先再去review一下这个状态价值和我们的动作价值。这个状态价值也就是基于当前的这个状态,我们policy会选择一个action,看到了相关的reward,以及转移到接下来的新的状态去看转移过去的概率,以及新的状态下它的这样一个价值。 有这样一个贝尔曼等式。在糖化学当中其实有两种等式。我们现在讲的这种贝尔曼等式其实叫做贝尔曼1 expectation equality,这个是叫做贝尔曼期望等式,也就是说我并没有去直接对于action去做一个选择,而就是follow当前policy。我去evaluate的就是当前policy之下我的state,它就是贝尔曼期望的是没有对action直接去做出一个选择。如果对action去做出一个最优选择的话,就是贝尔man opportunities这个equation,就是最优的贝尔曼最优迭代式。 另外一部分就是动作价值,我们强调学当中,其实所谓动作价值并不是直接只定义在一个action之上的,而是定义在data action上的。只是说我们的为了对其说法,我就不叫他状态动作价值就叫动作价值。只要你提到的是动作价值,它不可能是无状态下的动作,肯定是在某个状态下的选择了某个动作的价值。刚刚我们已经基本上review过了,一方面Q可以和V相互之间去对应,另外一方面下一步的Q和下一步的V也可以去根据transition和real function去定义当前这一步的Q和这一步的V这是一个学习当中的一个对于价值函数的一个基本的一个数学定义。 有了这个之后,我们回过头来去看看MDP当中我们策略优化的目标。我们策略优化的目标就是在当前的gent policy和环境交汇过程当中能够获得的价值。我们希望能够最大化对吧?当然这个价值的话,我们还是会有伽马T次方的这样一个衰减,以及我们有的时候为了写作简单,或者说为了环境本身定义就比较简单,它的reward只定义在状态之上,我们就RS。如果说你们找了一条定义在状态和动作的pair上,我们就是RSC。我们可以根据具体的task去变化,但是它几乎协作的方式都是一样的。我们的value function和我们的q function也是基于之前的定义直接写在这边。 有了这个之后,其实我们就可以看到寻找策略的方法其实分为两类。一类叫做策略迭代,另外一类叫价值迭代。根据之前的这样一个policy improvement这个框架定义的话,其实我们首先应该去更多的去看看策略叠他应该是怎么做的。我们再去看他策略迭代的一个special case,一个非常快的一种实现方法叫价值迭代是什么?因为我们之前其实已经讨论过了整个策略提升的框架。就是我们先去评估在任何一个state这个位置到底有哪些action可能会带来更大的价值。接下来我们基于更高的价值的位置策略提升点,我们去更新我们的策略就可以了。所以在这个时候,我们可以看到很自然的就可以去得到第一种算法叫policy iteration或者迭代算法。 大家可以看到基于一个有限动作空间的MDP,我们可以首先初始化我们的一个策略派。基于这个派,我们就可以重复的去做以下迭代的算法。第一步计算V等于V派。这个公式非常短小,它其实它会花很长的时间。因为我们在给定一个pad的情况下,就要去计算到V派。得到这个V派之后,其实等于做完了policy evaluation。我们知道每一个stage下policy它应该有价值是多少。 接下来我们就开始去寻找策略提升点,有了策略evaluation之后,我们就去找策略的提升点。VI等于的是在每一个状态等于的是这个值最大的action,选择一个最大的action,在当前的state下,哪个reward加上gma乘上state这么一个期望它最大,我们就选择哪个点去更新。更新的背后的理论知识就是策略提升定理。找到了一个QAC大于当前的VS点,那咱就直接把质量move过去就可以了。这种更新方法就是要greedy of v的形式。大家可以看到相当于是我我评估清楚了V派,咱接下来就可以直接基于V去做一个策略的分析,都是greedy。 但这种greedy的方法咱知道,就是说因为我们收集到的数据有限。其实在这个位置真的是想去做一个评估,还不太好评估。因为我们现在做的是MDP下的问题,整个MPP咱是展示出来的。所以说没有所谓的数据的问题,它往往就直接基于grade的方法就更新了。如果说我们后面讲的基于无模型强化学习方法,没有这个MDP的这个tradition probability refers要去收集数据,去recover这些东西的话,我们就一定要去兼顾到探索与利用这两者之间。 现在因为是MDP,所以说咱直接就ready求解是没有问题的这是基于V价值函数。如果是咱基于Q价值函数的话,那么更简单。我只需要每一次迭代过程当中,不断的去把当前的Q值计算出来。Q等于Q派,这个写的很简单,但因为什么呢?因为我们的Q这里的q table其实是一个我们计算过程当中维护的一个结果。Q pi其实不是那么好得到的,我们只是通过这个计算方式去把它recover出来。 有了这个Q派之后,它就是策略提升点的本身。就是说你完全可以看到在当前这个位置下,我的VPS是你可能之前的某一个Q算得的那我现在有了QPS a我当然就可以去找一个最大的A去替换这个位置。很简单的策略提升点,就是说在每个stage下我找QSA最大的那个值,去去take去更新我的策略就可以了。策略一旦更新,我所有的value又要重算,对吧?因为策略已经更新了,我价值当然会更新,这样不断的去迭代就可以了。这个过程大家可以看到,就是完全严格follow整个policy general policy iteration的更新方法。 首先我去评估这个策略好哪坏,当然找到策略提升点之后,更新我相应的策略。如果你是MDP,你就可以直接通过greater方法去更新。因为你所有数据都是明透明的。如果咱以后是更新的黑盒环境,不知道这个position等等的概率,我们就需要去baLance好探索数据和利用当前信息两者整个策略迭代的方式就是策略评估,然后找到策略提升点对策略进行一个改进对吧? 好,我们提到这个策略评估,它其实这个过程将公式写的很短,V等于V派,你其实相当于是计算出这个V派这个table或者q pi这个table,我们怎么去计算它的。因为我们其实讲了,我们要知道这个V派或者q pi,但是怎么去计算这个微态或者q pi或这个state,或者q pi q派更难。因为你要你其实要知道QSA,所以说你需要对所有的S和A都要去做出一个计算。 我们做一个简单的例子,就是在这走这种简单的格子不算迷宫,就是格子在这样一个十6格的环境当中,有0到15状态,1到14是非终止状态,0和15是终止状态。每走一格它stay tradition。你如果撞墙他就停在原地,如果不撞墙就走到接下来这个格子上面。当你走到0到15这个格子的时候,这个episode结束。没有走到episode结束的这些状态下,你获得负一的reward。其实很简单,就是在当前policy下,我们要尽快的走出这个迷宫或者这个格子。 因为我们是做策略评估,我并不是要提升我的策略,我现在就先评估一下我的策略。如果这策略是一个非常简单的一个上下左右均为4分之1概率的随机策略的话,我们可以评估一下它的每一个格子上的VPS是多少。我们怎么去做它呢?我们其实是使用了贝尔曼迭代的这种方法去做它。第一点,我们首先去随机策略,我们去初始化每一个格子它的值都为零。当然我们对于基于这样一个v value function v value table的话,我们可以去导出在每一个state下对应的最好的弹性策略是多少,对吧?因为在每个格子当前都是为零,所以说你上下左右都是一样的,所以说它拥有一个上下左右皆为可以的这么一个策略。 当然我如果做了一步迭代,但是啥呢?就是我们去寻找一个value function。比如说在当前的VS的情况之下,我要去找的是我走哪边,使得我获得的reward,再加上伽马乘上接下来的VS plan。当然我可能会有tradition,因为我们这个环境它没有tradition,没有概率,它是termini tic我可以去找这个去更新我现在的新的value。 在这个时候大家可以看到除了银河15号状态以外,其他所有状态。我上下左右走都是走到了一个价值为零的新状态下。因为我还会再加上一个这一步transition的一个负的负一的reward,1到14状态下的更新都变成负一只有0和15当场结束。所以说它的价值仍然为零。在这个时候大家可以看到,我在每一个位置上我就已经可以看得我应该走哪边了。在这两个状态下我肯定是往零这个方向去走,而在其他位置上我还是保持为零。这个时候中间的这部分的状态下,我仍然是上下左都是不一的。只有这两边30 pro state的这两个状态,总共四个状态,他已经找到了相应的更新方向。 这样我可以继续去寻找,我应该去往哪个方向去走,这边为什么是-1.7呢?它其实是往上走为负一往左走为零,往下走为负一往右走为负一。这四个值加在一起除以4,再加上这一步的reward负一得到了-1.75这样一个保留,两位小数-1.7就更新出来这样一个操作,要不断的去迭代。因为我这个时候我的策略其实是没有变的,不断的去迭代。其实最后得到的结果是数字上永远是上下左右都是0.25去做更新的。 但是我基于当前这个table,往右边去达到一个基于当前table的一个提升,或者说我导出最优策略。其实要迭代到最后,你会发现K是迭代到近乎无穷的时候,它会收敛到这样一个格子。这个格子之下它就已经完全收敛住了。他得到的这个策略即使在K等于三的时候,这个策略它d table虽然没有收敛。但是v table它对应的策略提升得到新的参与策略,就已经收敛到最优策略了。这个过程其实就motivate我们去设计一个更快速的迭代方法,叫做价值迭代。 在一个16个格子的小世界当中,我的策略又是一个上下左右都是0.25的这样一个均匀策略。我们去计算它的过程当中,其实我们会发现说计算它本身是一个比较耗时的一个过程。因为我们目标是计算微派对于任何一个格子的这么一个价值。因为在这个位上我们其实已经定义了,其实是一个submission of a派会去选择每一个可能的A当前state下会选择这个A我就会有一个RSC,而且RSC其实是这RS,就可以把RS先提出来。我再加上是接下来的这个伽马,因为伽马等于一,这个在这里面我们也就不用太管了。 那么具体的V派到SI我这边没有加transition的原因是因为它transition是固定的,所以说我选择了一个A之后,那么接下来的这个s line是什么?固定下来了,这样不断的去迭代它就可以了。所以说我们可以发现就是我我等式的左边其实是把等式右边的当前的表格整个计算了一遍等式左边的表格,然后再去替换所有的这个VOS。然后接下来这一轮,K从一比如到2,我又把这个等式左边的这个表格放到等式所有右边去,再去计算了这个公式,然后再去得到一个新的表格。 大家可以看到在这个时候,如果我们要举一个例子的话,比如说在这个K等于1到K等于二这个例子当中,比如这个格子-1.7是怎么计算的?因为这个位置它所获得值都是4分之1,因为我们policy上下左右它都是4分之1。所以说在这个位置,我们就直接写4分之1。 我们接下来我们把这个formation放在里面,因为它是完全一样的这个架构,所以说其实我们不写这个formation,写成是这个括号相加的形式往上走。比如说我们这边大家可以看到往上走就是负一,整个负一都可以提出来。因为它都是往上下走的,都是负一的情况。往上走的话,我们可以看到接下来的价值是一,被停在原地往左走是零,于是就是减0或者加0,往右边走是负一,往下面走也是负一。这样一加的话,大家可以看到就是-1.75,这边他写了两位小数,就是1.7的形式。你可以不断去迭代它,最后发现它会收敛到这样一个位置。 而这个位置为什么大家看到就是这么大一个数字呢?如果是一个上下左右都是4分之1的random policy的话,虽然我这个格子如果我出发点在这个位置,我距离这个出口点只有一步之遥。但是我往上走,往下走,往左走,往下走,走的概率是一样的话,我expectation是要十四步的情况下我才会走出这个迷宫,因为我是上下左右胡乱走的。所以说大家可以看到它最后得到的这个p value应该是V派value function,它是这样一个挺大的数值。 因为我这个policy派不好迭代过,如果说你要是让他收敛的话,其实你得迭代很多步。因为我们这个里面它仍然还是一个伽马值为一的这么一个环境,所以说你的迭代是更复杂,会迭代更长时间。如果你的伽马是一个0.1很小的这样一个脂肪坑,很快就可以在一定精度内收敛。 我们要算的这个V派本身,其实它的计算量可能会很大。它的本身其实是基于它的数值的,而不仅仅只是基于这个袋子有多大,而是数值上它有可能有多多适合收敛。但是我们可以看到在第三步的时候,虽然你大家可以看到这个v value function,它其实距离最终收敛真实的V派还有很长的路要走,对吧?但是这一个K等于3的时候,被拍table就已经对应上,最终我的V已经收敛到了真实价值函数的时候,对应下的这个policy improvement之后的这policy。所以说我们就会想说,有没有可能我就只是在前iteration之下,我就优先更新我的策略,不要去做这个非常繁琐的但是精准的计算,这使得我的计算过程能够提速。如果是拿图示来表示的话,就是这样一个过程。就policy的iteration本身是我要我得精准去计算一个价值函数,是v pi的价值函数。我计算完之后我再精准的得到策略提升点,我再去基于策略提升点去更新我这个策略。 但是在这边的话,我们可以看到新的箭头下,只用往这个方向去计算一定的计算量。我得到了一些新的信息量之后,我就直接可以去做策略提升了。那么我们仍然可以去最终让它渐渐的收敛到这个位置上去。 我们可以看到基于价值函数本身的话,我们其实要去计算价值函数本身,要计算到精确是一个非常繁琐的过程。而我们如果是在中间就已经去提升我们的策略了。它其实是一种是讨巧的,或者说是一种greedy的方法,一种proxim ate的方法,但是它往往效果更好。就好比说我们机器学习当中的batch gradient。你要把整个训练集的所有grade全部算完,你再更新一次你的模型的话,其实这个往往代价太高了。但是如果我们用mini bh或者甚至是stockists great design一个数据去更新,它仍然能够取得优秀的结果,但是它速度会更快。 于是这个价值迭代就是策略迭代的一种加速版本。它牺牲了是每一次我们去评估价值函数的精度,但是它换来的是非常快速的一个更新。我们可以发现我们名字也变成了叫做value iteration。它的整个迭代的根基就是完全基于当前价值函数。而在这个时我们就没有一个所谓的一个policy存在了。大家可以看到我们变成了说对于每一个状态初始化,我们的价值表格为零。 对于我们的策略迭代,我们首先初始化一个策略派,它是random policy,这是完全不同的一个出发点。我对每一个状态我都会去算得这样一个,其实这个叫贝尔曼的U迭代式。也就是说在当前我应该选择哪个action使得我的这个value值能够提升的更多。这个时候大家可以看到,我其实没有一个显示的去定义。因为一旦我定义policy我就会要问V2派是多少。在这个时候大家可以看到,我们几乎是第一次没有把这个V上面去带上一个派的角标。一旦因为一旦带上派的角标,它就一定会对应上这个policy之下的价值是多少。如果我不带角标,它就是一个中间计算的变量,它并没有对应任何有用的policy。 我们可以不断的去基于当前的v table更新完了之后,我就不断的使用这个更新方法。我只要在v table之下去选择一个action,使得接下来我看到的V最大。其实背后它就是一个当前基于v table它诱导出的policy,这样我们可以不断的去去计算它,这个叫做贝尔曼。最优迭代是每次在选择的时候,不再是follow当下policy distribution去计算一个价值的expectation。而是说我就是在当前状态下去选,在所有的action当中选择一个最好的action,使得我的一步transition,这之后的这个价值是最大的。 叫贝尔曼最优点的是在讲q learning的那一节,我们再会去讲说这种贝尔曼最优点的是它是收敛的,并且收敛到全局最优点。在这里我们是首先去介绍这样一个方法,后续的话大家可以看到我们的辅助材料当中的这个浮动点的病理。大家可以看到说它是一收敛,二是收敛到最优点上,它有一个非常棒的这样一个性质。 我们来简单看一下价值迭代的最优这个例子。这个例子其实就比刚刚那个例子更简单一点。在这个格子当中,左上角是唯一的出口,每走一步它是一个负一的reward。这个时候我们就没有一个所谓的adm policy在这边放着了,它就是完全基于当前的value function。去算得我应该怎么去更新我的value方式。 更新的过程就是贝尔曼最优点的是,也就是说我只选择一个能让我的价值最大的这么一个方向去去更新。所以刚开始的时候,我们让所有的这个table它都是设为零的。接下来的大家可以看到,我们除了原来的这个零以外这个格子以外,其他所有的格子它因为往往上下左右都是0,选择一个最大的还是零。比如说零加上一步的负一的reward,它就是负一。 接下来不断的让更新在一的这个位置,它发现它肯定只选左边的。因为它是什么最优迭代,而不是我们刚刚说的policy上的一个迭代,都是要take 4分之1的average。这样的话就变成了说我只要有一步走能走到0,我肯定这一步我就自己肯定是只有负一,因为我只有一步的reward是负一。这样叠加几次之后马上就会收敛,其实最后收敛到的值就是这个格子。以最快的速度走到左上角这个位置的一个格子数量步数就是一个最短路径的一个做法。大家可以看到我们在算法当中最熟悉的这种动态规划的这种做法。 于是我们可以就会去思考说,我这样不断的迭代我的价值函数,它到底会收敛吗?收敛到什么样的位置呢?就在这个时候,我们可以首先告诉大家一个解,这个解就是最优价值函数。 这个最优价值函数是什么呢?我们可以定义一下这个V星S因为所有的V价值函数它它如果是真的valid的话,它就一定要对应上一个policy。所以我们很简单,我们只要将所有policy全部枚举一遍,然后选择A拍S最大的这个位置就可以了,叫V星S这是一个最简单的定义。 我们有一个贝尔曼最优迭代史,大家可以看到刚刚我在这个过程当中写到的贝尔曼最优迭代史。它没有stay transition。因为我们的环境本身它是一个决定性的。你往这边走它就只有一个下一个状态。是什么?下一个状态可能tradition的话,我们其实会在这边加上这个PSCSI的这样一个定义,做一个expectation。 贝尔曼最优迭代是叫贝尔曼optimally question,它跟expectation equation的区别在于说,我们在做expectation equation的时候,是一定是follow当前policy分布去选择action并且求期望。但是如果是optimistic equation的话,那simply就是gradually选择带来价值最高的那个action,其他所有的action的概率都为零。如果说一部定义了reward,那么接下来transition下我们直接选择max下,它的value是最大的那个action去take,当然获得的价值就是求max这样一个操作。得到了这个微星S之后,我们对应上得到了这个最优策略就可以算得出来。如果我的微星S就是这么计算的,我的policy它又完全是基于这个价值表格去算得了最优action。那么这两者就耦合在一起,正好这个微信S就有一个适合他的策略,正好对应这个v table,于是它就变得有意义了。 所以说什么呢?我们在做价值迭代的时候,中间的没有收敛的时候的中间的v table它可能根本就不合法。他没有一个合法的策略去对应这个be table,这是完全有可能的,但是我们可以保证的是它收敛之后,收敛到最优的价值函数之后会有最优的策略正好符合它这个v table,于是它就变成合法的了。中间这个过程咱就是计算的过程,我们没有办法保证它的合法性。所有的策略我们可以通过迭代式就可以看得出来,所有的V派星S都会大于其他的策略在拍下的一个价值。原因是因为一旦有提升的空间,我就可以通过贝尔曼自由迭代史再去更新我当前的v table。如果没有收敛的空间了,那它就收敛了,就被定义为V星了。 所以说这个迭代是它首先第一点,我们有一个不动点的定义,可以证明它一定收敛。并且它每次都是bearman opportunity的一个更新方式,它最后收敛的位置也是最优的。那么在这个时候,我们可以去对比一下价值迭代和策略迭代两种方法它的一个区别。价值迭代的话,它完全是按照价值表格为中间的垫脚石,在不断的往前去推进。这个过程当中,它其实中间是没有任何的合法的意义的。它只在收敛之后,这个价值表格它对应上价值最优的策略,它会有意义。 第二点就是说如果策略迭代的话,它中间的每一步都是有实际意义的。因为它是完全一个合法的策略再去计算这个策略。接下来的在这个策略之下,它的价值的table,永远是每一步都有意义。你随时导出这个table,它都对应上当前的这样一个policy。但是因为他每一次都在计算这个值,它会非常耗时间。所以说policy iteration它其实是更具有理论性质的这么一个好的方法,但是更实际的方法,往往我们会使用价值迭代的方法去计算。它所价值迭代其实是策略迭代的一种贪心更新的方法。如果说策略迭代当中的每一步,我们不再去精准的去计算V等于V派的这一步操作的话,其实它将会退化成一个价值迭代。 另外对于空间比较小的MDP的话,如果我们是希望能够计算的更精准,我们完全可以去通过policy iteration ation的方法,很快的它就可以收敛。原因是因为我计算清楚被派之后,我提升一下。因为MDP不大,所以说他很快就会收敛到最优的策略。但如果对于空间较大的MDP,比如说state比较多,action比较多这种情况的话,我们做策略迭代就往往会花更多的时间。所以在这个时候,我们可能会挑价值迭代,往往效率更高,更实用一些。并且如果没有循环的这种状态转移的话,我们其实使用价值迭代它的速度会非常快。 如果你有循环的迭代的方式的话,其实你使用策略迭代它往往会更稳健一点。因为你完全严格按照当前策略的分布之下,我的这个方法去计算,它不会拥有一些奇怪的循环计算这种结果。所以说我们基本上如果一句话概括的就是当你的环境比较简单的时候,你完全可以使用策略迭代。当你的环境很复杂的时候,你几乎只会选择价值迭代。其实大家可以发现说这是tabular reinforce learning基于表格式强化学习。我们去做的很多策略迭代的后续的方法,我们都是在深度强化学习或者说proximately的强化学习方法当中去直接使用它。 其实为什么这次课要专门先讲策略迭代,原因就是在于它其实背后有更加直接的理论意义。而价值迭代更多的是在一个加速的一个greedy的求解方法。我们这节课因为讲MDP和dynamic program,最后我们还会再讲一个非常简单的一个延伸的一个讨论。当我们的环境本身可能没有不是一个给定的白盒MDP的情况下,我们怎么办?因为之前其实大家已经看到了,我们给定了这个环境的所有state tradition和real function。那我们在这个完全给定的情况下,我们去求解option of policy。所以说在一个MDP已经给定的情况下,我们去求一个policy,这个过程我们叫diamond program。 为什么叫program?叫规划?相当于它他在reinforce learning面,它是这个样子的那如果在suber file learning里面,我相当于直接给了一个p of XY的distribution,我直接去求一个最优的方式,对吧?这过程也叫规划。 比如线性规划,我们如果是求一个线性规划器,那么其实你是完全知道数据本身长什么样,然后你去直接去求得最优的函数。在强化学习当中也是一样的道理。如果说你是完全写出来了这个conditional probability,写出来这个pansies,那他和你在有监督学习当中,整个把数据分布的白盒函数形式写出来是一样的。在这种情况下,你压根不需要任何数据采样了,你就直接根据分布本身去求期望,然后去优化,这个期望就结束,对吧? 我们往往会说强化学习,或者说as a learning process,他自己一定是基于有限的experience data,比如说有限的data instance去做学习。如果咱是基于完全答案式的这种expectation去做学习,它更像是一个规划问题。好,你在很多情况下其实就没有这个MDP,而更多的是交互出了相关的data,我们这个data叫episodes。其实上节课我们已经给大家讲过了,10出发往后去走,take action或者reward往后去走,直到terminal state或者terminal time step。这个过程当中,我们的episode一就叫做第一个周期的轨迹数据。我们会收集到第二个周期的轨迹数据,这样不断的收集下去,我们会获得相应的。 因为data本身,我们能不能从这个data本身去学习,比如说option policy这个过程怎么去做?当然最简单的一种方法,因为我们刚刚才讲完MDP之下的dynamic programing。所以说我们最简单的方法就是从数据当中先去学习一个mdb模型。然后在基于MDB模型,我们去做dynamic programing policy trade或者做alliteration都可以。 这个方法其实很直接很暴力。于是我们可以通过数数的方法就可以首先的去by to recover每一个PSAS pride这么一个transition probability。分母就是我们看到的子和A的pair,分子就是在SA pair之后看到了s Price的次数对吧?这俩次数一除就是这个概率值。还有另外一个就是奖励函数,奖励函数就是我在S这个位置我看到的average?Reward就可以了。但有了环境,它完全就是直接定。我们就只有一个值,只要你看到一个RS那么RS就是这个值本身它没有the casting,你就直接去计算就可以了。 于是在这个过程就很简单,我随机初始化一个策略和环境进行交互,得到相关的经验数据。基于这个经验数据。我们去通过数数的方法,当然也可以通过machining的方法去构建PSA和reward function。构建完了之后,我们基于这个MDP对于我们的说无论是价值迭代还是策略迭代,我们去得到一个新的策略。基于这个新的策略,我们又可以真实环境进行交互,去产生新的经验数据。然后我们再去构建MDP的环境,MDP的模型不断去做。但是大家可以发现这个过程一定会有很强的隐患。 原因是因为大家如果做过这个动态规划的这个实验,你就知道我如果环境建模和真实环境,哪怕差了那么一点点。因为它中间的迭代式是贝尔曼最优迭代式,它有一个max操作。所以但凡你有一个max操作求错了,选择是错的,那么接下来的错误将会往前去传遍所有的state。接下来你进一步的去求解的时候,你会求解更错。那么你得到的policy是错的那polis在和环境进行交互,得到的数据是远离于最优的这样一个分布的。这样不断去做的话,你会发现说你有可能获得的策略就是偏离于最优策略的。 所以说构建一个MDPMDP当中去做dynamic programming,这种思路它虽然看起来很正确,但是in practice效果不是很好。而是我们需要去直接去探索一种不使用MDP当中的动态规划的方法,来直接去学习最优的策略和相应的价值函数。这种方法我们统称叫做model fried reinforce letting,也叫做无模型的化。学习上就是我们对于MDP本身的一个内容的讲解。下一节的话我们会讲解模型的强化学习当中的价值函数的部分,对吧?
Podcast Editor
Podcast.json
Preview
Audio
