该文是简单的知识点梳理,不能作为学习资料,请谅解
================强化学习和监督学习,无监督学习的联系===== 强化学习可以看作是一种特殊的监督学习,样本是s和a,标签是r。然而,标签r是很特殊的:r并不能称为我们判断动作a好坏的依据。因此,我们引入了未来价值的概念V(s)和Q(s,a),以此作为新的标签。但同时,V(s)和Q(s,a)并不是固定的,他们随策略而变化。 因此,就有了一般的强化学习的方法。1,固定策略,计算出该策略下的V(s)或Q(s,a),作为标签。2根据标签V(s)或Q(s,a)训练策略。3,1和2步反复迭代,得出最优策略。
=================强化学习的分类==================== 强化学习可以分为两类:有模型的,以及无模型的 有模型的强化学习是指我们拥有环境的完美知识,即s(我们知道所有的状态),r(所有状态对应的回报),p(s|a)(我们知道对于任意的状态s,采取任意动作a后,我们所在的新的状态的概率 p(s|a) )
无模型的强化学习是指我们对于环境一无所知,即我们不知道s,r和p(s|a)
一般来说,对于智能体而言,动作空间a是已知的, γ 作为人类设定的超参数
=================有模型的学习========================= 有策略迭代和值迭代两种方法。 策略迭代的思路是:对于模型已知的问题,可以计算出给定策略的所有状态的未来价值V(s)。因此先1初始化一个策略,然后2计算每个状态的未来价值V(s),再3根据每个状态的未来价值V(s)修改策略。之后第2,3步骤反复进行,直到策略收敛到最优策略。 值得注意的是,使用策略迭代得到的未来价值函数V(s),是真实的。
值迭代的思路是:同样对于模型已知的问题,值迭代用到了这个事实,即对于任何状态,最优策略一定会往未来价值最高的状态移动。因此,值迭代的步骤是:1初始化各个状态的未来价值函数,2对于任意状态s,选择附近未来价值最大的状态 s‘ 作为动作的目标(a:s-> s‘ ),并根据V( s‘ )的值更新V( s ),3反复进行步骤2,直到各个状态的未来价值变化速度很小之后,得到最优策略。 值得注意的是,值迭代得到的未来价值函数V(s)是不真实的,是高估的。
=================无模型的学习======================== 无模型学习有两种基本方法:蒙特卡罗方法和TD方法
蒙特卡罗方法 对于无模型的学习,智能体没有环境的知识,因此探索环境的必须的。无模型的蒙特卡罗方法,总体上讲就是加入了探索的动态规划方法。
首先1初始化策略(或者值函数),并使用该策略探索环境,生成若干条动作序列。2对于动作序列中的各个状态s,可以计算在该策略下对应的未来价值V(s)。如果探索是充分的,即我们得到的序列反复覆盖了任意状态s,就可以认为V(s)的均值是V(s)的较好的估计。3根据各个状态的V(s)更新策略(或跟新值函数)。4反复进行第2,3步骤。
如果状态空间是连续的,估计V(s)是无助于我们获得策略的(我们不能通过遍历所有动作的V值来选择最优的动作)。因此,我们需要估计动作值函数Q(s,a),估计的方法同上。
实际中,我们并不需要等到获得足够多的样本后(反复覆盖所有的状态-动作对,这是不现实的),再更新策略。
总体上,蒙特卡罗方法使用探索得到的序列,计算相应的值函数。与有模型的动态规划算法相同,蒙特卡罗方法既可以使用策略迭代也可以使用值迭代方法。
TD方法(Temporal-Difference) TD方法用到了这个事实:V(St)=RSt 1 λV(St 1)。因此,TD方法就是对于任意状态S,都要最小化“TD偏差”: (RSt+λV(St+1)−V(St))2 。
对于状态空间连续的情况,TD方法就是对于任意状态-动作对,都要最小化“TD偏差”: (RSt+λQ(St+1,at+1)−Q(St,at))2 。
TD方法比蒙特卡罗方法更常用。TD方法主要有两个算法:SARSA和Q-learning,分别属于on-policy和off-policy方法。
SARSA算法 SARSA算法采用值迭代的方法得到最优策略。
Q-learning算法
SARSA和Q-learning的区别在于: A‘ 不同。SARSA的 A‘ 需要使用生成学习样本时的策略,而Q-learning的 A‘ 由max操作得到。
=====================DQN========================== 有了上面的知识,才有了使强化学习正式走入大家视野的强化学习算法-DQN。 论文在这:https://www.nature.com/nature/journal/v518/n7540/pdf/nature14236.pdf 本人的实现代码:http://blog.csdn.net/qq_32231743/article/details/72636688
DQN的使用神经网络来近似Q值网络,采用了经验回放和目标网络技术,主要算法是Q-learning算法。后续的升级算法包括双Q值网络,优先经验回放以及对偶网络等等。学习资料是很多的,这里不做详细记录了。
多步TD方法(略)。
DQN方法的一个主要缺点是,无法很好的处理连续动作任务,其本质的原因在于Q值函数Q(s,a)需要状态和动作作为输入,显然它不能输出动作。是的,DQN算法中没有能直接输出动作的部门。DQN算法能起作用的原因在于,对于离散动作的任务,可以遍历所有动作,取Q值最大的作为输出动作,而这个方法在处理连续动作任务时就不管用了。
为了得到能应付连续动作任务的算法,人们开发出了策略网络。思路大概是:Q(s,a)不能输出动作是不是?那就弄个专门输出动作的网络: π(a|s) ,这就是策略梯度算法。
======================策略梯度算法=================== 策略梯度算法的实现,均在AC架构上,即actor-critic actor即策略网络,输入状态,输出动作或动作的概率,用来表示 π(a|s) ,critic即估值网络,输入状态,输出价值,或输入状态和动作,输出价值,用来表示Q(s,a),或者V(s)。
策略梯度算法可以分为随机策略梯度算法和确定策略梯度算法两类。 简单的推导: 代价函数是 Es[V(s)] (我们希望对于任意的状态,都有最大化的未来价值),我们希望通过优化策略,达到最大化 Es[V(s)] 的目的。 对于随机策略梯度算法: Es[V(s)]=Es[∑aπ(a|s)Q(s,a)] ∇θEs[V(s)]=∇θEs[∑aπθ(a|s)Q(s,a)]=Es[∇θlogπθ(a|s)Q(s,a)]
对于确定策略梯度算法 Es[V(s)]=Es[Q(s,a)] ∇θEs[V(s)]=∇θEs[Qθ(s,a)]=Es[∇θaθ∇aQ(s,a)] 或者写成 Es[∇θπ(s)θ∇aQ(s,a)]
随机策略和确定策略的区别在于: 随机策略梯度使用策略网络输出动作,作为动作的均值,加入方差形成高斯分布,在对该分部进行采样得到最终的输出动作。用Q值网络对该动作进行评估,若动作好(Q值较高),则调整策略网络,让其输出的动作(作为分布的均值)往采样的动作靠拢,反之,则远离。这类似于某种进化算法(优化)。
确定策略梯度根据Q值网络的梯度,调整策略网络输出的动作,这类似于梯度算法(优化)。
因此,比较随机策略和确定策略,可以类比进化算法和梯度算法。 1,确定策略使用梯度作为优化的依据,学习速度比随机策略快。 2,单纯使用确定策略,完全不能探索,它只会收敛到Q值网络的局部优值。 3,确定策略需要Q值网络平滑,因为需要Q值得导数,因此对Q值网络要求更高。而随机策略仅需要其值。
===================确定策略梯度方法================== DDPG论文在这: https://arxiv.org/pdf/1509.02971v2.pdf 我实现的代码: http://blog.csdn.net/qq_32231743/article/details/73615120
=================随机梯度方法======================= 随机梯度方法的梯度是 ∇θπ(s)θ∇aQ(s,a) ,然而Q(s,a)有较大的方差,这对神经网络的优化造成了巨大的困难(Q值较大方差直接造成梯度有较大的方差)。一个合适的价值函数是优势函数: A(s,a)=Q(s,a)−V(s) ,该函数有最小的方差。 代表性的论文(A2C,并不是最新的,也不是表现最好的(如A3C)): http://xueshu.baidu.com/s?wd=paperuri:(8f9eafdcef20189580fb6c304f4654b0)&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http://www.oalib.com/paper/4083719&ie=utf-8&sc_us=3292635092572591222
我并没有把a2c模型调出来过,可能是因为on-policy的算法,无法使用经验回放的缘故,训练十分不稳定。 如果在实际工作中,在没有仿真环境的条件下,需要使用强化学习算法,我想我会选择DDPG。