Sources

这个章节其实我们主要就讲的是无模型强化学习model,free reinforcement learning. 而且这里面其实更关键的一个点就是value function dimension。所以说我们叫价值函数估计,或者叫做值函数估计,这节第四节会结合在一起去。因为我们现在无模型强化学当中最关键的点就在于,一我们还是去做出策略的评估。二我们基于这个策略评估的结果一样的去做出策略提升。所以说4其实更多的就是在讲策略提升,三的话更多的是在讲策略评估本身。 先讲一下无模型强化学习,我们上节课其实最后提到了这个点。没有MDP的情况下,咱们没有办法去做单位programme。我们不是直接知道state tradition和real function,但是我们可以拿到一串交互出的轨迹数据。基于这个轨迹数据本身,我们去做所谓的policy learning,这个才是真正的强化学习。 所以有的时候我们大家会说,model based dynamic programming and model free reinforcement learning model free reinforce morning其实建立在moto free的前提之下。如果说是所谓的model base reinforcement ring的话,其实前提仍然是model free的。只是咱要去尽量的构建一个environment model出来。这个是强化学习当中的所谓有模型和无模型之间的核心区别一样的道理。 因为我们前面已经跟大家讲过了,在这个强化学习交互式的环境当中,我们学习的基础就是在于policy iteration这个基础之下。我们首先去评估这个policy之下的价值到底哪些好哪些坏。找到策略提升点,接下来在这些策略提升点上去得到更新提升的策略。所以说我们这边更多的去关注的点,第一步关注的点就在于如何去evaluate这个策略下每一个位置的价值是多少。我们再去看一看这个价值函数本身的定义,基于它本身的定义是一串review相加,基于这个贝尔曼希望迭代是进的这个equation。它其实是在当前的策略之下,我去选择一个action,或者说在选择策略之下我有一个distribution。基于环境的transition,我又找接下来新的state s pray,这之上我可以获得一个价值函数A派SI要以此可以去更新我当前的APS pre。 由于我们无法去直接取得这个PSA和review RS,就希望能够直接基于这个音乐的轨迹数据直接去estimate VPS是多少。所以说其实大家可以看到以前的MDP当中,先把RS和transition p都recover出来。然后我再通过贝尔曼迭代式去更新去estimate的VIS。 那现在不是了,因为我这个数据就长这样子,我一定要去做这个事情,我后面就有可能因为我的模型构建的不准,我直接去做这个事情,他很有可能会把错误往前去传导。有没有办法我直接通过这个轨迹数据直接就得到VAPS,这就是我们要希望能够去探索的点。在一个混乱环境当中,我们采用出来一些数据。对这个数据我希望能够计算出这个背后random variable的一个expectation。因为VPS它是一个expectation,它其实是一render variable期望值。于是基于一些采样出的数据去计算它背后的随机变量的期望值。模特卡罗方法就是最直接的一种方法。这种方法它是一种广泛的计算方法,它使用在很多统计的方法上面,它依赖于重复随机的抽样来获得数值结果,而不是说我直接通过某一些迭代式或者说一些动态规划的方法去计算它它就很直接。 比如说我们去计圆的面积,如果我们不知道派圆周率的取值,我们可以怎么做呢?我们可以去给这个圆去切一个正方形出来,正方形当中我们可以随机的去撒点,然后我们去计算在圆圈当中的点的数量除以正方形当中的总点数量,来得到这个圆和正方形面积的比例。最终我们正方形面积很好算,所以说圆的面积也就可以尽量算出来了。在这个过程当中,大家可以看到它背后的一个原理就是大数定律对不对当我们采样的数量足够多的时候,我们得到的empirically average就可以充分的接近于它的这个expectation。这个是可以由hoffe不等式来直接保证的。具体的大家应该比较清楚,去年的机器学习课也都提到过,公司考的方法的话,在化学当中有比较多的应用,一个很直接的应用就是阿尔法go。 有我们在任何一个棋盘下想要去估计黑白子的胜率,其实完全可以follow一些policy。然后下一个键盘,然后去估计一下黑子或者白子胜率的盘数,可以去间接的去估计这个棋盘下到底是对黑子有利还是对于白子有利。如何去用蒙塔的方法去估计我们的价值呢?因为我们现在目前部分就是从数据当中尽量的去try to recover VPS这么一个价值函数。对于我们收集到的数据,其实背后我们要去计算的所谓的GT也就是说在t step之后所获得的return一个具体的值是多少。如果是大G我们这边就写的是它是一个random variable。在我们的课程当中,如果是小G的话,具体的这一条轨迹在t step机以后,它获得的return具体是多少值?这跟我们的V和A4和A的定义是一样的。于是在这个时候我们可以看到我们的value function的定义。就是说t step我们走到了S这个位置往后去走,看到的累积的奖励值是多少。 我们每条轨迹I就是看到了后面的一个GT,我们可以去对他去做一个压合,求average,就得到了一个empirical的一个estimation,这就是一个使用摩托卡罗方法,对于我们观测到的经验值去求它往后的return the average,这样就可以直接去获得。对它一个其实是一个的估计。因为我们我们所有的数据都是follow当前的policy去得到的。如果说我对于VPS,它就等于的是什么呢?完全就等于的是我我在当前的这一步下,我其实往后去走看到的地址STVS propose派,我看到一些S轨迹,那么它就是走到了S这个位置,它就满足这样一个条件的一个定义。接下来得到的average值就相当于我从一个概率分布下随机采样出N个点,再把这个N个点average,它是完全unbiased estimation。这是摩托卡罗的方法。 我们要实现这个方法的话,往往我们是拿到了数据之后,再反过来去去算每一个state下它的这个VPS是多少。忘了我们交互出了很多片段,每一个tragedy标号为I我们收集了很多SAR,SAR这样一action。我站在任何一个state我就去收集,是我站在这个state之上,往后还有哪些轨迹。经过了这个state,我就把剩下的这个轨迹拿过来。它因为剩下轨迹当中它会有这个小GT,我就去更新我在当前这个state下看到的次数,以及总的return出来的average下,就能够去不断的去更新我当前的VS通过这种方法,我们就可以从大量的采样数据当中直接recover这个VS是多少。并且我们还有一些别的方法去更新它唯一的方法。 因为糖化循环的永远是跟环境不断的在做incremental的交互。我们会有很多条轨迹,每条轨迹可能有一部分轨迹会经过某一个state。比如说有十条轨迹我踩了出来100条轨迹,有十条轨迹在中间经过了S5,我就站在S5这个位置,把后面的GT全部计算出来的average,就得到了这S5的1个estimation。并且这个过程还会持续的去做。所以说我们往往去记录的在每一个ST上,它的VST和NST。NST我访问了多少次这个状态,而VST的话就是说之前的这个average是多少?正好我可以O一的概率去更新。 我又访问到了一条轨迹,这个轨迹经过了ST那我只需要基于之前的一个算法,基于一个incremental性的方法去更新我当前的这样一个average值就可以了。这是一种比较简单的更新方法。首先我把NT加1,用当前这条轨迹的GT减去之前的FG值VST,再除以现在加一过后的这个NST,再加上原来的NS就可以更新现在的VST。这个更新的方法就是一个OE的这种把average去更新的方法。 很简单,如果说我的环境还有一种叫做非稳定性问题,叫non stationary environment,这个其实已经逾越了强化学习的定义,就是说我的或者是我的R值还有可能跟时间有一个眼睛的变化。那么往往我们就会把这个NSTE的这个步长给它直接写成一个固定步长阿尔法。这样的话我们可以把前面的东西不断的忘记。每次更新的时候,其实VST就变成了相当于VST乘上一减阿尔法倍的GT。这样的话我每次乘上一减阿尔法之后,前面的信息就会不断的压缩,我就忘记掉我每次都是乘上的是一减去NS分之一的话,大家可以发现这个N因为是越来越大,所以它其实忘记的越来越慢。其实都是在做average操作,原来的东西不会忘记。所以说如果环境在变化,我们其实是可以选择性的忘记之前的信息的。所以说在这个时候的更新,就是阿尔法的一个补偿,乘上这个delta值去更新。 蒙特卡罗方法就很简单,它是直接是从片段当中去直接去重构这个VS。其实这个VS咱后面就可以去做一些方法了。摩托卡罗方法它是无模型的,而且。他必须得从完整的片子当中进行学习。因为我算每一个小GT的时候,我都得把这个轨迹全部看到,最后我才能加在一起得到一个GT如果它是没有条件的,每条轨迹都是无穷轨迹的话,那我算这个GT就很难去计算它。除非是说你有一个精度值,然后我在这个精度值下我计算到收敛,那这个就会很不efficient。这就是摩托卡罗方法它的一些优点和缺点。优点就是直接从片段中进行学习,缺点是这个任务必须得是一定得结束,他得从完整的片段当中进行学习。 于是在这个时候,我会面临一个问题,这个问题就是我只要是采样的数据,就面临一个问题是我采样这个数据是从哪个分布下采样的。然后我想在新的分布下去做一些估计。之前我们算MDP的时候,因为知道了state ization d其实就是real function,我们永远会知道说B当前policy所谓的这个rope z取到它的概率是多少。因为知道tradition,所以我们怎么样也可以去做一个计算。但现在不一样了,我们现在拿到的其实就是一个死数据。你的派变了之后,这个数据已经不再是由原来的分布当中采样出来的,就会带来一个分布之间的一个区别。我们不可能是从另外一个分布当中的数据直接拿过来去学习当前的分布下的一个目标。所以说我们往往会有一个重要性采样的一个公式。 Important sampling重要性采样其实是一个非常关键的统计学或者是机器学习当中的一个方法。这个方法就会在你以后面试一些公司的一些面试题当中会出现的。Important safety他的意思就是说我如果要估计一个变量在一个分布下的期望,但是我的数据又是来自于另外一个分布,我们能能怎么去估计?这个时候大家可以看到,比如说我想估计的是FX在X从P采样下的一个分布的期望。但是我的数据又来自于在Q采样下的一个X和FX的pair,对吧?那我应该如何去对它进行估计? 这是一个很简单问题。我根据它的这个定义,对于X从P采样下我对FX去求期望。也就是X是从PX下的这个积分下,我对FX求期望。那我做一个换元,前面乘上QX后面再除上QX于是中间就有一个important racial在这边,那前面就变成了换元成了QX那我的expectation也就可以变成是X从Q分布下采样出来的数据之下,我对于里面的这样一个打分函数求期望。这里面的打分函数当中,PX除以QX的这个ratio,我们就称它为importance ratio。 我们往往用贝塔去表示这个importance ration。因为这个ratio如果大家是分别去建模PX和QX的话,直接一除,你就会发现这个过程还挺可怕的。因为一除有可能除出来一个100万都有可能。因为Q值很小的情况下,它正好P值有点大的话,它其实就会有这样一个问题出现,对吧?所以说我们在做的时候,important sampling有一个很大的一个风险,就是来自于various的风险。如果说你求出来的这个值这100万,那么你的average就基本上就看这一个数据。它的racial是最大的,但如果很多其他的racial可能是Q还不如Q那可能连一都不到的话,那其实它的这个值就很小了,对吧? 所以说我们往往在做的时候,有的时候会使用一些方法。比如说我训练一个logic regression去专门去estim这个ratio。但这个ration我有一个upper,最多是一,最小是零。通过这种方式去把一个非常大的这种风险给它去掉。 于是在这个时候大家可以看到,如果说我是基于策略缪产生的数据,这叫tragic tory去估计当前policy pie它的价值,这就非常难了。因为一整条轨迹其实有很多不选择,每步选择如果都有important sampling的话,那咱就把这个important simply给它加在一起,跟大家连成在一起。因为每一步都是马可夫的,它是连乘的概率。那么这样做的话,其实你会发现它的various极大。比如我看到了这一次这一步这一步的GT是很高的。但因为我这样连乘的话,中间有十步,每一步可能都是有大量的结果。结果算下来这一步乘下来之后有1000,那就相当于碰巧看到了一千个概率很高的,就是价值很高的位置,你会错误的定义为这个action非常好啊。但是这个过程它其实又是无偏的,它只是various很大而已,这就是它相关的一个很大的问题。 我的蒙特卡罗方法虽然是无偏的unbiased,但是它的virus很大学过机器学习的同学都知道说,我们任何一个learning的method,它都会分为virus和virus。我的bias虽然很小,virus为0,但是我virus极大,它也不是一个好的记学习方法。最好的方法是baLance和我的virus和vis我可以转出让一部分的bias,但是我我我要换得我的virus很小,这样使得我的performance能够有保障,我的generation era有保障。 这是第二种方法,叫做时序差分算法。这个方法其实我们一直在做,只是说在这个时间点,我们在这个model free的RU的这个范畴下,我们才会去提这个实际上叫做tempo difference learning。MDP当中我们其实经常会说贝尔曼的。无论是最优迭代还是贝尔曼期望迭代,我们其实都是在用未来的价值函数在更新当前的价值函数,这个过程其实就叫做temporal difference learning。只是说在我们真正tempo difference earning的时候,它的工作范畴是在model fried reinforcement ning上面,我们永远还是基于data来去对于我们的价值函数去做新,而不是基于devi programme。所以说他difference learning它其实已经定义在了model free RL的这个范畴之下。 它具体怎么做呢?我们如果说我们是基于一个具体的transition的方法,我们看到了real function,我们看到了价值。这个数据本身如果是由之前的缪收集的,那么我们看到这个transition的概率,看到了整条SAS prime SARS prime的概率。 举个例子,比如说我看到的是SARS plan,这个概率它产生它的过程是首先我已经站在了S这个位置上了,我有一个policy派选择了A或者是原来的选择这个A的概率。接下来环境会产生相关的real function,这个我们就不说了,环境又会resit到一个新的状态。S line上这个概率就统一的都是站在sa的角度上,我下一个s Price的这么一个概率,它俩是一样的。在这个时候如果我们把这两者相除的话,大家可以发现这个racial就是一这个就是一个策略上的一个ratio。站在S这个角度,这两个策略它会选择action的这个比值是多少。 通过这种方式我们就可以将view产生出的一个四元组的数据用来去更新。我基于当前的派去更新它的value function。这样子做,我们仍然有一步的important sample,但是我们总比这个很多步一整条轨迹。我们要做MC的方法,它必须得算整个基地,整个基如果有十部的话,我要连成十个important reason带来的varies要小很多。这就是这个一步的coton sampling,一步的这种point difference learning它带来的一个好处。 于是在这个时候我们再来看一下具体的实际差分算法的一个学习。第一点就是说有没有可能我们是直接基于当前的策略去进行一个学习。这样的话我sample in the ratio都可以不要了。因为我们永远是当前的策略,采用出的数据来更新当前的策略,这样的话我连important sample in ratio都可以不要了。 所以说的话我们可以看到,我们现在希望能够去计算的是这个GT的值。因为我们做的function的estimation就是算GT那么我们得到一个GT,其实可以一步定义就变成是R加上伽马乘上VSD加一的形式。这是一个站在这一步下往一步以外的地方去看,去做出了一个temporal difference的定义。如果是纯GT,我要去基于所有的数据去定义它,就变成了MC但如果我只看一步的奖励值,接下来这一步走到了ST加1,我就直接用value方式计算。VST加一的话它就是temper difference这个方法。所以在这个时候大家可以看到,我这一步操作仍然是对于未来有了一个估计,就是RT加上伽马乘上VST加1。有了估计之后,我再去减去当前度对VS的一个估计,它就仍然会去更新我当前的这样一个价值。 如果是MC的话,目标就是VST被当前的VST加上。比如说阿尔法GT减去AST加一个这样一个更新,这一步就会需要使用到所有的数据。而这个时候我们其实将它变成了是一步的reward加上gma乘上接下来的VST加一的那其实我们可以看到我们只使用了一步的数据,但是我们带上了我们相应的价值函数,就替代掉了我们使用了接下来很多步数据的这个MC的方法。但这个方法大家可以看到,我的更新目标当中就已经出现了这个函数本身的一个值。 在我们机器学习当中,如果你的目标值如果是来源于纯数据的话,没有8S但你的更新目标如果就是你的函数本身。因为我们肯定是目标是函数本身还没有学好,所以它的更新目标本身就是有bias,所以说整个更新的过程是有biased的。所以temple difference learning大家可以看到,是出让了一定的bias,去换得了一个很大的virus的下降。因为我从N步变成了一步,使得它的virus有比较大的下降。这就是我们经常会去做一些像model selection一样的一些事情。到底选择怎样的一个模型,使得我们更新的时候会同时兼顾virus和virus,使得我们最后模型的泛化性效果会以上就是我们对于这个值函数估计MC和temper difference两种方法的一个基本的介绍。我们下节课还会再去对它进行一个对比。 这个章节其实我们主要就讲的是无模型强化学习model,free reinforcement learning. 而且这里面其实更关键的一个点就是value function dimension。所以说我们叫价值函数估计,或者叫做值函数估计,这节第四节会结合在一起去。因为我们现在无模型强化学当中最关键的点就在于,一我们还是去做出策略的评估。二我们基于这个策略评估的结果一样的去做出策略提升。所以说4其实更多的就是在讲策略提升,三的话更多的是在讲策略评估本身。 先讲一下无模型强化学习,我们上节课其实最后提到了这个点。没有MDP的情况下,咱们没有办法去做单位programme。我们不是直接知道state tradition和real function,但是我们可以拿到一串交互出的轨迹数据。基于这个轨迹数据本身,我们去做所谓的policy learning,这个才是真正的强化学习。 所以有的时候我们大家会说,model based dynamic programming and model free reinforcement learning model free reinforce morning其实建立在moto free的前提之下。如果说是所谓的model base reinforcement ring的话,其实前提仍然是model free的。只是咱要去尽量的构建一个environment model出来。这个是强化学习当中的所谓有模型和无模型之间的核心区别一样的道理。 因为我们前面已经跟大家讲过了,在这个强化学习交互式的环境当中,我们学习的基础就是在于policy iteration这个基础之下。我们首先去评估这个policy之下的价值到底哪些好哪些坏。找到策略提升点,接下来在这些策略提升点上去得到更新提升的策略。所以说我们这边更多的去关注的点,第一步关注的点就在于如何去evaluate这个策略下每一个位置的价值是多少。我们再去看一看这个价值函数本身的定义,基于它本身的定义是一串review相加,基于这个贝尔曼希望迭代是进的这个equation。它其实是在当前的策略之下,我去选择一个action,或者说在选择策略之下我有一个distribution。基于环境的transition,我又找接下来新的state s pray,这之上我可以获得一个价值函数A派SI要以此可以去更新我当前的APS pre。 由于我们无法去直接取得这个PSA和review RS,就希望能够直接基于这个音乐的轨迹数据直接去estimate VPS是多少。所以说其实大家可以看到以前的MDP当中,先把RS和transition p都recover出来。然后我再通过贝尔曼迭代式去更新去estimate的VIS。 那现在不是了,因为我这个数据就长这样子,我一定要去做这个事情,我后面就有可能因为我的模型构建的不准,我直接去做这个事情,他很有可能会把错误往前去传导。有没有办法我直接通过这个轨迹数据直接就得到VAPS,这就是我们要希望能够去探索的点。在一个混乱环境当中,我们采用出来一些数据。对这个数据我希望能够计算出这个背后random variable的一个expectation。因为VPS它是一个expectation,它其实是一render variable期望值。于是基于一些采样出的数据去计算它背后的随机变量的期望值。模特卡罗方法就是最直接的一种方法。这种方法它是一种广泛的计算方法,它使用在很多统计的方法上面,它依赖于重复随机的抽样来获得数值结果,而不是说我直接通过某一些迭代式或者说一些动态规划的方法去计算它它就很直接。 比如说我们去计圆的面积,如果我们不知道派圆周率的取值,我们可以怎么做呢?我们可以去给这个圆去切一个正方形出来,正方形当中我们可以随机的去撒点,然后我们去计算在圆圈当中的点的数量除以正方形当中的总点数量,来得到这个圆和正方形面积的比例。最终我们正方形面积很好算,所以说圆的面积也就可以尽量算出来了。在这个过程当中,大家可以看到它背后的一个原理就是大数定律对不对当我们采样的数量足够多的时候,我们得到的empirically average就可以充分的接近于它的这个expectation。这个是可以由hoffe不等式来直接保证的。具体的大家应该比较清楚,去年的机器学习课也都提到过,公司考的方法的话,在化学当中有比较多的应用,一个很直接的应用就是阿尔法go。 有我们在任何一个棋盘下想要去估计黑白子的胜率,其实完全可以follow一些policy。然后下一个键盘,然后去估计一下黑子或者白子胜率的盘数,可以去间接的去估计这个棋盘下到底是对黑子有利还是对于白子有利。如何去用蒙塔的方法去估计我们的价值呢?因为我们现在目前部分就是从数据当中尽量的去try to recover VPS这么一个价值函数。对于我们收集到的数据,其实背后我们要去计算的所谓的GT也就是说在t step之后所获得的return一个具体的值是多少。如果是大G我们这边就写的是它是一个random variable。在我们的课程当中,如果是小G的话,具体的这一条轨迹在t step机以后,它获得的return具体是多少值?这跟我们的V和A4和A的定义是一样的。于是在这个时候我们可以看到我们的value function的定义。就是说t step我们走到了S这个位置往后去走,看到的累积的奖励值是多少。 我们每条轨迹I就是看到了后面的一个GT,我们可以去对他去做一个压合,求average,就得到了一个empirical的一个estimation,这就是一个使用摩托卡罗方法,对于我们观测到的经验值去求它往后的return the average,这样就可以直接去获得。对它一个其实是一个的估计。因为我们我们所有的数据都是follow当前的policy去得到的。如果说我对于VPS,它就等于的是什么呢?完全就等于的是我我在当前的这一步下,我其实往后去走看到的地址STVS propose派,我看到一些S轨迹,那么它就是走到了S这个位置,它就满足这样一个条件的一个定义。接下来得到的average值就相当于我从一个概率分布下随机采样出N个点,再把这个N个点average,它是完全unbiased estimation。这是摩托卡罗的方法。 我们要实现这个方法的话,往往我们是拿到了数据之后,再反过来去去算每一个state下它的这个VPS是多少。忘了我们交互出了很多片段,每一个tragedy标号为I我们收集了很多SAR,SAR这样一action。我站在任何一个state我就去收集,是我站在这个state之上,往后还有哪些轨迹。经过了这个state,我就把剩下的这个轨迹拿过来。它因为剩下轨迹当中它会有这个小GT,我就去更新我在当前这个state下看到的次数,以及总的return出来的average下,就能够去不断的去更新我当前的VS通过这种方法,我们就可以从大量的采样数据当中直接recover这个VS是多少。并且我们还有一些别的方法去更新它唯一的方法。 因为糖化循环的永远是跟环境不断的在做incremental的交互。我们会有很多条轨迹,每条轨迹可能有一部分轨迹会经过某一个state。比如说有十条轨迹我踩了出来100条轨迹,有十条轨迹在中间经过了S5,我就站在S5这个位置,把后面的GT全部计算出来的average,就得到了这S5的1个estimation。并且这个过程还会持续的去做。所以说我们往往去记录的在每一个ST上,它的VST和NST。NST我访问了多少次这个状态,而VST的话就是说之前的这个average是多少?正好我可以O一的概率去更新。 我又访问到了一条轨迹,这个轨迹经过了ST那我只需要基于之前的一个算法,基于一个incremental性的方法去更新我当前的这样一个average值就可以了。这是一种比较简单的更新方法。首先我把NT加1,用当前这条轨迹的GT减去之前的FG值VST,再除以现在加一过后的这个NST,再加上原来的NS就可以更新现在的VST。这个更新的方法就是一个OE的这种把average去更新的方法。 很简单,如果说我的环境还有一种叫做非稳定性问题,叫non stationary environment,这个其实已经逾越了强化学习的定义,就是说我的或者是我的R值还有可能跟时间有一个眼睛的变化。那么往往我们就会把这个NSTE的这个步长给它直接写成一个固定步长阿尔法。这样的话我们可以把前面的东西不断的忘记。每次更新的时候,其实VST就变成了相当于VST乘上一减阿尔法倍的GT。这样的话我每次乘上一减阿尔法之后,前面的信息就会不断的压缩,我就忘记掉我每次都是乘上的是一减去NS分之一的话,大家可以发现这个N因为是越来越大,所以它其实忘记的越来越慢。其实都是在做average操作,原来的东西不会忘记。所以说如果环境在变化,我们其实是可以选择性的忘记之前的信息的。所以说在这个时候的更新,就是阿尔法的一个补偿,乘上这个delta值去更新。 蒙特卡罗方法就很简单,它是直接是从片段当中去直接去重构这个VS。其实这个VS咱后面就可以去做一些方法了。摩托卡罗方法它是无模型的,而且。他必须得从完整的片子当中进行学习。因为我算每一个小GT的时候,我都得把这个轨迹全部看到,最后我才能加在一起得到一个GT如果它是没有条件的,每条轨迹都是无穷轨迹的话,那我算这个GT就很难去计算它。除非是说你有一个精度值,然后我在这个精度值下我计算到收敛,那这个就会很不efficient。这就是摩托卡罗方法它的一些优点和缺点。优点就是直接从片段中进行学习,缺点是这个任务必须得是一定得结束,他得从完整的片段当中进行学习。 于是在这个时候,我会面临一个问题,这个问题就是我只要是采样的数据,就面临一个问题是我采样这个数据是从哪个分布下采样的。然后我想在新的分布下去做一些估计。之前我们算MDP的时候,因为知道了state ization d其实就是real function,我们永远会知道说B当前policy所谓的这个rope z取到它的概率是多少。因为知道tradition,所以我们怎么样也可以去做一个计算。但现在不一样了,我们现在拿到的其实就是一个死数据。你的派变了之后,这个数据已经不再是由原来的分布当中采样出来的,就会带来一个分布之间的一个区别。我们不可能是从另外一个分布当中的数据直接拿过来去学习当前的分布下的一个目标。所以说我们往往会有一个重要性采样的一个公式。 Important sampling重要性采样其实是一个非常关键的统计学或者是机器学习当中的一个方法。这个方法就会在你以后面试一些公司的一些面试题当中会出现的。Important safety他的意思就是说我如果要估计一个变量在一个分布下的期望,但是我的数据又是来自于另外一个分布,我们能能怎么去估计?这个时候大家可以看到,比如说我想估计的是FX在X从P采样下的一个分布的期望。但是我的数据又来自于在Q采样下的一个X和FX的pair,对吧?那我应该如何去对它进行估计? 这是一个很简单问题。我根据它的这个定义,对于X从P采样下我对FX去求期望。也就是X是从PX下的这个积分下,我对FX求期望。那我做一个换元,前面乘上QX后面再除上QX于是中间就有一个important racial在这边,那前面就变成了换元成了QX那我的expectation也就可以变成是X从Q分布下采样出来的数据之下,我对于里面的这样一个打分函数求期望。这里面的打分函数当中,PX除以QX的这个ratio,我们就称它为importance ratio。 我们往往用贝塔去表示这个importance ration。因为这个ratio如果大家是分别去建模PX和QX的话,直接一除,你就会发现这个过程还挺可怕的。因为一除有可能除出来一个100万都有可能。因为Q值很小的情况下,它正好P值有点大的话,它其实就会有这样一个问题出现,对吧?所以说我们在做的时候,important sampling有一个很大的一个风险,就是来自于various的风险。如果说你求出来的这个值这100万,那么你的average就基本上就看这一个数据。它的racial是最大的,但如果很多其他的racial可能是Q还不如Q那可能连一都不到的话,那其实它的这个值就很小了,对吧? 所以说我们往往在做的时候,有的时候会使用一些方法。比如说我训练一个logic regression去专门去estim这个ratio。但这个ration我有一个upper,最多是一,最小是零。通过这种方式去把一个非常大的这种风险给它去掉。 于是在这个时候大家可以看到,如果说我是基于策略缪产生的数据,这叫tragic tory去估计当前policy pie它的价值,这就非常难了。因为一整条轨迹其实有很多不选择,每步选择如果都有important sampling的话,那咱就把这个important simply给它加在一起,跟大家连成在一起。因为每一步都是马可夫的,它是连乘的概率。那么这样做的话,其实你会发现它的various极大。比如我看到了这一次这一步这一步的GT是很高的。但因为我这样连乘的话,中间有十步,每一步可能都是有大量的结果。结果算下来这一步乘下来之后有1000,那就相当于碰巧看到了一千个概率很高的,就是价值很高的位置,你会错误的定义为这个action非常好啊。但是这个过程它其实又是无偏的,它只是various很大而已,这就是它相关的一个很大的问题。 我的蒙特卡罗方法虽然是无偏的unbiased,但是它的virus很大学过机器学习的同学都知道说,我们任何一个learning的method,它都会分为virus和virus。我的bias虽然很小,virus为0,但是我virus极大,它也不是一个好的记学习方法。最好的方法是baLance和我的virus和vis我可以转出让一部分的bias,但是我我我要换得我的virus很小,这样使得我的performance能够有保障,我的generation era有保障。 这是第二种方法,叫做时序差分算法。这个方法其实我们一直在做,只是说在这个时间点,我们在这个model free的RU的这个范畴下,我们才会去提这个实际上叫做tempo difference learning。MDP当中我们其实经常会说贝尔曼的。无论是最优迭代还是贝尔曼期望迭代,我们其实都是在用未来的价值函数在更新当前的价值函数,这个过程其实就叫做temporal difference learning。只是说在我们真正tempo difference earning的时候,它的工作范畴是在model fried reinforcement ning上面,我们永远还是基于data来去对于我们的价值函数去做新,而不是基于devi programme。所以说他difference learning它其实已经定义在了model free RL的这个范畴之下。 它具体怎么做呢?我们如果说我们是基于一个具体的transition的方法,我们看到了real function,我们看到了价值。这个数据本身如果是由之前的缪收集的,那么我们看到这个transition的概率,看到了整条SAS prime SARS prime的概率。 举个例子,比如说我看到的是SARS plan,这个概率它产生它的过程是首先我已经站在了S这个位置上了,我有一个policy派选择了A或者是原来的选择这个A的概率。接下来环境会产生相关的real function,这个我们就不说了,环境又会resit到一个新的状态。S line上这个概率就统一的都是站在sa的角度上,我下一个s Price的这么一个概率,它俩是一样的。在这个时候如果我们把这两者相除的话,大家可以发现这个racial就是一这个就是一个策略上的一个ratio。站在S这个角度,这两个策略它会选择action的这个比值是多少。 通过这种方式我们就可以将view产生出的一个四元组的数据用来去更新。我基于当前的派去更新它的value function。这样子做,我们仍然有一步的important sample,但是我们总比这个很多步一整条轨迹。我们要做MC的方法,它必须得算整个基地,整个基如果有十部的话,我要连成十个important reason带来的varies要小很多。这就是这个一步的coton sampling,一步的这种point difference learning它带来的一个好处。 于是在这个时候我们再来看一下具体的实际差分算法的一个学习。第一点就是说有没有可能我们是直接基于当前的策略去进行一个学习。这样的话我sample in the ratio都可以不要了。因为我们永远是当前的策略,采用出的数据来更新当前的策略,这样的话我连important sample in ratio都可以不要了。 所以说的话我们可以看到,我们现在希望能够去计算的是这个GT的值。因为我们做的function的estimation就是算GT那么我们得到一个GT,其实可以一步定义就变成是R加上伽马乘上VSD加一的形式。这是一个站在这一步下往一步以外的地方去看,去做出了一个temporal difference的定义。如果是纯GT,我要去基于所有的数据去定义它,就变成了MC但如果我只看一步的奖励值,接下来这一步走到了ST加1,我就直接用value方式计算。VST加一的话它就是temper difference这个方法。所以在这个时候大家可以看到,我这一步操作仍然是对于未来有了一个估计,就是RT加上伽马乘上VST加1。有了估计之后,我再去减去当前度对VS的一个估计,它就仍然会去更新我当前的这样一个价值。 如果是MC的话,目标就是VST被当前的VST加上。比如说阿尔法GT减去AST加一个这样一个更新,这一步就会需要使用到所有的数据。而这个时候我们其实将它变成了是一步的reward加上gma乘上接下来的VST加一的那其实我们可以看到我们只使用了一步的数据,但是我们带上了我们相应的价值函数,就替代掉了我们使用了接下来很多步数据的这个MC的方法。但这个方法大家可以看到,我的更新目标当中就已经出现了这个函数本身的一个值。 在我们机器学习当中,如果你的目标值如果是来源于纯数据的话,没有8S但你的更新目标如果就是你的函数本身。因为我们肯定是目标是函数本身还没有学好,所以它的更新目标本身就是有bias,所以说整个更新的过程是有biased的。所以temple difference learning大家可以看到,是出让了一定的bias,去换得了一个很大的virus的下降。因为我从N步变成了一步,使得它的virus有比较大的下降。这就是我们经常会去做一些像model selection一样的一些事情。到底选择怎样的一个模型,使得我们更新的时候会同时兼顾virus和virus,使得我们最后模型的泛化性效果会以上就是我们对于这个值函数估计MC和temper difference两种方法的一个基本的介绍。我们下节课还会再去对它进行一个对比。

Podcast Editor
Podcast.json
Preview
Audio