Sources
上节课我们其实讲到了这个深度的价值函数的方法。使用深度神经网络去学习价值函数,然后用价值函数来导出一个人体可以去做的决策策略。这个其实大家刚刚听我这个描述来看,就是一个较为间接的一种方式。所以说我们这节课其实主要的部分将会去讲解深度策略方法。 在这之前的话,我们还是先回顾一下深度价值网络的方法。我们上节课其实讲到那个DQN。DQN的话它的一个关键的点就是说我们深度q network。当我们的QQ的这个函数是使用深度神经网络去构建的时候,它往往会有这么一些问题,它容易overfish到局部的data。此外的话,当我们一旦改变了一个相应的参数之后,我们其实整个q function它都会被改变。 所以说面临这样一些问题的话,我们首先是使用到了一个目标网络,使得我们能够在一定的步数之内,也是不改作为目标的这个部分的。也就是说它difference target是不改的,这样的话我们就可以比较充分的去先更新好我们的正在学习的q network。在初步之后我们再去把我们整个target进行一个更新。这个其实是稳定化它的一个非常关键的要素。 另外一点就是说我们其实是有规律的,或者说有无论是uniform还是strategically去采样我们整个data replay ffr当中的数据。使得我们不是只是使用非常局部的数据去对于我们的q network进行更新。这样的话,不要让它因为使用的数据过于局部,而使得它在其他的分布下的数据prediction完全变成是overfish,导致他错误的泛化。创新方式使得这个q network能够去比较好的更新。也就是说我们可以最终能够去训练出一些非常killing的一些结果。比如说在ti game上,通过观察游戏的像素就能够去达到超越人类玩家的水平。 此外接下来讲的这个double EQN,它其实从另外一个角度去诠释了说DQN当中或者说q learning当中就经常会有过高估计的这样的一个问题。原因是在于我们选择over next action的选择过程当中,我们的评估器它是一个作为目标,它其实是一个和选择器选择最好的action。它是完全一套Q,使得在直接去做的时候,那么有如果当前的q function它没有真正的评估清楚这个真正的Q价值,那么它就往往over estimate某一些action q value。其实你大家可以看到,其实深度价值函数再去研究他的过程当中,基本上对付的问题都是在于他没有办法能够非常精准的去拟合到真实的价值函数,以至于导致的一系列问题。 面向于这种过高估计over estimation的问题的话,一个最简单的方法就是使用两套QQ函数选择next action a plan。我们是使用一套Q函数,选择完了之后,真正把它去作为target加入到reward上去更新,去作为target去更新QE function,那是另外一套q faction。这样的话我们就相当于有一个运动员,有个裁判,运动员去选择action APP。我们的裁判去定下来express a他的这样一个QQ value是多少,然后再去做成target去更新当前的Q方式。这样至少使得我们去over estimate的这个问题得到了一个比较明显的缓解的action。Q learning the next over a API的这个选择器是它的选没有那么的over estimate。 上节课最后的部分,其实我们讲到了关于架构设计层面上的一些事情。所以大家可以看到其实是从数据层面,over estimation的这个层面,还有架构层面上都都去做了DQN他都去做了相应的升级。D它解决的一个问题就在于说,我们如果直接去state QSA的话,因为我们的network它需要在一些看到了足够数据之上,它的estimation会更准一些。所以说它对于QSA的学习其实要求会比较高一点。 我也对于所有的SA pair都见过比较多,次数之后我对于它q function建模会更加靠谱一些。但是其实SA pair并不一定都会见过很多次,因为我们往往在做探索与利用的baLance的时候,都是其实利用的部分其实还比较多。所以说SA pair其实不一定并完全不一定是被去覆盖整个space。所以说在这种情况下,Q在一些没见过的SA pair上的泛化,其实是属于一种OOD的泛化,就out of distribution的泛化。所以说这个时候其实我们往往会觉得q function它没有那么容易的能够有效进行学习。所以这个问题的话,这个幽灵DQN它其实就是去解决这个问题。也就是说像q network把它拆成两部分,一部分叫value function,就是VS这样一个方式。另外一部分是我们之前其实提到过的advantage function。 我们直接拿一个network去拟合整个QSA的这个价值的时候,大家可能会发现一个network它其实最适合去拟合的是零附近的信号。如果说我整体的信号都是远离于零附在某些附近去摇摆的时候,比如说我的SA如果是在这个维度,假如说SA我们拿一个space来画它,一个维度去画SA的延展开,另外一个维度的话,假如说Q那如果说真正的方式其实是长这个样子,它其实大家可以发现说其实本身是远离原点的。但如果我要拿一个network去拟合这个远离原点的signal的话,其实是比较难学的,或者说比较浪费他的network structure的。其实很显然一个方法就是说我将比较低频的这种信号线拟合到它。如果说是在我画的出来是这个样子的话,其实比较简单的可能就是我先move到这个原点上下。如果说它原来的信号假如说长这样子的话,那我首先有一个比较简单的低频信号,先拟合到它之后,再用一些更加复杂的network去拟合那些residual signal,这样会更加方便的去进行学习。 为什么是这个样子呢?原因是因为当我的神经网络越复杂的时候,它在原点附近的这种local optio会非常多,还特别容易的。通过我们grade grade decent方法的话是特别容易的。它本身就是一个realization的方式。比如说我通过规定的方式去走,它本身就是一种regalias。Ation它限制在零点的附近,走不了太远,它也就会落在一个local optio的一个位置,走不出去。 大家如果去拟合神经网络的话,你会发现说我的初始点如果就是一个随机设置的,非常远离原点的这么一个位置的话,其实效果往往不好。如果我们随机初始点是在零点附近,所有的位置都是在零点附近做初始化,往往效果会更好一点。但还有另外一点,就是说介于这个原因的话,它往往会使用的是一个我们叫。因为它走不离远点,走不了太远。所以说的话它的拟合到signal也最好就signal让拟合到一些比较接近于原点的signal。 如果说是我们随机化的初始化的wait距离原点太远的话,大家也知道很多activation function本身它就是一个只有在原点附近,它才能够去起到充分的非线性作用的这么一种信号。而很多wait如果它刚刚拟合就比较大的话,其实它就容易去走到那些非常收敛的,非常饱和的这种activation的位置上去,使得它学习无效。所以说的话,往往我们会使用reset这个概念,去把一些比较复杂的network structure放在你和的信号上面。 在我们的这个QAC的礼盒当中的话,毫无疑问VS function是一个低频信号。原因是因为它只需要对于S本身去做出一个信号的拟合就可以了,value方式的拟合就可以了。而S本身它相比于S和a pair的话,它显然是一个更加简单的信号,对吧?而ASA的话如果建立在VS基础上加上这个advantage function的话,它完全可以是初始化为零。初始化为零附近这样子做的话,我们即使没有见到某一些SA pair,它原来的estimation也是接近于零的。那么我们将会更多的使用VS去对于当前的QS去做出一个估计,对吧?这样会更加靠谱一些。 所以说的话90DQN的基本的设置就是我我先学一个VS function,做一个支路。另外我会有一个AAC的方式之路,这两者在一叠加变成我的QAC。这种方式我们其实就可以去以更加好的拟的这种形式去得到q function。这是从架构层面上它的一个优势。 所以说9点DQN的话,它可能会去好的去处理这种与动作关联较好的较小的状态。有的时候我们这个状态之下,其实你怎么去这个动作没有什么太大关系。但是如果你直接整个去学QAC的话,他不得不对于动作进行一个修改。比如说动作有一些变化,它的QSA可能就会相应的去完成别的一些震荡。但是我的ASA加VS这种架构的话,如果说我的有的state它跟action的这种关联较为小的话,那其实我ASA很容易就学到了。应该是就在零附近,这样的话我的QAC就基本收在AS附近。 比如这边是一个开车的小汽车的例子,可以看到如果说是我周围没有什么车辆的话,那么其实这个小车它当前的动作其实和它所带来的价值没有太大区别。就好比说你在这个位置,当你往左往右一点点,其实是对这个车的得到的价值没有太大区别。在这个时候,如果说我们建立的是value function和advantage function,大家可以看到,因为它是输入的是一个像素,所以说的话可以通过视觉当中的这个silencing map的形式去检测它的神经网络更关注在这张图片当中的哪些区域。 大家可以看到在DU0DQN当中,当这个目标小车周围。有别的车的时候,他就会更加关注于这个道路的远方。那么他应该接下来怎么走,是一个比较宏观的一个指导。而在这个时候的advantage其实是没有关系的,原因是因为你周围竟然没有车辆,你周围随便你,当时这几祯,你随便抖动一下等等,它其实对它的这个价值是没有区别的。但如果说我们在这个时候会发现说周围有一些别的车辆,如果你抖动的不好,目标车辆就会撞到这个周围的车辆的话。毫无疑问,大家可以看到它的value network仍然是更加集中于远方的,我到底应该往哪里去走?但是我的这advantage network这边显示的不是特别的清楚,它就会更加集中于周围。这几辆车被点亮,还因为在这个时候走错了一个局部的action的话,他就可能会撞到车辆,那么你就会损失当前的价值,对吧?所以这个其实就是它的一个从建模架构上的一个优势,还有一些别的环境,比如说这个走廊环境等等。 我们其实会关注说,比如说这样一个走廊,它两端各有一个正向奖励,中间都没有奖励。左下角的这个奖励是一个比较小的正向奖励,右上角的这个奖励是一个比较大的正向奖励。其实我们如果按照q network的方式single q network的方式去建立所有的zy pair的话,大家会发现说其实因为我们带来正向奖励的SA pair其实差距比较大。中间的SA pair它其实就会非常的zero的reward。所以说在这个时候,其实它对于q net bork去建立它的这价值函数,价值函数本身其实是带来一定挑战的。所以在这个时候可以,如果我用deal deal的方式,一方面我建立站在站位的VS上的一个价值。另外一方面我们建立在每一个站位之上,往往上、往下、往左、往右移动的这样一个advantage的时候,它就更容易的在这个SE是square arrow,就是你得到的这个q function。它和真正的q function之间的能够看出来有一个明显的下降。 使用了doing的这样一个架构,和原始的DQN相比的话,它的相应的结果也会有明显的提升。这个里大家只要这个performance柱子往右边的那就是超过DQN的版本。往左边的当然也是低于DQN的版本,还是蛮有意思的。这里其实还是会有一些,比如说break out这样一个game,打砖块这个game,它至少在他当时的实验当中仍然是还是QN原始的,可能会更好一点。相比于这个priorities DQ double DQ版本,就是说我会去做priorities的sweeping,将我的原来的数据去做一些排learning的。当然这个效果performance肯定会比原始DQN更好。所以说后续的算法,我们最新的这个算法和这个原始的baseline相比的话,它会提升的部分会少一点点,但仍然占据绝大多数。 那么接下来我们就讲了这个DQN double DQN坑。它分别是从数据拟合,数据over estimation的解决和这个价值函数拟合的架构上去做出了相关的一个efforts。然后这些工作其实很多都是来自于deep mind它相关的研究成果。 所以说有一段时间甚至一度大家会认为说deep mind它推行的是深度价值函数的这种方法,而OpenAI推行的是深度策略的方法。这个说的也对也不对。原因是因为首先第一点就是说因为确实这个团队他是相当于是第一个吃螃蟹的团队,就是说直接给出了能够强化学习的第一种方法。大家也知道说强化当中像策略梯度这种方法都是很后面的方法了。而前面的方法我们大部分基本上还是在讲如何在更新价值函数的。所以说当我们touch到了升级到了这个2L的这样一个范畴的时候,往往是优先调通的调work的都是深度价值的方法。所以说deep mind既然刚开始就来做这个事儿,那么他当时所践行的当然也就是更多的是深度价一个方法。 而OpenAI的话我们接下来会讲,他是在大概16年的时候才开始在强化学习的这个方向上去做出了非常棒的作品。在那个时候,其实对他来说的这个机会点则更多的就是在价值方法,在策略方法这一支上。所以说后来这个deep mind他的团队甚至在triple a2018年上发了一个结合众多value face方法的一个方法,叫rainbow。这个方法其实也就是将这些prior has sweeping dealing,包括我后面会讲的A3C算法等等都结合在一起,最终变成了叫做rainbow w最后的performance它也号称是能够去打败之前的所有的,这些方法其实大部分都是基于价值的方法。 但是像这样的方法,虽然确实它也取得了一定程度的关注,但是它往往还是会suffer一些,就是DQ network deep value base方法它它的通病。也就是说我在你和一个zi nal的时候,由于我的目标,我的QPSA这个目标永远是在变化的,所以说我在拟合它的时候往往会存在着我的拟合不准的情况,也就是说我的target是q pi SC,而这个派大家也知道学习的时候一直在变。对,所以说我当前的只要拟合它的QCTS,其实是一直它的target一直在变。相当于是说甚至可以这么讲,我们这个西塔一旦被更新,那么目标就又被更新了。所以我们一直会往一个新的目标去移动,并且这个目标还经常在变,对吧? 所以说它一定会存在着说我没有你和好这个目标情况。而一旦我们没有拟合好这个目标情况,由于我们的network又是深度的对吧?所以说它有可能会在局部产生这种拟合的非常不准的拉大的情况。而一旦产生拉大的情况的话,那么一旦我take RG max over q其实无论是在我q learning作为temple difference target,还是在真正的测试阶段去做action,它都会带来较为严重的结果。所以说这个其实会使得我们会去考虑说是不是有一些基于策略的方法。于是在这个时候就会有一些相应的方法被提出来。 这里我们可以看到说,基于策略的方法其实有两种。一种是基于确定性的策略的方法,另外还有一种是基于随机策略的方法。也就是说我的策略到底是一个函数输入,state输出,就直接是一个action多对一的映射或者一对一的映射,还是说我输出的是一个the caster的action distribution。它背后的优化方式是完全不一样的。之前的部分我们讲的就是q network相应的优化方法。所以说我们在这里会首先去选择基于确定性的策略determinate policy的优化的方法。原因是它更加接近于基于价值的方法。 好,我们先看一下确定性的策略梯度。对于随机策略而言的话,大家也都知道。我们如果说是基于离散的这种方式去去构建随机策略的话,那往往是使用的的形式去构建他选择每一个action的这样一个soft max概率。于是在这个时候,我们往往会对于每个他选择sox action的概率对SA pair去做一个打分器。这里的q function不一定是真正的价值函数的function,它往往有可能就是一个打分器。这打分器构建了我们基于离散动作的一个随机策略。如果是连续动作的话,我们往往会构建一个高斯,对它进行一个先是map出来,拿network去算出来一个average action,甚至说我算出average的action就命令action以及这个covariance matrix,我再直接通过这个采样出一个动作,对吧?这个也是完全可以的。 第二种就是说确定性策略。确定性策略的意思就是说如果我是离散的动作,往往就是基于我当前的打分器,比如说QIC直接去选择一个bug max的形式。那这样做的坏处在于说,其实我们没有办法直接对它进行一个优化。因为你的选择max其实本身是一个不可导的一个操作。那往往它就会退化成我们完全是基于价值函数在学temper difference error这样一个目标。 接下来就是关于如何是如果它是连续动作的话,那么它就是deferential的可微的。那么我可以去选择类似于链式法则的方式,对它进行一个更新。于是在这个时候大可以看一下,如果说我们的策略本身是确定性的,并且它是可学的,也就是说它的输出值是连续光滑的,这个策略作为一个函数是可导的。那么在这个时候我们就可以去选择说,我们是不是去选择学习一个像critic一样的模块,能够告诉我当前策略,如果是在S的位置take action a我们能得到怎样的一个value function?得到value function之后,我如何强化它?大家可以看到我们以前在做policy grade的时候,对我们其实这个grade of policy其实是等于什么问题。我的这个c pair是sample from pipe,在这个distribution之下,其实我们是希望去优化的,是log派a gin s这边有参数的,对于参数ata grade,我这边会有一个QSA,但这个QSA我们不一定直接得到它,所以说我可能拿一个critic去采样它。 这个时候大家可以看到这个critic它起到什么作用呢?就是说起到了强化和弱化的作用,对不对?如果这个critic给的分高,我接下来这个位置它走的距离就多,它的weight就大。这个critic给的分低吧?它即使给的是正分,我仍然是走的比较慢。他在Normalization的情况下,他后来就被弱化掉了?于是在这个时候我就很容易去提出来说,我有了一个critic之后,如果的policy本身是连续的、确定性的、可导的那我们如何去使用这个critic?就QIC去指导我的policy能够变得更好的答案就是我们直接使用。 一种方法就是直接使用面试法则的方式去做的。大家可以看到在这个时候,我的policy就是一个determined一个函数,friendship的一个函数。我们只要比如说使用神经网络的方式去构建这个policy,那就是一个differential一个可导的函数。这个policy他做action的时候,他肯定会经历一些state,在这state之上policy take the action。于是在这个时候我们就会有直接等于IS当然我们我们的派仍然是一个参数西塔去参数化的。于是在这个这时大家可以看到,我们就可以去把它写成是说这policy派它的这个价值等于什么呢?就等于的是我的policy和环境交互采样得到了state,我可以用另外一种形式去写它,就是说这个A等于的是我这个policy去采样得到了state之后,我们又有一个q unction to evaluate这个state和这个什么A和S因为它输出值数为A对,我们其实可以以这种方式去valuate我们的价值是多少。而这个价值如果对于我这里面要去take grading的话,大家可以看到如果要在这上面去take grading的话,有有哪些位置会需要被grade。 首先第一点,在这里面我们会有一个q function,q function当中有个AA其实是开S的输出值,在这里面我们就会对于我们的参数去take grade。另外一部分其实在这里,但这里我要take grade,其实这是一件较为难办的事情。所以说我们的确定性的梯度的计算方式,就是说我干脆在这边我是以一种of policy形式,或者我是以一种on policy的形式去采样。得到数据之后我不管它了,在这之上我直接去计算说我的radiant是什么。那么通过这种方式,我至少在我们能够处理到的数据之上,我们通过链式法则的方式来去抬高了我们见到的USA的这样一个值。 大家可以看,这如果是一个数据分布本身,我们见到了SA pair之后,如何去更新我们的参数data,来提升我们的SA就是critic的打分呢?很显然因为这个critic本身是defensible的,所以说我们对于这个Q5A我们是首先是对于A求导,使得我们这个A我们能够知道说A往哪个方向去做微调之后,按照这个critic打分其实会提升的这critic打分本身就是一个differential的critic function critic的一个network。所以它是完全可以对A求导。 接下来我们再用派贝塔S对于CR求导。因为在这个时候,A就等于就是派加X的形式,这边是是能够接上去的。所以说大家可以看到,这就是一个链式法则的一个前提,对A本身进行可以进行求导,我们后期讲真的是对抗网络,大家应该也会讨论到,就是说在这个生成式对抗网络当中。 Generator然后参数是它从某个random variable render sign开始出发,它产生了一个数据X本身,然后discriminatory to take进去,然后去给出它相关的它是真实的数据还是假数据的这样一个estimation。所以在这个时候,如果说我们的probability是什么呢?就是说discriminatory希望去优化的是他被选对的概率,吧?那么我们可以构建cross entropy的loss function在这边。 毫无疑问,我最终是希望能够去对抗掉这样一个损失函数的话。我们需要去对这个损失函数,直接对于我的generator参数SATA进行求导的话。其实也是一样的。首先我这个损失函数是对于这个TFX求导,对吧?FX本身其实是对于X求导能够得到,是说这个数据往哪个方向去微调。比如说你生成张图片让它更加真实,那么这张图片的每一个像素到底是往哪个方向去走?这个greaten是可以求出来的。 一点本身的话X本身其实是什么呢?就是PA of z对吧?我再对它说,在这个时候其实是given的是说X就是D西塔of z的形式,那么我这个链条才打通,对不对?这个其实就和生成式对抗网络是非常一致的情况。所以说大家可以看到这个生成式对抗网络,大家也知道是2014年europe发出来的。但是它也会提前挂cave,而这个determined policy这也是2014年ICM没有发出来。 其实大家科学家都在各自方向上去研制了出这种类型的更新的方法。它当时离这个我们就后来的叫DPG minister policy grade。当时其实它的名字还叫一个比较奇怪的名字,叫做off policy misc act critic杠Q。但现在的话其实已经就是大家改成DPG的方法,它能够会比随机梯度策略,还有这些of policy act critic的一些方法会更好一些。 但另外还有一点就是说我们介于这个位置mac policy great的方法的话,它其实是一个比较在线的方法。原因就在于就是说他得需要当场查出来数据,对于我的策略的参数进行更新。所以说后来的话走到了DDPG之后,就是deep的deterministic policy的方法之后,你会发现说我们就将它更好的去往这个policy的方法去引。原因是因为很显然我们如果是使用的是在线的方法,就是on policy方法进行更新的话,他当场采出来的数据分布肯定是locally distributed。就是说当前策略他走到什么位置,他只采出来这一撮数据,对吧?但是overall其他数据它没有办法采出来。所以说在这个时候,如果我们要去做梯度的更新,就还是蛮危险的。所以说在这个时候,这个DPG当他走到deep的determent policy grading的方法的时候,我们就需要去做些额外的一些操作,让它变成是一个纯off policy的方法。 对于确定性梯度,特别梯度,大家可以看到实际使用当中,我们其实会发现说神经网络近似器得到的actor和critic,它其实都在面临着一个特别大的挑战。就是它是不确定的,或者说是它的规定本身其实也是非常的敏感的。我们直接去通过链式法则的方式,对于局部一个位置拿到了这个q network,拿到这个critic的一个grade。让他去知道我们的actor其实仍然是非常的布鲁棒的。原因就在于说你是没有办法去保证说我的critic的形状,它在非常局部的位置到底是不是靠谱。所以说DPG它给出了面向于这种确定性策略梯度的一些解决方法。包括经验重放离线策略就是all policy的经验重放,使用目标网络以及做bh Normalization和加连续噪音这么一些它看起来比较分散的一些。 首先第一点,我们选择动作的时候,其实还是要加上一个选择动作上的噪音。为什么呢?因为我们的policy本身它如果是一个纯连续纯deterministic的一个policy的话,我们它的探索性其实没有办法进行保证。基于当前state,如果就直接过一个函数出来一个action a它其实没有什么探索性。所以在这个时候,我们是要加一些叫做exploration的noise。于是在这上面加上了一个动作上的噪声。 我们将这样一些数据真正的这种action加了动作之后,加了动作噪音之后,deliver到了环境当中去。获得了相关的reward和next state之后,将这种编组收集进入到了replay buffer当中去。毫无疑问这个四元组就可以被收集下来,对于q function network进行学习。 接下来的话我们就要对与这个actor network进行一个学习了。由于这个actor network的话,我们其实是采用的是off policy方法。因为我们但凡是使用on policy方法在深度神经网络当中的时候,它就会容易overfed在局部产生的局部数据上,吧?因为我们的on policy学习的时候,这个policy当场采出来的数据往往都是这个智能体所在的一些比较局部的一些位置上。而相反of policy它的分布往往会更广括一些。所以在这个时候,我们可以考虑说我们有个repay ffr之后,直接从repay buff er当中去采样出一些相关的数据。其实你会发现说我们采用的数据只需要是state就可以。 以前我们做q network的时候采用出来的数据SARS pran,这里是一个四元组。因为我们目标其实是在学一个q network,它需要两个pair的这个USA做temper difference learning。但是大家可以发现什么呢?就DDPG当中,其实上面的这个公式我们已经写出来了,就是说我实际上只需要一个S就可以了。因为我有了S之后,基于当前的policy,无论是也好还是派也好。假如说我写缪也好,它其实可以给出的是当前的action,对吧?有了当前action之后,我们就可以直接基于critic,我们就拿到了S和X的对应的这样一个价值。必须在这个时候,我们就已经可以基于这个critic本身,我要去maximize它的Better function。 我就可以用它对于我的参数去做brilliant brand,只需要使用一步链式法则就可以。大家可以转问题,转向于什么呢?就是说我们本来是希望能够maximum对于当前的参就是C的pie去做它的policy grant,去maximize它的价值。但这个时候我们会发现说,我本来应该是写成的是这个S播放柔派当前的派西塔,就是我们想要的这个Q当前的S如果用派写派它,这个时候我们会发现什么呢?就是说这个部分只要把它变成是replay buffer,我们就可以把它转换成一个off policy的算法。 在DDPG本身的话,它其实是在这之间选择了我们使用off policy方。从replay buffer当中,无论你是static code还是uniform。还要出我们想要的state。然后基于当前这个state,我们就可以直接对于policy去做相关的更新。这更新的方式它的一个逻辑是最后源于我们的梯度。我们的这个链式法则,能够将梯度通过对于action求导传回到policy中去。这里面的背后的逻辑就在于说,policy其实是是是一个determined policy。不是一个slcs policy,但凡它是stockists policy,我们就得回到policy great theory那套方法去进行更新,也就是likelihood racial这套方法。 其实大家可以想象说,其实creating的方法就是DD这种方法,它其实更加的直接一点,因为它是链式法则。而相比于之下我们的lake hood racial,这种方法还反而是更加间接一点。它确实是通过一种like hood的强化的方式去更新我们的背后的那个参数。通过这种构造性的方式去这个DPG本身的话也就是会加入这个我们其实之前讲的用网络的方式去更新。 它的原因就在于说,比如说我们的critic,它其实会有first,它会有一个目标critic和一个learning的critic。此外的话我们还有一个目标的actor和这个learning的actor为什么要这么做呢?原因就都在于说我们无论是去学习目标网络basic还是目标还是在学习act的时候,我们都不希望一旦我们更新了任何参数,整个value network,整个action network它都改变了。这样的话我们其实在做更新的时候就非常的不稳定。尤其是在做tempo difference更新的时候,我们的目标就一直在变。而且你更新的gradient的方向是一个batch,一个mini batch的data,它它只代表局部的信息,所以说我们都会去使用目标网络方式去更新。此外做这个batch Normalization有这样的好处,其实是已经或多或少提到了。为什么我们要做batch Normalization,就是这个批标准化? 原因就在于说我们其实我们的network希望他能够更加好的工作在一个比较稳定的输入数据分布之上。而我们的做off policy的时候,有的时候我们的因为off policy我们的数据分布其实是在发生和当前policy是不一致的。所以说我们如果做了batch ization之后,至少我们的network它在输入的分布之上能够相对而言比较稳定。而不只是说我经常会被过于饱和的走到了非常正向的情况,或者非常反向的情况。这样话我们的抛在至少他的工作的数据分布的稳定性是更好的得到了保证。所以说从他这个实验结果当中去看的话,绿色的曲线使用了batch moderation以及使用了target network。它的效果能够会比只使用其中一种效果往往会更好一些。所以说一方面目标网络会非常关键,另外一方面是说做一点定程度的网络输入的稳定化也会非常关键。 这个是DDPG本身,DPG1度会是这个continuous action mini sic policy。它的一个用基本上是标准做法。在机器人在一些无人驾驶control当中,它不太允许出现那种非常stock casting policy的时候,往往会使用这个PEPG去做出这个policy的controller,去优化。 我们强化学习。第一提到了earning to drive in a day的那篇aircraft paper。它也是使用的DDPG去对于他的车辆的横向控制和纵向控制,速度控制和方向盘控制去做出了一个学习,用DDPG的方法去进行学习。 在这个过程当中还会有什么样的问题?我们往往会看到这个公式,大家可能就会想公式当中这个部分有可能不靠谱。原因是因为我们学q function的时候,我们的目标其实仅仅是啊as a critic,它的目标其实是minimum time difference error它和它的gradient能不能更好的指导policy其实没有什么关系。它只知道你和到而且那个数据本身是什么数据? 这些数据本身其实是之前收集到的数据,但是大家在用的时候,大家可以看到这个A它里面的这个A是什么?是当前新policy计算出来的A他有可能完全没出现在这个SA pair,完全没有出现在数据集当中过。尤其是我们的这个policy,现在是一个连续的输出policy。比如说我的action压根可能就是一个从来没见过的实数,这是完全可能的对吧?训练的时候都是见过的实数,CA pair是见过的。用的时候你会发现他指导的action a是一个从来没见过的A那在这个时候的梯度就很有可能是没有那么容易能保证的。它这个梯度到底大还是小,或者这个梯度的方向到底靠不靠谱,对吧?因为这个SA是训练之中没见过的,所以说我们不确定。于是在DDPG之上,其实就构建出了这个叫做TD3的1个算法。 Prim delay的PG比如说是还有31个T2个三个D比如说是这样一个算法的问题就在于是说派会去exploit这个Q当中的漏洞。Exploit IT这个词,其实我们会一方面去使用的是探索与利用当中的利用。也正是利用这个词,他可以去说我可以去exploit游戏当中的一个规则。大家可以发现这边规则这边有个漏洞,我exploit他之后我能得到更高的分数。但是这并不意味着这个被exploit的这个人,他的能力到底有多强的。如果说我们完成任何的项目,完成任何的游戏的时候,所以说我们可以发现说,如果说派exploit到了Q当中的漏洞,那么我们会发现这个派可能他学习的时候就掉进去了,他就觉得这方面特别好。但其实他其实是没有意义的。 举个例子,在这个时候,如果说q function长这个样子,突然在这个位置它有一个没你和好的,就是q function的。很显然,如果说我们对于q function本身有更好的拟合,它应该就是这个位置应该是过来的是平滑原因是因为有些没拟合到了之后,它可能会有一些漏洞。而我的policy我们在做DDPG的时候特别容易发现,这边其实是可以钻进去的。我在这种情况下我就出这个action。我其实得到了我们在训练过程当中的价值函数非常高的肯定。但是因为这个肯定是假的,我们就可能会使得我们的policy所谓的over fit在没有学好的q function之上,导致在这个环节上的过高估计问题。过高估计它除了在QDQN当中选action的时候可以去选到,那它一样的在连续的环境当中,由于它会有一些漏洞,它也有可能会被policy搬到这些漏洞里面去,这样还是会带来所谓过高估计的问题,对吧?于是在这里面我们怎么去解决它? 其实相应的参考了double DQN的方法,但也不完全是double DQN的方法。因为虽然他用了两套Q但是他的两套Q的使用方式不一样的。在double DQN当中,有一套Q是专门去选action的,另外一套Q专门是去evaluation evaluate这个time difference target的时候使用的Q而在TT3当中,它使用的是所谓的叫twin network,它是怎么做到的呢?就是第二步,我们先讲第一步,第一步是怎么做呢?我们对于策略的输出去做一个加皂式的平滑操作。什么叫加噪式平滑操作呢?就我们原来的缪直接的这个函数它的输出了,那么它就有可能没有任何的探索性。此外这个net tork本身它的output长什么样,它就有可能是非常抖动的,非常不平滑的。 在这个时候,我们一方面加上了一个高斯白噪声,这个白噪声不能加的太大,所以说它会被负三和负C和C给clip住。也有朋友加完白噪声之后,我们也不希望它变得过于的范围太大,所以说也会被a low和A嗨给keep住。通过这种方式,我们在一定的范围之内给它加上了相应的噪声,是平滑,这是一方面。 第二方面就是我们学习2个QTD当中,这个是最关键的。就是TD3当中学习两个q function,有Q1和Q2。我们在做TD target的时候,我们怎么做到呢?是min q1和Q2的target。在新的express之上,我们拿当前的policy去选择一个action。Get to action之后,我去看它的这两个Q值的最小值,我把它加上当前的reward作为target,再用这个target一起去更新,用temper difference learning的方法去更新Q1和Q2。 这样做的原因是什么呢?就是说temper difference当中,我们reward加上gama承认了下一个Q如果下一个Q我们是over estimate,那毫无疑问我们当前的Q也就跟着往前去走。为什么会over estimate的原因是因为我们的action,我们的policy他就是专门去搞这种像是这里的这种漏洞。这样做的话,temple difference learning的时候就会把这个漏洞它带来的一个overs mention结果往前去传到前面的QSA当中去。 那这件事情怎么去保证呢?我们就会发现说,我拿另外一套network可能学的时候,说不定他在这边没有帽尖,他他的右边没有帽尖,左边有帽尖。所以说这是Q1,这是Q2这2个一旦取名,就很有可能会把一些over estimate的问题给它绕过去。除非你两个Q独立学习的不同参数Q都在同一个位置over estimate,那它才会出现最终还是over estimate这种情况。第三步也就是说我们还是通过像DDPG这样的方法去学习,说我要去maximize其中一个network的。因为这个network它在学习的时候,目标已经被被这个train network mean掉了,所以说它其实是比较靠谱的。 这个TTD3的D是啥意思?Delete的意思就是说策略更新的速度要慢一点,因为策略更新。一旦快了,它就容易exploit这个Q当前没学好的Q跟我们深层次对抗网络当中是一样的。深层对抗网络当中你很快你记generator就会把discrete给它超过,这样的话可能根本就没法玩了。而更多的是让discriminate其实要训练的更厉害一点,但是又不能太厉害。它agent是有效的,能够去指导我们generator。于是在这里他选择的一种方案是这个actor他学习就是策略学习的速度要比Q学习的速度要慢一倍。 这样子怎么说呢?我们就往往我们说所谓的思想总在行动之就是这个意思。能够去更好的去找到当前策略的策略提升点是有效的,你再去提升当前策略,所以这样子的话TD3的话它能够往往会比一般的DDPG,一般的PPU,我们后面会讲到的一些方法,它效果会更好一点。现在像这样的一种学习方法,也就是将两个Q去做命的这种操作去学习方法,它也可以垂直的去加入到后续的基于policy的一些方法当中去,能够产生更好的一个学习的效果。 以上我们就是对于这个价值函数这个部分进行了一个总结。EPG和TT3虽然它其实也是terminal policy,但是因为它的学习的主体其实是q function,所以说我们往往还是把它加入到了基于价值函数的方法上面去。那么下节课的话我们就会完全去讲基于随机策略的策略的方法,这个就是完全比较usually的去在策略学习当中去下功夫的一些方法。好,我们先休息。
Podcast Editor
Podcast.json
Preview
Audio
