一文读懂深度强化学习算法A3C(ActorCriticAlgorithm)AHUWangXiao

一文读懂深度强化学习算法A3C(Actor-CriticAlgorithm)

2017-12-2516:29:19

对于A3C算法感觉自己总是一知半解,现将其梳理一下,记录在此,也给想学习的小伙伴一个参考。

想要认识清楚这个算法,需要对DRL的算法有比较深刻的了解,推荐大家先了解下DeepQ-learning和PolicyGradient算法。

我们知道,DRL算法大致可以分为如下这几个类别:ValueBasedandPolicyBased,其经典算法分别为:Q-learning和PolicyGradientMethod。

而本文所涉及的A3C算法则是结合Policy和ValueFunction的产物,其中,基于Policy的方法,其优缺点总结如下:

Advantages:1.Betterconvergenceproperties(更好的收敛属性)2.Effectiveinhigh-dimensionalorcontinuousactionspaces(在高维度和连续动作空间更加有效)3.Canlearnstochasticpolicies(可以Stochastic的策略)Disadvantages:1.Typicallyconvergetoalocalratherthanglobaloptimum(通常得到的都是局部最优解)2.Evaluatingapolicyistypicallyinefficientandhighvariance(评价策略通常不是非常高效,并且有很高的偏差)

我们首先简要介绍一些背景知识(Background):

在RL的基本设置当中,有agent,environment,action,state,reward等基本元素。agent会与environment进行互动,而产生轨迹,通过执行动作action,使得environment发生状态的变化,s->s';然后environment会给agent当前动作选择以reward(positiveornegative)。通过不断的进行这种交互,使得积累越来越多的experience,然后更新policy,构成这个封闭的循环。为了简单起见,我们仅仅考虑deterministicenvironment,即:在状态s下,选择actiona总是会得到相同的状态s‘。

为了清楚起见,我们先定义一些符号:

1.stochasticpolicy$\pi(s)$决定了agent'saction,这意味着,其输出并非singleaction,而是distributionofprobabilityoveractions(动作的概率分布),sum起来为1.

2.$\pi(a|s)$表示在状态s下,选择actiona的概率;

而我们所要学习的策略$\pi$,就是关于states的函数,返回所有actions的概率。

我们知道,agent的目标是最大化所能得到的奖励(reward),我们用reward的期望来表达这个。在概率分布P当中,valueX的期望是:

其中Xi是X的所有可能的取值,Pi是对应每一个value出现的概率。期望就可以看作是valueXi与权重Pi的加权平均。

我们再来定义policy$\pi$的valuefunctionV(s),将其看作是期望的折扣回报(expecteddiscountedreturn),可以看作是下面的迭代的定义:

这个函数的意思是说:当前状态s所能获得的return,是下一个状态s‘所能获得return和在状态转移过程中所得到rewardr的加和。

此时,我们可以定义一个新的functionA(s,a),这个函数称为优势函数(advantagefunction):

其表达了在状态s下,选择动作a有多好。如果actiona比average要好,那么,advantagefunction就是positive的,否则,就是negative的。

PolicyGradient:

当我们构建DQNagent的时候,我们利用NN来估计的是Q(s,a)函数。这里,我们采用不同的方法来做,既然policy$\pi$是state$s$的函数,那么,我们可以直接根据state的输入来估计策略的选择嘛。

这里,我们NN的输入是states,输出是anactionprobabilitydistribution$\pi_\theta$,其示意图为:

实际的执行过程中,我们可以按照这个distribution来选择动作,或者直接选择概率最大的那个action。

但是,为了得到更好的policy,我们必须进行更新。那么,如何来优化这个问题呢?我们需要某些度量(metric)来衡量policy的好坏。

我们定一个函数$J(\pi)$,表示一个策略所能得到的折扣的奖赏,从初始状态s0出发得到的所有的平均:

我们发现这个函数的确很好的表达了,一个policy有多好。但是问题是很难估计,好消息是:wedon'thaveto。

有一个很简便的方法来计算这个函数的梯度:

这里其实从目标函数到这个梯度的变换,有点突然,我们先跳过这个过程,就假设已经是这样子了。后面,我再给出比较详细的推导过程。

简单而言,这个期望内部的两项:

第一项,是优势函数,即:选择该action的优势,当低于averagevalue的时候,该项为negative,当比average要好的时候,该项为positive;是一个标量(scalar);

第二项,告诉我们了使得log函数增加的方向;

将这两项乘起来,我们发现:likelihoodofactionsthatarebetterthanaverageisincreased,andlikelihoodofactionsworsethanaverageisdecreased.

Actor-Critic:

我们首先要计算的是优势函数A(s,a),将其展开:

