强化学习知识梳理

来源:互联网 发布:电视机看电影软件2017 编辑:程序博客网 时间:2024/05/16 07:05

该文是简单的知识点梳理,不能作为学习资料,请谅解

================强化学习和监督学习,无监督学习的联系=====
强化学习可以看作是一种特殊的监督学习,样本是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+1at+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)=Qs,aVs,该函数有最小的方差。
代表性的论文(A2C,并不是最新的,也不是表现最好的(如A3C)):
http://xueshu.baidu.com/s?wd=paperuri%3A%288f9eafdcef20189580fb6c304f4654b0%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Fwww.oalib.com%2Fpaper%2F4083719&ie=utf-8&sc_us=3292635092572591222

我并没有把a2c模型调出来过,可能是因为on-policy的算法,无法使用经验回放的缘故,训练十分不稳定。
如果在实际工作中,在没有仿真环境的条件下,需要使用强化学习算法,我想我会选择DDPG。

0 0
原创粉丝点击