Sources

我们接着讲这个强化学习当中的近似方法。强化学习如果说我们不做近似的话,它就是只能做table reinforcement learning。基本上永远是大家实验室做的一些玩具,没有办法在我们实际的枫叶落地的场景当中产生相应的应用价值,为我们国家产生GDP。就是因为他拥有这样一个逆境的这么一些方法,才使得强化学习他可以走出cabuli setting,可以去走到更加广阔的空间。 上节课其实我们分为两部分来讲解了这个近似方法。第一部分就是说基于价值函数的近似价值方法的话。我们无论是V派S对于状态的价值还是Q派我们的目标其实是希望能够去尽量精准的去使用一个模型去预测当前策略之下,站在当前的状态或者是状态动作这个pair之上,接下来智能体可以去获得的reward或者return的期望值是多少。比如说我们其实是使用了一个参数化的方法去拟合出了这样一个目标值。 但是其实我们也要知道说这个拟合的方法它并不只是一个最简单的prediction任务。原因就在于说我们强化学习,在不断的学习的过程当中,策略一直在变。策略在变的情况下,大家可以看到这边有个上标派。所以说它的目标值都是当前的S或者当前SA pair,但是他目标值也会一直在变。尤其是当我们的策略直接跟当前的very function或者是q function相关的时候。你在更新这一个q function的时候,那策略其实相应的就变了,对吧?所以说其实我们虽然在做一个所谓的拟合的这样一个任务,但其实拟合的目标是一直在变的这也是我们强化学习当中对于价值函数去做拟合的一个难点。 之前也有一些相应的方法,比如说采样出一定的数据之后,我们再去统一的去做出一个我做完了这次拟合的更新完了之后,我再让我的策略再额外的去采样下一轮的数据,以这种比较节约式的方式来做。而不是说我采样一小批量的数据,我马上就更新了参数。然后更新完我参数之后,我的策略瞬间就变了。比如说我是基于x over q或者是softmax over q或者是if some great over的策略的话,那么你的Q在改变的那一瞬间,你的策略本身就已经变了。这个是一个在动态环境之下,我们去做出拟合这么一个任务。 上节课其实讲到后面的话,就开始进入到了策略本身b policy base的这个定位方法的研究。而以前的话我们其实希望能够去直接了一个popular based policy。现在的话我们是希望直接去在这个基础之上,去给它做出一个参数化的建模。这样子的话我们去修改我们的策略的时候,就只需要改参数就可以,而不会再去改每一个格子里面具体的取值。 你的比如说take它的概率是多少?上节课的话其实我们是基于一个one step t的MDP去做出了一个likelihood ratio的一个简单的推导。这个推导就在这里,我们可以在一步的MDP当中去非常直接的去看到一个策略本身的价值是多少。在这个C品之下,我们可以看到DS就是说环境静态式的采样出一个相关的一个状态的这样一个概率。这个状态概率我们会有对于每一个action去做的一个policy pilot加权。在这之上我们乘上相应的reward的RSC,又得到了这个policy一次episode,就是一步的之下我们获得的价值的一个期望。 在这之上的话,我们take grade的时候,大家可以看到,我们其实也就是policy这一项会take gradient oversea。在这个时候我们就用light hood RA acie这样一个mathematic trick,使得我们前面乘上policy pi后面除上policy pi然后再将这个把它转换成log派a over s的形式在对grade去take去去做相关的去take。最后大家可以看到前面的这个summation,一方面是d of s另外一方面是派a given s在这种情况下我就完全变成什么agent这个policy。 和环境进行交互采样得到的state action pair的distribution。在这之上做加和的话,当然就是基于pop本身他能够遭遇到的,他能够看到的SA pair的这么一个相关的概率,期望之下我们对于log派S2A的log likelihood take gradient over西塔再乘以RS这样子做的话,它是一个简典型的好处。这个expectation是当前policy和environment交互得到的。数据分布之下我可以去算这个期望。那么这个分布之下,我就可以通过采样的形式,直接让我的策略on policy去和这个环境进行交互。采样出的data做average,求得后面的中括号当中的分数值做average,我们可以直接去无偏的拟合到这个grade。对于data gradient。 然后我就去做相关的更就可以了,这是一部的MDP。那么多部的MDP大家可能会觉得有点confusing。因为会有state transition,其实作为一个定理可以去相应的证明。这个slide最后有相关的证明,包括我们的动手学强化学习对应的策略梯度的这一章当中也会有相关的证明。 那么它的结论是什么呢?也就是说对于一个策略而言,我最终的目标可以是去优化策略本身的价值。这个可以被定义为是J一第一个date往后去看的return,或者说j reward策略。每一步他获得的reward,它相应的得到的一个目标值,或者说每一步我得到的价值往后去value,最后去定义这样一个目标值,它的gradient正好都可以去被推,还推算成是这样一个形式。这个形式我们简单的用公式把它写一下,因为我们还会再对它进行一个额外的分析。它其实就是对于这个策略本身,它能够和环境交互过程当中我获得的价值。 这个价值我们刚说的有希望接average r接average v所以这几种setting都可以,你可以简称他average。从环境当中拿到了return的期望是多少?那么这个东西它等于什么呢?大家可以看到其实在这个时候,我会有一个对于数据本身去做一个average的这样一个操作。这个其实也就是在palace pi和环境交互的过程当中,我遭遇到的SA pair是多少。在这之上我会有一个log,然后派sit AGS,对于data是grant,后面的会乘上一个我的价值函数SA pair这样一个形式。当然如果你要严格去写它的话,在这个时候就是拍。但是我更多的是拷贝一个价值的值在这边。 那这个值更新的公式,如果大家仔细去review一下,在我们大二的时候机器学习的课我们怎么去做它的。比如说我们在做classes的时候构建出一个损失函数,或者是说我们损失函数是minimize cross entropy的那其实等价于maximum s log likely could。所以我们其实也可以去定义一个函数。比如说是这个loss of,或者是lightly code of sa的形式。它对于这个sa去求助的时候就是叫R如果是SL的话,super as learning的话,它其实是什么呢?其实是data的probability。 比如说p data这么一个,我采出来X和Y的,按一个payer我会有一个的feature,y是它相关的label彩照,它相关的feature我去构建出了一个相当于是log liquid de。对,log lidy hood是什么呢?我们当时其实会说是probability y就等于的是我predicted y相当于是predicted y或者说是我们直接可以把它以这种形式写出来。也就是因为我们是classic,所以说其实可以写出来的是我们将我们的这个label写在这边。我们的模型其实是一个conditional probability,conditional x对于这个目标需求密度,这边其实是什么是一,因为我们其实并没有这一项,我只是把它写在这边,其实是一对不对。 大家可以看到我对于一个XY pair还是它的label,我是希望我们构建出了一个模型,能够去产生这个label的概率密度,或者说logical最大化这样一个目标。所以说大家可以看到,在这个时候我们可以看到再次去看一下,super mary s learning的graden和the reinforced learning当中的policy grade。其实你写写出来的话,你会发现有两项核心区别。第一项区别是在每一个数据点上,对simple of learning而言,它的目标因为永远这个data本身其实是或者说是oracle data,或者说是自然界的。它作为oracle本身ground choose本身带给或者交给我们的模型的。所以说它每一个数据它的way都是一样的,就是一对吧。那这个其实我们同时也叫它什么呢?叫做invitational arn或者叫behavior cloning。这个我们会在后面的章节当中去教给大家,叫做imitation。 人家模仿学习。虽然我在这个聚成智能大会上跟大家进行交流,就会发现说什么就基本上现在的机器人,比如说人形机器人,它的双手操作基本上是invitation learning的。因为它几乎只需要去用很多人类标注的trade data,我就可以直接去学会如何去take action。在这个时候你可以看到,我们只需要教会给它相关的轨迹当中的pair,在这个state做这样的操作,那个state做那样操作。双手这个级别的参加C的任务就能够完成。下面的两条腿,人形机器人两条腿,他如果说是拙劣的对于人类进行模仿的话,他那个DNA ics会让人形机器人摔倒。在这种情况下,我们往往会需要去做的就是腿这边的control。 用reinforcement learning。无论是我们实验室做了四组集群,还是我们有很多团队做的双足机器人,它都是用enforce learning去做。这个就是一个当前现在可以看感受到的范式。 为什么会reinforce learning和适合于做腿而inviting learning,或者说这种无监督学习behavior?Color可以做手的。大家可以看到这个就是我们第二项第一项不同点是在于我的贝塔的weight。一部分是用Q去做weight不同的weight,另外一部分是拿E去做wait,就是说专家教给你都是对的。原因是来自于第二个点。也就是说A它本身如果是专家教给你的,专家本身或者自然界本身它的这个数据分布是不变的这也是我们做有监督学习它的一个nature。 但是对于reinforcement learning而言,我们要的data其实是agent和environment交互处的data。所以在这个时候我们是需要conditional在本身交互处data上再去做额外的evaluation。所以说在这个时候的Q方式将会非常重要。包括我们现在其实是研究一些什么大模型,无论是这个语言大模型,多模态大模型,或者是说是机器人大模型等等。 这个value function当你在学习它的时候,你会发现说这个value function会起到一个非常重要的做value decoding的guidance一个作用。在这个时候大家可以看到,如果说我们机器人如果说是用脚在地上触碰来进行行走的话,它特别容易碰到一些state自己压根从来没见过情况下。如果说我们并不是在它采样出的数据上来进行训练的话,没有碰到这样数据,他做generalization的时候,他就可能会淡化失败。但是手上的case,其实基本上它是很容易的,可以manipulation这样的任务,他很容易的重定掉绝大多数的state。并且它的一般来说manipulation它的动作都是比较慢的,所以说它不容易出现特别多out of distribution情况。所以说他用的是learning类似于这样的技术就已经能够做的特别好了。所以说也是通过我们昨天的一个开会的经验给大家去做一个分享。大家能更好去对比一下super learning和reinforce learning之间的区别。 其实我认为基于策略梯度的这种强化学习方法才是强化学习本质的原因。是因为第一点,我们的这个state action pair它是由当前policy采样出来的。那么我们是一定要是基于自己采样出来的data,其实才是强化学习。如果是基于纯模仿学习的专家的数据的话,这个不算是真正的或者说原汁原味的强化学习。第二点我们还是要去评估一下,对于每一个x day action pay采样出的数据,要去做一定程度的一个evaluation。它高还是低,它好还是坏,我在基于这个点去做出了log lad的增加还是减少。 他会说那我如果Q方程都是正数怎么办呢?答案是因为你的policy本身其实是一个需要被Normalize的一个概率分布。所以说当你的Q没有大到average的时候,你下一步你会发现它自己相当于下降了。所以说你需要让你的q function大于它自己的average。这个average说白了也就是VS,大于VS它才能够去找到策略提升点,那么它才可以增大s two a的。如果它就是个策略下降点,那我就直接降低SQA的这样一个lift。这本质上就是强化学习。 所以说基于这样一个policy brain theory的话,我们其实可以去有一些直接的方法。因为大家也知道我这边其实策略梯度当中会有一个q function,那么大家去拟合这个q function,或者说去实现这个q function的值的时候,最简单的方法就是MC的方法,对吧?所以说我们是可以基于MC当中的这个小G的这样一个signal,去判断说一个S到A之后,我们能够去得到怎样的一个return GT。基于这个GT我用它无偏的去代替我的QSA,我就可以去对于我的policy的一个参数,它去求得这样一个delta值,对于我的参数进行一个更新。 The reinforce这个算法,我上次其实讲到它是一个缩写词,它是几个单词缩写,并不是一个直接的一个单词。只是缩写出来之后,它正好是reinforce这个词。它的意思就是说我对于当前的policy,我先和环境交互产生调调价税。对于当前产价税,我去从第一步开始,一直到体检一步,去站在这一步的SA的基础之上去计算。接下来我可以看到的return,一般来说我们真正计算的时候就是从最后往前去加,从最后一步开始算,其实往前去加,每一次就多加这一步的reward,把上一步的基地乘上伽马,再加上这一步reward,就得到了这一步的GT。得到这个GT之后,因为我们也存下来了。当时它此刻SA它产生它的这样一个概率,就可以推vlog去计算这个britton,然后对西塔进行更新就可以了。 但是要注意对于这条而言,我们真正最后更新data的时候,得把它数据全过一遍才更新data。如果你直接把data过了一遍就把它更新了。你只过了小部分数据就把现在更新的话,那你下一次再计算这个log派a given s的时候,它的概率就变掉了。这个是大家需要去注意的一点。 所以说大家可以看到基于reinforce这样一个方法,它其实我们可以这么说,它reinforce这个方法,它是一个最简单的最直接的实现了policy gradient theory um的一个方法,实现了基于策略的定式算法。原因是因为我们就直接沿着策略梯度定理的方式做出了一个实现Q直接实现成G而且它是纯on policy的方法来直接进行更新。毫无疑问,既然是MC的方法,那一定就是various很大,没有by但various很大。 那么相比之下我们要如何去降低这个相应的variance呢?最简单的方法就是我多做几次roll out,多做几次在当前SA的pair之上,我去多看到几条try加棰。这种方法其实也是不一定能够很好的去实现的。不是每一个环境大家都能够回滚到T和AT这样一个位置出发。然后不断的从这个起点出发,再去追踪多条traction,比如围棋或者文本生成,也是非常容易回到这个S和AST和AT的。但有的比如说复杂的物理游戏等等,他不是每一个片刻你都能够回滚到那个点上去再去做的操作。比如说有一些像是这个赛车游戏等等,你就只能从头开始,你没有办法直接去。在这种情况下的话,就很难去马上再去产生很多条产品。 而相比之下做的一种方法则是我先产生大量的从头到尾的tragic data,然后我再去看中间有没有哪些SA pair它是同样的,我可以把它多条轨迹给merge在一起,我再去算这个SA pair之后的average return。多种方式来尽量更好的去逼近这样一个expectation USA的形式。所以说这个GGT它就是一个最简单的empirical average,但目标其实是降低它的variance。但是大家可以发现你会觉得说多少条轨迹,这个N要取了多少,这两个应该是一样的。我这边写的有个小开口,这有多少条N你才会觉得这个pair或者觉得这个empirical average比较靠谱呢? 其实真的是很难讲。我们其实以前做过相关的实验。比如当你在做文本生成的时候,如果你要想训练一个value function,就是当前的前文本文本的prefix,再生成下一个token,它所谓的价值函数是多少?你三步1000条不一定好。其实因为这个space实在是太短了,你每一步你可能都会过几千上万。那么你20步,比如说你有20个token,那你其实就是非常大的一个space。你即使3破1000条,它其实还是非常的不确定有这样一种情况出现的。所以说inforce算法虽然它可以用,但其实还是一个基本上可以认为它是一个入门级的算法。 你碰到某这些问题之后,你可以先上一个reinforce,以最少的coding代价先去玩一玩。它不一定效果好,但是它可以给你一些feedback,给你一些license learn等。在这个基础之上,我们再去构建额外的一些方法。 这个冰球世界的话就是reinforce这种算法,它可以去还做的比较好的一个小小的游戏。在这个长方形当中,每30秒会出现一个目标的目标点。这个箭头它可以作用在这个冰球上去,以力的形式作用在这个冰球。这样的话把它推到这个目标点距离非常近的这样一个距离的时候,就可以获得reward。这个就可以比较简单的去使用reinforce这个方法去做。 但是因为这个环境本身它其实是一个连续环境。所以说我们在做reinforce的时候,往往可能就没有办法去merge多条trade,去做出一个更好的return的估计。所以说在这种情况下,我们看到various其实会比较大有的时候可能还会出现policy这个轨迹,policy的value下降的情况。这个是在用于force这种方法很很自然会碰到的情况。 那么我们接下来就会告诉大家,既然这个位置我们会要需要对于policy本身去求它的概率,概率求出来之后再take log,然后再对于ta做grade。所以在这个时候我们会考虑说我们的policy可以是什么。如果我们的action还是像tabler的,它action它本身是离散的选择的话,那么我们也可以知道说做分类问题,比如说对应于super learning当中的分类问题,我们往往会使用这个mode function或者使用soft max function去做双分类。或者是其实就是对于policy而言,我们去构建一个对于每一个SA的一个打分函数。基于这个打分做salt max,我们就可以differential的形式去突出每一个action的这么一个概率。 去做log之后也是非常好求的。比如说在这个时候,我们对于它如果是一个softmax policy,我们对于它take a log之后,再对于参数data进行求导。由于log上面它其实是有分子和分母,log这个分式就是等于log分子减去log分母。对于log分子而言的话,log e potential的FSA那么就变成FSA本身,那它对于CR求导就直接打分函数本身对CR进行求导。 Vlog这个三分母formation of a potential of f我对它进行求导。首先第一点就是把它本身写到了分母上,因为我是对于log求导。第二就是说它在里面的话,它是一个典型的summation的形式。对于里面每一项对于CR求导,又变成了是啊它自己乘上打分函数求导。 在这个时候大家可以看到就会有一个加权求和的形式。这是一个我们只要是softmax本身,它只要对于它里面打分函数参数进行求导,它一定是求出来的形式是这个样子的这形式是什么呢?就是说前面是一个分子加和的形式,里面是一个分母,每一项进行一个打分值。这个本身是什么呢?这就是softmax这样一个概率加和的形式,这叫小小的转,理解一下,稍微急转一下,里面的当然就是正面的被打分的这样一个函数的形式。 所以这个时候大家可以看到,对于一个salt max distribution的log的形式对它进行求导,其实最终它是在干什么事呢?大家可以看到是打分函数本身对于参数进行求导,减去SOTMAX选择出的action的分布之下,打分函数对于贝塔的求导。我们再说一遍,对于一个给定的SAP,对于一个给定的SA我对于西塔进行求导,我对于打分函数的西塔求导等于分函数本身对于CI进行求导,减去在这个action选择分布之下打分函数对于CR求导。 所以后者相当于什么呢?后者相当于是一个average的值,average的grade。大家都可能会选择当前的策略,可以选择不同的action,选择不同的action的概率之下,我们加权平均域grade。接下来grade可以是什么?这是一个average grade。现在这个百分数本身它会有个grade,而选择出了具体的action a就是有个grade。这个解决它的average,解决它的期望是这么一个概率形式。它也会有非常多优秀的性质,这里就不额外去讲了。 这个其实是一个后续包括我们现在大语言模型当中去确定什么word to vector等等,它都会去使用这方面的一些性质。这里面会有很多可以加速的点。大家可以看到在这个时候,如果说我们我要求这个expectation,如果这个expectation它里面可以选择的action特别多。 比如说我是一个语言模型,我接下选next token有32000种选法,你每take your grant,你得在32000上面去做一个加合。这是一个非常有花销的一个大花销产,对吧?那怎么办呢?过去大家可能会使用一些noise contracting的方法。这个就已经超出了我们scope,这个是一个很有意思的点。 对于soft MAX做梯度,做了log之后再做梯度,是一个非常经典的一个调解的一个过程。对于任何一个值,如果这个打分函数仅仅只是一个data transport features对feature SA的形式的话,其实take grade之后大概就是我的特征自己减去我在选择了action之上的我特征自己,是对于特征减去自己的一个average,选择了action之后的特征向量的average值去做一个单减的形式。这个其实后来被jeffrey hinton叫做contract urgence。 不知道上个上上学期,我们讲machine learning的时候,讲到restrictive birds machine的时候,大家还有没有记忆。这就是constructive divergence。我采样相比于我的average之间的diversion,它可以去做成是一个很棒的梯度,去学习我打分函数当中的参数。这是对于我们的policy本身的一个建模的形式。我们后来还是会回过头来去看,无论你对于policy本身是oft max if some grade,还是anyway,但是我们更关键的点在于说那个q function policy great serum当中的q function,我们有没有办法真正的去对它进行一个估计。 Reinforce这个方法的话,它的一个核心的求解方式就是说我用trajectory当中的直接的数据return GT对于我的QSA去做一个拟合。这个礼盒本身是on virus的,但它带来的virus实在是很大。所以说我们往往还是希望能够有一些function,能够直接去拟合到我们想要的这个QPSA的形式。这个就是我们接下来这一小节要讲的这个activated这个框架。 大家可以认为直到目前为止,仍然是强化学习当中最有效,我认为也是最本质是最主流的方法。因为最开始提到的那些大量的基于value的方法,我们下节课正好讲。其实它更加适合初学者,或者是更加适合一个你如果理解的不是特别透的话,你可以先上这种基于价值的方法。就是价值函数很厉害,会让大家会非常快速的去训练出一个可以执行的有一定performance的智能体。但最终你的agent本身要去达到这个最好的performance,会当凌绝顶的这个performance。 不好意思,你只有依赖于act created这个框架,为什么?因为首先第一点,act critic这个框架它是基于策略的框架。第二基于策略框架当中的policy grade theory当中的Q我们这边专门使用一个critic module去拟合它。所以在这个时候大可以看到,我不是enforce我的critic,这个部分直接是基于我的数据return GT来做。而现在的话我们专门有一个模块叫做评论家,叫critic。他去做教练,他去evaluate当前的QSA到底好还是不好。这个点其实可能就一直会问一个问题,我凭啥要用两个模块?我我我machine learning我为什么要用两个模块去去做我的礼盒? 这是一个什么道理呢?其实很简单,大家可以想象我的每一个模块,或者说我如果只有一个模块,它基本上也就只有一个损失函数。我有一个learning的这个目标。如果说我有一个learning的目标,我没有办法很好的去baLance好它各个方向的一个metric。那我这个learning的目标它就不是optimal,就说一个single learning的target。它不一定是很多任务当中的唯一有效的解,都不知道唯一有效解就是有效解没有?我们需要去让某些模块专门去的往里往往某些目标去走。我让另外一个模块往另外一个方向去走,最终两个模块协同的学习,最终它能走到一个非常更好的一个performance点。 这就是为什么act critic这样的框架,双模块这样的框架会一直有效的原因。我们看看act created本身的一个training的process,再去了解一下为什么和一个更加复杂的单损失函数的模块之间会有核心的区别。首先acto critical就是一个双模块的强化学习框架。Actor本身就是policy,就是agent policy。他负责去take action,去挣更多的reward。而critical是在做什么事,是以evaluate当前的actor。它可以去获得的价值是多少?QAC具体是多少?基于这个QAC,它直接去带入policy Green theory当中的Q真正的Q价值函数的内项,最终去训练我们的这个action本身。 所以特别像什么?就是说这个q function它更特别像是说是一个教练。这个pii function更像是当前的一个演员,他的目标就是两者合作,最终使得演员的performance能够。 大家来看一下他们的训练的目标,critic的目标。首先第一点就是他的目标其实非常简单,就是去尽量准确的去拟合当前actor act policy所谓的q function的动作价值。于是在这个时候我们去拟合它的话,我们之前已经学过了。对于我们的价值函数而言,它当然是近似梯度的方法,对吧?这是参数化函数的方法。那我用find function,用find参数去去构建参数的话,我的q function,然后去拟合我们当前actor的这样一个价值。所以说我需要在这当前采样出的当前策略下,采样出的轨迹上,采样出的数据上去拟合我们的q function。当然大家也都非常熟悉了,就你和Q方式有有两种方法,一是MC2是PD那么这里我们很自然的去选择temper difference,因为它需要快速拟合,不用采样大量的数据去做一定程度的拟合。 我们拟合出了critic之后,critic当然就被使用在policy great theory当中去指导我们的actor。在这里大家可以看到,也就是直接带入我们的policy grade series这个位置,本来应该是QPIC,现在咱换成Q5S的形式。这样的话也就是在critic的指导的基础之上,要告诉actor你这个SA好,那个SA不好。这个SAQ高,那个SAQ低。通过这种方式我们直接的去更新我们的policy相应的参数。 于是在这个时候,我们就要会去想说,我们在这个时候有两个模块。机器学习的framework当中变成了两个learning的process,变成了两个交织在一起。Learning process拥有两个损失函数,损失函数对我们来说意味着,第一个测试函数其实是一个tempo difference TD的err loss。目标其实很简单,就是去尽量的精准的去拟合我们真实发生的Q值。第二个目标其实是基于当前我拟合出的价值函数本身,我能不能去采样出相关的去做出我们的采样性的一个提升。使得我们采样新的采样之下,我们的Q值的expected能够尽量的再往上推一点。如果说我们只去build了一个损失函数,其实我们也很难去想象说这两者之间应该如何进行一个merge。如果说我们只是一个价值函数本身的话,你会发现它的目标其实很简单,它就是一个minimum TDL的这么一个目标值。 如果说我们没有办法将TDL的目标值对这个损失值降到0,那么其实我们的优化的就基于价值函数优化的方法,它是不等。同于我最终要将我的策略去做测试的时候看到的性能。虽然你训练的时候,你在优化价值函数的精度,但是这并不意味着你的策略本身达到了一个最高的performance,这是两件事情。如果说我们机器学习当中经常会碰到这种,你训练的时候再优化一个目标,在测试的时候去看另外一个性能。他们俩只要有gap,它就不一定是最好的。但是对于我们的这个actor critic而言,我们至少在actor这个层面上,我们的目标就是在优化它的这样一个价值。毫无疑问这个价值的过程当中,由于我的Q方式不准,我是不一定在这个learning process当中能够优化的很好的。 但是我们每次在take graduate的时候,能够让策略尽量的在正确的方向上,或者说在正确对最好的方向的夹锐角范围内,能够去让它行走就可以了。大家也记得那个梯度图,阶梯图我们能够让他往正确的方向走就可以了。在这个之上我们再去学习新的function,然后再去指引它一个新的策略提升点。 原则上而言,只要你的策略提升点是对的那我们往往学到策略就会有一个实质性的提升。这一点的话其实是第一点。第二点其实也很关键。 我们其实可以讨论一下,在这个过程当中是存在着所谓的对抗博弈在里面的原因是什么?我的q function,如果我不去直接去关注它所谓带来的ten difference error,那我其实就没有意义。我的Q方就是没有motivation去学习。在新actor的distribution之下,我去抓他的temple difference。其实这里面其实带有一定的对抗博弈性。如果说大家是纯纯合作的关系的话,很有可能会得到一些我们这个difference。就不可能去直接去设计它作为我们的目标的本身函数了。而是说它其实是在代一个信息差,再抓一个新的信息差。 就在actor的这样一个精分布之下,我我我又抓到了一些对于value本身的一个估计的不准的这样一个情况。那我当然基于这个点,我的q function本身就bake one that further,再基于q function再去反过来去指导我的actor,你这边又有一些contribution上的一一些一些不足点,然后你再去拉近我,使得我们再会有一个拟合性。这个如果说我放在后续要会讲的生成式对抗模仿学习当中的话,那当然就更加我们名字当中都写到了对抗模仿学习。其实它就会更具有这种更加对抗的这种效果,这个我们会在后续模仿学习的这里面给大家去讲。 其实大家可以想象一下,基本上来说有两点。对抗性其实它是很难去消解掉的,或者说它是很难通过一些相应的设计,把它变成是single这个single objective的这样一个性质。原因就在于说对抗本身它是有一定相反性的。这样使得我们其实是在一个game级别,去使得我们最终的目标能够去达到一个更加优秀的一个状态。如果说在很多合作式的情况下,我甚至有可能构建出一个更大的稍微复杂一点的,但是single objective function,我就可以达到一个比较好的水平。这个其实就是合作社和对抗式之间的一个核心的区别。这个我们可以后面再多阵地强化学习的一节当中,再跟大家进行一些额外的讨论。大家可以看到其实这个双模九的这个模块,其实是起到了强化学习当中非常关键的部分。 然后还有另外一点也是很有趣的一点,我们以前也提到过,你可以发现费德勒他可能会请一个教练,但是那个教练他打网球肯定不如费德勒打得好,对不对?那为什么我费多多还要请教练呢?我孙杨游泳游得很快,我为什么要请个教练?他肯定没有我有的快,甚至连我一半都不如。那为什么我要请个教练呢?原因就在于教练他可以更好的站在你当前的运动数据的基础之上,找到策略提升点,但你自己不一定找得到。他的目标其实是在你基础上找策略提升点,也就是相当于找到了你的漏洞,这也算是一点对抗博弈式的这种感觉,专门找你漏洞而你不足的点,然后给你evaluate出来。基于这个基础之上,我们take policy gradient去弥补这个策略提升点,去完成策略提升。 为什么act critic会有很有帮助?为什么我们不用直接使用reinforce?原因就在于这个点。如果你只是使用reinforce,相当于你的运动员,你每次就看你,比如说孙杨游泳,每次就看你500米游泳的最后的成绩就结束了。你只看那个成绩,然后给自己提升,也不知道在哪提升。是你要教练的话告诉一下,你在第50米的时候,男生的智力有点问题,所以他自己也做不出来那个动作。但是你告诉你,你可以做的更好,对吧?所以这也是一个no free lunch theory的一个部分。 也就是说我其实让模式learning model班成了两部分参数,一部分参数专门去学习当前策略下的价值。另外一部分参数我们去更改我们当前的策略。就是好处在于我有一部分的参数的学习力能够去学习,我专门去抓到策略提升点,另外一部分参数专门去在这个策略提升点上去拟合我的新的策略。这会比我使用两倍的参数做reinforce,就只在action上然后去做reinforce效果会要更好一些。这就是我们去design一个machining frame mr c的一专门需要去注意的点。还有另外一个act created的框架,其实这个用的更多叫做advantages at cretic。 刚刚其实大家应该已经被我已经提示过了。对Q方向而言,如果它都是正数,那么其实我们只是通过policy的Normalization的方法,能够降低一些不是那么正的QSA的action的一个概率。那我为什么不直接去让它q function变成负数呢?因为q function本身它的定义是价值,它的reward cumulative reward期望。所以如果环境都是正的价值,正的奖励的话,那Q方向肯定是都是正的。所以说我们定义了一个叫做优势函数,叫advantage function。它的定义非常简单,就Q减去V形式。我站在V这个位置,我平均take任何action,我的平均的q function的值是V所以我低于平均值的advantage就是负数。 所以在这个时候大家可以看到,如果我take policy great的话,如果碰到了一些below average QE function的这些action,我就可以直接去计算出一个负的advantage。我就直接沿着反方向去更新,这个效率就会高于我们都沿着正方向的更新,大家比赛大家谁跑得快。最后take一个Normalization等价于它降低。 就在policy grain theory当中,这边会有一个q function。这个q function它其实对于真正的polygram的指导其实稍微有点低效,原因是因为它可能都是正数。那么他直接对于policy本身的grade的指导。大家可以看到只要它是正数,它但凡是0.01这种小正数,它仍然是希望他的学习方向,仍然是希望将当前state true action概率是往上提的。只不过大家可以看到,我们只是因为大家别的方向可能会出的更快,在别的AA上它可能是比如说5.2这么好的一个ready function。那么它往这边去走的时候,拐点它会走得更快。会使得说我最后Normalize之后,我原来那个0.01的小的value值的action,它的概率会降低。是通过moralization方法让它下来。 但是大家另外一点也是会需要去注意,如果一条trajectory本身,一条track本身,它overall拿到了非常低的return,但是这个return是正数。原因是因为我们的review function,有些环境,它就是全镇的real function,或者说zero real function。在这种情况下,你看到了一条轨迹之后,这条轨迹最终overall是一个0.01的return。我们好像还是得在每一步上take action的时候,这一步上我还是会这个目标会让他增大他take这个action的概率一点点,但是是往往正向去增大。因为他的学习方向它永远是正数,所以这就是使得我们其实是拥有一个一是低效的,二是我每次都不得不去采样较大量的轨迹数据。否则我采一条轨迹,这条轨迹0.01的return结果会发现它还是增大了一个action的概率。其实这不是我们想要的。所以说我们在做训练的时候,其实就希望能够去构建一个有正有负的这么一个guiding。这就是advances function。 所以说我们是将average作为一条线,below everything的值直接变成负数。能够去让它在即使只有一条轨迹的情况下,我仍然可以去对它进行一个打压,对于一些坏的action进行一些打压。所以说我们不只是所谓的reinforce,我们可能还会叫做弱化学习,弱化一些坏的action。我们如果去定义一个advances function,因为我的q function,咱可以去以这种temple difference方式,以一步的形式给它进行展开。 也就是一步的reward加上stay transition的概率之下,下一步的BS的一个加成。Take a difference加成就是一步都reward成了伽马加上下一步da的分布之下,VPS prime的这么一个概率。我们就将这样一个值可以带入到一个ASA的定义当中,是q function减去v function对吧?那于是就是一步的reward加上transition到下一步的这么一个ASI,再减去当前的VS因为现在这S本身它其实已经确定了,所以说我们这个transition下这个transition distribution下VS相当于是一个常数值,我就直接把它写进去。那么这个是等号,就是完全按照定义去定义的。如果说我们将这个average值或者这个expectation在这个state tradition之下的,用一步的state tradition observation去替代它。也就是说我本来这边要去take一个expectation,但是我直接采样出了一个VS prime,直接采样出VS prime。那么就是一个约等号的写法去写,就是一步reward加上下一步date的一个value,减去当前的v value。 所以说在这一步我们做出了这个推导之后,大家觉得这里面有什么样的magic呢?这里面的magic就在于我们竟然只使用了v function就做出了这个东西VSA。因为大家在想想我我这个ASA对吧?你把QSA变成ASA,好像是说我只是把QSA去做了一个减去average的一个操作。 但是大家可以看到,真的要得到ASA signal的时候,你只需要使用VS的网络就可以了。那么VS的网络和QSA网络之间的核心区别在什么地方?在于VS网络好学,为什么?因为AS网络只需要把一部S进去就可以了,你把一个S进去就可以了,它拟合的值相对而言仍然是比较稳定的。但是如果你要把QQ网络,你得把它学好,学的到处都很好。不好意思,你得把看到很多SA pair,你才能够把QSA学的很好,这之间就是核心区别。所以最后会导致我们下节课讲到的doing DQN当中的那个架构,使得他获得了icml 2016年best paper。我为什么就是在这个地方他做出了一个架构式的优化。 所以说value function咱虽然叫advance function,但是咱真正使用的时候,在train的时候,包括后面大家可能会学PPO这样的方法。那其实里面其实你可以发现,但凡它是使用了advance function,他最后实现的时候就是VS这样的话会使得它的网络本身也比较容易去学。这就是我们近似逼近方法的一个基础的内容。 近似逼近算法它其实就是我们深度强化学习的前身。我们其实接下来就会给大家去讲解说这个近似逼近算法当中使用的参数化的价值函数参数化策略。如果往深度神经网络去走,它就应该是去发扬出了这个深度强化学习。 对于价值函数的学习而言的话,我们其实是使用了链式法则的方式,将tempo difference这个损失值的拐点的传到了我们的参数和函数当中的参数当中的参数求导当中去。而对于我们的policy而言,其实它这个过程当中是无导没有导墅的,这也是为什么强化学经常会去解决一些没有导数的一些无导的一些优化问题。因为我是我们在这个过程当中是可以天然的去使用用reinforce那套架构。它对于它的目标价值和我们的参数,和我们policy参数其实可以舞蹈。这样子做。它也就可以去解决大量的黑盒优化,非常复杂的,完全基于数据本身的策略优化的问题。而我们的一般来说机器学习,你要去拟合它,就往往建立一个可导的损失函数来对它进行一个求解,这是它之间的核心区别。 最后我们讲到activity双模块的强化学习框架,其实是可能算是整个机器学习当中非常有代表性的双模块框架之一。现在最好的强化学习方法仍然使用attic架构。也了解到一首先第一点value function极其重要。我们需要去design一个相当于是参数容量,专门去拟合所谓的critic,去找到当前策略下有价值的策略提升点。接下来我们再用这个policy grain的方法去对于action本身我们的目标模块做出相关的更新,这是非常重要的点。 即使现在在大语言模型时代下,现在最前沿的研究的一些工作,仍然专门在各自的具体的task下专门去学习。用大语言模型作为基座,专门去学习概率方式。无论你是写代码还是做数学,还是做QA,我们都会有对应的价值函数,这个是现在正在研究的前沿。 我们接着讲这个强化学习当中的近似方法。强化学习如果说我们不做近似的话,它就是只能做table reinforcement learning。基本上永远是大家实验室做的一些玩具,没有办法在我们实际的枫叶落地的场景当中产生相应的应用价值,为我们国家产生GDP。就是因为他拥有这样一个逆境的这么一些方法,才使得强化学习他可以走出cabuli setting,可以去走到更加广阔的空间。 上节课其实我们分为两部分来讲解了这个近似方法。第一部分就是说基于价值函数的近似价值方法的话。我们无论是V派S对于状态的价值还是Q派我们的目标其实是希望能够去尽量精准的去使用一个模型去预测当前策略之下,站在当前的状态或者是状态动作这个pair之上,接下来智能体可以去获得的reward或者return的期望值是多少。比如说我们其实是使用了一个参数化的方法去拟合出了这样一个目标值。 但是其实我们也要知道说这个拟合的方法它并不只是一个最简单的prediction任务。原因就在于说我们强化学习,在不断的学习的过程当中,策略一直在变。策略在变的情况下,大家可以看到这边有个上标派。所以说它的目标值都是当前的S或者当前SA pair,但是他目标值也会一直在变。尤其是当我们的策略直接跟当前的very function或者是q function相关的时候。你在更新这一个q function的时候,那策略其实相应的就变了,对吧?所以说其实我们虽然在做一个所谓的拟合的这样一个任务,但其实拟合的目标是一直在变的这也是我们强化学习当中对于价值函数去做拟合的一个难点。 之前也有一些相应的方法,比如说采样出一定的数据之后,我们再去统一的去做出一个我做完了这次拟合的更新完了之后,我再让我的策略再额外的去采样下一轮的数据,以这种比较节约式的方式来做。而不是说我采样一小批量的数据,我马上就更新了参数。然后更新完我参数之后,我的策略瞬间就变了。比如说我是基于x over q或者是softmax over q或者是if some great over的策略的话,那么你的Q在改变的那一瞬间,你的策略本身就已经变了。这个是一个在动态环境之下,我们去做出拟合这么一个任务。 上节课其实讲到后面的话,就开始进入到了策略本身b policy base的这个定位方法的研究。而以前的话我们其实希望能够去直接了一个popular based policy。现在的话我们是希望直接去在这个基础之上,去给它做出一个参数化的建模。这样子的话我们去修改我们的策略的时候,就只需要改参数就可以,而不会再去改每一个格子里面具体的取值。 你的比如说take它的概率是多少?上节课的话其实我们是基于一个one step t的MDP去做出了一个likelihood ratio的一个简单的推导。这个推导就在这里,我们可以在一步的MDP当中去非常直接的去看到一个策略本身的价值是多少。在这个C品之下,我们可以看到DS就是说环境静态式的采样出一个相关的一个状态的这样一个概率。这个状态概率我们会有对于每一个action去做的一个policy pilot加权。在这之上我们乘上相应的reward的RSC,又得到了这个policy一次episode,就是一步的之下我们获得的价值的一个期望。 在这之上的话,我们take grade的时候,大家可以看到,我们其实也就是policy这一项会take gradient oversea。在这个时候我们就用light hood RA acie这样一个mathematic trick,使得我们前面乘上policy pi后面除上policy pi然后再将这个把它转换成log派a over s的形式在对grade去take去去做相关的去take。最后大家可以看到前面的这个summation,一方面是d of s另外一方面是派a given s在这种情况下我就完全变成什么agent这个policy。 和环境进行交互采样得到的state action pair的distribution。在这之上做加和的话,当然就是基于pop本身他能够遭遇到的,他能够看到的SA pair的这么一个相关的概率,期望之下我们对于log派S2A的log likelihood take gradient over西塔再乘以RS这样子做的话,它是一个简典型的好处。这个expectation是当前policy和environment交互得到的。数据分布之下我可以去算这个期望。那么这个分布之下,我就可以通过采样的形式,直接让我的策略on policy去和这个环境进行交互。采样出的data做average,求得后面的中括号当中的分数值做average,我们可以直接去无偏的拟合到这个grade。对于data gradient。 然后我就去做相关的更就可以了,这是一部的MDP。那么多部的MDP大家可能会觉得有点confusing。因为会有state transition,其实作为一个定理可以去相应的证明。这个slide最后有相关的证明,包括我们的动手学强化学习对应的策略梯度的这一章当中也会有相关的证明。 那么它的结论是什么呢?也就是说对于一个策略而言,我最终的目标可以是去优化策略本身的价值。这个可以被定义为是J一第一个date往后去看的return,或者说j reward策略。每一步他获得的reward,它相应的得到的一个目标值,或者说每一步我得到的价值往后去value,最后去定义这样一个目标值,它的gradient正好都可以去被推,还推算成是这样一个形式。这个形式我们简单的用公式把它写一下,因为我们还会再对它进行一个额外的分析。它其实就是对于这个策略本身,它能够和环境交互过程当中我获得的价值。 这个价值我们刚说的有希望接average r接average v所以这几种setting都可以,你可以简称他average。从环境当中拿到了return的期望是多少?那么这个东西它等于什么呢?大家可以看到其实在这个时候,我会有一个对于数据本身去做一个average的这样一个操作。这个其实也就是在palace pi和环境交互的过程当中,我遭遇到的SA pair是多少。在这之上我会有一个log,然后派sit AGS,对于data是grant,后面的会乘上一个我的价值函数SA pair这样一个形式。当然如果你要严格去写它的话,在这个时候就是拍。但是我更多的是拷贝一个价值的值在这边。 那这个值更新的公式,如果大家仔细去review一下,在我们大二的时候机器学习的课我们怎么去做它的。比如说我们在做classes的时候构建出一个损失函数,或者是说我们损失函数是minimize cross entropy的那其实等价于maximum s log likely could。所以我们其实也可以去定义一个函数。比如说是这个loss of,或者是lightly code of sa的形式。它对于这个sa去求助的时候就是叫R如果是SL的话,super as learning的话,它其实是什么呢?其实是data的probability。 比如说p data这么一个,我采出来X和Y的,按一个payer我会有一个的feature,y是它相关的label彩照,它相关的feature我去构建出了一个相当于是log liquid de。对,log lidy hood是什么呢?我们当时其实会说是probability y就等于的是我predicted y相当于是predicted y或者说是我们直接可以把它以这种形式写出来。也就是因为我们是classic,所以说其实可以写出来的是我们将我们的这个label写在这边。我们的模型其实是一个conditional probability,conditional x对于这个目标需求密度,这边其实是什么是一,因为我们其实并没有这一项,我只是把它写在这边,其实是一对不对。 大家可以看到我对于一个XY pair还是它的label,我是希望我们构建出了一个模型,能够去产生这个label的概率密度,或者说logical最大化这样一个目标。所以说大家可以看到,在这个时候我们可以看到再次去看一下,super mary s learning的graden和the reinforced learning当中的policy grade。其实你写写出来的话,你会发现有两项核心区别。第一项区别是在每一个数据点上,对simple of learning而言,它的目标因为永远这个data本身其实是或者说是oracle data,或者说是自然界的。它作为oracle本身ground choose本身带给或者交给我们的模型的。所以说它每一个数据它的way都是一样的,就是一对吧。那这个其实我们同时也叫它什么呢?叫做invitational arn或者叫behavior cloning。这个我们会在后面的章节当中去教给大家,叫做imitation。 人家模仿学习。虽然我在这个聚成智能大会上跟大家进行交流,就会发现说什么就基本上现在的机器人,比如说人形机器人,它的双手操作基本上是invitation learning的。因为它几乎只需要去用很多人类标注的trade data,我就可以直接去学会如何去take action。在这个时候你可以看到,我们只需要教会给它相关的轨迹当中的pair,在这个state做这样的操作,那个state做那样操作。双手这个级别的参加C的任务就能够完成。下面的两条腿,人形机器人两条腿,他如果说是拙劣的对于人类进行模仿的话,他那个DNA ics会让人形机器人摔倒。在这种情况下,我们往往会需要去做的就是腿这边的control。 用reinforcement learning。无论是我们实验室做了四组集群,还是我们有很多团队做的双足机器人,它都是用enforce learning去做。这个就是一个当前现在可以看感受到的范式。 为什么会reinforce learning和适合于做腿而inviting learning,或者说这种无监督学习behavior?Color可以做手的。大家可以看到这个就是我们第二项第一项不同点是在于我的贝塔的weight。一部分是用Q去做weight不同的weight,另外一部分是拿E去做wait,就是说专家教给你都是对的。原因是来自于第二个点。也就是说A它本身如果是专家教给你的,专家本身或者自然界本身它的这个数据分布是不变的这也是我们做有监督学习它的一个nature。 但是对于reinforcement learning而言,我们要的data其实是agent和environment交互处的data。所以在这个时候我们是需要conditional在本身交互处data上再去做额外的evaluation。所以说在这个时候的Q方式将会非常重要。包括我们现在其实是研究一些什么大模型,无论是这个语言大模型,多模态大模型,或者是说是机器人大模型等等。 这个value function当你在学习它的时候,你会发现说这个value function会起到一个非常重要的做value decoding的guidance一个作用。在这个时候大家可以看到,如果说我们机器人如果说是用脚在地上触碰来进行行走的话,它特别容易碰到一些state自己压根从来没见过情况下。如果说我们并不是在它采样出的数据上来进行训练的话,没有碰到这样数据,他做generalization的时候,他就可能会淡化失败。但是手上的case,其实基本上它是很容易的,可以manipulation这样的任务,他很容易的重定掉绝大多数的state。并且它的一般来说manipulation它的动作都是比较慢的,所以说它不容易出现特别多out of distribution情况。所以说他用的是learning类似于这样的技术就已经能够做的特别好了。所以说也是通过我们昨天的一个开会的经验给大家去做一个分享。大家能更好去对比一下super learning和reinforce learning之间的区别。 其实我认为基于策略梯度的这种强化学习方法才是强化学习本质的原因。是因为第一点,我们的这个state action pair它是由当前policy采样出来的。那么我们是一定要是基于自己采样出来的data,其实才是强化学习。如果是基于纯模仿学习的专家的数据的话,这个不算是真正的或者说原汁原味的强化学习。第二点我们还是要去评估一下,对于每一个x day action pay采样出的数据,要去做一定程度的一个evaluation。它高还是低,它好还是坏,我在基于这个点去做出了log lad的增加还是减少。 他会说那我如果Q方程都是正数怎么办呢?答案是因为你的policy本身其实是一个需要被Normalize的一个概率分布。所以说当你的Q没有大到average的时候,你下一步你会发现它自己相当于下降了。所以说你需要让你的q function大于它自己的average。这个average说白了也就是VS,大于VS它才能够去找到策略提升点,那么它才可以增大s two a的。如果它就是个策略下降点,那我就直接降低SQA的这样一个lift。这本质上就是强化学习。 所以说基于这样一个policy brain theory的话,我们其实可以去有一些直接的方法。因为大家也知道我这边其实策略梯度当中会有一个q function,那么大家去拟合这个q function,或者说去实现这个q function的值的时候,最简单的方法就是MC的方法,对吧?所以说我们是可以基于MC当中的这个小G的这样一个signal,去判断说一个S到A之后,我们能够去得到怎样的一个return GT。基于这个GT我用它无偏的去代替我的QSA,我就可以去对于我的policy的一个参数,它去求得这样一个delta值,对于我的参数进行一个更新。 The reinforce这个算法,我上次其实讲到它是一个缩写词,它是几个单词缩写,并不是一个直接的一个单词。只是缩写出来之后,它正好是reinforce这个词。它的意思就是说我对于当前的policy,我先和环境交互产生调调价税。对于当前产价税,我去从第一步开始,一直到体检一步,去站在这一步的SA的基础之上去计算。接下来我可以看到的return,一般来说我们真正计算的时候就是从最后往前去加,从最后一步开始算,其实往前去加,每一次就多加这一步的reward,把上一步的基地乘上伽马,再加上这一步reward,就得到了这一步的GT。得到这个GT之后,因为我们也存下来了。当时它此刻SA它产生它的这样一个概率,就可以推vlog去计算这个britton,然后对西塔进行更新就可以了。 但是要注意对于这条而言,我们真正最后更新data的时候,得把它数据全过一遍才更新data。如果你直接把data过了一遍就把它更新了。你只过了小部分数据就把现在更新的话,那你下一次再计算这个log派a given s的时候,它的概率就变掉了。这个是大家需要去注意的一点。 所以说大家可以看到基于reinforce这样一个方法,它其实我们可以这么说,它reinforce这个方法,它是一个最简单的最直接的实现了policy gradient theory um的一个方法,实现了基于策略的定式算法。原因是因为我们就直接沿着策略梯度定理的方式做出了一个实现Q直接实现成G而且它是纯on policy的方法来直接进行更新。毫无疑问,既然是MC的方法,那一定就是various很大,没有by但various很大。 那么相比之下我们要如何去降低这个相应的variance呢?最简单的方法就是我多做几次roll out,多做几次在当前SA的pair之上,我去多看到几条try加棰。这种方法其实也是不一定能够很好的去实现的。不是每一个环境大家都能够回滚到T和AT这样一个位置出发。然后不断的从这个起点出发,再去追踪多条traction,比如围棋或者文本生成,也是非常容易回到这个S和AST和AT的。但有的比如说复杂的物理游戏等等,他不是每一个片刻你都能够回滚到那个点上去再去做的操作。比如说有一些像是这个赛车游戏等等,你就只能从头开始,你没有办法直接去。在这种情况下的话,就很难去马上再去产生很多条产品。 而相比之下做的一种方法则是我先产生大量的从头到尾的tragic data,然后我再去看中间有没有哪些SA pair它是同样的,我可以把它多条轨迹给merge在一起,我再去算这个SA pair之后的average return。多种方式来尽量更好的去逼近这样一个expectation USA的形式。所以说这个GGT它就是一个最简单的empirical average,但目标其实是降低它的variance。但是大家可以发现你会觉得说多少条轨迹,这个N要取了多少,这两个应该是一样的。我这边写的有个小开口,这有多少条N你才会觉得这个pair或者觉得这个empirical average比较靠谱呢? 其实真的是很难讲。我们其实以前做过相关的实验。比如当你在做文本生成的时候,如果你要想训练一个value function,就是当前的前文本文本的prefix,再生成下一个token,它所谓的价值函数是多少?你三步1000条不一定好。其实因为这个space实在是太短了,你每一步你可能都会过几千上万。那么你20步,比如说你有20个token,那你其实就是非常大的一个space。你即使3破1000条,它其实还是非常的不确定有这样一种情况出现的。所以说inforce算法虽然它可以用,但其实还是一个基本上可以认为它是一个入门级的算法。 你碰到某这些问题之后,你可以先上一个reinforce,以最少的coding代价先去玩一玩。它不一定效果好,但是它可以给你一些feedback,给你一些license learn等。在这个基础之上,我们再去构建额外的一些方法。 这个冰球世界的话就是reinforce这种算法,它可以去还做的比较好的一个小小的游戏。在这个长方形当中,每30秒会出现一个目标的目标点。这个箭头它可以作用在这个冰球上去,以力的形式作用在这个冰球。这样的话把它推到这个目标点距离非常近的这样一个距离的时候,就可以获得reward。这个就可以比较简单的去使用reinforce这个方法去做。 但是因为这个环境本身它其实是一个连续环境。所以说我们在做reinforce的时候,往往可能就没有办法去merge多条trade,去做出一个更好的return的估计。所以说在这种情况下,我们看到various其实会比较大有的时候可能还会出现policy这个轨迹,policy的value下降的情况。这个是在用于force这种方法很很自然会碰到的情况。 那么我们接下来就会告诉大家,既然这个位置我们会要需要对于policy本身去求它的概率,概率求出来之后再take log,然后再对于ta做grade。所以在这个时候我们会考虑说我们的policy可以是什么。如果我们的action还是像tabler的,它action它本身是离散的选择的话,那么我们也可以知道说做分类问题,比如说对应于super learning当中的分类问题,我们往往会使用这个mode function或者使用soft max function去做双分类。或者是其实就是对于policy而言,我们去构建一个对于每一个SA的一个打分函数。基于这个打分做salt max,我们就可以differential的形式去突出每一个action的这么一个概率。 去做log之后也是非常好求的。比如说在这个时候,我们对于它如果是一个softmax policy,我们对于它take a log之后,再对于参数data进行求导。由于log上面它其实是有分子和分母,log这个分式就是等于log分子减去log分母。对于log分子而言的话,log e potential的FSA那么就变成FSA本身,那它对于CR求导就直接打分函数本身对CR进行求导。 Vlog这个三分母formation of a potential of f我对它进行求导。首先第一点就是把它本身写到了分母上,因为我是对于log求导。第二就是说它在里面的话,它是一个典型的summation的形式。对于里面每一项对于CR求导,又变成了是啊它自己乘上打分函数求导。 在这个时候大家可以看到就会有一个加权求和的形式。这是一个我们只要是softmax本身,它只要对于它里面打分函数参数进行求导,它一定是求出来的形式是这个样子的这形式是什么呢?就是说前面是一个分子加和的形式,里面是一个分母,每一项进行一个打分值。这个本身是什么呢?这就是softmax这样一个概率加和的形式,这叫小小的转,理解一下,稍微急转一下,里面的当然就是正面的被打分的这样一个函数的形式。 所以这个时候大家可以看到,对于一个salt max distribution的log的形式对它进行求导,其实最终它是在干什么事呢?大家可以看到是打分函数本身对于参数进行求导,减去SOTMAX选择出的action的分布之下,打分函数对于贝塔的求导。我们再说一遍,对于一个给定的SAP,对于一个给定的SA我对于西塔进行求导,我对于打分函数的西塔求导等于分函数本身对于CI进行求导,减去在这个action选择分布之下打分函数对于CR求导。 所以后者相当于什么呢?后者相当于是一个average的值,average的grade。大家都可能会选择当前的策略,可以选择不同的action,选择不同的action的概率之下,我们加权平均域grade。接下来grade可以是什么?这是一个average grade。现在这个百分数本身它会有个grade,而选择出了具体的action a就是有个grade。这个解决它的average,解决它的期望是这么一个概率形式。它也会有非常多优秀的性质,这里就不额外去讲了。 这个其实是一个后续包括我们现在大语言模型当中去确定什么word to vector等等,它都会去使用这方面的一些性质。这里面会有很多可以加速的点。大家可以看到在这个时候,如果说我们我要求这个expectation,如果这个expectation它里面可以选择的action特别多。 比如说我是一个语言模型,我接下选next token有32000种选法,你每take your grant,你得在32000上面去做一个加合。这是一个非常有花销的一个大花销产,对吧?那怎么办呢?过去大家可能会使用一些noise contracting的方法。这个就已经超出了我们scope,这个是一个很有意思的点。 对于soft MAX做梯度,做了log之后再做梯度,是一个非常经典的一个调解的一个过程。对于任何一个值,如果这个打分函数仅仅只是一个data transport features对feature SA的形式的话,其实take grade之后大概就是我的特征自己减去我在选择了action之上的我特征自己,是对于特征减去自己的一个average,选择了action之后的特征向量的average值去做一个单减的形式。这个其实后来被jeffrey hinton叫做contract urgence。 不知道上个上上学期,我们讲machine learning的时候,讲到restrictive birds machine的时候,大家还有没有记忆。这就是constructive divergence。我采样相比于我的average之间的diversion,它可以去做成是一个很棒的梯度,去学习我打分函数当中的参数。这是对于我们的policy本身的一个建模的形式。我们后来还是会回过头来去看,无论你对于policy本身是oft max if some grade,还是anyway,但是我们更关键的点在于说那个q function policy great serum当中的q function,我们有没有办法真正的去对它进行一个估计。 Reinforce这个方法的话,它的一个核心的求解方式就是说我用trajectory当中的直接的数据return GT对于我的QSA去做一个拟合。这个礼盒本身是on virus的,但它带来的virus实在是很大。所以说我们往往还是希望能够有一些function,能够直接去拟合到我们想要的这个QPSA的形式。这个就是我们接下来这一小节要讲的这个activated这个框架。 大家可以认为直到目前为止,仍然是强化学习当中最有效,我认为也是最本质是最主流的方法。因为最开始提到的那些大量的基于value的方法,我们下节课正好讲。其实它更加适合初学者,或者是更加适合一个你如果理解的不是特别透的话,你可以先上这种基于价值的方法。就是价值函数很厉害,会让大家会非常快速的去训练出一个可以执行的有一定performance的智能体。但最终你的agent本身要去达到这个最好的performance,会当凌绝顶的这个performance。 不好意思,你只有依赖于act created这个框架,为什么?因为首先第一点,act critic这个框架它是基于策略的框架。第二基于策略框架当中的policy grade theory当中的Q我们这边专门使用一个critic module去拟合它。所以在这个时候大可以看到,我不是enforce我的critic,这个部分直接是基于我的数据return GT来做。而现在的话我们专门有一个模块叫做评论家,叫critic。他去做教练,他去evaluate当前的QSA到底好还是不好。这个点其实可能就一直会问一个问题,我凭啥要用两个模块?我我我machine learning我为什么要用两个模块去去做我的礼盒? 这是一个什么道理呢?其实很简单,大家可以想象我的每一个模块,或者说我如果只有一个模块,它基本上也就只有一个损失函数。我有一个learning的这个目标。如果说我有一个learning的目标,我没有办法很好的去baLance好它各个方向的一个metric。那我这个learning的目标它就不是optimal,就说一个single learning的target。它不一定是很多任务当中的唯一有效的解,都不知道唯一有效解就是有效解没有?我们需要去让某些模块专门去的往里往往某些目标去走。我让另外一个模块往另外一个方向去走,最终两个模块协同的学习,最终它能走到一个非常更好的一个performance点。 这就是为什么act critic这样的框架,双模块这样的框架会一直有效的原因。我们看看act created本身的一个training的process,再去了解一下为什么和一个更加复杂的单损失函数的模块之间会有核心的区别。首先acto critical就是一个双模块的强化学习框架。Actor本身就是policy,就是agent policy。他负责去take action,去挣更多的reward。而critical是在做什么事,是以evaluate当前的actor。它可以去获得的价值是多少?QAC具体是多少?基于这个QAC,它直接去带入policy Green theory当中的Q真正的Q价值函数的内项,最终去训练我们的这个action本身。 所以特别像什么?就是说这个q function它更特别像是说是一个教练。这个pii function更像是当前的一个演员,他的目标就是两者合作,最终使得演员的performance能够。 大家来看一下他们的训练的目标,critic的目标。首先第一点就是他的目标其实非常简单,就是去尽量准确的去拟合当前actor act policy所谓的q function的动作价值。于是在这个时候我们去拟合它的话,我们之前已经学过了。对于我们的价值函数而言,它当然是近似梯度的方法,对吧?这是参数化函数的方法。那我用find function,用find参数去去构建参数的话,我的q function,然后去拟合我们当前actor的这样一个价值。所以说我需要在这当前采样出的当前策略下,采样出的轨迹上,采样出的数据上去拟合我们的q function。当然大家也都非常熟悉了,就你和Q方式有有两种方法,一是MC2是PD那么这里我们很自然的去选择temper difference,因为它需要快速拟合,不用采样大量的数据去做一定程度的拟合。 我们拟合出了critic之后,critic当然就被使用在policy great theory当中去指导我们的actor。在这里大家可以看到,也就是直接带入我们的policy grade series这个位置,本来应该是QPIC,现在咱换成Q5S的形式。这样的话也就是在critic的指导的基础之上,要告诉actor你这个SA好,那个SA不好。这个SAQ高,那个SAQ低。通过这种方式我们直接的去更新我们的policy相应的参数。 于是在这个时候,我们就要会去想说,我们在这个时候有两个模块。机器学习的framework当中变成了两个learning的process,变成了两个交织在一起。Learning process拥有两个损失函数,损失函数对我们来说意味着,第一个测试函数其实是一个tempo difference TD的err loss。目标其实很简单,就是去尽量的精准的去拟合我们真实发生的Q值。第二个目标其实是基于当前我拟合出的价值函数本身,我能不能去采样出相关的去做出我们的采样性的一个提升。使得我们采样新的采样之下,我们的Q值的expected能够尽量的再往上推一点。如果说我们只去build了一个损失函数,其实我们也很难去想象说这两者之间应该如何进行一个merge。如果说我们只是一个价值函数本身的话,你会发现它的目标其实很简单,它就是一个minimum TDL的这么一个目标值。 如果说我们没有办法将TDL的目标值对这个损失值降到0,那么其实我们的优化的就基于价值函数优化的方法,它是不等。同于我最终要将我的策略去做测试的时候看到的性能。虽然你训练的时候,你在优化价值函数的精度,但是这并不意味着你的策略本身达到了一个最高的performance,这是两件事情。如果说我们机器学习当中经常会碰到这种,你训练的时候再优化一个目标,在测试的时候去看另外一个性能。他们俩只要有gap,它就不一定是最好的。但是对于我们的这个actor critic而言,我们至少在actor这个层面上,我们的目标就是在优化它的这样一个价值。毫无疑问这个价值的过程当中,由于我的Q方式不准,我是不一定在这个learning process当中能够优化的很好的。 但是我们每次在take graduate的时候,能够让策略尽量的在正确的方向上,或者说在正确对最好的方向的夹锐角范围内,能够去让它行走就可以了。大家也记得那个梯度图,阶梯图我们能够让他往正确的方向走就可以了。在这个之上我们再去学习新的function,然后再去指引它一个新的策略提升点。 原则上而言,只要你的策略提升点是对的那我们往往学到策略就会有一个实质性的提升。这一点的话其实是第一点。第二点其实也很关键。 我们其实可以讨论一下,在这个过程当中是存在着所谓的对抗博弈在里面的原因是什么?我的q function,如果我不去直接去关注它所谓带来的ten difference error,那我其实就没有意义。我的Q方就是没有motivation去学习。在新actor的distribution之下,我去抓他的temple difference。其实这里面其实带有一定的对抗博弈性。如果说大家是纯纯合作的关系的话,很有可能会得到一些我们这个difference。就不可能去直接去设计它作为我们的目标的本身函数了。而是说它其实是在代一个信息差,再抓一个新的信息差。 就在actor的这样一个精分布之下,我我我又抓到了一些对于value本身的一个估计的不准的这样一个情况。那我当然基于这个点,我的q function本身就bake one that further,再基于q function再去反过来去指导我的actor,你这边又有一些contribution上的一一些一些不足点,然后你再去拉近我,使得我们再会有一个拟合性。这个如果说我放在后续要会讲的生成式对抗模仿学习当中的话,那当然就更加我们名字当中都写到了对抗模仿学习。其实它就会更具有这种更加对抗的这种效果,这个我们会在后续模仿学习的这里面给大家去讲。 其实大家可以想象一下,基本上来说有两点。对抗性其实它是很难去消解掉的,或者说它是很难通过一些相应的设计,把它变成是single这个single objective的这样一个性质。原因就在于说对抗本身它是有一定相反性的。这样使得我们其实是在一个game级别,去使得我们最终的目标能够去达到一个更加优秀的一个状态。如果说在很多合作式的情况下,我甚至有可能构建出一个更大的稍微复杂一点的,但是single objective function,我就可以达到一个比较好的水平。这个其实就是合作社和对抗式之间的一个核心的区别。这个我们可以后面再多阵地强化学习的一节当中,再跟大家进行一些额外的讨论。大家可以看到其实这个双模九的这个模块,其实是起到了强化学习当中非常关键的部分。 然后还有另外一点也是很有趣的一点,我们以前也提到过,你可以发现费德勒他可能会请一个教练,但是那个教练他打网球肯定不如费德勒打得好,对不对?那为什么我费多多还要请教练呢?我孙杨游泳游得很快,我为什么要请个教练?他肯定没有我有的快,甚至连我一半都不如。那为什么我要请个教练呢?原因就在于教练他可以更好的站在你当前的运动数据的基础之上,找到策略提升点,但你自己不一定找得到。他的目标其实是在你基础上找策略提升点,也就是相当于找到了你的漏洞,这也算是一点对抗博弈式的这种感觉,专门找你漏洞而你不足的点,然后给你evaluate出来。基于这个基础之上,我们take policy gradient去弥补这个策略提升点,去完成策略提升。 为什么act critic会有很有帮助?为什么我们不用直接使用reinforce?原因就在于这个点。如果你只是使用reinforce,相当于你的运动员,你每次就看你,比如说孙杨游泳,每次就看你500米游泳的最后的成绩就结束了。你只看那个成绩,然后给自己提升,也不知道在哪提升。是你要教练的话告诉一下,你在第50米的时候,男生的智力有点问题,所以他自己也做不出来那个动作。但是你告诉你,你可以做的更好,对吧?所以这也是一个no free lunch theory的一个部分。 也就是说我其实让模式learning model班成了两部分参数,一部分参数专门去学习当前策略下的价值。另外一部分参数我们去更改我们当前的策略。就是好处在于我有一部分的参数的学习力能够去学习,我专门去抓到策略提升点,另外一部分参数专门去在这个策略提升点上去拟合我的新的策略。这会比我使用两倍的参数做reinforce,就只在action上然后去做reinforce效果会要更好一些。这就是我们去design一个machining frame mr c的一专门需要去注意的点。还有另外一个act created的框架,其实这个用的更多叫做advantages at cretic。 刚刚其实大家应该已经被我已经提示过了。对Q方向而言,如果它都是正数,那么其实我们只是通过policy的Normalization的方法,能够降低一些不是那么正的QSA的action的一个概率。那我为什么不直接去让它q function变成负数呢?因为q function本身它的定义是价值,它的reward cumulative reward期望。所以如果环境都是正的价值,正的奖励的话,那Q方向肯定是都是正的。所以说我们定义了一个叫做优势函数,叫advantage function。它的定义非常简单,就Q减去V形式。我站在V这个位置,我平均take任何action,我的平均的q function的值是V所以我低于平均值的advantage就是负数。 所以在这个时候大家可以看到,如果我take policy great的话,如果碰到了一些below average QE function的这些action,我就可以直接去计算出一个负的advantage。我就直接沿着反方向去更新,这个效率就会高于我们都沿着正方向的更新,大家比赛大家谁跑得快。最后take一个Normalization等价于它降低。 就在policy grain theory当中,这边会有一个q function。这个q function它其实对于真正的polygram的指导其实稍微有点低效,原因是因为它可能都是正数。那么他直接对于policy本身的grade的指导。大家可以看到只要它是正数,它但凡是0.01这种小正数,它仍然是希望他的学习方向,仍然是希望将当前state true action概率是往上提的。只不过大家可以看到,我们只是因为大家别的方向可能会出的更快,在别的AA上它可能是比如说5.2这么好的一个ready function。那么它往这边去走的时候,拐点它会走得更快。会使得说我最后Normalize之后,我原来那个0.01的小的value值的action,它的概率会降低。是通过moralization方法让它下来。 但是大家另外一点也是会需要去注意,如果一条trajectory本身,一条track本身,它overall拿到了非常低的return,但是这个return是正数。原因是因为我们的review function,有些环境,它就是全镇的real function,或者说zero real function。在这种情况下,你看到了一条轨迹之后,这条轨迹最终overall是一个0.01的return。我们好像还是得在每一步上take action的时候,这一步上我还是会这个目标会让他增大他take这个action的概率一点点,但是是往往正向去增大。因为他的学习方向它永远是正数,所以这就是使得我们其实是拥有一个一是低效的,二是我每次都不得不去采样较大量的轨迹数据。否则我采一条轨迹,这条轨迹0.01的return结果会发现它还是增大了一个action的概率。其实这不是我们想要的。所以说我们在做训练的时候,其实就希望能够去构建一个有正有负的这么一个guiding。这就是advances function。 所以说我们是将average作为一条线,below everything的值直接变成负数。能够去让它在即使只有一条轨迹的情况下,我仍然可以去对它进行一个打压,对于一些坏的action进行一些打压。所以说我们不只是所谓的reinforce,我们可能还会叫做弱化学习,弱化一些坏的action。我们如果去定义一个advances function,因为我的q function,咱可以去以这种temple difference方式,以一步的形式给它进行展开。 也就是一步的reward加上stay transition的概率之下,下一步的BS的一个加成。Take a difference加成就是一步都reward成了伽马加上下一步da的分布之下,VPS prime的这么一个概率。我们就将这样一个值可以带入到一个ASA的定义当中,是q function减去v function对吧?那于是就是一步的reward加上transition到下一步的这么一个ASI,再减去当前的VS因为现在这S本身它其实已经确定了,所以说我们这个transition下这个transition distribution下VS相当于是一个常数值,我就直接把它写进去。那么这个是等号,就是完全按照定义去定义的。如果说我们将这个average值或者这个expectation在这个state tradition之下的,用一步的state tradition observation去替代它。也就是说我本来这边要去take一个expectation,但是我直接采样出了一个VS prime,直接采样出VS prime。那么就是一个约等号的写法去写,就是一步reward加上下一步date的一个value,减去当前的v value。 所以说在这一步我们做出了这个推导之后,大家觉得这里面有什么样的magic呢?这里面的magic就在于我们竟然只使用了v function就做出了这个东西VSA。因为大家在想想我我这个ASA对吧?你把QSA变成ASA,好像是说我只是把QSA去做了一个减去average的一个操作。 但是大家可以看到,真的要得到ASA signal的时候,你只需要使用VS的网络就可以了。那么VS的网络和QSA网络之间的核心区别在什么地方?在于VS网络好学,为什么?因为AS网络只需要把一部S进去就可以了,你把一个S进去就可以了,它拟合的值相对而言仍然是比较稳定的。但是如果你要把QQ网络,你得把它学好,学的到处都很好。不好意思,你得把看到很多SA pair,你才能够把QSA学的很好,这之间就是核心区别。所以最后会导致我们下节课讲到的doing DQN当中的那个架构,使得他获得了icml 2016年best paper。我为什么就是在这个地方他做出了一个架构式的优化。 所以说value function咱虽然叫advance function,但是咱真正使用的时候,在train的时候,包括后面大家可能会学PPO这样的方法。那其实里面其实你可以发现,但凡它是使用了advance function,他最后实现的时候就是VS这样的话会使得它的网络本身也比较容易去学。这就是我们近似逼近方法的一个基础的内容。 近似逼近算法它其实就是我们深度强化学习的前身。我们其实接下来就会给大家去讲解说这个近似逼近算法当中使用的参数化的价值函数参数化策略。如果往深度神经网络去走,它就应该是去发扬出了这个深度强化学习。 对于价值函数的学习而言的话,我们其实是使用了链式法则的方式,将tempo difference这个损失值的拐点的传到了我们的参数和函数当中的参数当中的参数求导当中去。而对于我们的policy而言,其实它这个过程当中是无导没有导墅的,这也是为什么强化学经常会去解决一些没有导数的一些无导的一些优化问题。因为我是我们在这个过程当中是可以天然的去使用用reinforce那套架构。它对于它的目标价值和我们的参数,和我们policy参数其实可以舞蹈。这样子做。它也就可以去解决大量的黑盒优化,非常复杂的,完全基于数据本身的策略优化的问题。而我们的一般来说机器学习,你要去拟合它,就往往建立一个可导的损失函数来对它进行一个求解,这是它之间的核心区别。 最后我们讲到activity双模块的强化学习框架,其实是可能算是整个机器学习当中非常有代表性的双模块框架之一。现在最好的强化学习方法仍然使用attic架构。也了解到一首先第一点value function极其重要。我们需要去design一个相当于是参数容量,专门去拟合所谓的critic,去找到当前策略下有价值的策略提升点。接下来我们再用这个policy grain的方法去对于action本身我们的目标模块做出相关的更新,这是非常重要的点。 即使现在在大语言模型时代下,现在最前沿的研究的一些工作,仍然专门在各自的具体的task下专门去学习。用大语言模型作为基座,专门去学习概率方式。无论你是写代码还是做数学,还是做QA,我们都会有对应的价值函数,这个是现在正在研究的前沿。

Podcast Editor
Podcast.json
Preview
Audio