运行一次得到的sample可以给我们提供一个Q(s,a)函数的unbiasedestimation。我们知道,这个时候,我们仅仅需要知道V(s)就可以计算A(s,a)。

这个valuefunction是容易用NN来计算的,就像在DQN中估计action-valuefunction一样。相比较而言,这个更简单,因为每个state仅仅有一个value。

我们可以将valuefunction和action-valuefunction联合的进行预测。最终的网络框架如下:

这里,我们有两个东西需要优化,即:actor以及critic。

actor:优化这个policy,使得其表现的越来越好;

critic:尝试估计valuefunction,使其更加准确;

这些东西来自于thePolicyGradientTheorem:

简单来讲,就是:actor执行动作,然后critic进行评价,说这个动作的选择是好是坏。

Parallelagents:

Wecanrunseveralagentsinparallel,eachwithitsowncopyoftheenvironment,andusetheirsamplesastheyarrive.

2.Anotherbenefitisthatthisapproachneedsmuchlessmemory,becausewedon’tneedtostorethesamples.

此外,还有一个概念也是非常重要的:N-stepreturn。

通常我们计算的Q(s,a),V(s)orA(s,a)函数的时候,我们只是计算了1-step的return。

在这种情况下,我们利用的是从sample(s0,a0,r0,s1)获得的即刻奖励(immediatereturn),然后该函数下一步预测value给我们提供了一个估计approximation。但是,我们可以利用更多的步骤来提供另外一个估计:

或者n-stepreturn:

Then-stepreturnhasanadvantagethatchangesintheapproximatedfunctiongetpropagatedmuchmorequickly.Let’ssaythattheagentexperiencedatransitionwithunexpectedreward.In1-stepreturnscenario,thevaluefunctionwouldonlychangeslowlyonestepbackwardswitheachiteration.Inn-stepreturnhowever,thechangeispropagatednstepsbackwardseachiteration,thusmuchquicker.

N-stepreturnhasitsdrawbacks.It’shighervariancebecausethevaluedependsonachainofactionswhichcanleadintomanydifferentstates.Thismightendangertheconvergence.

这个就是异步优势actor-critic算法(Asynchronousadvantageactor-critic,即:A3C)。

以上是A3C的算法部分,下面从coding的角度来看待这个算法:

所涉及到的大致流程,可以归纳为:

在这其中,最重要的是lossfunction的定义:

下面分别对这三个部分进行介绍:

1.PolicyLoss:

我们定义objectivefunction$J(\pi)$如下:

这个是:通过策略$\pi$平均所有起始状态所得到的总的reward(totalrewardanagentcanachieveunderpolicy$\pi$averagedoverallstartingstates)。

根据PolicyGradientTheorem我们可以得到该函数的gradient:

我们尝试最大化这个函数,那么,对应的loss就是这个负函数:

我们将A(s,a)看做是一个constant,然后重新将上述函数改写为如下的形式:

我们就对于minibatch中所有样本进行平均,来扫一遍这个期望值。最终的loss可以记为:

2.ValueLoss:

thetruthvaluefunctionV(s)应该是满足BellmanEquation的:

而我们估计的V(s)应该是收敛的,那么,根据上述式子,我们可以计算该error:

这里大家可能比较模糊,刚开始我也是比较晕,这里的groundtruth是怎么得到的???

其实这里是根据sampling到的样本,然后计算两个V(s)之间的误差,看这两个valuefunction之间的差距。

所以,我们定义Lv为meansquarederror(givenallsamples):

3.RegularizaitonwithPolicyEntropy:

为何要加这一项呢?我们想要在agent与environment进行互动的过程中,平衡探索和利用,我们想去以一定的几率来尝试其他的action,从而不至于采样得到的样本太过于集中。所以,引入这个entropy,来使得输出的分布,能够更加的平衡。举个例子:

fullydeterministicpolicy[1,0,0,0]的entropy是0;而totallyuniformpolicy[0.25,0.25,0.25,0.25]的entropy对于四个value的分布,值是最大的。

我们为了使得输出的分布更加均衡,所以要最大化这个entropy,那么就是minimize这个负的entropy。

总而言之,我们可以借助于现有的deeplearning的框架来minimize这个这些totalloss,以达到优化网络参数的目的。

Reference:

======================================================

PolicyGradientMethod目标函数梯度的计算过程:

referencepaper:policy-gradient-methods-for-reinforcement-learning-with-function-approximation(NIPS2000,MITpress)

过去有很多算法都是基于value-function进行的,虽然取得了很大的进展,但是这种方法有如下两个局限性:首先,这类方法的目标在于找到deterministicpolicy,但是最优的策略通常都是stochastic的,以特定的概率选择不同的action;

其次,一个任意的小改变,都可能会导致一个action是否会被选择。这个不连续的改变,已经被普遍认为是建立收敛精度的关键瓶颈。

而策略梯度的方法,则是从另外一个角度来看待这个问题。我们知道,我们的目标就是想学习一个,从state到action的一个策略而已,那么,我们有必要非得先学一个valuefunction吗?我们可以直接输入一个state,然后经过NN,输出action的distribution就行了嘛,然后,将NN中的参数,看做是可调节的policy的参数。我们假设policy的实际执行的表现为$\rho$,即:theaveragedrewardperstep。我们可以直接对这个$\rho$求偏导,然后进行参数更新,就可以进行学习了嘛:

1.PolicyGradientTheorem(策略梯度定理)

这里讨论的是标准的reinforcementlearningframework,有一个agent与环境进行交互,并且满足马尔科夫属性。

在每个时刻$t\in{0,1,2,...}$的状态,动作,奖励分别记为:st,at,rt。而环境的动态特征可以通过状态转移概率(statetransitionprobability)来刻画。

THE END
1.学习算法和数据结构的意义或者说,学习算法和数据结构也好,学其他的也好,学习的意义不在于学习本身,在于实际问题的倒推出来的需求,因此要去学习些什么。 在这个结论下,我觉得最最重要的,就是学习本身其实只占50%的时间,剩下50%,还有很多重要的要做,理解对方的问题和需求,还有更多看似不那么有“思考含量”的工作,比如整理,复盘。 https://www.jianshu.com/p/b7400566a911
2.学算法的作用腾讯云开发者社区Sift特征匹配算法可以处理两幅图像之间发生平移、旋转、仿射变换情况下的匹配问题,具有很强的匹配能力。在Mikolajczyk对包括Sift算子在内的十种局部描述子所做的不变性对比实验中,Sift及其扩展算法已被证实在同类描述子中具有最强的健壮性。 (4)速度相对较快https://cloud.tencent.com/developer/information/%E5%AD%A6%E7%AE%97%E6%B3%95%E7%9A%84%E4%BD%9C%E7%94%A8
3.学习算法的意义(精选八篇)学习算法的意义(精选八篇) 学习算法的意义 篇1 1 什么是算法 算法一词源于算术,即算术方法,它是由已知推求未知的运算过程,后来,推广到一般,把进行某一工作的方法和步骤称为算法。 算法这一古老的概念,大约萌生于四五千年以前,算法是“十进位制及它的演算的技巧”的意思。现代意义上的“算法”通常是指可用计算https://www.360wenmi.com/f/cnkey165grie.html
4.学习算法的意义算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,认为学习最新的语言、技术、标准就是最好的铺路方法。 编程语言虽然该学,但是学习计算机算法和理论更重要。 算法是指解题方案的准确而完整的https://m.edu.iask.sina.com.cn/jy/ktioFWROvR.html
5.究竟什么是算法,怎么什么都要学算法?算法有什么用为什么都啃算法什么是计算机算法? 算法是计算机可以用来解决特定问题的指令列表。算法用于计算的所有领域,它们旨在以有效的方式解决问题。 算法的设计取决于它需要解决的问题的复杂性。对于简单的问题,蛮力可能是可行的。然而,对于更复杂的问题,需要更复杂的算法。 计算机算法无处不在 https://blog.csdn.net/2403_88996764/article/details/143954757
6.遗传算法是机器学习遗传算法的意义遗传算法是机器学习 遗传算法的意义 浅析遗传算法 一、遗传算法的基本概念 遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性https://blog.51cto.com/u_16213687/9458331
7.图分析与学习算法自动驾驶技术……这两位人大学子,获奖降低大规模图分析与学习算法的复杂度 创造自动驾驶技术多任务通用模型 …… 每一项科研成果的背后 都是无数个日夜的辛苦与坚持 近日,中国人民大学信息学院2019级直博生王涵之、2020届硕士毕业生丁明宇与来自香港大学、清华大学、上海交通大学、南京大学、斯坦福大学、华盛顿大学、加州大学洛杉矶分校的8名学子一同获得了第https://t.m.youth.cn/transfer/index/url/tech.youth.cn/wzlb/202201/t20220129_13411740.htm
8.生命宇宙以及任何事情的终极答案多明戈斯将该学习算法称为“终极算法”。 他认为,如果这种算法成为可能,它的发明将成为人类最伟大的科学成就之一。实际上,终极算法是我们最不愿意发明的东西,因为一旦对其放松,它会继续发明一切有可能发明的东西。 这个世界正在越来越逼近终极算法,还是更加远离? https://36kr.com/p/1722788823041.html
9.算法和数据结构到底是个啥?为什么要学它?在计算机科学中,学习算法和数据结构就像是学会了烹饪技能一样,能够让你写出更高效、更易维护的软件。https://www.zhihu.com/question/631614359/answer/3380390838
10.机器学习的工作原理优势及主要意义机器学习的工作原理、优势及主要意义 描述 机器学习 (ML) 采用算法和统计模型,使计算机系统能够在大量数据中找到规律,然后使用可识别这些模式的模型来预测或描述新数据。 什么是机器学习?其工作原理是什么? 简而言之,机器学习就是训练机器去学习,而不需要明确编程。机器学习作为 AI 的一个子集,以其最基本的形式使用https://m.elecfans.com/article/1815318.html
11.2020届数学方向毕业设计(论文)阶段性汇报主要汇报内容分为两块:第一部分是去年开始进行的有关利用SDE研究梯度下降法全局收敛性的工作,第二部分是目前正在进行的带有生灭过程的机器学习算法。收敛性研究主要以学习、整理、撰写paper为主,算法研究目前正在进行对前人的算法进行实验复现,之后将根据李磊老师关于该算法在黎曼度量意义下的某些性质提出的新算法进行验证https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3695
12.深度学习算法作用深度学习是机器学习一个分支,并不等于人工智能,它只是一种算法,和普通的机器学习算法一样,是解决问题的一种方法。其目前主要应用领域有:1、计算机视觉(图像分类、目标检测、图像分割);2、语音识别(语音识别、声纹识别、语音合成);3、自然语言处理(机器翻译、自动摘要)。 深度学习 如今,提到人工智能,几乎无人不谈https://aistudio.baidu.com/aistudio/projectdetail/5085476
13.大脑如何为世界建模?从无监督学习到预测加工《预测算法》世界慷慨而可靠地为我们提供着海量的训练信号,以资匹配当下做出的预测和实际感知的传入刺激,无论预测任务在生态意义上是相对基础的(如预测不断变化的视觉影像以识别捕食者或猎物)还是相对先进的(如“看见”桌上的咖啡,或预见句子中的下一个单词)。一些广为人知的学习算法(learning algorithms)能够利用这种机制,揭示https://www.thepaper.cn/newsDetail_forward_26790647
14.中国首个运筹学算法平台正式发布打破国外高价商业求解器垄断此次发布的LEAVES是由上财并行优化国际实验室和杉数科技牵头,多家知名高校、研究所与企业参与共建的运筹学与人工智能算法平台,平台内包括了多个数学规划、机器学习和运筹学实际问题的算法和解决方案。其中数学规划求解器的部分,是第一个成规模的华人运筹学优化算法求解器,对于我国运筹优化算法的发展有着重要意义。 https://www.guancha.cn/scroll-news/2017_10_18_431273.shtml
15.关于算法多样化的若干问题的思考研究过程新课程认为学习算法是学生经历数学化的活动,是学生经过自己的努力解决以前未曾遇过的新问题,认识未曾接触过的新知识,掌握未曾运用过的新方法。学习算法是一次创新的过程。新课程教学算法不是给学生框框与束缚,而是给予探索空间;不是给学生知识与规定,而是给他们提供展示个人才智、交流各自收获的机会。因此,学生中出现多样http://www.hlsx.wj.czedu.cn/html/article816629.html
16.2020年深度学习算法工程师面经(微软阿里商汤滴滴华为简单分为深度学习、机器学习基础、图像处理基础、数学基础、算法基础、程序设计语言、模型部署、HR面试以及与我本人简历相关的目标检测、属性识别、Kaggle及天池的比赛、创新想法等几个部分介绍。可能开始会有重叠或者分类不恰当,后面会逐渐更新完善。其中第一篇先介绍到HR面试,第二篇介绍个人相关的项目和比赛部分。https://maimai.cn/article/detail?fid=1514590373&efid=Oph3033j5Qs70xHZdz0sGA
17.《常用算法之智能计算(三)》:机器学习计算从更广泛的意义上来看,机器学习是人工智能的一个子集。人工智能旨在使计算机更加智能化,而机器学习已经证明如何做到这一点。简而言之,机器学习是人工智能的应用,通过应用从数据中反复学习得到算法,可以改进计算机的功能,而无需进行明确的编程。 在给出机器学习计算各种算法之前,最好是先研究一下什么是机器学习和如何对http://www.kepu.net/blog/zhangjianzhong/201903/t20190327_475625.html
18.人类科技文明发展史:十个堪称“里程碑式”事件新闻资讯将人工智能(AI)压缩到10个“需要记忆的时刻”并不容易。在数以百计的研究实验室和数千名计算机科学家的帮助下,编制一份每一项具有里程碑意义的成就的清单,都将是一份智能算法的工作。然而,我们已经仔细研究了历史书籍,为你带来了人工智能历史上最重要的10个里程碑式的发展。 https://www.gaobei.com/gaobeizt/article_37803.html